Skip to main content

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

WorkspacePackageRole
apps/tracking@enode/trackingSession-tracking app (dev :3000)
apps/portal@enode/portalPortal app (dev :3001)
packages/core@enode/coreShared logic: API client, BLE, training, hooks, units
packages/ui@enode/uiPresentational components + the design-system stylesheet

Shared packages ship TypeScript source; each app compiles them via Next's transpilePackages.

Documentation map

WhereWhat it covers
These Markdown pagesPurpose, 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.md still describes the pre-monorepo src/lib layout. These docs reflect the current packages/* + apps/* structure, which is the source of truth.