尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 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.