Leading a 5-person team to 53 screens in 24 days

By

Original article

How our DEPI team built Osta, a two-sided car-services marketplace, in 24 days: foundation first, clear team rules, and the bugs that slipped past green tests.

Osta customer app: map search for nearby service centers with Oil, Brakes, AC and Tires filtersOsta booking screen: choosing a day and an hourly time slot, with the total and a Pay at Center buttonOsta business dashboard in Arabic dark mode: today’s revenue and booking counts for the service center

The project

Osta was our DEPI graduation project: a car-services marketplace for Egypt. Customers find a service center on a map, book a time slot and follow the repair as it happens. Service centers manage their bookings, services, offers and team from the same app. I led a team of five. I built the Laravel backend on my own, starting in mid-June, and laid the Flutter foundation the rest of the app grew on.

Foundation before screens

Five people cannot build screens in parallel on top of nothing. So the first days went to the skeleton: feature folders for customer, business and shared code, BLoC for state, get_it for dependencies, and one Dio client that understands the API’s response format and its login tokens.

Routing is one function. It looks at the session and decides where the user belongs: splash, language, role, onboarding, sign-in, then the customer or business app. We wrote eight short decision records so nobody had to re-argue those choices mid-sprint, and every pull request ran the same checks: translations, formatting, analysis and tests.

Five people, one codebase

The rules were simple and written down. Work happened on feature branches named after their GitHub issue, merged into a develop branch; main only took tagged releases. Commits followed Conventional Commits, pull requests were described in Arabic and English, and updating the docs was part of done.

Between 1 and 25 July the app repository took 336 commits, 79 merged pull requests and eight releases, from v0.1.0 to v0.8.0.

The bugs green tests missed

Mid-July, both test suites were green and five bugs still shipped, all at the border between app and API. The refresh token went out in the wrong format, so users were signed out whenever their session expired. Updating a center’s logo silently threw away the rest of the profile, because the server only reads file uploads on POST requests. A car’s plate and mileage were dropped on the way to the server.

Each unit worked on its own; the contract between them was wrong. The fix was tests that pin the exact request and response shapes, plus an audit that wired up about 30 API helpers nobody was calling yet.

Where it landed

In 24 days the team delivered 53 screens across the customer and business apps, in Arabic and English with light and dark themes. Underneath is the backend I built: a Laravel 12 API with 78 routes, PostGIS for nearby search, Reverb for live booking updates, push notifications, a Filament admin console, and 414 automated tests. Online payment through Paymob was the one milestone still open at hand-in, so bookings are paid at the center.

What I would keep for any team project: build the foundation before the screens, write decisions down, and test the contract between app and server, not only each side alone.

Read the case study: Osta (أُسطى) — Car Services Marketplace →