StatsHub Docs

Monorepo overview

A map of the StatsHub apps, shared packages, task graph, and ownership boundaries.

StatsHub is one Bun workspace managed by Turbo, but it is not one application. Deployable and runnable surfaces live under apps/; code and configuration shared across those surfaces live under packages/.

Turborepotask graphBunworkspace runtimeNext.jsweb surfacesExponative clientsGoHTTP APIPostgreSQLdata layer
README.md — start here
package.json
turbo.json — shared task graph

Apps and services

WorkspaceRoleStackLocal port
web-app-routerProduct websiteNext.js3002
statshub-expoiOS and Android appExpo and React Native8142
statshub-apiHTTP API over PostgresGo, Chi, Huma, and Bun ORM8080
statshub-docsThis documentation rendererNext.js and Fumadocs3001
statshub-playgroundComponent workbench and route previewsNext.js3004
statshub-legacyPrevious website and parity referenceNext.js3000
expo-legacyPrevious mobile clientExpo and React Native8142

Shared packages

PackageOwns
statshub-api-clientThe typed HTTP client used by the web and Expo apps
statshub-api-contractRecorded cases and comparisons between the legacy and Go APIs, at packages/tests/api-contract
statshub-i18nEnglish, Spanish, and Portuguese message catalogs and loaders
statshub-toolingShared Next.js, Tailwind, ESLint, TypeScript, port, and tailnet configuration
@statshub/ui-webWeb UI primitives shared by the website and playground
@statshub/ui-nativeNative UI primitives shared by the current and legacy Expo apps

A package should own a rule only when more than one app needs the same answer. App-specific routes, state, and product behavior stay with the app that uses them.

On this page