7cars
From one fragile Excel workbook to a ledger-true ERP: every car, investor share and dividend accounted for.
- Live capital & P&L
- Per-car cost & investor split
- Investor ledger & dividends
- Control board & multi-step undo
- Client
- Seven Lux Auto, Moscow
- Year
- 2026
- Authorship
- Own build
- Status
- Role
- Solo product engineer: proposal, data model, UI/UX, build, deployment and support.
- Surfaces
- Web app & installable PWA · desktop and phone
- Languages
- RU · EN · UZ
- Stack
- Next.js 16 · React 19 · TypeScript · Tailwind CSS 4 · Supabase · PostgreSQL · Row-level security · Vercel · Render cron · Backblaze B2 · Python · openpyxl
Survey — context and problem.
The problem
A growing dealership ran cars, investors and profit splits in one hand-calculated Excel workbook — no roles, no audit, no backups.
Seven Lux Auto is a multi-brand luxury car dealer in Moscow. Each car is bought abroad, shipped, cleared through customs, registered and sold — and each purchase is funded by several private investors at once. Before 7cars, the entire business lived in one Excel workbook: a sheet of cars with eight cost categories, a journal of every money movement signed by investor, balances, profit distribution and a summary.
The workbook worked until it didn’t. Every total was calculated by hand, so one mistyped cell could quietly shift an investor’s balance. There were no roles and no change history, no way to check a car’s real cost from a phone at the port, and no reliable backups. As the fleet and the investor pool grew, the owners needed answers the spreadsheet could not give with confidence: how much cash is actually free, what each car really cost, which profit has not been allocated yet, and who is owed what.
The constraints were strict: real investor money, daily use on phones, and data that must never be lost.
Plan — the system, drawn first.
The solution
A mobile-first ERP on Supabase: per-car costing and multi-investor funding, ledger-driven P&L and dividends, a three-currency treasury, audit, undo and nightly off-site backups.
7cars replaces the workbook with one ledger. Every money movement — investment, purchase, expense, sale, profit or loss allocation, dividend — is a typed ledger entry, and car costs are derived from it by the database instead of being typed in twice. Around that core sit six working views: a capital dashboard, inventory with per-car cost and financing split, a Control board of things that need attention, investors with their own reports, a full history with undo, and a company treasury in USD, USDT and RUB. A floating dock and a “+” action sheet put every daily operation one tap away on a phone. The system runs on Supabase Postgres with row-level security and deploys on Vercel; a nightly job ships an independent backup to Backblaze B2 with tiered retention.
Module key
- Capital dashboard: free cash, total assets, unallocated profit, ROI, capital turnover and a monthly snapshot with CSV / PDF export
- Inventory with VIN search, 11 sort modes, list and photo views and a per-car financing split
- Vehicle file: eight-part cost breakdown, investor shares, photo gallery and a per-car PDF report
- Control board: undistributed profit, stock over 60 days, long transit, investors below zero, expenses without receipts
- Investor cards with contribution, profit, dividends, period filter and PDF statements
- Company treasury in USD, USDT and RUB with cash flow, P&L, debts and currency exchange
- Audit history grouped by day, with inline edits and multi-step undo
Key decisions
-
Why the ledger is the single source of truth
Car costs are recalculated by a database trigger whenever a ledger entry changes, and the company’s share of profit is read from the same ledger. There is no second copy of a number to drift out of sync.
-
Why balance rules live in Postgres
Triggers refuse any operation that would push an investor or a treasury wallet below zero, whichever screen or script sends it. The interface checks too, but the database has the final word.
-
Why access is enforced with row-level security
Admin, operator and investor roles are enforced by 28 RLS policies in the database itself. In September 2026 the policies were hardened and direct execution of sensitive functions was revoked.
-
Why undo is built from reverse patches
Each action stores a reverse patch, so a mistake can be rolled back — last action, last hour, today or the last three days — without restoring a whole backup.
-
Why backups leave the platform
Supabase is the primary store, but a nightly cron job writes an independent copy to Backblaze B2 with daily, weekly and monthly retention, and a restore script can bring it back.
Elevations — the desktop screens.
All elevations 05
-
Fig. 4.1 Vehicle file: VIN, status, purchase price and total cost, the eight-part expense breakdown, investor shares and the photo gallery. -
Fig. 4.2 Company treasury with USD, USDT and RUB wallets, a total in USD equivalent, Operations, Cash flow, P&L and Debts tabs, and a mixed-currency log. -
Fig. 4.3 Control board of what needs attention: undistributed profit, stock older than 60 days, long transit, investors below zero, expenses without receipts and operations without an investor. -
Fig. 4.4 Full action history grouped by day, with period filters and inline editing and deletion of ledger operations. -
Fig. 4.5 Full-length dashboard with capital statistics, monthly capital turnover and a six-month financial snapshot with CSV and PDF export.
Details — the mobile screens.
Every mobile screen 03
Materials schedule — the stack, and why.
| Layer | Material | Why |
|---|---|---|
| 01Data | Supabase Postgres · 10 tables · 28 RLS policies | Investor money needs constraints and access rules at the source, not only in the interface. |
| 02Logic | PL/pgSQL triggers & RPCs · TypeScript ledger engine | Costs and balances are derived from one ledger, so every total can be recomputed and audited. |
| 03Intelligence | Capital analytics: ROI, turnover, aging (rule-based) | Owners see frozen capital and discount candidates without building another spreadsheet. |
| 04Interface | Next.js 16 · React 19 · Tailwind 4 · PWA | One codebase for the office screen and the phone at the port — installable, in three languages. |
| 05Infra | Vercel · Render cron · Backblaze B2 | Nightly off-site backups with tiered retention, independent of the primary database. |
Stack
Completion — outcome and links.
Verified facts
- row-level security policies
- 28
- Source: from the repository, Sep 2026
- treasury currencies
- USD · USDT · RUB
- Source: from the repository, Sep 2026
- interface languages
- RU · EN · UZ
- Source: from the repository, Sep 2026
- nightly off-site backup, tiered retention
- 22:00 UTC
- Source: render.yaml cron, Sep 2026
Want to see it running?
I can walk you through the live system on demo data and explain the decisions behind it.
Request a walkthrough




