Getting Started
How a new internal app gets scaffolded in this monorepo.
This is a pnpm workspace with two kinds of packages: apps under
apps/* and shared code under packages/*.
Running an app locally
Every app runs on its own fixed port so several can run side by side:
| App | Port |
|---|---|
| web | 3001 |
| smm | 3002 |
| seo | 3003 |
| dir | 3004 |
| doc | 3005 |
pnpm --filter <app> dev
Scaffolding a new app
New internal tools start from the same foundation as dir/smm/seo:
- Copy the standard config files —
tsconfig.json,eslint.config.mjs,postcss.config.mjs,next.config.ts(withtranspilePackages: ["@ketryon/ui"]). - Copy
app/globals.cssand give the new app the next unused basefont-sizein the sequence (see Conventions). - Set up
app/layout.tsxandapp/manifest.tswithrobots: { index: false, follow: false }— internal tools don't get indexed. - Copy the shared brand assets into
public/— they're identical across every app.
Adding an interaction sound
Once an app has a real UI interaction to wire up (not before —
there's nothing to gain from installing an unused dependency), add
@ketryon/sound and map the interaction to one of the curated
"Playful" pack's sounds.