Relaticle
Open-source CRM for teams and AI-powered work. Use the app, ask the built-in chat, or connect external agents through 39 MCP tools. Self-hosted, you own your data.
View fares, stations, reports and safety info for field and operations teams
AI summary · website content
BusinessTypeScript · PLpgSQLGitHub @ledgio-softwareOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A Ghana travel app. It tells any traveller what a trip will cost, how to get there and how long it will take, with weather and hazard alerts. See the PRD and the Phase 0 build documentation for the product and the plan. This repository holds the walking skeleton (Phase 0 doc 8.8): the full pipeline working end to end before Phase 1 features are built on top.
| Platform | How users get it |
|---|---|
| Android | Play Store app built from apps/passenger (React Native + Expo) |
| iPhone | Web app (PWA) built from the same code and installed from Safari with "Add to Home Screen" |
| Staff | Admin dashboard in apps/admin (Next.js) |
The backend is Supabase: Postgres + PostGIS, phone-number auth, row level security, Edge Functions and scheduled jobs.
apps/passenger Android app + iPhone web app (Expo, TypeScript, Expo Router)
apps/admin Staff dashboard (Next.js static export)
packages/shared Business rules, types and English/Twi strings used by both apps
supabase/ Database migrations, seed data, edge functions, local config
migrations/ Additive-only SQL migrations (core, phase 1, retention)
functions/ send-sms (Hubtel -> Arkesel failover), delete-account
tests/ Access-rule tests run against plain Postgres in CI
docs/ Architecture notes, decision records (docs/adr), Phase 1 user stories
scripts/test-db.sh Applies migrations to a fresh database and runs the access-rule tests
Design: Ghana colours (green for actions, red for emergencies and warnings, gold for highlights, the flag stripe with the black star as our mark), large text and strong contrast for sunlight. Bottom tabs: Home, My trips, Safety, Settings. Results show the ways to travel as cards to swipe and tap when there is a choice.
phase1.fare_reports feature switch.EXPO_PUBLIC_GOOGLE_MAPS_EMBED_KEY). "Start live map" opens a full-screen map with the road route, a moving "you are here" dot and the time and distance left (Maps JavaScript API on the same key; the road route comes from the web app's /api/route function with a private GOOGLE_ROUTES_KEY). "Traffic home" on the home screen shows where you are and the minutes to get home in today's traffic (and how much longer than usual), on a map with Google's live traffic; home is kept on the phone (/api/traffic, Routes API with live traffic).To connect a hosted Supabase project instead of the local stack, follow docs/supabase-setup.md.
Requirements: Node 22, Docker (for the local Supabase stack), and the Expo Go app or an Android emulator.
npm install
# 1. Backend: starts Postgres, Auth, the API and edge functions on http://127.0.0.1:54321
cp supabase/functions/.env.example supabase/functions/.env
npx supabase start # prints the local anon key
npx supabase db reset # applies migrations + seed.sql
npx supabase functions serve --env-file supabase/functions/.env
# 2. Passenger app
cp apps/passenger/.env.example apps/passenger/.env.local # paste the anon key
npm run passenger # press "a" for Android, "w" for web
# 3. Admin dashboard
cp apps/admin/.env.example apps/admin/.env.local # paste the anon key
npm run admin # http://localhost:3000
The local test phone number 024 000 0001 signs in with code 123456 without sending an SMS (see supabase/config.toml). To create a staff user, add one in Supabase Studio (http://127.0.0.1:54323) and insert a row into user_roles.
npm run typecheck # all workspaces
npm test # business rules and translations
DATABASE_URL=postgres://... scripts/test-db.sh # migrations + access rules on Postgres/PostGIS
cd supabase/functions && deno test --allow-env _shared
DATABASE_URL=postgres://... scripts/test-e2e.sh # browser tests against a real database + API (see e2e/)
The browser tests build the passenger web app and the admin, load the migrations and seed into a fresh database, put PostgREST (the API server Supabase uses) in front of it, and drive the apps in Chromium as a signed-in passenger or a staff member with two-factor. Each step also checks what was saved in the database. E2E_ONLY=admin runs one suite; failure screenshots go to e2e/results/.
CI (.github/workflows/ci.yml) runs all of these plus the Android and web builds on every pull request.
npx eas-cli@latest build -p android --profile production from apps/passenger, then submit to the Play Store internal track (eas.json). This needs a company Expo account and Play Console.npm run export:web -w apps/passenger produces a static site in apps/passenger/dist. Host it on any static host over HTTPS.npx supabase link to the environment's project, then npx supabase db push. Functions: npx supabase functions deploy. Secrets: npx supabase secrets set --env-file ....The domain ghanatransport.com.gh (the app ID gh.com.ghanatransport.app is based on it and cannot change after the first Play Store upload), Supabase projects per environment, Hubtel/Arkesel accounts and sender ID, Play Console and Expo accounts, Data Protection Commission registration, lawyer-reviewed terms and privacy notice, the verified seed dataset, and native Twi review. See docs/architecture.md for the decisions made so far.
/api/weatherapps/passenger/public/sw.js).docs/partner-fare-api.md, ADR 0016)./terms and /privacy-policy (drafts for legal review, in packages/shared/src/legal-text.ts; docs/legal/ has copies for the lawyer, rebuilt with npx vite-node scripts/build-legal-docs.ts). Bump LEGAL_VERSIONS in packages/shared/src/legal.ts when the text changes.