Enode
A monorepo of coach-facing apps for running training sessions with Enode velocity sensors, sharing a common core and design system. Built to be wrapped by Capacitor for native iOS/Android.
- Stack: Next.js 16 (App Router) · React 19 · TypeScript · Tailwind v4
- Workspaces: npm workspaces —
apps/*+packages/* - Backend: the Enode develop API (
developapi.enode.ai) — these are clients/portals, not the server.
Monorepo at a glance
| Workspace | Package | Role |
|---|---|---|
apps/tracking | @enode/tracking | Session-tracking app (dev :3000) |
apps/portal | @enode/portal | Portal app (dev :3001) |
packages/core | @enode/core | Shared logic: API client, BLE, training, hooks, units |
packages/ui | @enode/ui | Presentational components + the design-system stylesheet |
Shared packages ship TypeScript source; each app compiles them via Next's
transpilePackages.
Documentation map
| Where | What it covers |
|---|---|
| These Markdown pages | Purpose, setup, architecture, workflows, decisions |
| TypeDoc (navbar) | Exported APIs of @enode/core and @enode/ui |
| Storybook (navbar) | Reusable @enode/ui components and their states |
Start with Setup, then Architecture.
Key constraints
- No SSR in prod. Each app is a static export — no Server Actions, no request-reading Route Handlers.
- Models for the write path, DTOs for the read path. See State management.
- Design tokens only. Never raw Tailwind colour utilities — see Components.
Note: the repo-root
AGENTS.mdstill describes the pre-monoreposrc/liblayout. These docs reflect the currentpackages/*+apps/*structure, which is the source of truth.