Milestones
List view
Expose PotterDoc API surfaces and tooling so that users can control the app, log pottery progress, and transition piece states entirely via natural language and voice in Claude or ChatGPT, completely bypassing the web frontend. Exposed client capabilities must support the standard potter persona workflows: 1. **Piece Lifecycle**: Creating pieces (initialized in `designed` state), retrieving piece details, and filtering pieces by status. 2. **Workflow Transitions**: Transitioning state and filling in required custom fields by dynamically reading schema constraints. 3. **Metadata Management**: Favoriting, tagging, and linking pieces to public/private library entities (without permission to edit public objects). 4. **Image & Crop Control**: Attaching images and updating crop bounds via voice commands. ### Dependency Graph ```mermaid graph TD %% Base/Independent tasks A["[#879] API Token Auth"] B["[#876] OpenAPI Schema Config"] C["[#880] Token-Efficient Search"] D["[#883] Dynamic Workflow Endpoint"] E["[#881] LLM-Guided Crop Control"] %% Dependent tasks F["[#882] LLM-Friendly Image Upload"] G["[#878] PotterDoc MCP Server"] H["[#877] ChatGPT Custom GPT Action"] A --> F A --> G C --> G D --> G A --> H B --> H C --> H ``` Project: https://github.com/users/shaoster/projects/13 ## Sub-Issues - [x] [API Token Authentication for External Agents](https://github.com/shaoster/glaze/issues/879) - [x] [Expose LLM-Tailored OpenAPI Schema](https://github.com/shaoster/glaze/issues/876) - [x] [Token-Efficient Piece Search & Query Endpoint](https://github.com/shaoster/glaze/issues/880) - [x] [Dynamic Workflow Schema Endpoint](https://github.com/shaoster/glaze/issues/883) - [x] [LLM-Friendly Image Upload Endpoint](https://github.com/shaoster/glaze/issues/882) - [x] [LLM-Guided Image Cropping Control](https://github.com/shaoster/glaze/issues/881) - [x] [PotterDoc Model Context Protocol (MCP) Server](https://github.com/shaoster/glaze/issues/878) - [x] [ChatGPT Custom GPT Action Configuration](https://github.com/shaoster/glaze/issues/877)
No due date•8/8 issues closedA private, journal-like slideshow experience for finished pieces. The first release is Keepsake: deterministic, low-choice, generated from the piece history, and limited to privacy-compatible review/export behavior. The only customization surface is excluding specific images or notes from the generation inputs. Share/export affordances are allowed only when compatible with PotterDoc's privacy posture, such as download or mobile Web Share API. Project: https://github.com/users/shaoster/projects/12 ## Sub-Issues - [x] [Tracking: publish workflow for shared pieces and generated summary videos](https://github.com/shaoster/glaze/issues/228) - [x] [Generate summary slideshow videos for terminal pieces](https://github.com/shaoster/glaze/issues/232) - [x] [feat: create showcase video wizard](https://github.com/shaoster/glaze/issues/329) - [x] [feat: review and exclude showcase video inputs](https://github.com/shaoster/glaze/issues/743) - [x] [feat: plan deterministic Keepsake slideshows](https://github.com/shaoster/glaze/issues/744) - [x] [feat: review and export showcase videos privately](https://github.com/shaoster/glaze/issues/745) - [x] [feat: add showcase video music catalog](https://github.com/shaoster/glaze/issues/746) - [x] [feat: track showcase video input hashes](https://github.com/shaoster/glaze/issues/747) ## Scope Notes - First style is Keepsake. - Output is a deterministic slideshow video. - Rendering should use an open-source/off-the-shelf stack. - Excluded images and notes must affect the effective input hash. - Social/profile/feed/fan/follower/notification behavior is out of scope.
No due date•8/8 issues closedGuide new users through PotterDoc's core workflows on their first login, with per-tutorial dismiss state persisted via user settings. Depends on #318 (Preferences UI) to surface a 'Show tutorials' toggle and 'Reset tutorials' action. ## Sub-Issues - [ ] [feat: add per-tutorial dismissed/seen flags to user settings](https://github.com/shaoster/glaze/issues/453) - [ ] [feat: tutorial overlay shell (reusable step-through component)](https://github.com/shaoster/glaze/issues/457) - [ ] [feat: tutorial — create a piece & first state](https://github.com/shaoster/glaze/issues/458) - [ ] [feat: tutorial — making & bisque fire workflow](https://github.com/shaoster/glaze/issues/459) - [ ] [feat: tutorial — glaze & glaze fire workflow](https://github.com/shaoster/glaze/issues/460) - [ ] [feat: tutorial — retroactive entry for previously-made pieces](https://github.com/shaoster/glaze/issues/461) - [ ] [feat: tutorial — ML-driven photo import (future/deferred)](https://github.com/shaoster/glaze/issues/462) - [ ] [feat: tutorial dismiss & reset controls in Preferences UI](https://github.com/shaoster/glaze/issues/463)
No due date•5/11 issues closedHardening Glaze for sustained production traffic: dev/prod parity, container build & smoke testing in CI, multi-instance deploys, health checks, rolling updates, OAuth admin onboarding, and a future-proof packaging story (compose today, Helm later). Tracks both the platform plumbing (CI image gating, hermetic Bazel-managed venvs, dev shell ergonomics) and the operational gaps that block scaling beyond a single droplet.
No due date•24/25 issues closedVision: [Pottery Computer Vision Pipeline](https://gist.github.com/shaoster/a9f2437d570ea884f23c8854d0db5e03) Replace the off-the-shelf rembg/u2net pipeline backing \`piece_image_crop_service\` with a pottery-tuned segmentation model (Ultralytics YOLO-seg), driven by a closed feedback loop: admins and piece owners flag bad crops → diagnostics expose where rembg misbehaves at the mask level → assisted supervised labeling (in-app + Label Studio with SAM/GrabCut/contour-snap) produces ground truth → Ultralytics fits a pottery-specific model on a local developer GPU → app-per-model-version Modal deployments + a backend registry + A/B routing close the loop in production. ## Design Decisions - **Model output**: foreground segmentation mask. Tight bbox is a derivation. - **Mask format**: RGBA PNG with RGB channels zeroed; alpha = foreground confidence. Stored in `CropRun.mask_asset` as a Cloudinary reference. - **Bad-crop reporting**: no separate `CropFailureReport` model — human corrections are `CropRun` rows with `source.type = "human"` and `submitter` set. - **Provenance**: `CropRun.source` is a JSONField `{type, backend, deployment, version}` — machine-readable, open `backend` string lockable via migration if a registry warrants it. - **Padding**: extracted from hardcoded 10% to a per-potter setting; applied downstream of the model. - **Training framework**: Ultralytics YOLO-seg. - **Experiment Tracking**: Weights & Biases (Personal Free Plan) for training run visualization and artifact versioning. - **Compute**: Modal.com for **serving**; **training runs locally** on the maintainer's GPU. Modal GPU remains an optional fallback for collaborators without local hardware. - **Deployment**: one Modal app per model version (avoids cold-start churn when switching backends). - **Annotation audience**: admins + piece owners. - **Annotation UX**: `MaskEditor` reusable component (#532) with browser-ML assists — pre-fill from any registered backend, plus flood/GrabCut/contour-snap/brush/polygon. No pixel-by-pixel painting. - **Bootstrap**: ~100 images seed-labeled in Label Studio with rembg as a pre-annotation backend before the in-app UI ships. - **A/B**: shadow mode and probabilistic split, admin-toggleable, generalized across any two registered backend versions. - **Privacy**: training-data use must be verified against the Privacy Policy in the dataset-export issue. ## Research & Resources - [YOLO Image Segmentation: Reading List](https://gist.github.com/shaoster/3bb6a074a1c64b5ff6674a301ebf6264) — Papers and tutorials covering YOLACT prototype masks and YOLOv8-seg architecture. ## Sub-Issues (dependency-ordered) | # | Issue | Depends on | |---|---|---| | 1 | [#421 — Bad-Crop Tagging & Inference Run Persistence](https://github.com/shaoster/glaze/issues/421) | — | | 2 | [#532 — MaskEditor UI component](https://github.com/shaoster/glaze/issues/532) | — (parallel with #421) | | 3 | [#413 — Rembg Failure-Mode Analysis (mask-level)](https://github.com/shaoster/glaze/issues/413) | #421 | | 4 | [#420 — Supervised Crop Annotation UI + Per-Potter Padding](https://github.com/shaoster/glaze/issues/420) | #421, #532 | | 5 | [#414 — Label Studio Seed-Labeling Bootstrap](https://github.com/shaoster/glaze/issues/414) | #421 | | 6 | [#415 — Training Dataset Export Pipeline](https://github.com/shaoster/glaze/issues/415) | #420, #414 | | 7 | [#416 — YOLO-seg Training Script (Local GPU)](https://github.com/shaoster/glaze/issues/416) | #415 | | 8 | [#445 — Evaluate W&B (Personal Free Plan) for experiment tracking](https://github.com/shaoster/glaze/issues/445) | #416 | | 9 | [#417 — Evaluation Harness & Baseline Report](https://github.com/shaoster/glaze/issues/417) | #413, #416, #445 | | 10 | [#419 — Per-Model-Version Modal Apps + Backend Registry](https://github.com/shaoster/glaze/issues/419) | #421 | | 11 | [#418 — A/B Routing, Versioning & Comparison Dashboard](https://github.com/shaoster/glaze/issues/418) | #421, #417, #419 | | 12 | [#531 — Automated Database Backup](https://github.com/shaoster/glaze/issues/531) | — (non-blocking, should land before CropRun data accumulates) | **Critical path**: #421 → #420 (needs #532) → #415 → #416 → #445 → #417 → #418 (eight issues deep). **Parallelizable upfront**: #421 and #532 can proceed simultaneously. Once #421 lands, #413, #414, and #419 can all proceed in parallel alongside #420 (which also needs #532).
No due date•1/11 issues closedRefactor duplicated contracts and strange module boundaries across api/ and web/ without changing user-visible behavior. The milestone focuses on documenting the current dependency and coverage baseline, then tightening ownership around backend endpoint families, frontend piece editing, global-entry contracts, and shared Cloudinary/error handling flows. ## Sub-Issues - [x] [Document api/web dependency and coverage baseline](https://github.com/shaoster/glaze/issues/404) - [x] [Split backend endpoint families out of api/views.py](https://github.com/shaoster/glaze/issues/405) - [x] [Decompose frontend piece editing boundaries](https://github.com/shaoster/glaze/issues/406) - [x] [Consolidate global-entry contract handling](https://github.com/shaoster/glaze/issues/407) - [x] [Extract shared Cloudinary and API error flows](https://github.com/shaoster/glaze/issues/408)
No due date•5/5 issues closed