Skip to content

Kody is live

Watch the launch video — what Kody is, and why it exists.

← Public packages

@kentcdodds/package-app-kit

Design tokens, PWA install/update, About/version, cache helpers, and optional realtime notes sync for Kody package apps.

starter-remix/README.template.md

34 lines · 1.7 KB · Markdown

APP_TITLE

Intent

Desktop + mobile friendly Kody package app scaffolded from @kentcdodds/package-app-kit starter-remix/. Replace this Intent with the product goal before the first real publish.

Stack

  • Remix recipe under the framework-agnostic host — app/router.ts remounts + export default { fetch } (no kody.app.runtime)
  • Root tsconfig.json with "jsx": "react-jsx" + "jsxImportSource": "remix/ui"
  • Dual per-file pragmas on every SSR .tsx that uses JSX: /** @jsxRuntime automatic */ + /** @jsxImportSource remix/ui */
  • Mount-prefixed routes (route(packageContext.appBasePath, …)) with remount in the entry
  • Controllers + form actions with get(KodyRuntime) / packageStorage()
  • Browser run() entry (app/assets/entry.ts) hydrating clientEntry('kody:app#Name', …) islands — no @remix-run/*, no import map
  • Static assets (public/styles.css, public/sw.js via __version.json)
  • Kit: design tokens CSS, record-version / About, install CTA + update banner islands, Notes form + double-check

List mark

Identity/list icon: .kody/icon.png (scaffold ships .kody/icon.svg). Replace with your logo. PWA icons stay under /icons/ via the kit — not in .kody/.

After scaffolding

See After scaffolding in AGENTS.md: brand the list mark + PWA icons, fill titles/description, keep local record-version, confirm the Remix recipe, and match manifest theme colors to the mark.

After publish

Call this package's ./record-version (local packageStorage), not the kit's:

import recordVersion from 'kody:__PACKAGE_NAME__/record-version'
await recordVersion({ sha: '<published_commit>', message: '<commit message>' })