Argentina-first peer-to-peer ride sharing, built as a low-cost monorepo for mobile, web, and API work.
app: Expo app for iOS, Android, and web.api: Elysia backend with Drizzle, PostgreSQL/PostGIS, auth, payments, support, and realtime modules.web: Vite marketing and waitlist site.packages/shared: shared Zod schemas, contracts, fixtures, and TypeScript types.packages/ui: shared cross-platform UI primitives.packages/integrations: provider adapters for Argentina-first flows and future country expansion.learning: full-stack learning hub added by this branch.
Car focuses on long-distance carpooling in Argentina first. The architecture keeps country-specific provider logic in packages/integrations, keeps API domains explicit, and favors shared contracts over duplicated app/API types.
Current defaults:
- dLocal for payins and payouts.
- Better Auth for sessions and auth provider integration.
- Explicit, auditable verification workflows for DNI, selfie, vehicle, plate, and driver trust checks.
es-ARas the default language, withen-US,pt-BR, andrualso supported in the Expo app.
Prerequisites:
- Bun
1.2.15 - mise
- PostgreSQL 17 with PostGIS
- Redis 7
Install tools and dependencies:
mise install
bun install
cp .env.example .envValidate local services and run migrations:
bun run stack:check
bun run dev:bootstrapStart the main development services:
bun run devUseful focused commands:
bun run dev:app:web
bun run dev:ios
bun run dev:android
bun run dev:api
bun run dev:demo
bun run dev:waitlistBefore merging meaningful code changes, run the relevant subset:
bun run lint
bun run typecheck
bun run buildAdditional test commands are available through:
bun run test:unit
bun run test:api
bun run test:app
bun run test:e2e:webProduction-like and infrastructure-specific test details live in testing/README.md.
- Product and screen documentation workflow:
docs/README.md - Exported app and web screenshots:
docs/screens/README.md - Demo and QA testing notes:
testing/README.md - Environment variables:
.env.example - Deployment definitions:
railway.json,render.yaml, and.github/workflows/api-validation.yml
Railway is the primary API deployment path today. Render is kept as a ready backup through render.yaml, with preview environments intentionally manual to control cost.
The static demo is built from the Expo app and can be deployed to Cloudflare Pages:
bun run build:demoThe Vite waitlist site remains separate from the logged-in Expo web app so marketing can deploy independently from the product surface.
Local demo accounts are seeded from packages/shared/src/demo-data.ts and backend seed modules under api/src/modules/*/demo-seed.ts. Use the shared fixture as the source of truth when updating demo personas or credentials.
If this project helps you, sponsorship is configured through GitHub Sponsors and Ko-fi in .github/FUNDING.yml.
- Keep TypeScript strict and avoid
anyunless the reason is explicit. - Validate API boundary input with Zod.
- Keep user-facing Expo strings behind
useTranslation()and update all locale files when adding app copy. - Keep provider-specific side effects in
packages/integrations. - Never commit secrets or real credentials.