Communitygithub.com

Nuvraxis/nuvraxis-plugins

>- Biome 2.5 setup and rules for Nuvraxis monorepos — root biome.json with pinned $schema, VCS ignore, formatter settings, the recommended preset with a11y and the react/next domains, nursery policy, organize imports, overrides, nested per-package configs ("extends": "//"), biome check --write locally, biome ci in CI, VS Code settings, and migrating from ESLint/Prettier. Use when the repo has biome.json or biome.jsonc, @biomejs/biome in package.json, .eslintrc*/eslint.config.*/.prettierrc* to migrate, or when fixing lint and formatting errors.

What is nuvraxis-plugins?

nuvraxis-plugins is a Claude Code agent skill that >- Biome 2.5 setup and rules for Nuvraxis monorepos — root biome.json with pinned $schema, VCS ignore, formatter settings, the recommended preset with a11y and the react/next domains, nursery policy, organize imports, overrides, nested per-package configs ("extends": "//"), biome check --write locally, biome ci in CI, VS Code settings, and migrating from ESLint/Prettier. Use when the repo has biome.json or biome.jsonc, @biomejs/biome in package.json, .eslintrc*/eslint.config.*/.prettierrc* to migrate, or when fixing lint and formatting errors.

Works with✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Nuvraxis/nuvraxis-plugins/tree/HEAD/plugins/nuvraxis-frontend/skills/biome

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

Biome

Biome is the only formatter and linter for JS, TS, JSX, JSON and CSS. SCSS is the exception: Biome 2.5 doesn't parse it, so stylelint handles .scss (see scss-bem). No ESLint, no Prettier.

The template's root biome.json is the source of truth. A plugin hook runs pnpm exec biome check --write <file> after every file Claude edits, when a biome.json exists above it.

Rules

  1. One root biome.json, schema pinned to the installed version. "$schema": "https://biomejs.dev/schemas/2.5.15/schema.json", and @biomejs/biome pinned to the same version in the workspace catalog. A mismatched schema hides unknown or renamed options in the editor. When upgrading, run pnpm exec biome migrate --write and update both.

  2. Let git decide what's ignored: vcs.useIgnoreFile: true. Then force-ignore build output with !! in files.includes (!!**/.next, !!**/.turbo, !!**/dist, !!**/coverage), which also stops Biome from scanning those folders. A single ! excludes from processing but still indexes. files.ignoreUnknown: true keeps .scss and other unsupported files from being reported.

  3. Formatter: 2 spaces, width 100, LF, double quotes, semicolons, trailing commas. These are fixed for every repo so diffs don't fight over style. Don't add per-package formatter overrides.

  4. Linter: preset: "recommended", a11y: "error", domains react and next at recommended. rules.recommended: true is the old spelling and is deprecated: use rules.preset. a11y at error because nuvui handles its own components' accessibility, so what's left (alt, labels, button types in your own markup) must be right. The next domain adds rules like noImgElement; react adds hooks rules.

  5. Nursery stays off. Nursery rules change between patch releases and can break CI on a Biome upgrade. Enable one deliberately, by name, with a comment saying why, and re-check on every upgrade.

  6. noConsole warns, allowing error and warn. Structured error logs (instrumentation.ts) use console.error; stray console.log is caught.

  7. Sort imports with the assist, not by hand. assist.actions.source.organizeImports: "on". biome check --write applies it; biome ci fails on unsorted imports.

  8. Overrides by glob, for test files and the like. The template enables the test domain only for *.test.ts(x) / *.test-d.ts. Put other file-type differences there too, not in separate configs.

  9. Nested configs only for packages that truly differ, and they extend the root.

    // packages/legacy-widget/biome.json
    { "extends": "//", "linter": { "rules": { "style": { "noNonNullAssertion": "off" } } } }
    

    "extends": "//" means "the root config" and implies "root": false. Any other nested config must set "root": false. We don't use a shared @repo/biome-config package: the root file plus // covers it without a build or a dependency.

  10. Locally biome check --write; in CI biome ci. pnpm lint runs biome check . (no writes); pnpm lint:fix runs biome check --write .. CI runs pnpm exec biome ci --reporter=github ., which never writes, fails on formatting, lint and import order, and annotates the PR. Add --changed --since=origin/main only if the full run gets slow; it's milliseconds today.

  11. Suppress one line, with a reason.

    // biome-ignore lint/suspicious/noExplicitAny: third-party callback typed as any upstream
    

    Never disable a rule repo-wide to make one file pass. If a rule is wrong for the repo, change biome.json in its own commit with the reason.

  12. Fix, don't silence, the common ones.

    • useImportType: run the fix; it's required by verbatimModuleSyntax.
    • noExplicitAny: use unknown and parse (see typescript-production).
    • useButtonType, noSvgWithoutTitle, useAltText: real accessibility bugs.
    • noImgElement: use next/image.
    • useExhaustiveDependencies: fix the dependency list or move the value out of the component.
  13. VS Code: Biome is the default formatter, fixes on save. The template's .vscode/settings.json sets editor.defaultFormatter: "biomejs.biome", source.fixAll.biome and source.organizeImports.biome on save, and biome.requireConfiguration: true so the extension stays quiet in repos without Biome. SCSS keeps the stylelint extension. Recommend both in .vscode/extensions.json.

  14. Migrating from ESLint/Prettier: migrate, then delete. See references/migration.md. End state: no eslint*, prettier* or @typescript-eslint/* packages, no .eslintrc*, eslint.config.*, .prettierrc*, .prettierignore.

What Biome doesn't cover

FileTool
.scssstylelint (scss-bem)
.yaml (workflows, Helm)actionlint for workflows; helm lint + kubeconform for charts
.mdnothing enforced
Type errorstsc --noEmit (pnpm typecheck)

Verify

pnpm lint                               # biome check . && stylelint
pnpm exec biome ci --reporter=github .  # what CI runs
pnpm exec biome rage                    # prints the resolved config if something looks ignored

Sources

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

Nuvraxis/nuvraxis-plugins

>- Dockerfile rules for Next.js standalone apps in a pnpm + Turborepo monorepo — multi-stage build (turbo prune → pnpm fetch/offline install → turbo build → minimal runner), pinned Node 26 Alpine by digest, checksum-verified pnpm binary, non-root uid 1001, read-only root filesystem with a writable .next/cache, HEALTHCHECK on /api/health, build args only for NEXT_PUBLIC_* values, BuildKit secrets and cache mounts, multi-arch, OCI labels and .dockerignore. Use when the repo has a Dockerfile, .dockerignore, compose file, or next.config with output "standalone", or when asked to containerise, shrink, harden or debug an image.

Nuvraxis/nuvraxis-plugins

>- GitHub Actions conventions for Nuvraxis Next.js apps — exactly three workflows: pr.yaml (every PR to any branch: Biome, stylelint, typecheck/test/build with turbo --affected, Docker build + health check, helm lint + kubeconform; publishes nothing), main.yaml (push to main: one multi-arch image to GHCR tagged sha-SHORTSHA and main, provenance + SBOM, gha cache), release.yaml (tag vX.Y.Z: verify on main, retag the existing image without rebuilding, package and push the Helm chart to OCI, GitHub Release with chart, digest and SBOM). Minimal permissions per job, GITHUB_TOKEN only, pinned action majors. Use when editing .github/workflows/*, adding a CI step, or debugging a failed run or release.

Nuvraxis/nuvraxis-plugins

>- Helm chart rules for Nuvraxis Next.js apps — one chart per app in charts/ (named after the app), published to oci://ghcr.io/nuvraxis/charts and synced by Argo CD; Chart.yaml version/appVersion set only by release.yaml; Deployment with startup/liveness/readiness probes on /api/health, non-root read-only security context, emptyDir for .next/cache, ConfigMap + existing Secret via envFrom, Service, Ingress with cert-manager, HPA, PDB, ServiceAccount, topology spread; no Helm hooks; helm lint --strict + kubeconform. Use when the repo has charts/, Chart.yaml, values*.yaml, templates/*.yaml with Helm syntax, or an Argo CD Application, or when asked to deploy, scale, expose or configure the app on Kubernetes.

Nuvraxis/nuvraxis-plugins

>- Production rules for Next.js 16 App Router apps at Nuvraxis — Server/Client Component boundaries, Cache Components ("use cache", cacheLife, cacheTag, updateTag), Server Actions, route handlers, env handling, instrumentation, output standalone and the /api/health route. Use when the project has "next" in package.json, an app/ or src/app/ directory, next.config.ts, proxy.ts, instrumentation.ts, or files named page.tsx, layout.tsx, route.ts, loading.tsx, error.tsx.

Related Skills