Internal, private. Updated 2026-09-22

The whole picture, on one page

Drivra runs three live products built up over about a year, plus a new rent-to-own financing product being designed now. This page is the complete summary: what exists, what's live and fine, what's live but needs rethinking, what isn't built yet, and what the next six months cost. The other pages go deeper on any one piece; you don't need them to get the full picture here.

Built and fine Built, needs rethinking Not built yet Critical, fix now

The portfolio

Four products, one driver

The same person is, at different moments, a Yango moto-taxi driver earning Upahar points, an Express courier between ride-hailing shifts, a dot on the GPS dashboard's map, and, if this launches, someone paying down a motorcycle.

Live, finehusig-ai/yapigo

Drivra Upahar

Driver rewards. FastAPI + Supabase. 1,793 drivers on the roster, 261 active in the last 30 days (14.6%). Retention, not acquisition, is the constraint. The most tested, most production-hardened piece of the stack.

Live, needs rethinkinghusig-ai/drivra_express_backend

Drivra Express

B2B delivery. Own Postgres, own gamification system built independently of Upahar's. Early-stage: 22 commits, no test suite, no managed backups, and a critical CORS gap (below). Needs partner APIs and point-to-point delivery before it can grow past merchant/hub orders.

Live, needs rethinkingDrivra-Mobility/gps

GPS Dashboard

Fleet telematics: live map, idle detection, and a genuinely useful misuse-detection feature. No backend of its own: it reads and writes straight into Upahar's Supabase tables with a public key, protected only by row-level security. That pattern is the single biggest platform risk on this page.

Not builtproposed, standalone

Rent-to-Own Financing

Let a driver finance their motorcycle through Drivra, using their Upahar activity history as the credit signal instead of a bank file. The product this whole document was triggered by. Full design on Rent-to-Own.

The headline finding

A fintech product can't be built on top of today's data pattern without fixing it first

Two of the four systems above already share one database in a way that's caused a real production incident and a documented security gap. A new product holding KYC documents and loan ledgers should not sit inside, or next to, that pattern.

What actually happened: Upahar's own Supabase tables, including admin logins and OTP codes, had zero row-level security until a recent migration closed it. GPS Dashboard still reads and writes those tables directly from the browser with a public anon key, RLS is its only access control. That same shared project already hit its free-tier egress quota once, traced to GPS Dashboard over-polling. Full detail: Architecture.

System landscape

What's actually running today, confirmed by reading each repository

Four repos, two GitHub organizations, one Supabase project doing more than it should.

flowchart TB YF["Yango Fleet API
external"] UP["Upahar
FastAPI + SQLAlchemy"] EX["Express
FastAPI + SQLAlchemy"] GPS["GPS Dashboard
static JS, no backend"] ETL["GPS ETL Lambda
trakzee-supabase-etl"] SB[("Supabase Postgres
shared: Upahar + GPS")] PG[("Express Postgres
self-hosted, own EC2")] YF -->|15-min read-only sync| UP UP --> SB GPS -->|anon key + RLS
direct read/write| SB ETL -->|fleet positions, ~1/min| SB EX --> PG classDef good fill:#d7ecdf,stroke:#1a7a42,color:#14532d,stroke-width:2px; classDef rethink fill:#f7e6c4,stroke:#b26a00,color:#7a4900,stroke-width:2px; classDef missing fill:#e5e7eb,stroke:#6b7280,color:#374151,stroke-width:2px; class YF,UP,ETL good; class EX,GPS,SB,PG rethink;

Green: built and fine. Amber: built, needs rethinking. The shared Supabase project and Express's unmanaged Postgres are the two amber boxes worth the most attention.

Full repo, org, stack and deploy table
ProductRepo / orgStackDeploy
Upaharhusig-ai/yapigoFastAPI, SQLAlchemy 2.0, Alembic, Jinja2 + HTMX adminSingle stateless EC2 container behind Caddy, GitHub Actions to ECR
Expresshusig-ai/drivra_express_backendFastAPI, SQLAlchemy 2.0, AlembicEC2 via ECR + AWS SSM, mirrors Upahar's pipeline
GPS DashboardDrivra-Mobility/gpsVanilla JS/HTML/CSS, Supabase JS client, LeafletStatic hosting
GPS ETLtrakzee-supabase-etl (not in this workspace)AWS LambdaConfirmed working, out of scope
Analytics toolhusig-ai/drivraSingle-file HTML + Chart.jsNone, ad hoc, manual CSV upload
Marketing siteDrivra-Mobility/drivra-webStatic HTML/CSS/JSStatic hosting

Repos split across two GitHub orgs (husig-ai and Drivra-Mobility) with no single infra-as-code source of truth: worth deciding if that's intentional before a fifth product adds to it.

Debt inventory

What's wrong, ranked by how much it matters

Critical, fix regardless of anything else.
  • Express's CORS policy is wide open: allow_origins=["*"] plus allow_credentials=True. Any website can make authenticated requests against Express today.
  • GPS Dashboard has unrestricted, direct, client-side access to Upahar's production tables. A public anon key plus RLS is the entire access-control boundary.
High, already causing real problems.
  • Supabase egress quota was exceeded once already, traced to GPS Dashboard over-polling.
  • PostgREST's 1,000-row response cap silently truncates GPS Dashboard's wide-date-range queries: a correctness bug, not just a performance one.
  • Express has no managed backup story: Postgres on a container volume, no confirmed automated backup.
  • Express has zero test files anywhere in the repo.
Moderate issues, and the full fix plan
  • Express runs two competing schema sources on every startup (create_all() and Alembic), which can silently diverge.
  • Upahar and Express each independently built their own points/badges/quests system: duplicated effort, not broken.
  • No canonical driver identity across products: two databases, two drivers tables, no link.

Full ranked list with the specific low-lift fixes and the larger investments: Architecture.

The vision

One canonical driver identity, not one shared database

The fix is not a bigger shared database: Upahar and GPS Dashboard already sharing one is the worst-behaved part of the stack. The fix is narrower and smaller than that.

1Each product keeps owning its own operational data
2One canonical driver identity, read by every product, owned by none
3A narrow, versioned API between products, never direct table access
4A small batch-fed reporting database for cross-product signal

This is deliberately right-sized: a small identity service behind a plain API, no message bus; one small Postgres reporting database, no warehouse product. That's confirmed against what teams at this scale actually adopt, not an enterprise default. Full reasoning and the "explicitly not needed yet" list: Architecture.

The new product

Rent-to-own motorcycle financing

A local competitor, RYD Nepal, already runs this model with no app and no credit check. Drivra's edge: this can live inside an app drivers already use daily, where real earnings and tenure history, not a bank statement, drive approval and terms.

Regulation decides the shape

Only a licensed lender may originate consumer loans in Nepal (BAFIA ยง31). Recommended path: partner with a licensed hire-purchase company (Path A), Drivra as the distribution and underwriting-data layer. Avoids a NPR 300M capital bar; still needs counsel to confirm repossession rights for Drivra's specific structure.

System design

Standalone service, own repo, own Postgres, own Supabase project (never shared with Upahar/GPS). Reuses Upahar's proven FastAPI + SQLAlchemy + Alembic stack. DIY Textract + Rekognition eKYC at roughly $0.07/verification, about 30 to 100 times cheaper than a global vendor.

Credit scoring v1

Rules-based scorecard, not ML: tenure, earnings consistency, streaks, tier, all already in Upahar. Cold-start applicants get a guarantor or higher down payment instead of a decline. No telematics/remote-disable in v1: reputational risk outweighs the benefit this early.

Full competitive research, the regulatory citations, the data model, and the payments design: Rent-to-Own.

Roadmap

One sequence, not four separate projects

Platform hardening and the financing product aren't competing priorities. The hardening work is what makes the financing product's credit signal trustworthy.

flowchart LR P0["Phase 0
Legal + diligence
parallel, starts now"] P1["Phase 1
Harden & consolidate
days to 2 weeks"] P2["Phase 2
Identity layer + MVP financing
~4 to 7 months"] P3["Phase 3
Automate scoring & payments"] P4["Phase 4
Scale"] P0 --> P1 --> P2 --> P3 --> P4 classDef now fill:#cfe8dc,stroke:#0b6948,color:#06442e,stroke-width:2px; classDef next fill:#dbe4ea,stroke:#2e4a62,color:#1c2f3f,stroke-width:2px; class P0,P1 now; class P2,P3,P4 next;

Green: starting now. Blue: sequenced after. Full phase content: Roadmap & Cost.

$65/mo Infra cost for the first 6 months, at Phase 2's pilot scale (10 to 20 drivers), from the architecture actually decided above, not a scaled-up guess.
~4 to 7 mo Team and timeline to a financing v1: 3 to 5 people, reusing Upahar's stack directly. Full cost breakdown: Roadmap & Cost.

How to read this

Everything here traces back to a real file, a real commit, or a cited source

Method, and what's a fact versus an estimate

This isn't a speculative strategy memo. The product-portfolio and architecture sections come from directly reading the five relevant repositories (yapigo, drivra_express_backend, gps_dashboard, drivra, drivra-web): their models, migrations, deployment configs, and their own READMEs. The rent-to-own design draws on that same codebase reading plus external research: competitor products (RYD Nepal, M-KOPA, Tugende, Watu, Moove), Nepal's lending and KYC regulation (NRB/BAFIA), Nepal's payment rail landscape (eSewa, Khalti, Fonepay, ConnectIPS), and cost/infra benchmarking. Where a number is a genuine estimate rather than a confirmed fact, it's labeled as one.