How smith-89/transit-link works
Transit Link is a transit fare and operations MVP: riders maintain a wallet and use QR passes for station taps; validators record boarding and alighting, while operators review service activity and payouts. The backend exposes authentication, wallet, top-up, tap, and operator APIs; fare settlement, ledger, fraud, analytics, and payout logic form the domain layer. M-Pesa supports top-ups. The README was not supplied, and frontend call wiring is not excerpted, so browser-to-API links are marked unverified.
Main entry points: main.py App entry and routing · operator.py Operator API · trips.py Tap processing · api.js Shared API client
Components 25
User applications
- Rider app
transit-link/web/rider/app.js - Validator app
transit-link/web/validator/app.js - Operator app
transit-link/web/operator/app.js - Login app
transit-link/web/login/app.js - Shared API client
transit-link/web/shared/api.js
API and access
- App entry and routing
transit-link/app/main.py - Authentication API
transit-link/app/routers/auth.py - Wallet API
transit-link/app/routers/wallet.py - Top-up API
transit-link/app/routers/topups.py - Tap API
transit-link/app/routers/taps.py - Operator API
transit-link/app/routers/operator.py - Tokens and access
transit-link/app/security.py
Fare and wallet
- Tap processing
transit-link/app/trips.py - Fare rules
transit-link/app/fares.py - Wallet ledger
transit-link/app/ledger.py
Operator operations
- Service analytics
transit-link/app/analytics.py - Fraud scanning
transit-link/app/fraud.py - Operator payouts
transit-link/app/payouts.py
Persistence and integration
- Domain records
transit-link/app/models.py - Database sessions
transit-link/app/db.py - Transit data store
transit-link/app/db.py - M-Pesa client
transit-link/app/mpesa.py - Demo data setup
transit-link/app/seed.py
Other components
- Rider
- M-Pesa Daraja
Connections 32
- Rider → Rider app: uses
- Rider app → Shared API client: requests
- Validator app → Shared API client: syncs taps
- Operator app → Shared API client: requests
- Login app → Shared API client: requests
- Shared API client → App entry and routing: calls API
- App entry and routing → Authentication API: registers
transit-link/app/main.py - App entry and routing → Wallet API: registers
transit-link/app/main.py - App entry and routing → Top-up API: registers
transit-link/app/main.py - App entry and routing → Tap API: registers
transit-link/app/main.py - App entry and routing → Operator API: registers
transit-link/app/main.py - App entry and routing → Database sessions: initializes
transit-link/app/main.py - App entry and routing → Demo data setup: seeds data
transit-link/app/main.py - Authentication API → Tokens and access: issues tokens
transit-link/app/routers/auth.py - Authentication API → Domain records: reads and writes
transit-link/app/routers/auth.py - Wallet API → Wallet ledger: reads balance
transit-link/app/routers/wallet.py - Top-up API → M-Pesa client: starts payment
transit-link/app/routers/topups.py - Top-up API → Wallet ledger: credits funds
transit-link/app/routers/topups.py - Top-up API → Domain records: records top-up
transit-link/app/routers/topups.py - M-Pesa client → M-Pesa Daraja: requests payment
- Tap API → Tap processing: processes taps
transit-link/app/routers/taps.py - Tap processing → Fare rules: checks fares
transit-link/app/trips.py - Tap processing → Wallet ledger: debits and refunds
transit-link/app/trips.py - Tap processing → Tokens and access: decodes pass
transit-link/app/trips.py - Operator API → Service analytics: summarizes service
transit-link/app/routers/operator.py - Operator API → Fraud scanning: scans trips
transit-link/app/routers/operator.py - Operator API → Operator payouts: runs payout
transit-link/app/routers/operator.py - Operator API → Tap processing: closes stale trips
transit-link/app/routers/operator.py - Database sessions → Transit data store: connects
transit-link/app/db.py - Database sessions → Domain records: creates schema
transit-link/app/db.py - Demo data setup → Wallet ledger: posts demo funds
transit-link/app/seed.py - Demo data setup → Fare rules: sets fares
transit-link/app/seed.py