A modern delivery and logistics platform connecting customers with drivers. Features include real-time job management, distance-based pricing, Stripe payments, and driver approval workflows.
- Customer Portal: Create and manage delivery jobs with real-time tracking
- Driver Dashboard: Accept jobs, manage deliveries, and track earnings
- Admin Panel: Approve drivers, monitor platform activity, and manage users
- Distance-Based Pricing: Automatic fare calculation using Google Maps Distance Matrix API
- Secure Payments: Integrated Stripe payment processing with escrow support
- Authentication: OpenID Connect implementation with role-based access control
- Real-time Updates: Live job status updates and notifications
- Framework: ASP.NET Core 9.0
- Authentication: OpenIddict (OpenID Connect)
- Database: SQL Server with Entity Framework Core
- Background Jobs: Hangfire
- Payment Processing: Stripe.net
- Maps Integration: Google Maps API (Distance Matrix, Geocoding)
- Framework: Angular 19
- UI Components: Angular Material
- State Management: RxJS
- Styling: SCSS
- .NET 9.0 SDK
- Node.js 18+
- SQL Server or SQL Server Express
- Google Maps API Key
- Stripe Account (test mode)
-
Clone the repository
git clone https://github.com/bchelinje/roadlink.git cd roadlink -
Configure User Secrets
Run the setup script to configure your local development secrets:
./setup-secrets.sh # macOS/Linux # or .\setup-secrets.ps1 # Windows
See USER_SECRETS_GUIDE.md for detailed instructions.
-
Run Database Migrations
cd BeC.OpenId.Connect dotnet ef database update -
Start the Backend
dotnet run
The API will be available at
https://localhost:5001
-
Install Dependencies
cd frontend npm install -
Configure API URL
Update
frontend/src/environments/environment.ts:export const environment = { production: false, apiUrl: 'https://localhost:5001' };
-
Start the Frontend
npm start
The app will be available at
http://localhost:4200
roadlink/
├── BeC.OpenId.Connect/ # Backend API
│ ├── Features/ # Feature-based organization
│ │ ├── Jobs/ # Job management
│ │ ├── Drivers/ # Driver management
│ │ ├── Users/ # User management
│ │ └── Maps/ # Maps integration
│ ├── Infrastructure/ # Cross-cutting concerns
│ └── appsettings.json.example # Configuration template
├── frontend/ # Angular frontend
│ ├── src/
│ │ ├── app/
│ │ │ ├── customer/ # Customer features
│ │ │ ├── driver/ # Driver features
│ │ │ └── admin/ # Admin features
│ │ └── environments/ # Environment configs
└── setup-secrets.sh # Local development setup
The application requires the following secrets for local development:
- Database Connection: SQL Server connection string
- Google Maps API Key: For distance calculations and geocoding
- Stripe Keys: Secret key, publishable key, and webhook secret
- Email Settings: SMTP configuration (optional)
Never commit secrets to git. Use User Secrets for local development and environment variables for production.
See USER_SECRETS_GUIDE.md for complete setup instructions.
- Create a new Railway project
- Add PostgreSQL or SQL Server database
- Configure environment variables (see DEPLOYMENT_GUIDE.md)
- Deploy from GitHub
- Import the
frontenddirectory - Configure build settings:
- Build Command:
npm run build - Output Directory:
dist/bec-admin-dashboard
- Build Command:
- Add environment variables:
API_BASE_URL: Your Railway backend URL
See DEPLOYMENT_GUIDE.md for detailed deployment instructions.
- User Secrets Guide - Secure local development setup
- Deployment Guide - Production deployment instructions
- Distance & Payment Implementation - Distance-based pricing details
- Testing Guide - Testing instructions
- All sensitive configuration is managed via User Secrets (local) or environment variables (production)
- API keys are restricted by domain/IP
- Passwords are hashed using ASP.NET Core Identity
- HTTPS enforced in production
- CORS configured for specific origins
- SQL injection protection via EF Core parameterized queries
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is proprietary software. All rights reserved.
Blessing Chelinje GitHub: @bchelinje
For issues and questions, please open an issue on GitHub.