Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.tuturuuu.com/llms.txt

Use this file to discover all available pages before exploring further.

Overview

apps/finance and the Finance experience inside apps/web are paired Finance hosts. They must stay 1:1 for product features, data behavior, mutations, permissions, route behavior, and user-facing workflow updates. Canonical workspace routes include:
  • /{wsId}
  • /{wsId}/transactions
  • /{wsId}/wallets
  • /{wsId}/invoices
  • /{wsId}/categories
  • /{wsId}/tags
  • /{wsId}/recurring
  • /{wsId}/budgets
  • /{wsId}/analytics
  • /{wsId}/debts
apps/web /{wsId}/finance/* routes render the same shared Finance product surface inside the normal platform dashboard shell. apps/finance keeps the shorter standalone route shape without the /finance segment. Use route prefixes instead of forks:
  • apps/web: financePrefix="/finance" and FinanceRouteProvider prefix="/finance".
  • apps/finance: financePrefix="" and FinanceRouteProvider prefix="".
Legacy nested category paths, such as /{wsId}/finance/transactions/categories, should redirect inside apps/web to /{wsId}/finance/categories while preserving query strings.

API Ownership

Protected Finance APIs stay centralized in apps/web.
  • apps/finance owns the standalone workspace shell, Finance UI route wrappers, local /verify-token handoff, and local app-session logout.
  • apps/web owns platform-shell Finance route wrappers under /{wsId}/finance/*.
  • apps/finance should keep only host-local auth/session routes under its local api tree.
  • Product CRUD, reporting, invoice, wallet, transaction, tag, promotion, inventory product, settings, and invoice helper APIs should be added in apps/web and consumed through forwarded /api/* requests or @tuturuuu/internal-api.
  • Finance app-session cookies are accepted by central Finance API routes and invoice-adjacent helper routes, then route-level permissions are enforced by apps/web.
When adding new Finance behavior, update the shared Finance UI/helper first, then wire both host wrappers in the same change. Add or extend the protected route in apps/web, expose a helper in packages/internal-api when shared UI needs it, and consume it from both hosts through TanStack Query or shared server components.