react-app features
Generated from templates/react-app/template.json.
| Feature | Default | What it adds |
|---|---|---|
uiUI kit (src/shared/ui) | Always | shadcn-style Radix components, a Formik+Zod form helper, light/dark theming with a no-flash init script, and page-meta helpers. |
apiData layer (src/shared/api) | Always | One RTK Query baseApi that every feature extends via injectEndpoints, a configured store, and an upload-aware base query. Endpoint names and tagTypes live in one global namespace — collisions are silent, so keep them unique. |
authAuth (src/shared/auth) | Always | better-auth browser client, session slice, and route guards. Single origin, so the guard navigates to /login rather than redirecting to another host. |
layoutsLayouts (src/shared/layouts) | Always | App shell, auth layout, marketing layout, error boundary and the loading/empty/forbidden/not-found state screens. |
auth-screensAuth screens | On | Login, signup, forgot/reset password, email verification as routes. Drop this only if you are bringing your own /login — the guards and the 401 handler both send unauthenticated users there. Files it owns (2)
|
hooksShared hooks (src/shared/hooks) | On | Files it owns (1)
|
typesGenerated API types (src/shared/types) | On | OpenAPI-generated request/response types and Zod schemas, regenerated from the backend's /openapi-json by Files it owns (3)
|
marketingMarketing site | Opt-in | A public landing page at Files it owns (2)
|
adminAdmin console | Opt-in | A role-gated /admin branch with its own nav, over the same data layer. The guard decides what renders; the API still has to enforce the role. Files it owns (1)
|
realtimeSocket.IO client | Opt-in | socket.io-client wired to the backend's /realtime path, with room helpers and shared event-name constants. Pairs with the nest-api realtime feature. Files it owns (2)
|
pwaInstallable PWA | Opt-in | vite-plugin-pwa: app-shell offline caching, and registerType 'prompt' so a new build waits for the user instead of swapping assets under a running app. The update prompt and install button are yours to build with the plugin's useRegisterSW. |
chartsCharts | Opt-in | ApexCharts and react-apexcharts, with a theme-aware chart palette (the --chart-* tokens in the UI kit). No chart components ship. |
huskyGit hooks + lint-staged | On | Files it owns (1)
|
dockerDocker image | On | Multi-stage build producing a static bundle, served by the nginx config in docker/ (cache rules, SPA fallback, security headers). Files it owns (4)
|
ciForgejo Actions CI | On | Files it owns (1)
|
secretsInfisical secret sync | On | Files it owns (1)
|
telemetryBrowser monitoring → OpenObserve | On | OpenObserve RUM and logs: page views, errors (including the error boundary's), slow resources, user actions, the signed-in user id, and traceparent headers on API calls so frontend and backend traces link up. Session replay is off unless a project turns it on. Off at runtime until VITE_OPENOBSERVE_* are set. Files it owns (1)
|
marketingmoves the signed-in app from/to/app, and adds build-timerobots.txt,sitemap.xmlandsecurity.txt. SetPRODUCTION_ORIGINinsrc/features/seo/routes.tsto your real origin: every other origin builds asnoindex.admingates/adminin the UI only. The API must enforce the role.pwa: the update prompt and install button are yours to build, with the plugin’suseRegisterSW.chartsadds ApexCharts and its theme-aware palette tokens; no chart components ship.realtimeadds a Socket.IO client for the API’s/realtimepath. CallconnectSocket(url)where your app needs it; nothing connects by default.auth-screensoff means you bring your own/login: the guards and the 401 handler still send users there.