Imported from zemn-me/monorepo (
project/me/zemn/AGENTS.md). Install upstream withnpx skills add zemn-me/monorepo --skill zemn. Copyright stays with the author.
Frontend notes
-
Debug-only wiring is only acceptable if it does not ship in the production bundle. Remove temporary client-visible debugging code rather than leaving dormant fallback paths behind.
-
Don't add compatibility fallbacks for web platform features that are Baseline Widely available; prefer the standard API directly unless the product explicitly needs older environments.
-
New
app/route packages must also be added to the//project/me/zemn:tsdeps list; Gazelle does not wire that Next aggregate automatically. -
Glade opt-in routes use ordinary segment
layout.tsxfiles; avoid route-group directories just to control Glade. -
Shared zemn.me menu/index links live in
project/me/zemn/navigation/navigation.ts; update that when adding visible routes. -
Server components cannot pass function-valued selectors into client components; pass serializable selector data and rebuild the function inside the client boundary.
-
In React code, prefer carrying async/remote values with
ts/future/future.tshelpers over duplicating messy internal loading/error state. -
Prefer
project/me/zemn/api/spec.yamland its generated API types over hard-coding duplicate request/response types. -
URL query hooks such as
useQueryStateneed an enclosing Suspense boundary for static export. Verify//project/me/zemn:build; development-server browser tests do not catch prerender failures. -
For metadata-only app route types, import from
next/types; importing package rootnextpulls ambient declarations that collide with repo shims. -
Content-addressed public assets should be declared next to the TS that imports them with
hashed_public_assets;project/me/zemn/public:content_addressed_public_assetscollects them from//project/me/zemn:ts. -
For
hashed_public_assetsgenerated TS modules outsideproject/me/zemn, add agazelle:resolve typescriptdirective at the import site; Gazelle will not infer the generated module. -
//project/me/zemn:zemnstarts the local app on port 3000; passing another--portappends rather than overrides. -
The dev server reads Bazel-copied inputs; if rebuilt CSS stays stale in the preview, restart
//project/me/zemn:zemnbefore reloading the browser. -
Signed media range failures can leave an HTML media element stalled without an
error; preserve playback intent and recover fromwaiting/stalledas well as hard errors. -
Keep local
api/server.Server.ProvisionTablesindexes aligned with Pulumi; analytics listing requiresfeed-when-index, which ingest-only tests do not exercise.