No description
  • TypeScript 48.7%
  • Svelte 30.4%
  • Shell 5.9%
  • CSS 5.7%
  • Nix 3.8%
  • Other 5.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Ivan d2d325809d
Some checks are pending
Pages / pages (push) Has started running
feat(pages): rebuild the crafts shell on SvelteKit and Vite+
The single index.html becomes a SvelteKit site with the tooling of
hu-tao-dev: Svelte 5, Tailwind 4, a Nix dev shell, and Vite+ in place of
ESLint and Prettier. Each app now has a prerendered page of its own at
/<name>/, with its title, version and licence links in the HTML, and the
apps themselves move to /apps/<name>/. Old /#<name> links still land on
the right app.

The shell keeps what it gained since the last push: the Photoshop grey
and blue palette, the version badge as a button, and popovers that pour
out of their button (src/lib/funnel.ts), built from whole-pixel slices
so Firefox draws no seams between them.

The version pins move from the workflow into sites.json, which the page,
scripts/fetch-apps.sh and Renovate all read. The workflow installs with
pnpm, fetches the apps with that same script and builds.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 13:11:17 +03:00
.forgejo/workflows feat(pages): rebuild the crafts shell on SvelteKit and Vite+ 2026-10-16 13:11:17 +03:00
scripts feat(pages): rebuild the crafts shell on SvelteKit and Vite+ 2026-10-16 13:11:17 +03:00
src feat(pages): rebuild the crafts shell on SvelteKit and Vite+ 2026-10-16 13:11:17 +03:00
.gitignore feat(pages): rebuild the crafts shell on SvelteKit and Vite+ 2026-10-16 13:11:17 +03:00
flake.lock feat(pages): rebuild the crafts shell on SvelteKit and Vite+ 2026-10-16 13:11:17 +03:00
flake.nix feat(pages): rebuild the crafts shell on SvelteKit and Vite+ 2026-10-16 13:11:17 +03:00
package.json feat(pages): rebuild the crafts shell on SvelteKit and Vite+ 2026-10-16 13:11:17 +03:00
pnpm-lock.yaml feat(pages): rebuild the crafts shell on SvelteKit and Vite+ 2026-10-16 13:11:17 +03:00
pnpm-workspace.yaml feat(pages): rebuild the crafts shell on SvelteKit and Vite+ 2026-10-16 13:11:17 +03:00
README.md feat(pages): rebuild the crafts shell on SvelteKit and Vite+ 2026-10-16 13:11:17 +03:00
renovate.json feat(pages): rebuild the crafts shell on SvelteKit and Vite+ 2026-10-16 13:11:17 +03:00
sites.json feat(pages): rebuild the crafts shell on SvelteKit and Vite+ 2026-10-16 13:11:17 +03:00
svelte.config.js feat(pages): rebuild the crafts shell on SvelteKit and Vite+ 2026-10-16 13:11:17 +03:00
tsconfig.json feat(pages): rebuild the crafts shell on SvelteKit and Vite+ 2026-10-16 13:11:17 +03:00
vite.config.ts feat(pages): rebuild the crafts shell on SvelteKit and Vite+ 2026-10-16 13:11:17 +03:00

pages

crafts.hu-tao.dev: the browser builds of the storytold apps mirrored in this org (photocraft, cadcraft, effectcraft, filmcraft, figcraft, gridcraft, deckcraft and wordcraft) under one bar with an app switcher. An unofficial host, not affiliated with ArtCraft.

A SvelteKit site, prerendered to static files. Each app gets a page at /<name>/ that frames upstream's own build from /apps/<name>/. The apps are not built here: pnpm fetch-apps downloads each one's <name>-web-<version>.zip release, checks it against that release's SHA256SUMS.txt and unpacks it into static/apps/<name>/.

The versions are pinned in sites.json. Renovate opens a pull request for each new upstream release; merging one republishes the site.

Working on it

nix develop        # node, pnpm, curl and unzip
pnpm install
pnpm fetch-apps    # once, and after a version bump
pnpm dev

pnpm check runs the type check and Vite+'s lint and format check; pnpm format formats. Oxfmt does not format .svelte files.

Publishing

.forgejo/workflows/pages.yml runs on every push to main: install, fetch the apps, build, and upload build/ as the pages artifact, which the VPS pulls and serves. See the handbook's Pages chapter in hutao/vps.

This is the only repo in the org with Actions on. The mirrors carry upstream's .github/workflows, which Forgejo would otherwise run on every mirrored push.