Accounting / Invoicing
Business & SaaS · React + Node (Express) · 19 @molecule/* packages
QuickBooks-like accounting with invoices, expenses, reports, and reconciliation — with built-in Stripe-backed subscription tiers
Try it
Opens instantly. Runs on sample data, so changes reset on reload.
What is inside
Screens (19)
- Landing
/ - Login
/login - Signup
/signup - ForgotPassword
/forgot-password - ResetPassword
/reset-password - Dashboard
/dashboard(signed in) - Invoices
/invoices(signed in) - InvoiceDetail
/invoices/:id(signed in) - NewInvoice
/invoices/new(signed in) - Expenses
/expenses(signed in) - Reports
/reports(signed in) - Customers
/customers(signed in) - Accounts
/accounts(signed in) - Settings
/settings(signed in) - CustomerDetail
/customers/:id(signed in) - ExpenseDetail
/expenses/:id(signed in) - NewExpense
/expenses/new(signed in) - Payments
/payments(signed in) - Taxes
/taxes(signed in)
Data model (13 tables)
- accounts — id, user_id, code, name, type, description, balance, currency, …
- customers — id, user_id, company, contact_name, contact_email, contact_phone, address, payment_terms, …
- devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
- expenses — id, user_id, amount_cents, amount, currency, merchant, category, category_color, …
- invoice_line_items — id, invoice_id, position, description, quantity, unit_price, amount
- invoice_payments — id, user_id, invoice_id, customer_name, invoice_number, amount_cents, method, reference, …
- invoices — id, user_id, invoice_number, customer_id, customer_name, status, issue_date, due_date, …
- notifications — id, user_id, type, title, body, href, unread, created_at
- payments — id, createdAt, updatedAt, userId, transactionId, productId, platformKey, data, …
- tax_rates — id, user_id, name, rate_pct, region, is_default, created_at
- company_profile — user_id, legal_name, billing_email, tax_id, address, default_tax_rate_pct, filing_method, fiscal_year_start, …
- integrations — id, user_id, name, status, last_synced_at, created_at, updated_at
- team_members — id, user_id, name, email, role, created_at
API (8 handlers)
- accounts
api/src/handlers/accounts.ts - customers
api/src/handlers/customers.ts - expenses
api/src/handlers/expenses.ts - invoices
api/src/handlers/invoices.ts - notifications
api/src/handlers/notifications.ts - payments
api/src/handlers/payments.ts - reports
api/src/handlers/reports.ts - settings
api/src/handlers/settings.ts
Subscription tiers
free / pro / team — gated by: maxAccounts, maxExpenses, maxInvoices, advancedFeatures, canExport, retentionDays
Built from 19 @molecule/* packages
@molecule/api-audit-database@molecule/api-database-postgresql@molecule/api-email-templates@molecule/api-emails-mailgun@molecule/api-entitlements@molecule/api-import-export-csv@molecule/api-payments-stripe@molecule/api-pdf-pdfkit@molecule/api-permissions-custom@molecule/api-reporting-database@molecule/api-resource-payment@molecule/api-resource-user@molecule/api-search-meilisearch@molecule/app-billing-react@molecule/app-command-palette@molecule/app-data-table@molecule/app-date-range-picker@molecule/app-notification-feed-react@molecule/app-sidebar-layout-react
Required secrets
DATABASE_URLPostgreSQL connection stringMEILISEARCH_API_KEYMeiliSearch API keyMAILGUN_API_KEYMailgun API key for invoice emailsMAILGUN_DOMAINMailgun sending domain
The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing