Movio Entregasside project
A courier app built spec-first with AI agents
Movio's React Native courier app, and the spec-driven workflow where AI agents implement and people review. A side project.
- Role
- Fullstack developer, side project
- Period
- May 2026 – Present
- deliveries
- 55k+
- to accept an order
- ~4s
- checks before every merge
- 5
Try it
On the left, a feature goes from spec to plan, tasks, PR and OTA update. On the right, the courier app before and after it. Try a delivery first, then ship the feature and try again. The data is made up.
# Proof of delivery with photo and code ## Acceptance scenarios1. Given an order on its way, when the courier reaches the customer, then the app asks for a photo and the code.2. Given a wrong code, when the courier submits, then the delivery stays open.3. Given a marketplace order that already requires the partner's code (iFood, 99Food), then that code wins.4. Given the courier is far from the drop-off, when they try to finish, then the API refuses with 409.
Movio v1.3.14Online
Waiting for offers…
Events
The problem
Movio connects restaurants on iFood, 99Food, Takeat and Open Delivery to couriers. An order has to reach a courier and be accepted quickly, and couriers are on the move, on unstable networks, with the app often in the background.
Most of the code is written by AI agents in Cursor and Claude Code. Without a clear spec they guess, and review turns into rework.
What I built
- In the courier app: the real-time ride-offer queue over WebSocket, proof of delivery with a photo and a code, background location, push notifications, OTA updates and Sentry.
- Brought Spec Kit into the project: every relevant feature starts as a business spec, which becomes a plan and tasks before the agents implement it.
- Each repository's rules live in AGENTS.md and CLAUDE.md, and every delivery goes through lint, typecheck, build, E2E tests and human review on the PR.
- The API's delivery-domain spec gathers the scenarios, contracts and data model that guide the agents.
Decisions
- The spec is the source of truth
- Acceptance scenarios are written first, in Given/When/Then; plans, tasks and tests come from them.
- Push offers, don't poll
- Offers reach the courier over WebSocket the moment they exist.
- Ship without a store release
- Once a PR is approved, an OTA update puts the change on couriers' phones.
Stack
- React Native
- TypeScript
- WebSocket
- OTA
- Sentry
- Node.js
- PostgreSQL
- Spec Kit
- Claude Code
- Cursor
- Playwright