Skip to content
alisulmanproPublic

About

🚚 Routify β€” route planning & delivery management app for independent couriers. Import parcels, optimise routes, scan Eircodes, proof of delivery, offline sync. React Native (Expo) + FastAPI + PostgreSQL.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

125 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Routify logo

Routify

Route planning and delivery management for independent couriers
Import your parcels, get the best stop order, deliver with proof, and close the day with a PDF report β€” all from one app.

Status: in development Platforms: iOS and Android Region: Ireland CI with GitHub Actions

React Native with Expo FastAPI PostgreSQL Prisma React with Vite TypeScript

Note

Routify is under active development. Branding, naming and visuals are still being finalised with the client and may change.


πŸ“± Screens

Routify home screen with today's route Routify route preview on the map Routify active delivery with turn-by-turn stops Routify proof of delivery with photo

Design previews β€” the full set lives in design_pref/.

✨ Features

For riders (mobile app)

  • πŸ“₯ Add stops your way β€” import a PDF / Excel / Word manifest, type an address, drop a pin, speak it, or scan an Eircode / barcode with the camera (on-device OCR)
  • 🧭 Optimised routes β€” best stop order for hundreds of stops, with map preview and live navigation
  • βœ… Proof of delivery β€” photo capture, delivered / failed outcomes with reasons, duplicate-stop detection
  • πŸ“Ά Works offline β€” actions queue in a local SQLite outbox and sync automatically when the signal comes back
  • πŸ“„ Daily PDF reports and full route history
  • πŸ’³ Subscriptions β€” in-app plans through the App Store and Google Play (RevenueCat)
  • πŸ”„ Over-the-air updates with EAS Update

For platform staff (admin console)

  • Overview dashboard, riders, deliveries, reports, plans, subscriptions and payments
  • Audit logs and platform settings

Under the hood

  • Background job worker for heavy route optimisation (never blocks the API)
  • Geocoding cache, idempotency keys, rate limiting and token rotation
  • Server-Timing headers, Sentry error reporting and performance benchmarks (perf.md)
  • Self-hosted OSRM + VROOM road-routing proof of concept for Ireland (infra/routing)

πŸ—οΈ Architecture

flowchart LR
    R["πŸ“± Rider app<br/>Expo Β· React Native"] -->|REST /api/v1 Β· /v2| API
    A["πŸ–₯️ Admin console<br/>React Β· Vite"] -->|REST /api/v1| API
    subgraph Backend
      API["⚑ FastAPI"] --> DB[("PostgreSQL<br/>Prisma")]
      API --> Q["Job queue"] --> W["βš™οΈ Worker<br/>route optimisation"]
      W --> DB
      API -.optional.-> RD[("Redis")]
    end
    API --> G["πŸ—ΊοΈ Maps & geocoding"]
    API --> S["🧾 App Store · Google Play<br/>RevenueCat"]
Loading

πŸ“‚ Repository structure

Path What it is
rider-app/ Rider mobile app β€” Expo + React Native + TypeScript
admin-web/ Platform admin console β€” React + TypeScript + Vite
backend-py/ REST API β€” Python + FastAPI + Prisma + PostgreSQL, with a background worker
infra/routing/ OSRM + VROOM self-hosted routing benchmark (Ireland)
infra/loadtest/ k6 and Locust load-test scenarios
design_pref/ UI design references for every rider screen
render.yaml Render blueprint for deploying the API

πŸš€ Getting started

Prerequisites: Python 3.13, Node.js 24, and a PostgreSQL database (a hosted Neon database works, no Docker needed).

Backend β€” backend-py/
cd backend-py
python -m venv .venv && source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -r requirements-dev.txt
cp .env.example .env            # set DATABASE_URL and the JWT / refresh / file-signing secrets
prisma migrate deploy           # create the tables
python -m scripts.seed_admin    # needs ADMIN_EMAIL + ADMIN_PASSWORD (10+ chars) in .env
python -m app                   # API on http://localhost:4000
python -m app.worker            # route-optimisation worker (separate terminal)
pytest                          # tests run against a real PostgreSQL
Admin console β€” admin-web/
cd admin-web
cp .env.example .env            # VITE_API_URL=http://localhost:4000
npm install
npm run dev
Rider app β€” rider-app/
cd rider-app
cp .env.example .env            # EXPO_PUBLIC_API_URL=http://<your-machine-ip>:4000
npm install
npx expo start

Shipping a JS-only fix without a store release (EAS Update):

npx eas-cli@latest update --channel production --environment production --message "<what changed>"

The runtime version is a fingerprint of the native code, so an update never reaches a build with different native modules. After a native change (new module or app.json plugin), make a new build instead.

πŸ§ͺ Quality

Every push and pull request runs CI:

App Checks
Backend ruff lint + pytest against a throwaway PostgreSQL container
Rider app tsc type-check + expo lint + unit tests
Admin console tsc type-check + lint

🧰 Tech stack

Layer Technology
Mobile React Native 0.86, Expo SDK 57, React Navigation, TanStack Query, Expo SQLite, Vision Camera + OCR, React Native Maps
Admin React 19, TypeScript, Vite
API Python, FastAPI, Pydantic, Prisma (prisma-client-py), PostgreSQL
Auth JWT access tokens + rotating refresh tokens, bcrypt
Payments App Store Server API, Google Play Developer API, RevenueCat
Ops Render, Neon, Redis (optional), Sentry, GitHub Actions, EAS Build & Update

πŸ‘€ Author

Built by Ali Sulman β€” Full-Stack AI Developer.

Ali Sulman on GitHub Ali Sulman on LinkedIn


Β© Routify. All rights reserved. This is a private client project; the source is shared for portfolio purposes.

About

🚚 Routify β€” route planning & delivery management app for independent couriers. Import parcels, optimise routes, scan Eircodes, proof of delivery, offline sync. React Native (Expo) + FastAPI + PostgreSQL.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages