尚未检测到更新。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.