ForgeHome MVP + MonoRepo Packages

ForgeKit · June 18, 2026 · ForgeHome · Monorepo · Rounds

Built ForgeHome from scratch and extracted shared packages. The Rounds engine now has a template. A new app takes 15 minutes to scaffold.

Start
Monorepo root + workspaces wired
npm workspaces, tsconfig, transpilePackages
1h
forgekit-ui + forgekit-core extracted
cn, Badge, Button, Card, createDb — shared across apps
2h
ForgeHome data model designed
households, people, routeItems — 7 types, 6 statuses
3h
ForgeHome Today + Capture + Week screens
Server components, section-based layout, guilt-free Move
4h
rounds-app template committed
cp + find/replace = working app in 15 min
forgehome/ — Rounds-engine daily route app for household managers
packages/forgekit-ui/ — cn, Badge, Button, Card (single source of truth)
packages/forgekit-core/ — createDb(schema) Neon proxy + Clerk middleware re-export
packages/templates/rounds-app/ — complete skeleton for any new Rounds app
package.json (root) — npm workspaces monorepo wiring
leashline wired to packages via re-export shims + transpilePackages
Re-export shim via package boundary fails with Turbopack static analysis
20 min
Inline config directly in each app — don't re-export through packages/
leashline has its own .git — workspace linking silently skips it
10 min
Keep leashline/.git for now, migrate to monorepo in a dedicated session
Rounds engine rule: if the operator goes TO the client, it's Rounds. If clients come to the operator, it's Rail.
Section-based Today page — fetch all items, split by type, render sections in priority order. Each section is an independent server component.
Guilt-free Move: no red overdue state. Move just advances the date. This is a product principle, not a UI detail.
createDb(schema) is generic — each app passes its own schema, gets a fully typed client. No connection held at module load.

Rounds app template

cp template, swap name/colors/schema/seed — working Rounds app in 15 min. Location: packages/templates/rounds-app/

createDb(schema) proxy

Generic Neon DB factory — typed per app, no connection held at module load. Location: packages/forgekit-core/src/db.ts

Re-export shim pattern

Keep app import paths (@/components/ui/badge) stable while pointing to shared package. Components become 1-line re-exports.

Section-based Today page

Fetch all items, split by type, render sections in priority order. Each section is an independent server component.

4
Apps in monorepo
3
Shared packages built
5
Screens in ForgeHome
15m
To scaffold a new Rounds app

A new Rounds app in 15 minutes. The template is the compression.

Session insight
Deploy

ForgeHome — Neon DB + .env.local + deploy — Set up Neon DB, push schema, seed Junge family data, deploy to home.forgekits.build

Verify

Leashline monorepo linking — Run npm install from root, verify leashline resolves forgekit-ui and forgekit-core correctly

Future

forgekit-ai package — Claude API wrapper, structured output, retries, eval logic — extract when two apps need it