Print Projects — a Bespoke app
A compact queue and history for personal 3D-print projects.
This is an unofficial, third-party app for Bespoke. Nobody vetted it but its
author. Read What it does with your stuff
before installing it, the same as any code you run as yourself.
Install
From your Bespoke instance directory, with the platform at v0.13.0 or newer:
go tool bespoke add print-projects
That pins this module, writes apps/print-projects/app.toml with a free port, and
recompiles your instance stylesheet. Pin a version you have actually read with
bespoke add print-projects@v0.1.0.
The directory must be named print-projects: the slug names this app's database,
process, and subdomain, and the source picks it.
What it does with your stuff
- Stores in its own SQLite database: your projects, their print history,
and any photos you attach (up to 8 MiB each, stored as blobs).
- Talks to only your instance's local platformd: it publishes
print_projects.project_created and print_projects.print_logged events
when you create a project or log a print, and a print_projects.print_milestone
event with an in-app notification when a project reaches 1, 5, or 10 prints.
No outbound network connections at all.
- Never leaves your host.
Like every Bespoke app it runs as your user, so nothing above is enforced by
the platform — it is a description you can check against the source
(ADR-0031).
Spec
The behavior this app is built to, unchanged from its original private build.
Records
projects — user-scoped name, source URL, freeform notes, and creation time.
print_history — user-scoped project, print date, notes, and optional image.
A project with no history means “want to print.” Images are stored in this
app's SQLite database, limited to 8 MiB and JPEG, PNG, WebP, or GIF.
Views and actions
GET / — create projects and browse project cards, with unprinted projects
first. Each card shows its source, notes, and newest-first print history.
POST /projects — create a project.
POST /projects/{id}/prints — add history from a dialog; the date defaults
to today and an image is optional.
POST /projects/{id}/edit — correct a project's name, URL, or notes.
GET /prints/{id}/image — serve a user-scoped history image.
POST /projects/{id}/delete — delete a project and its history.
- Dashboard card: count waiting-to-print projects, total projects, and prints
in the last 30 days.
- Live region: every form, intent, and tool mutation refreshes open pages.
- Chat and tools: list/create/delete projects and add/list print history.
create-project intent: selected text becomes a project name.
Non-goals
- No slicer settings, filament inventory, ratings, search, sharing, or file
hosting in v1. The URL points to STL/STEP pages or files elsewhere.
- Existing apps have no natural event that should automatically propose a
print-project intent, so no event banners were added.
- Images are app-local because shared blob storage is only a candidate in the
internal-services catalog; graduate it when a second app needs uploads.
Developing
views/*_templ.go is committed on purpose — instances build this module
straight out of the read-only Go module cache and never run templ generate
over it. After editing a .templ, run just ui and commit the output.
License
MIT — see LICENSE.