The apps
PulsN (the example) is not one screen — it's a handful of small apps sharing one set of users, one database, and one app shell, all reached through one assistant. Each gets its own page; this is the map.
The shape
The organising idea is project-centric: you land on /home — your buildings ranked by
urgency, with Carola ready to type to. Pick a building and you enter its
workspace at /project/$projectKey/…, where the project apps show that building's data.
Carola follows you the whole way: scope is a lens (the portfolio, or a
building), never its own destination.
| App | Scope | What it is |
|---|---|---|
| Portfolio | the home | the post-login home — your buildings, ranked by urgency, Carola front and centre |
| Carola | everywhere | the conversation-first assistant — inline, the companion rail, or floating (PiP) |
| ProcessN | per project | task & assignment management |
| ProtokollN | per project | meeting protocols + action points (a hierarchical tree) |
| NyhetN | per project | a read-only news feed, askable by the agent |
| WikiN | per project | the documentation handbook, askable by the agent |
| Flatbox | per project | document-review views from a separate service over HTTP |
Two surfaces cut across all of them: Universal search — one ranked search over everything you can see — and a full site-admin area.
Two flavours of app
The split matters when you read the code:
- In-process — ProcessN, ProtokollN, NyhetN, WikiN. This app owns their tables
(
src/db/schema/*), their server functions, and their permission rules. You "own your domain": there's no framework-providedProjectmodel. - External — Flatbox is a different service reached over HTTP, which computes its own permissions; this app just trusts and renders them. It's the template for integrating a system you don't own.
The shared table page
The domain apps look consistent because the editable ones are built from one fusion-ui
shell, ResourceTablePage. You hand it columns, the rows from a
loader, and a per-row canEdit
predicate; it gives you the Editor/Viewer badge, a gated Edit button, and an edit sheet for
free. The matching *-server.ts provides the list-filters-then-update-re-checks shape.
That's why a new domain page is mostly copy-and-change — see Building a
feature.
See it with data
Everything is populated by bun run db:seed — ten Tikab logins across nine real projects,
hundreds of news posts and wiki articles, realistic memberships and permissions. The
Portfolio's seed section has the details and the sign-in
credentials.
New to the framework these apps are built on? Read How TanStack Start works and the React / Django comparisons first.