Files
STLPShopManager/docs/design.md
T

120 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# STLP Shop Manager (farmd) — design overview
Status: DRAFT for founder review (#855). Working title farmd; product name
STLP Shop Manager. License: proprietary SLP pending decision.
## 1. Goal
Run the Starting Line Productions shop as a production system: Etsy orders
flow through Dolibarr into managed print / laser / CNC / reflow / cut /
sew / embroider jobs on the shop floor, with completion flowing back.
One dashboard, Cloudron-deployable, SSO via the platform OIDC provider,
single Go binary. Shop-time booking integrates with **ThymeSlot** (the
Cloudron booking app already in use).
## 2. Managed device classes
| Class | Devices | Adapter | Control level |
|---|---|---|---|
| FDM printers | Klipper/Moonraker, OctoPrint, Bambu | moonraker / octoprint / bambu | full (status, files, jobs, temps) |
| **Reflow oven** | Whizoo controller | reflow | profile library + run logging (v1); serial/MQTT start+monitor (v2) |
| **Laser (CR-10 conversion)** | GRBL | grbl-laser | full (power/speed presets, job send) |
| **CNC (CR-10 conversion)** | GRBL | grbl-cnc | full (feeds/speeds/tools, job send) |
| **Glowforge laser ×2** | Glowforge cloud service | glowforge (unofficial API) | job push + status poll; cloud-tethered, community API |
| **Chinese CO2 laser** | DSP (Ruida/TopWisdom) or GRBL | dsp / grbl (survey first) | job send + status; DSP protocol is reverse-engineered territory |
| **Silhouette Cameo ×2** | Silhouette graphtec protocol | cameo (Linux `silhouette` tool lineage) | cut job send; one device reserved for PCB stencils (pairs with #859 pipeline) |
| **Embroidery machines** | USB-direct (no network) | embroidery (file prep only) | pattern export (.pes/.dst via Ink/Stitch + libembroidery) + job tracking |
| **Sewing machines** | manual | manual (tracking only) | job/time tracking against ThymeSlot bookings |
Design rule: devices without network control get the **manual-device class**
— job tracking, time logging against ThymeSlot bookings, and file prep —
instead of pretending to direct control.
## 3. ThymeSlot booking integration
Shop time is booked in **ThymeSlot** (Cloudron app, already in use; upstream
POOL_SIZE request pending in #739). farmd integrates rather than replaces:
- device reservation view: farmd pulls bookings (ThymeSlot API/export) so the
dashboard shows booked slots per device alongside live job state;
- gate rule (configurable): device jobs require an active/covering booking for
the member, or warn-only mode;
- usage writeback: actual run time logged per job feeds billing/reports.
## 4. System context
```mermaid
flowchart LR
E[Etsy orders] --> D[Dolibarr ERP/MRP]
D -- REST: orders + fulfillment --> F[farmd]
O[Operator] -- OIDC SSO --> F
B2[ThymeSlot bookings] -- API/sync --> F
F -- Moonraker WS --> K[FDM printers]
F -- OctoPrint REST --> OP[FDM printers]
F -- MQTT/FTP --> B[Bambu]
F -- serial/bridge --> R[Whizoo reflow oven]
F -- GRBL serial --> L[CR-10 laser]
F -- GRBL serial --> C[CR-10 CNC]
F -- unofficial cloud API --> G[Glowforge x2]
F -- DSP/GRBL survey --> Z[Chinese CO2 laser]
F -- cameo tool --> CM[Cameo x2: stencil + general]
F -- file prep + tracking --> EM[Embroidery + sewing]
F -- alerts --> N[ntfy]
F -- G-code/artifacts --> S[(farm storage)]
```
## 5. Components
- **core** (Go): job queue + state machine (per device class), scheduler
(capabilities: material, build volume, bed, laser wattage, oven profile,
hoop/needle for embroidery), retry/reprint rules, batch groups (Etsy
orders = batches).
- **adapters**: moonraker (WS), octoprint (REST+WS), bambu (MQTT/FTP),
grbl (serial; laser+cnc profiles), reflow (profile mgmt v1, control v2),
glowforge (unofficial cloud API, poll-based), cameo (cut jobs), manual
(tracking-only class).
- **profiles**: reflow curves (per paste), laser material presets (per
machine), CNC tool libraries, embroidery hoop/thread presets — all
versioned; runs record the profile version used.
- **web** (embedded html/template + htmx, no Node): farm dashboard, device
cards, job board, batch view, profile editors (incl. reflow curve editor),
booking calendar view, history.
- **dolibarr-connector**: confirmed orders -> job specs; fulfillment
writeback; idempotent.
- **authn**: Cloudron OIDC; roles admin/operator/viewer; API tokens for
machine access.
## 6. Job lifecycle
```mermaid
stateDiagram-v2
[*] --> Queued: order line / manual
Queued --> Prep: slicing / CAM / profile / pattern
Prep --> Ready: artifacts + booking check
Ready --> Running: device free (+ booking if gated)
Running --> Post: job complete
Post --> Done: QA pass
Post --> Reprint: QA fail
Running --> Failed: error / material out
Failed --> Queued: auto-requeue (n retries)
Done --> [*]: Dolibarr fulfillment writeback
```
## 7. Phasing
- **MVP-1**: dashboard + FDM adapters (Moonraker/OctoPrint) + manual queue +
OIDC + ntfy alerts + Cloudron package.
- **MVP-2**: GRBL adapter (CR-10 laser/CNC) + Silhouette cameo (stencil +
general) + profile libraries + Dolibarr connector + ThymeSlot booking
view.
- **MVP-3**: reflow profile library + run logging + Whizoo bridge, Glowforge
unofficial-API adapter, Chinese laser DSP survey, embroidery/sewing
manual-device tracking, batch automation, QA checklists, Prometheus.
## 8. Cloudron packaging
manifestVersion 2: httpPort 3000, localstorage (sqlite + artifacts), OIDC
addon, healthcheck /healthz, multi-user via platform groups. Serial devices
reach farmd over TCP serial bridges (ser2net) — Cloudron apps have no serial
access by design.