app/(app)Authenticated routes.
componentsProduct UI components.
Developer guide
The frontend lives in apps/web and uses Next.js 14 App Router.
Key areas
apps/webRoutes render components, components read data through hooks, and hooks sit on top of the API client, the socket, and the stores.
app/(app)Authenticated routes.
componentsProduct UI components.
hooksData and realtime hooks.
lib/api.tsAxios client and refresh interceptor.
lib/socket.tsSocket.IO client singleton.
storesZustand stores.
Voice transcript & translate client
Audio surfaces an AI panel with transcript + translate controls.
The bubble footer's Translate button is hidden when the message body is empty, because a voice note's words live in the transcript panel.
translateWithinLimitCentralises trimming and error mapping for translate requests.
TRANSLATE_TARGETS on the client must mirror the server allow-list to avoid 400s.The user asks for a transcript from the UI.
Workspace deep-links
?report= and ?org= on the clientPages that list workspace-scoped resources (e.g. bug-reports) should accept ?report= and ?org= query params, then decide what to do based on the user's membership in the named org.
Guard the UX while the current user's membership info is still resolving.
Switch the active workspace so the linked resource is visible. Make the change global: the sidebar and subsequent queries follow.
Do not change the active workspace. Show an explicit no-access state instead.
Shell and motion
.rbx-shell-cardRoutes render inside a page-card layer inset from the app frame; rails and flyouts live on the outer frame.
The card uses a 14px top-left corner at desktop sizes and becomes edge-to-edge with square corners below lg. Phones remain edge-to-edge.
--rbx-typing-motion-duration (288ms), --rbx-typing-motion-ease, and --rbx-typing-row-h drive the typing animation.
TYPING_MOTION_MS) in sync with the CSS token so exit animations complete before unmount.TagChipA shared TagChip component replaces ad-hoc tag rendering in multiple tiles and lists. Prefer TagChip for new work.
Checks
apps/web before releaseFrontend deploys are not gated by lint, typecheck, or tests. Run them manually before release.
cd apps/web
pnpm lint
pnpm typecheck
pnpm build