Webapp
@cona/webapp — the primary application. Next.js App Router on Vercel at cona.app.
90 pages, 42 API route handlers, 501 files carrying "use server".
Request path
Every request passes throughproxy.ts unless the matcher excludes it.
The exempt families each authenticate themselves — verified, not assumed. See
Ingress.
Layers
Route groups
24 of the settings pages are integration setup at
setup/integrations/<provider>/[id] — one per provider, all the same shape.
Two kinds of “tool”
tool/ar-recon, tool/datev-export, tool/deferred-revenue are native modules
installed from the App Store — distinct from integrations, which are external data
sources. Both are sold through the same App Store.
Auth and tenancy
app/lib/auth/auth.ts is the tenancy surface:
getOrganizationAndActorId() returning both in one call is what couples tenant scoping to
mutation attribution. See Auth, Tenancy & Actors.
A further 14 files handle Auth0 management: user CRUD, MFA enrolment, TOTP deletion,
password and email updates.
Server actions
65 domain folders underapp/lib/actions/, largely mirroring @cona/core domains. The
asymmetry is informative — these 17 folders have no core counterpart because they are
presentation or admin concerns:
admin, cache, catalog, contacts, copilot, copilot-memory,
customer_debtor_accounts, dashboard, delivery_terms, dev, filters,
gl_dimensions, gl_reconciliations, posting_matrix, posting_matrix_column_type,
sandbox, subscriptions
Notes
proxy.ts, not middleware.ts. Next.js 16 naming. Anyone grepping for
middleware.ts will find nothing.
Two near-empty layers. app/lib/controllers/ holds 2 files and app/lib/services/
holds 1 (PostHog). They look like abandoned layering experiments and are folded into
“support” above rather than drawn as tiers.
Three loose files break the action-folder convention:
app/lib/actions/delete-financial-data.ts, dev-token-actions.ts, and a stray test
document-default-settings-actions-i18n.test.ts sit outside any domain folder.
Function duration is capped at 60s, except
app/lib/integrations/bank-account/initiate-bank-reconnect.ts at 90s
(apps/webapp/vercel.json).