# Exercise Builder — hosted copy The drag-and-drop workspace for building BI122G exercise sheets, served by the Workshop at: /projects/exercise-builder landing page /projects/exercise-builder/app the builder itself Open to everyone; no sign-in. ## What is here app/ the builder — plain HTML, CSS, and ES modules. No build step. `app/` is the whole application. It runs entirely in the browser: work in progress lives in the visitor's `localStorage`, and finished sheets and project files leave as downloads. **Nothing is written on the server**, and there is no endpoint that could write anything. That is what makes it safe to host without a login. Note this differs from the local development setup in the course folder, where `edit_server.py` accepts `POST /__save` and writes sheets straight to disk. That server is not deployed here, and must not be — reachable without a login it would be a write primitive for anyone who could load the page. ## How it is served `workshop/src/routes/projects/exercise-builder/app/[...file]/+server.ts` reads this directory at request time. Consequences worth knowing: - **Updating the builder does not need a site rebuild.** Sync new files here and a reload picks them up (responses are `no-cache` with an mtime-based ETag). A rebuild is only needed when the landing page or the route itself changes. - Only recognised asset extensions are reachable, and paths are contained to this directory — so nothing outside `app/` can be requested. - `.js` is served as `text/javascript`, without which browsers refuse ES modules outright. - The route injects `` into the served HTML, so the builder's relative URLs resolve whether or not the visitor typed a trailing slash. Override the location with `EXERCISE_BUILDER_ROOT` in the workshop `.env` if it ever moves. ## Updating Edit the files here. There is no build step and no sync — a reload picks the change up, for the reasons above. ## Source of truth **This directory.** The builder was developed in the BI122G course folder on the workstation (`/Muspelheim/Employment/HiS/Teaching/BI122G`) and pushed here by `deploy_builder.sh`. That arrangement has ended and this installation is now canonical: **do not run `deploy_builder.sh` again**, as it would overwrite this directory with the older course-folder copy. The course folder still holds `test.mjs`, a Node test harness that was never deployed here — it needs `linkedom` and is no use in a browser.