Repository navigation
v1.0.2
Version 1.0.2 gives private forks a one-command way to take upstream updates, moves the starter to a develop/main branch model with an automated release pipeline, and makes Node.js 24 the only supported runtime. It also removes Nx Cloud, adds and tightens several repository-wide guards, and records the Railway deployment in the repository. Several of these changes ask something of every fork: read Fork migration below before merging.
The first area is the fork and release workflow. A client project that must stay private cannot be a GitHub fork of a public repository, so it lives as a private mirror. Run inside a mirror, npm run upstream:pull fetches upstream, prints the CHANGELOG changes since the last merge, merges upstream/main, resolves lockfile-only conflicts and finishes with npm run ci:verify; the separate fork-init tool creates the mirror in the first place (#540). Upstream now develops on develop and reaches main only through an automated release pull request, so every advance of main is a tagged release with its own CHANGELOG section. A new /release-workflow skill prepares each release by promoting the ## [Unreleased] section to the new version and bumping package.json, and two workflows open the release pull request and publish the tag and GitHub Release (#539). Structured issue forms and a refreshed pull request template make new issues easier to triage (#504).
The second is toolchain and CI. Node.js 24 LTS is now the only supported runtime: engines.node is ^24.18.0, and a new .nvmrc pins 24.18.0 (#537). Nx Cloud is removed and tasks use the local Nx cache only, so a stray access token can no longer fail CI or report a private mirror's runs to the starter's public Nx Cloud workspace (#542). The repository-wide guards now run as one Nx check target, both locally and in a new remote CI job, so a push that skipped the pre-commit hook no longer skips them (#527). One of those guards is new: code comments must explain the code as it is now, and an issue or pull request number in a comment fails the build (#499). The lint rule against direct process.env access now allows eight named files instead of three whole directories, and the integration tests read their settings through the typed environment schemas (#501).
The third is styling. Components whose host styling is a fixed set of utilities now declare it with host: { class } instead of :host { @apply … } (#489). Component stylesheets no longer carry the @reference "#tailwind-theme" line: a PostCSS plugin adds it at build time to every stylesheet that uses @apply, and the ui-component generator stops writing it (#523). The dashboard header and the health page now use the theme's semantic tokens instead of hardcoded grays, so both render correctly in dark mode (#520, #513).
The fourth is deployment. A root railway.json records the Railway build command, start command and health check in the repository, so a deploy that cannot reach its database no longer replaces a healthy one (#514). Storybook can be served from a second Railway service by a small static server that uses only Node built-ins (#547). Vercel-specific wording and a dead Speed Insights stub are removed from the code and documentation (#545). A deploy that restarted in a loop on its startup database check turned out to have a connection configuration problem in the deploy environment; correcting that configuration resolved it, with no code change (#511).
Fork migration
Every fork:
- #537 - Use Node.js 24.18.0 or later (
nvm usereads the new.nvmrc), move the Node version pins in your own CI workflows and deployment platform to 24.18, then runnpm installto pick up@types/node^24.13.3.engines.nodeis now^24.18.0: an older runtime gets anengineswarning from npm, and fails the install if your.npmrcsetsengine-strict=true. - #542 - Delete the
NX_CLOUD_ACCESS_TOKENsecret from your repository's Actions secrets and unset the token in your shells:nx.jsonno longer has upstream'snxCloudId, and.github/workflows/ci.ymlsetsNX_NO_CLOUD: 'true'and uses the local Nx cache only. If your fork uses its own Nx Cloud workspace, keep your ownnxCloudIdwhen you resolve thenx.jsonmerge and removeNX_NO_CLOUDfrom yourci.yml. - #539 - When you resolve the merge, keep
nx.jsondefaultBasepointing at your own primary branch (upstream's is now"develop"), and point the newpush: branches: [develop]trigger in.github/workflows/ci.ymlat your primary branch or remove it. Keep merging fromupstream/mainonly;developis upstream's integration branch. - #501 - Move direct
process.envreads out of your app's code.npm run lintnow allows them, in every app underapps/, only insrc/api/config/env-utils.ts,env-utils.spec.ts,runtime.ts,runtime.spec.ts,src/test-setup.ts,src/api/integration/setup/global-setup.ts,src/api/integration/setup/env-helpers.tsandsrc/db/seed.ts. Copy the reference app's versions ofsrc/api/config/runtime.ts,runtime.spec.ts,env-utils.spec.tsanddb.env.spec.ts, ofenv-helpers.ts,auth-helpers.ts,db-helpers.tsandglobal-setup.tsinsrc/api/integration/setup/, ofsrc/api/integration/auth/login.integration.spec.tsand ofsrc/db/seed.tsinto your app. Route any other read through the typed<domain>Envproxy (seed<Domain>Envin tests), or add a justified explicit entry to the allowlist ineslint.config.mjs. - #499 - Rewrite every issue or pull request number (
#<n>, any length) in the//and/* … */comments of.tsand generator.ts.templatefiles underapps/andpackages/as a present-state explanation, or move a durable cross-reference toCHANGELOG.mdordocs/.scripts/check-no-issue-refs-in-comments.mjsnow fails the pre-commit hook,npm run ciandnpm run ci:verify; runnode scripts/check-no-issue-refs-in-comments.mjsto list the offending lines. - #499, #527 - Expect the new
checkjob in.github/workflows/ci.ymlto fail your first remote CI run if your tree contains a.env*file, an issue number in a code comment, or a file that is not Prettier-formatted; remote CI did not run these guards before. Runnpm run formatand the twoscripts/check-*.mjsguards before pushing the merge. - #514 - If you deploy on Railway, edit the new root
railway.jsonbefore your next deploy: Railway config-as-code overrides your service's settings, and the file builds and starts the reference app (buildCommand: npm run build,startCommand: node dist/reference-app/server/server.mjs,healthcheckPath: /api/health/v1). Make it build your app, startdist/<your-app>/server/server.mjsand check a health path your app serves, or delete the file.
If your fork changed or reuses any of the following:
- #523 - Component stylesheets: you may delete
@reference "#tailwind-theme"from your components. The new root PostCSS pluginpostcss-inject-tailwind-reference.js, registered first in.postcssrc.json, adds it at build time to every stylesheet that uses@applyand declares no@referenceof its own, and theui-componentgenerator no longer emits it. If you@importa stylesheet of your own intotailwind.config.cssand it uses@applywithout its own@reference "tailwindcss", add its path suffix tothemeEntrySuffixesinpostcss-inject-tailwind-reference.js; a missed file shows up as a Tailwind circular-reference build error. - #523 - Your global stylesheet: if the stylesheet that
@importstailwind.config.css(for exampleapps/<your-app>/src/styles.css) also uses@apply, move those rules into a separate stylesheet or write them as plain CSS. The plugin injects@reference "#tailwind-theme"into any stylesheet that uses@apply, and in the one that imports the theme that drops the--font-sansand--font-monotokens, so text falls back to Tailwind's default fonts. - #513, #520 - The health page or the dashboard shell: apply the dark-mode fixes to your copies. In
pages/dashboard/pages/health/health.ts, changeborder-1 border-gray-200toborder border-borderandbg-gray-100tobg-muted. Indashboard.ts, change the<header appHeader>classesborder-b-1 border-gray-200 dark:border-white/10 dark:bg-black/95toborder-b border-border bg-background. In theHeadercomponent's host classes, changedark:text-gray-50totext-foreground. - #527 - The
ci/ci:verifyscripts in the rootpackage.json: move any guard you added there into thecommandsarray of the new rootchecktarget (nx.targets.check) instead of an&&chain, then take upstream'sci/ci:verify, which start withnx run-many -t check stylelint lint typecheck.
Behaviour that changes with no action needed:
- #539 - Upstream now integrates on
developand releases tomainonly through an automated release pull request, so each advance ofupstream/mainis one tagged, documented release. Theprepare-release-pr.ymlandrelease.ymlworkflows run only in the upstream repository. Upstream also relies onmainbranch protection and on Railway deploying the explicitmainbranch; forks do not inherit these settings, so create them if you want the same guarantee. - #504, #539 - The new issue templates apply labels your repository may not have:
🦟 bug,🏎️ enhancement,📝 documentation,🛠️ tooling,🎨 ui-ux,💼 management,✍️ draft,📦 epic,🧩 initiativeand🚀 release. GitHub skips a missing label, so create these labels, or change the templates'labels:arrays, only if you want them applied. - #504 - Claude Code no longer adds co-author or attribution trailers to commits and pull requests: the shared
.claude/settings.jsonsetsincludeCoAuthoredBy: falseandgitAttribution: false. Override them in your.claude/settings.local.jsonif you want attribution.
Full changes
See every merged pull request in v1.0.2.
Changes
Fork and release workflow
- #540 - Adds
npm run upstream:pullto merge upstream updates into a private mirror. - #539 - Adopts the
develop/mainbranch model with an automated release pipeline. - #504 - Adds structured GitHub issue forms and refreshes the pull request template.
Toolchain and CI
- #537 - Upgrades Node.js to the 24 LTS line and
@types/nodeto 24.x. - #542 - Removes Nx Cloud, so tasks use the local Nx cache only.
- #527 - Runs the repository-wide guards as one Nx
checktarget, locally and in remote CI. - #499 - Forbids issue and pull request numbers in code comments and enforces it with a guard.
- #501 - Limits direct
process.envaccess to eight named files and routes the integration tests through the environment schemas.
Styling
- #489 - Moves fixed host styles from
:host { @apply … }tohost: { class }. - #523 - Adds
@reference "#tailwind-theme"at build time instead of in each component stylesheet. - #520 - Replaces the dashboard header's hardcoded grays with semantic theme tokens.
- #513 - Makes the health page panels render correctly in dark mode.
Deployment
- #514 - Adds a
railway.jsonwith the build command, start command and health check. - #547 - Serves the Storybook build from a second Railway service.
- #545 - Removes Vercel-specific wording and dead scaffolding from code and documentation.
- #511 - Resolves the startup database health-check failure through deployment configuration.
What's Changed
Merged PRs
- #514 - Add railway.json deploy config (build/start/healthcheck as code) by @rolivencia in #515
- #513 - The application health view does not render correctly in dark mode by @rolivencia in #522
- #489 - Migrate :host @apply to host property and research project-wide @reference elimination by @rolivencia in #521
- #520 - Tokenize the dashboard header chrome — replace hardcoded grays with semantic theme tokens by @rolivencia in #524
- #501 - Tighten no-process-env allowlist to least-privilege; route integration tests through env schemas by @rolivencia in #525
- #523 - Eliminate @reference project-wide via build-time auto-injection by @rolivencia in #528
- #499 - Comment-quality policy: no issue-number or before/after references in code comments (+ sweep) by @rolivencia in #526
- [#529] - Fall back to local Nx cache when Nx Cloud credits are exhausted by @rolivencia in #530
- #504 - Add structured GitHub issue/PR templates, adapted from cuentoneta/cuentoneta by @rolivencia in #531
- #527 - Model repo-wide CI guard scripts as Nx targets (stop chaining && in ci/ci:verify) by @rolivencia in #532
- #537 - Upgrade Node.js to v24 LTS (runtime + @types/node 24.x) by @rolivencia in #538
- #540 - Private-mirror workflow: upstream:pull in-repo, fork-init as a standalone npx tool by @rolivencia in #541
- #542 - Remove Nx Cloud entirely — from the base repo and from fork:init mirrors by @rolivencia in #543
- #539 - Adopt main/develop branching and automate the release process by @rolivencia in #544
- #545 - Remove all Vercel coupling from the repo (integration, comments, docs) by @rolivencia in #546
- #547 - Deploy Storybook to Railway and restore the live-demo link by @rolivencia in #548
- [#533] - Release v1.0.2 by @rolivencia in #549
- Release v1.0.2 by @github-actions[bot] in #550
New Contributors
- @github-actions[bot] made their first contribution in #550
Full Changelog: v1.0.1...v1.0.2