Servis Takip & Bildirim Sistemi — a multi-tenant SaaS platform that automatically notifies passengers (via Telegram or SMS) when their company shuttle is approaching their stop. Each company subscribes independently and all data is isolated per tenant.
- A driver opens the lightweight web driver page (
public/driver.html) and shares live location. - The backend computes each passenger's ETA — Google Maps Distance Matrix when an API key is configured, with a haversine fallback otherwise.
- When the shuttle gets close, a notification job is queued and delivered over Telegram Bot API or Netgsm SMS.
- Company staff manage routes, vehicles, drivers and passengers from a React admin panel with a live map.
| Layer | Technology |
|---|---|
| HTTP API | Fastify v4 + JSON Schema (Ajv) validation |
| Database | PostgreSQL (pg-pool, node-pg-migrate) |
| Job queue | BullMQ + Redis (AOF persistence) |
| Auth | JWT access tokens (15 min) + opaque refresh tokens (7 days, HttpOnly cookie) |
| Notifications | Telegram Bot API, Netgsm SMS |
| Admin UI | React + Vite (live map, companies, routes, vehicles, passengers) |
| Logging | Pino structured JSON |
| Hosting | Railway (staging + production, zero-downtime deploys) |
npm install
docker-compose up -d # PostgreSQL + Redis for local development
cp .env.example .env # fill in the required variables
npm run migrate:up
npm run dev # API with auto-restart
cd admin && npm install && npm run dev # admin panel on :5173, proxied to /apinpm test # Vitest suite
npm run lint