Implementation recipes

173 recipes. Every one already written.

These are not feature bullets. They are the guides that ship inside the product, on the Implement tab of each module. Each one carries a goal, prerequisites, the full file inventory, ordered steps with real code, verification at every stage, and a definition of done. Below is what each one covers.

The recipes ship in every pack Code and steps unlock with a licence
Recipes
173
Modules covered
60
Advanced
43
Hours of work
151+

Showing 19 of 173 recipes.

Collaborative editorintermediate45 min

Add a collaborative editor (Stack walkthrough)

Multiplayer rich text on Convex's sync component with a Tiptap editor: two people type in one document at once and nobody's paragraph disappears. Documents stay scoped to their organization with read and write checks on every sync call, viewers open read-only, and body text becomes searchable once edits settle.

concurrent edits without last-write-wins

Collaborative editorintermediate45 min

SaaS extras: search, plans, webhooks, extensions

Documents become a sellable feature. Plans can gate or cap document creation, search finds body text within one organization only, documents link optionally to projects, editor extensions stay consistent between client and server, and a webhook fires when a draft settles — ready to mirror into a CRM.

search that matches formatted text

Organization overviewintermediate45 min

Build the post-login home dashboard

The first screen after sign-in: who the viewer is, which organization is active, and that organization's projects, updating live. Loading, signed-out and empty states are all handled, switching organizations swaps the whole view without a page reload, and no other tenant's data can ever appear.

loading and empty states per tenant

Organization overviewintermediate45 min

Add a first-run activation checklist to the home dashboard

New teams stall when nothing tells them what to do next. A checklist on the home dashboard tracks real milestones — organization created, teammate invited, first project — from live counts rather than client guesses, hides itself once everything is done, and stays dismissed across devices because dismissal belongs to the organization.

dismissal that survives a new device

Organization overviewintermediate45 min

Add a plan & usage summary widget to the home dashboard

Usage you already meter becomes progress bars on the home screen: one bar per metered capability with a plan ceiling, turning amber at eighty percent and red past the limit. The upgrade link appears only when a tenant is actually close, and raised limits from billing are respected automatically.

warning before the limit, not after

Organization overviewintermediate45 min

Add an org-scoped recent activity feed to the home dashboard

Members see what just happened in their organization: the most recent audit events as a live feed with human-readable labels and relative timestamps. Access is checked against actual membership, so a member of one organization can never read another tenant's history, and unmapped events still appear rather than vanishing.

activity a member is allowed to see

Organization overviewintermediate45 min

Add quick actions and a notifications tile to the home dashboard

Shortcuts for the two things people do most — starting a project and inviting a teammate by email — sit beside a notifications tile with a live unread count, a five-item preview and mark-all-read. Everything reuses existing project, Better Auth and notification functions, so no new backend surface gets invented.

unread counts that stay live

Presencebeginner35 min

Ship org presence with heartbeats

Who is online right now, per organization, from a lightweight heartbeat each member's browser sends. Status moves between online, away and offline from last-seen times, closing a tab clears the entry within the threshold, and two browsers on the same organization see each other appear and disappear live.

leaving cleanly when a tab closes

Presenceintermediate70 min

Scope presence to a record and show the avatar stack

A project page should show who is on that project, not who is somewhere in the workspace. This scopes presence to individual records, so opening a page shows an avatar stack of the people viewing that exact project, with an overflow count past four faces, and each room checks access before revealing anyone.

overflow count past four faces

Presenceadvanced90 min

Live cursors that glide instead of teleporting

Live cursors for shared canvases and boards. Each collaborator gets a labelled pointer in a colour that stays stable across reloads, motion reads as continuous rather than teleporting, positions land correctly across different window sizes and zoom levels, and a cursor that goes quiet fades out instead of freezing on screen.

smooth motion at a low write rate

Presenceintermediate75 min

Typing indicators and advisory field locks

See who is editing which field before you overwrite them. Typing indicators appear on the exact field within a second, a warning shows when two people enter the same field, and locks are advisory — they never block input, and they release themselves when a tab crashes or a laptop lid closes mid-edit.

locks that expire on a closed laptop

Presenceadvanced85 min

Collaborator awareness inside the document editor

Inside the document editor, each collaborator gets a name badge and a coloured highlight over their current selection, and both vanish when their tab closes. Awareness shares the same permission boundary as the document itself, and a presence problem can never touch the content, the undo history, or the sync stream.

one writer for document content

Presenceintermediate70 min

One person, three tabs, one dot

One person with three tabs open should be one dot. Presence collapses to a single entry per user, away means five quiet minutes without keyboard or pointer activity rather than a tab switch, hidden tabs stop reporting entirely, and the server decides the final status instead of trusting whatever a client claims.

three tabs, one presence entry

Presenceintermediate75 min

Ghosts, dropped connections, and the laptop lid

Closed lids, killed tabs and dropped wifi are why presence panels lie. This covers all three: a member whose laptop closes disappears within the away window and their stale row is eventually cleaned up, a brief connection loss shows an honest reconnecting state, and rejoining lands on the same entry with no duplicate.

rejoining without a duplicate row

Presenceadvanced80 min

Keep presence cheap at fifty people in a room

Fifty people in one room stays cheap. This puts a hard write budget on every member, keeps fast-changing cursor data away from the roster everyone reads, and re-renders the member list only when someone actually joins or leaves — so the panel shows a bounded list with a count, not fifty churning rows.

re-render only when the roster changes

Presenceintermediate70 min

Stop presence from leaking what people are working on

Presence should never reveal a private project's name to someone who cannot open it. Location details are redacted per viewer on the server, so restricted records show as online with no location, and an appear-offline setting removes a person from every list — enforced where the data is read, not in the interface.

record names hidden from users without access

Presenceadvanced95 min

Move to @convex-dev/presence without a blackout

Hand heartbeats and disconnect detection to the official Convex presence component while your tenancy checks stay exactly where they are. Old and new run side by side behind a flag, rooms move over gradually with real traffic confirming they agree, rollback is one switch, and nobody ever sees an empty panel.

no empty panel during the cutover

Projects & tasksintermediate45 min

Ship tenant-safe project CRUD

Organization-scoped projects with list, create and archive, each behind permission checks, plan limits and rate limits. Read-only members can browse but never write, limit checks run before anything is inserted, and a guessed id from another organization resolves to nothing — the record's own tenant is what gets authorized, not a value the client sent.

plan limits enforced before the write

Projects & tasksintermediate45 min

Add a multi-tenant task board

A task board with status columns under each project. Tasks take their tenancy from the parent project rather than from anything the client sends, so drag-and-drop status changes stay inside one organization, viewers can follow the board without being able to move a card, and writes are permission-gated throughout.

child records inheriting parent tenancy