This is a submission for the DEV Weekend Challenge: Community
The Community
Rwanda has become a growing hub for higher education and remote work in Africa. Through partnerships with institutions such as Carnegie Mellon University and African Leadership University, the country attracts students from across the continent. In addition, Rwanda’s stable environment draws freelancers and professionals who relocate temporarily or permanently.
One active sub-community within this ecosystem is Nigerians in Rwanda—a network of students, working professionals, and entrepreneurs. Members of this community frequently need peer-to-peer support in two key areas:
Currency Exchange: Converting between the Nigerian Naira and the Rwandan Franc. Existing external services often result in significant losses due to high transaction fees and unfavourable exchange rates.
Item Transfers: Coordinating with trusted travellers to carry small but important items—such as documents, certificates, or hard-to-find goods—between Nigeria and Rwanda.
Currently, these requests are managed informally through multiple WhatsApp groups, making coordination fragmented, inefficient, and less secure.
To address these challenges and better serve the community I belong to, I decided to build a dedicated platform that streamlines peer-to-peer exchanges and item transfers in a more structured, transparent, and cost-effective way.
What I Built
Diascora is a web platform for diaspora communities to coordinate peer-to-peer currency exchanges and package deliveries — replacing scattered WhatsApp group messages with a structure and transparency.
The app has two core features:
Exchange Board
Members post currency exchange requests specifying the pair (e.g. NGN → RWF), amount, offered rate, and payment method. Other members browse the board and express interest. The poster reviews all interested peers, accepts one, and the contact details are revealed to both parties. Live exchange rates are fetched and cached to show how
A posted rate compares to the official market rate, helping both sides make informed decisions.
Delivery Board
Members who need an item carried between Nigeria and Rwanda post a delivery request with destination, package weight, a payment offer, and a description of what needs to be carried. Travellers who see a request they can
fulfil submit a carry offer. The poster accepts the best offer, which triggers contact reveal for both parties and notifies rejected travellers automatically.
Notifications are delivered both in-app and as browser push notifications (PWA).
Demo
Code
How I Built It
NB: ClaudeAI was used
Backend: Laravel 12 on PHP 8.4, following the streamlined Laravel 11+ application structure. All reactive UI is handled server-side with Livewire 4 — no separate API layer needed. Business logic lives in Livewire component actions, with Form Request validation and Eloquent relationships keeping controllers thin. Database transactions wrap the accept-offer lifecycle to ensure atomicity.
Frontend:
Flux UI v2 (the official Livewire component library) provides all form controls, modals, badges, and navigation components. Tailwind CSS v4 handles layout and a custom navy brand palette. The app is a PWA — a service worker handles push notification delivery and notificationclick routing.
Auth:
Laravel Fortify for email/password auth and Laravel Socialite for Google OAuth. First-registered user is automatically promoted to sysadmin. Role management uses Spatie Laravel Permission v7.
Notifications:
database (for the in-app bell) and laravel-notification-channels/webpush for browser push.
Queues & Observability:
Laravel Horizon manages the Redis-backed queue with a dashboard restricted to sysadmins.
Laravel Telescope is available in development for inspecting requests, queries, and jobs.
Testing: Pest v4 with 100+ feature tests covering board access, filter logic, the full offer/interest lifecycle, notification dispatch (Notification::fake()), file uploads (Storage::fake + UploadedFile::fake()), and double-submit guards.
Dev environment: Docker via Laravel Sail, with SQLite in-memory for the test suite to keep test runs fast without a running database container.
Hosting:
Server management using Laravel Forge with a VPS server from Digital Ocean

Top comments (0)