The public website for WrightKit, a development toolchain for the Overwatch Workshop. It is a static, prerender-first SvelteKit site.
Positioning follows the WrightKit goal
(wrightkit/.github docs/goal.md):
Wright is the product, tooling (diagnostics, analysis, editor/CI integration,
agent access) leads, and compilation is presented as serving those workflows.
Compatibility means structural convergence with the upstream compiler, compared
as canonical Workshop programs, never text similarity.
Public capability claims must be grounded in the repository that owns the implementation:
workshop-rsfor raw Workshop semantics, catalog/settings/localization, parsing, validation, and emission;opy-rsfor OverPy syntax/semantics/compiler/reconstruction support;deltin-rsfor DeltinScript/OSTW syntax/semantics/compiler/reconstruction support;wrightfor the unified tooling product: CLI commands, lint, analysis, language server, CI output, and agent-facing APIs;language-provider-protocolfor LPP protocol contracts.
Do not treat an issue state, an unreleased branch, or a hidden command as proof that a capability ships. Planned features go in the agents section's "Coming soon" line, never in current-capability copy. Keep internal terms such as WIR, HIR, frontend, and provider out of primary homepage messaging. Say what a feature does for a Workshop developer; implementation background belongs in the owning repository's docs, not on the homepage.
Locale-independent data (URLs, commands, repository names, support status,
the hero terminal, and the "What it catches" examples) lives in
src/lib/site.ts. The terminal and every example show real wright output:
each example has a Workshop snippet per locale, written in that game client's
syntax, and must be re-run through wright lint when edited or when the CLI
output changes.
English is the default at /; Simplified Chinese is at /zh-CN. There is no
browser-language redirect; readers switch from the header language menu.
- Copy lives in
src/lib/content/<locale>.ts, typed bysrc/lib/content/types.ts. Records keyed by the ids insite.tsand fixed-length lists keep every locale making the same claims; change a claim in all locales in the same PR. - Commands, repository names, protocol names, and CLI output stay literal.
- Write each locale for its readers, not word for word. Keep it short and plain: the audience is Workshop, OverPy, and OSTW developers, not compiler engineers. Chinese follows the zh-CN game client's Workshop terms (地图工坊, 规则, 动作, 值, 服务器负载) and puts a space between CJK text and Latin words.
- Long Chinese headings may use
\u200bto mark where they are allowed to wrap; headings otherwise break only at spaces and punctuation. - To add a locale: add it to
src/lib/locales.ts, add a content file, add the path toprerender.entriesinsvelte.config.js, add its share-image file insrc/lib/seo.ts, regenerate the PNGs withswift scripts/share-cards/render.swifton macOS, and extendscripts/verify-build.mjs. The sitemap is generated from the locale list.
Search and share metadata is prerendered from each locale's meta block.
Title and description match the visible hero. The share card is a PNG because
WeChat, QQ, and X do not unfurl SVG. Open Graph covers WeChat, Weibo, DingTalk,
Feishu, Zhihu, Discord, Slack, and Telegram. X also gets Twitter Card tags.
QQ and Qzone get itemprop name, description, and image. There is no review
or price structured data: the site publishes neither, and invented ratings are
spam. Submitting the sitemap in Google Search Console and 百度搜索资源平台 is a
manual step after deploy.
- SvelteKit with
@sveltejs/adapter-static - Svelte 5
- TypeScript
- Tailwind CSS v4
The site is fully prerendered to static HTML; there is no server runtime or client-side data service.
Requires Node.js 20.19+ and pnpm.
pnpm install
pnpm dev
pnpm checkpnpm build
pnpm preview