Monthos built the governed reporting layer between investment teams and their portfolio companies—structured financials, documents and sign-off in one place.
Who this is for: venture capital, growth equity and private equity firms—general partners, operating partners, portfolio finance teams and portfolio company CFOs.
Private markets firms need more than a spreadsheet to manage portfolio reporting. The product documentation identifies several recurring pain points:
VCtomic is designed as the governed reporting layer between an investment team and its portfolio companies: structured financials, documents, and sign-off in one place — without replacing the portfolio company's general ledger or ERP.
Monthos built VCtomic as a production-grade, domain-rich SaaS application with security and business rules enforced at the database layer, not only in the UI.
Guiding principles evident in the codebase:
Five primary user roles drive the application:
Additional access controls include per-deal grants (deal_access), portfolio-wide access flags (all_deals_access), pre-provisioned user login (check_valid_user RPC), and the ability to disable partner users at the account level.
deal_access
all_deals_access
check_valid_user
Each deal links an investor organisation to a partner organisation and carries metadata used for reporting and filtering: legal entity name, deal type, sector and sub-sector, currency, country, province (for South African property deals), asset class (Development, Yield, or Trade), and active or archived status.
Deal pages are organised into 20 dedicated modules beyond the deal overview:
The production reporting model uses an annual fiscal year from 1 March through the end of February. A new period opens for data entry on 1 March.
Partner admins submit periods from the Period Workflow page. Investor admins accept or reopen with mandatory notes visible to the portfolio company. The system remembers each user's last selected reporting period per partner organisation.
The investor report builder (/investor-admin/reports) supports:
/investor-admin/reports
xlsx
Six Supabase Storage buckets back the document modules:
deal-attachments
deal-summaries
legal-documents
shareholder-register
management-accounts
counter-indemnities
Super Admin routes cover reseller management, investor and partner onboarding, reference data (banks, sectors, countries), investor user administration, and a controlled data-clearing tool for maintenance.
The Super Admin dashboard surfaces platform-wide counts and monthly revenue breakdown by currency.
@supabase/auth-ui-react
dist/
Direct client-to-Supabase pattern. The application has no Netlify Functions or Supabase Edge Functions in the repository. Business logic is split between TypeScript modules in src/lib/ (notably reporting-periods.ts and report-builder.ts) and Postgres functions and policies in the baseline migration (~10,700 lines).
src/lib/
reporting-periods.ts
report-builder.ts
Row-level security as the security boundary. All 52 tables have RLS enabled with 100 policies. Access is enforced at Postgres regardless of client-side routing.
Pre-provisioned users only. Authentication uses Supabase Auth, but login is gated by the check_valid_user RPC — an auth account must exist in a valid user table before access is granted.
Defence in depth at the edge. Netlify serves the SPA with security headers including Content-Security-Policy restricting connections to Supabase endpoints, plus X-Frame-Options, X-XSS-Protection, and Referrer-Policy.
X-Frame-Options
X-XSS-Protection
Referrer-Policy
Audit trail for sensitive changes. Client-side audit logging writes to audit_logs; post-acceptance edits are recorded in post_accept_edit_log.
audit_logs
post_accept_edit_log
┌─────────────────────────────────────────────────────────────────┐ │ User browsers │ │ (React SPA · PWA · role-based routing) │ └────────────────────────────┬────────────────────────────────────┘ │ HTTPS ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Netlify CDN + static hosting │ │ SPA fallback · security headers · CSP to Supabase │ └────────────────────────────┬────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Supabase │ │ ┌──────────────┐ ┌──────────────┐ ┌───────────────────────┐ │ │ │ Auth (PKCE) │ │ PostgreSQL │ │ Storage (6 buckets) │ │ │ │ pre-provision│ │ 52 tables │ │ deal docs, accounts │ │ │ │ ed users │ │ 100 RLS │ │ │ │ │ │ │ │ policies │ │ │ │ │ │ │ │ ~100 funcs │ │ │ │ │ └──────────────┘ └──────────────┘ └───────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ Organisation hierarchy: Super Admin └── Investor Organisations (subscription billing) └── Partner Organisations (portfolio companies) └── Deals (financial + document modules) Resellers (channel · commission on introduced investors)
Evidence from the codebase and schema:
VCtomic demonstrates Monthos's ability to deliver a domain-complex, multi-tenant SaaS — not a generic CRUD application, but a system shaped by private markets reporting requirements:
It is a reference build for firms that need a portfolio reporting layer without building and maintaining custom infrastructure from scratch.
Monthos designs and ships custom, production-grade applications for teams that need more than off-the-shelf software.
monthos.com
Case study prepared for Monthos.com · Project: VCtomic
Monthos Group — Cheltondale, Johannesburg, SA. Email info@monthos.com, phone +27 (68) 750 7313.
Case studies · Privacy Policy · Terms of Service