The SvelteKit app lives in web/, as knotless's does
MergedThis moves the SvelteKit app from app/ and static/ to web/src and web/static. It repoints svelte.config.js (kit.files.src and kit.files.assets), hatk.config.ts (publicDir), tsconfig.json, and the imports, docs and scripts that named the old paths. I searched the head branch for leftover app/ and static references. The only ones left are in docs/plans/, which you left on purpose, and unrelated hits such as the /app/node_modules mount in docker-compose.yml and an Apple store URL. The config changes look consistent with each other. I did not run the build, and the checks were not read. As you note, the Docker build, hatk's /robots.txt serving, and the Playwright tests are not covered by CI, so confirm /robots.txt, /favicon.png and /manifest.json on the first deploy.
- The SvelteKit app lives in web/, as knotless's does
- main
What changes
The SvelteKit app is under
web/.app/is nowweb/src(web/src/routes,web/src/lib,web/src/app.html,web/src/app.css,web/src/error.html,web/src/service-worker.js) andstatic/isweb/static, moved withgit mvso history follows. Nothing inside them changes but one import path.What points at them:
svelte.config.js:kit.files.srcisweb/srcandkit.files.assetsisweb/static. Routes, lib ($lib), the templates, hooks, params and the service worker all default fromsrcin this SvelteKit (2.55), so those two are enough.assetsdoes not default fromsrc, hence the second line.hatk.config.ts:publicDiris./web/static, where hatk serves/robots.txtfrom ahead of SvelteKit in production.tsconfig.json:includenamesweb/srcinstead ofapp.web/src/lib/utils/formatLocation.tsre-exports fromserver/, which is one level further away now.server/helpers/cameraName.ts, andtest/{resolveRouteActor,storyViews,tid}.test.ts, import fromweb/src/lib(and a comment intest/galleryDetail.test.tsnames that path).marketing/capture-og.mjswritesog-default.jpgintoweb/static.AGENTS.mdandREADME.mdsayweb/. Thepublic/row in AGENTS.md goes: there was no such directory, and the static files it described areweb/static.vitest.coverage.config.ts: a comment namesweb/src/lib.Nothing else names these paths. The
$hatkaliases,vite.config.ts,playwright.config.ts, theDockerfile(COPY . .),.dockerignore, the justfile, the workflows,seeds/anddeploy/had no reference to either directory. Thedocs/plans/documents still sayapp/, because they are records of what was planned at the time.Why
grain is being laid out like knotless, whose SvelteKit app is
web/, ahead of the move off hatk.package.json,hatk.config.ts,node_modulesandserver/stay at the root for now, since hatk runs the dev server and the build from there.web/gets its ownpackage.jsononce hatk is gone.How it was checked
npx svelte-kit syncagainst the new config generates.svelte-kit/tsconfig.jsonwith$libat../web/src/liband the route types undertypes/web/src/routes. A script resolved every relative import inweb/,server/,test/,seeds/,marketing/anddeploy/and found none broken,./$typesaside.vp fmt --checkpasses.check(vp check, svelte-check) andtest(vitest) are left to CI.I read hatk's
distfor hard-coded paths.publicDirresolves against the config's directory.hatk buildandhatk checklook forsrc/app.html, which never existed here, and grain does not run those commands:npm run buildisvp buildandnpm run checkisvp check && svelte-check.Shortcomings
Not run: the Docker build, the production server's static serving (robots.txt through hatk, everything else through the adapter-node build),
npm run dev, and the Playwright tests. CI covers none of them. The first deploy from main should confirm that/robots.txt,/favicon.pngand/manifest.jsonstill answer.Review
A quick look.
svelte.config.jsandhatk.config.tsare the parts that matter. The rest is renames.🤖 Generated with Claude Code