c7f85870db42e7ffe523989e504419707dcf37c7
The console could watch and control printers but not give them work. The Jobs page uploads a .3mf/.gcode: it creates the job (POST /jobs), PUTs the file straight to the presigned storage URL with a progress bar, and lists the farm's jobs, polling every 5s since there is no job push channel yet. The scheduler then starts it on the next idle printer, so there is no Start button - a queued job IS the request. Deliberate details: the PUT carries no Authorization header (the URL is presigned and an uncovered header makes storage reject it) and the same Content-Type the URL was signed for; a failed upload deletes the job row it just created, so no queued job waits for a file that never arrives; only queued/uploading jobs offer Delete, matching what the backend allows. JobUpload and JobList live in @continuum/ui and take the API calls as props, like the printer card. A shared apiErrorMessage() replaces the inline copy on the fleet page. Checked in real Chrome against the live stack with job dispatch OFF: upload to the real bucket (57 bytes landed intact), listed as queued, still queued after a scheduler tick, Delete clears it, no page errors; the test object was removed from the bucket afterwards. pnpm -r typecheck is clean.
continuum-app
Operator console for the Continuum print farm platform. A single Nuxt 3 SPA
(apps/web) shared between the browser and a Tauri 2 desktop shell
(apps/desktop), plus a shared component library (packages/ui).
Layout
apps/
web/ Nuxt 3 SPA (ssr: false) - Supabase auth, Pinia telemetry store
desktop/ Tauri 2 shell wrapping apps/web's static build
packages/
ui/ Shared Vue components: PrinterCard, TemperatureGraph, WebRTCStreamView
Getting started
pnpm install
cp .env.example apps/web/.env
pnpm dev:web # browser dev server on :3000
pnpm dev:desktop # Tauri dev shell (requires Rust toolchain)
apps/web builds as a static SPA so the exact same apps/web/.output/public
bundle is served in the browser and embedded into the Tauri desktop app.
Languages
Vue
76.7%
TypeScript
22.4%
Rust
0.9%