Repository navigation
Conversation
backend/ -> apps/server/, frontend/ -> apps/web/, shared/ -> packages/shared/src/, dev/setup.sh -> scripts/dev/setup.sh, start.sh -> scripts/start.sh. Nothing but the renames, so the history follows them; the paths are fixed in the next commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y3rdfbWb1xDUdPRng7TX9Z
The paths the moves changed, and the workspace around them: - Root package.json with workspaces (apps/*, packages/*, e2e) and packageManager, one bun.lock instead of three (every resolved version as before), bunfig.toml with the isolated linker, so apps/web/node_modules/@inlang/... is still where project.inlang/settings.json loads its plugin from, and tsconfig.base.json with the options all three tsconfigs share (tsc --showConfig: the same options). - packages/shared is the workspace package @snapraid-ui/shared. The 192 imports in 152 files keep their @shared/ specifier; the tsconfig paths now point at the linked package in node_modules instead of ../shared. - The backend's default data directory stays snapraid/ in the repository's root (../../snapraid from apps/server); the server finds the built frontend, its package.json and docs/ at apps/web/... from the root, in the binary too. - scripts/start.sh and scripts/dev/setup.sh, with bun run dev and bun run demo in the root; the old install.sh (bun install in two folders) is replaced by bun install in the root. The installer's URL (the release asset from scripts/install.sh) does not change. - Dockerfile, .dockerignore, .gitignore, CI, release, bump, screenshots, upstream-release and Renovate, the e2e harness, build-binary.sh, docs, README. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y3rdfbWb1xDUdPRng7TX9Z
TDD review (41b2e8a): 1 finding with a failing test, no other regressions foundFinding: after a "Bump version" run,
|
|
TDD-Review abgeschlossen.
Merge per Squash. Generated by Claude Code |
Brings the folder layout in line with haben and namarr: one Bun workspace with
apps/*andpackages/*. Nothing the app does changes.Two commits so the renames are easy to follow:
backend/→apps/server/,frontend/→apps/web/,shared/*.ts→packages/shared/src/,dev/setup.sh→scripts/dev/setup.sh,start.sh→scripts/start.sh.Layout
Decisions
@shared/stays as the import specifier. Importing@snapraid-ui/shared/…by name would touch 192 imports in 152 files. Instead@snapraid-ui/sharedis a real workspace package (workspace:*dependency of server and web,exports: {"./*": "./src/*"}). The@shared/*path in both tsconfigs now points at the linked package,./node_modules/@snapraid-ui/shared/src/*, not at../shared/*. Bun (runtime and--compile), Vite and Vitest resolve it through the workspace link.linker = "isolated",apps/web/node_modules/@inlang/plugin-message-formatis a link of the web package itself, soproject.inlang/settings.json(./node_modules/@inlang/...) loads it unchanged.paraglide-js compileran on a cleansrc/paraglideand produced every message module.bun.lockby merging the three old lockfiles, not by resolving again. The one conflict waslru-cache(mqttneeds 10.4.3, the frontend has 11.5.3); it is nested asmqtt/lru-cache. After that Bun rewrote the file in its own format. Checks: the set ofname@versionin the new lock is identical to the union of the three old ones (936 entries, empty diff), and all 58 direct dependencies of the three packages are installed at the version their old lock had.bun install --frozen-lockfilepasses. The Docker backend's--production --filter ./apps/serverinstall gives the same 158 packages as before.packageManageronly in the root.bun-version-file: package.jsonin every job, and the Renovate regex now targets^package\.json$.apps/web/package.json. The bump, release,version.tsandrelease.shall read it there, so the release flow is unchanged.install.shis deleted. It only ranbun installin frontend/ and backend/, andbun installin the root does that now. Nothing linked to it: the public installer is the release assetreleases/latest/download/install.sh, whichrelease.ymlcopies fromscripts/install.sh. That file and its URL are unchanged.start.shanddev/moved toscripts/.bun run devandbun run demoin the root callscripts/start.sh. README, docs, Renovate notes and the e2e demo harness are updated.SNAPRAID_BASE_PATH, the backend run from the repository still usessnapraid/in the repository's root.config.tsnow goes../../snapraidfromapps/serverinstead of../snapraidfrombackend. The image (env var) and the binary (its own default) are unaffected./app/apps/server(WORKDIR),/app/apps/web/.output,/app/packages/shared,/app/node_modules(the isolated store),/app/docs. In the binary the assets sit at/$bunfs/root/apps/web/…and/$bunfs/root/docs/….app-files.tsstill resolves everything from the repository's root (../../../fromapps/server/src). The data volume/app/snapraidand the env vars are unchanged.docs/screenshot*.pnganddocs/social-preview.pngare referenced from the README, which is also the Docker Hub description, and are likely linked from outside. They stay put.config.example.jsonstays in the root.How no behaviour change was checked (locally, Bun 1.4.4)
bun testtscbiome check, typecheck (with paraglide), build--list/ screenshots--listtsc --showConfig(server, web, e2e)@shared/*target differs.output/publicmkdocs build --strict--versionprints 1.3.3 from the embeddedapps/web/package.json. It serves the UI (200),/api/health, and the MCP endpoint lists all 14 doc pages.bun run demo: builds the sandbox underscripts/dev/, seeds it, starts backend and Vite. Health, config and status answer, and Vite serves the page.readme.spec.tspassed (scripts/dev sandbox, social preview withapps/web/public/favicon.svg). The pictures were not committed.--production --filter ./apps/serverinstall, thenbun src/main.tsinapps/serverwith the image's layout serves UI and API;--filter ./apps/webinstall plus build gives a byte-identical client.tsconfig.base.jsonin the build context, now copied in.Not verified here
node_modules/.bun/...). Package versions and sources are the same. SSR is covered by the e2e runs.docker buildand no e2e image target: no Docker daemon and too little disk here. CI's image job is the real check.shellcheck, the systemd install job,bun --bun playwright install --with-deps, and the screenshots workflow in the Playwright image (itslockfile: bun.lockinput relies on the action's grep for@playwright/test@x.y.z, which matches the root lock).bun.lockafter a bump: the rootbun.lockrecords the web workspace's version (1.3.3). After a bump,bun install --frozen-lockfilestill passes (tested with 1.3.4), but the next plainbun installwill rewrite that one line.dev/sandboxes: an existingdev/(bin, sandbox) in someone's clone is no longer ignored by git. Movedev/bintoscripts/dev/bin, or runscripts/dev/setup.sh --reset.Generated by Claude Code