Logo Lanfrica

phiwakonkem/AfriHaul

Domain:

mobility

Record type:

software
Creator:
phi
Host:
🚚 African logistics platform connecting shippers and carriers across SADC # AfriHaul A logistics platform tackling freight fragmentation across South Africa and the SADC region. Built with landmark-based addressing in mind (for areas without formal street addresses), shipment creation, and carrier matching β€” designed for the African logistics context from the ground up. Currently in beta. --- ## Features - **Shipment management** β€” create shipments, list pending shipments - **Carrier matching** β€” find available carriers by country, register new carriers - **Clean Architecture** β€” strict separation between Domain, Application, Infrastructure, and API layers - **CQRS with MediatR** β€” commands and queries are isolated per feature (`Features/Shipments/Commands`, `Features/Shipments/Queries`) - **Validation pipeline** β€” FluentValidation wired into the Application layer - **Swagger/OpenAPI** β€” auto-generated interactive API docs via Swashbuckle - **Angular frontend** β€” server-side rendered (SSR) Angular 21 app styled with Tailwind CSS ## Tech Stack ### Backend (`AfriHaul.API`, `.Application`, `.Domain`, `.Infrastructure`) | Layer | Technology | |---|---| | Runtime | .NET 10 | | API | ASP.NET Core Web API | | Architecture | Clean Architecture (Domain / Application / Infrastructure / API) | | CQRS | MediatR | | Validation | FluentValidation | | ORM | Entity Framework Core 9 | | Database (current) | SQLite (`afrihaul.db`, local file) | | API Docs | Swashbuckle (Swagger UI) | ### Frontend (`afrihaul-frontend`) | Layer | Technology | |---|---| | Framework | Angular 21 (standalone, with SSR via `@angular/ssr`) | | Styling | Tailwind CSS 3 | | Language | TypeScript | | Server | Express (for SSR) | > **Note on the database:** `appsettings.json` currently lists a PostgreSQL connection string, but the actual wiring in `AfriHaul.Infrastructure/DependencyInjection.cs` uses **SQLite** (`Data Source=afrihaul.db`) β€” the Postgres string is unused leftover config. The plan (per the frontend's own project description) is **SQLite β†’ PostgreSQL** as th …