CASE 07 · WEB
A full-cycle web platform for a venture fund management company: SPV, investor and deal accounting, automated fee and carried interest calculations, legal document generation, bank statement import and reporting — all in one system instead of dozens of spreadsheets.
THE CHALLENGE
The client is a venture fund management company that structures deals through SPVs — special-purpose vehicles set up for each investment. Before the system, all accounting was done by hand in Excel and Google Sheets:
As deals and investors multiplied, the manual process stopped scaling: an error in a stake or fee calculation is a direct financial and reputational risk in front of investors.
KEY ENGINEERING
Transactions are immutable — they can't be edited or deleted. All current holdings are computed from the full event history. This guarantees an audit trail and rules out silent backdated edits of financial data — a critical requirement when handling investor money.
The hardest part of the domain: each investor has individual terms (carry rate, setup fee, management fee), and carry is computed over FIFO investment layers with a high-water mark. Non-trivial scenarios are supported: partial exits, mixed exits, conversion into sub-classes with layer inheritance, and secondary sales of stakes between investors (MPA).
Stock splits and reverse splits of portfolio companies with correct recalculation of every position across all related classes.
A custom templating engine on top of DOCX: the client's lawyers edit templates in Word with placeholders, the system fills in the data (with business rules like “carry = 0 → empty field”, “no setup fee → ‘not charged’”) and converts to PDF via Gotenberg/LibreOffice. Documents are generated as streams and never stored on the server.
Parsers for banks' CSV/XLSX formats plus PDF statement parsing (pdfjs) with an OCR fallback (Tesseract) for scanned documents, an import preview and duplicate protection.
Four roles (admin, owner, CFO, limited partner) enforced at both API and UI level: an investor sees only their own investments, the CFO sees operational data, the administrator sees everything.
KYC document tracking and ultimate beneficial owner (UBO) structures for every investor.
BEFORE → AFTER
Investor stakes recalculated in Excel after every deal
Stakes and positions are computed automatically from an immutable transaction journal
Fees and carry calculated individually per investor
Automated management fee and carried interest calculation (FIFO layers + High-Water Mark), with recalculation when terms change
Agreements assembled by copy-pasting Word templates
One-click document packages: the system fills investor, class and deal data into DOCX templates and returns a ready PDF
Manual reconciliation of incoming bank payments
Bank statement import (CSV/XLSX/PDF, including scanned documents) with automatic payment matching and deduplication
Investor reports “on request, when we get to it”
Ready-made reports with period filters and PDF/XLSX export
Exchange rates copied from the internet by hand
Scheduled background rate updates via API
“Who changed this and when?” — unknown
Full audit: every change to any entity is logged with the author, date, old and new values
OUTCOME
THE PROJECT IN NUMBERS
Plus 20 REST endpoint groups, 32 controllers, 25 services and 90+ database migrations over the project's lifetime.
STACK
A monorepo (npm workspaces) with a shared package of Zod schemas: the same data validation on client and server, so types never drift apart.
SEE ALSO
Management accounting and sales analytics, 500M+ transactions, calculation core inside the database.
Cash flow, P&L and per-product unit economics, LLM-to-SQL, deployed inside the client perimeter.
Service pages with scope and pricing are available in Russian.
CONTACT
I'll automate accounting and operational workflows around your specifics — from audit to production. Message me on Telegram — we'll scope the task, timeline and budget.
Message on Telegram dnovoselov@bk.ruI reply within 3 hours on weekdays
A project's budget and commercial terms belong to the client, and I don't publish them. Your project will be treated the same way. My own price ranges are in the Pricing section.