Files
such.software/package.json
T
jwinterm abc968fe6f feat(web): a gate for the repository, starting with the tags in the built HTML
The site had no CI of any kind: no .github, no .gitea, no workflow. The only
automation touching production is the redeploy timer, and it runs no checks. So
`pnpm run check` now exists as the single command, lint then build then the
metadata assertions, and it is the thing a CI lane will eventually call.

The first assertion reads the emitted HTML, because that is the only place the
defect it catches is visible. Next composes metadata at build time and merges it
shallowly, so a page declaring its own `openGraph` silently replaces the parent's
image. No diff, no type error and no lint rule shows that; only the output does.
Reintroducing the bug on /support was confirmed to fail this check, and the
refusal names the route, the missing tag, and what breaks without it.

It refuses rather than passing vacuously when there is no build output, or when
the output holds no HTML. A metadata checker that reports success over zero pages
is worse than none, because it is quoted.

Four tags per page, each with its reason: og:image, twitter:image, canonical,
description. 51 of 51 today.
2026-09-05 23:42:40 -04:00

44 lines
1.0 KiB
JSON

{
"name": "such-software-monorepo",
"private": true,
"scripts": {
"build": "turbo run build",
"dev": "turbo run dev",
"start": "turbo run start",
"lint": "turbo run lint",
"clean": "turbo run clean && rm -rf node_modules",
"format": "prettier --write \"**/*.{ts,tsx,md}\"",
"check": "turbo run check"
},
"devDependencies": {
"eslint": "^9.0.0",
"prettier": "^3.2.0",
"turbo": "^2.9.16",
"typescript": "^5.4.0"
},
"packageManager": "pnpm@9.0.0",
"engines": {
"node": ">=20.0.0"
},
"dependencies": {
"@types/react": "^19.2.14"
},
"pnpm": {
"overrides": {
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"yaml": "^2.8.3",
"flatted": "^3.4.2",
"minimatch": "^9.0.7",
"picomatch": "^4.0.4",
"ajv": "^8.17.1",
"eslint>ajv": "^6.12.6",
"@eslint/eslintrc>ajv": "^6.12.6",
"@eslint/eslintrc>minimatch": "^3.1.2",
"brace-expansion": "^2.0.3",
"postcss": "^8.5.14",
"fast-uri": "^3.1.2"
}
}
}