ro50dr94un3454rpdbup9dnth7pc2cqm · 14 rows
| id | content_hash | title | description | design | acceptance_criteria | notes | status | priority | issue_type | assignee | estimated_minutes | created_at | created_by | owner | updated_at | closed_at | closed_by_session | external_ref | spec_id | compaction_level | compacted_at | compacted_at_commit | original_size | sender | ephemeral | wisp_type | pinned | is_template | mol_type | work_type | source_system | metadata | source_repo | close_reason | event_kind | actor | target | payload | await_type | await_id | timeout_ns | waiters | hook_bead | role_bead | agent_state | last_activity | role_type | rig | due_at | defer_until | no_history | started_at | is_blocked |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| memestudio-0pn | 2d3546992fa62b4fb012904f36311d7b53068eec339edc5bb7116e67b67e5b55 | Template search / Cmd-K filtering | The sidebar 'Search templates' box and Cmd-K are static markup. Wire real filtering of the template tiles (and gallery) by name. | closed | 2 | feature | NULL | NULL | 2026-07-18T15:21:26Z | Eugene Blikh | bigbes@gmail.com | 2026-07-18T18:51:30Z | 2026-07-18T18:51:30Z | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | �{} | Wired real template search: sidebar #tplSearch input filters the template grid by name (case-insensitive), ⌘K focuses it (inline field, not a modal — respects invariant 1), Escape clears+blurs. data-tpl keeps original index so filtered tiles click through; #tplCount shows matches/total. Also fixed a latent bug where the hidden attr on .side-group/.memes was overridden by display:flex (My memes group leaked into the no-backend view). Verified headlessly. | 0 | NULL | NULL | NULL | 0 | NULL | 0 | |||||||||||||||||||||||
| memestudio-1ar | 2518a690d46b48ebda1885f57efeaced5de3054d756567e8a0eb99b10b31032d | Named saves — 'my memes' gallery | Backend autosaves ONE document. Add a memes table (id, name, doc json, thumb, updated_at) + API (list/create/open/delete) and a sidebar 'My memes' list so you can save, name, and reopen multiple memes. Autosave the current draft on top. | closed | 1 | feature | Eugene Blikh | NULL | 2026-07-18T15:21:24Z | Eugene Blikh | bigbes@gmail.com | 2026-07-18T18:25:32Z | 2026-07-18T18:25:32Z | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | �{} | Named saves shipped: memes table + list/create/get/put/delete API; 'My memes' sidebar with save (create-or-update-in-place), open, inline rename, delete, and compose() thumbnails. ⌘S + New. Live /api/doc autosave stays the draft. Verified full-stack in headless Chrome incl. reload persistence and no-backend fallback. | 0 | NULL | NULL | NULL | 0 | 2026-07-18T18:16:40Z | 0 | |||||||||||||||||||||||
| memestudio-1hv | 3ba5e17af917b3b11ed1a8e9252904435506dd6f67ff50ac65d8ee1f1b700dd3 | Canvas zoom | The -/100%/+ zoom control is static markup; the canvas never scales. Add real zoom that scales the stage visually without changing output size, and make drag/draw/pointer math divide by the scale so hit-testing stays correct. | closed | 2 | feature | Eugene Blikh | NULL | 2026-07-18T15:21:25Z | Eugene Blikh | bigbes@gmail.com | 2026-07-19T21:13:59Z | 2026-07-19T21:13:59Z | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | �{} | Implemented 25%-200% preview zoom with native-coordinate pointer conversion across all editor gestures; verified unchanged compositor dimensions and full interaction coverage in headless Chrome. | 0 | NULL | NULL | NULL | 0 | 2026-07-19T21:06:21Z | 0 | |||||||||||||||||||||||
| memestudio-2og | 340ec60a8e26a4753d58bd8e45081523a26923f7bd9d8e6b30de3fe8d9371c28 | Dedicated eraser / Draw-Erase mode | The Brush inspector spec shows a Draw/Erase mode toggle that isn't wired. Add an eraser: either a real erase mode that removes ink under the cursor, or at minimum a 'Clear drawing' action. Today removal is select-a-stroke + Delete, or undo. | closed | 1 | feature | Eugene Blikh | NULL | 2026-07-18T15:21:23Z | Eugene Blikh | bigbes@gmail.com | 2026-07-18T18:05:46Z | 2026-07-18T18:05:46Z | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | �{} | Implemented Draw/Erase mode toggle + Clear-drawing action. Erase drags remove whole strokes under the cursor (vector model), one undo step per gesture; Clear wipes the ink layer in one step. Verified in headless Chrome via __ms. | 0 | NULL | NULL | NULL | 0 | 2026-07-18T18:01:21Z | 0 | |||||||||||||||||||||||
| memestudio-7ho | 64a474bb242581d985c6bf88de3d906ab0322e804eacdea7ce575653ded4442e | Real gallery sticker thumbnails | The 12 built-in 'Insert image' gallery items are hue-gradient placeholders (GALLERY array). Only user-imported images are real bitmaps. Seed real sticker images (e.g. a small bundled set or reuse the imgflip fetcher) so the built-in gallery is real. | closed | 2 | feature | Eugene Blikh | NULL | 2026-07-18T15:21:25Z | Eugene Blikh | bigbes@gmail.com | 2026-07-19T21:31:53Z | 2026-07-19T21:31:53Z | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | �{} | Replaced all twelve gallery placeholders with bundled original 640px transparent PNG stickers, added alpha-aware preview/edge/compositor rendering, persisted sticker metadata, and verified browser and container packaging behavior. | 0 | NULL | NULL | NULL | 0 | 2026-07-19T21:14:12Z | 0 | |||||||||||||||||||||||
| memestudio-801 | 85c866ea39779ef7b6b4ac31c44d6fa77818d2a892de5b9e7fba78d836237d90 | Drop preset-baked 'Ship it' caption | Now that real text layers exist, the hardcoded 'Ship it' caption baked into the classic preset (and similar baked captions) is redundant and overlaps user text. Make presets pure layouts; the classic base should be image-only. | closed | 2 | chore | NULL | NULL | 2026-07-18T15:21:24Z | Eugene Blikh | bigbes@gmail.com | 2026-07-18T18:56:08Z | 2026-07-18T18:56:08Z | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | �{} | Classic preset is now image-only: dropped the baked 'Ship it' caption from the DOM core(), the compositor (CORE_PAINT.classic, incl. its backing scrim), and the layer-list indicator row. Removed the now-dead .bar CSS. Multi-panel presets keep their illustrative captions (preset furniture on still-mock layouts) — the concrete overlap-with-user-text harm was classic-specific. Verified: classic has no .meme-text/.bar/Ship-it row, export works, other presets unchanged. | 0 | NULL | NULL | NULL | 0 | NULL | 0 | |||||||||||||||||||||||
| memestudio-a3d | 3a306a5786d9fcb59334913b41e11ecf57e83d90198c4828ce6fd967d6342bb2 | Image corner-radius inspector row | The image inspector spec has a Radius slider; placed images use a fixed 3px radius. Add radius to placed state + render + compositor (roundRect). | closed | 3 | task | Eugene Blikh | NULL | 2026-07-18T15:21:27Z | Eugene Blikh | bigbes@gmail.com | 2026-07-19T21:50:25Z | 2026-07-19T21:50:25Z | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | �{} | Added a 0–40px image-radius slider with a 3px compatibility default, live DOM updates, rounded compositor clipping for images and stickers, and persistence coverage. | 0 | NULL | NULL | NULL | 0 | 2026-07-19T21:45:55Z | 0 | |||||||||||||||||||||||
| memestudio-bvs | 5b738fb26ed5b906e488d30af360a443d9ab3440d74626a53b8d1ad9a18c9f55 | Package the Go server for deploy | Containerize server/: CGO_ENABLED=0 static build (pure-Go SQLite), a Dockerfile (or single static binary + systemd unit), embed or ship the built editor static files + templates/. Config via flags/env (-addr, -db, -static). | closed | 1 | task | Eugene Blikh | NULL | 2026-07-18T15:21:49Z | Eugene Blikh | bigbes@gmail.com | 2026-07-19T21:03:54Z | 2026-07-19T21:03:54Z | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | �{} | Added and validated a scratch-based Docker package with a static Go binary, bundled editor/templates, persistent SQLite volume, env/flag configuration, and runtime smoke coverage. | 0 | NULL | NULL | NULL | 0 | 2026-07-19T20:52:08Z | 0 | |||||||||||||||||||||||
| memestudio-c0z | aad56e0412a304347fd94e59b5816a7e41091f3f1fadcffa1cab65bd1b407f79 | Deploy Meme Studio to phoebe-lab | Stand up the memestudio stack in phoebe-lab: the Go server behind Traefik + Authelia forwardAuth at memes.bigb.es, with a small volume for the SQLite file (doc + image blobs). Stateful (was planned stateless). Wire the reverse-proxy auth, TLS, and a persistent volume. | Deployment explicitly deferred by the user on 2026-07-20. Packaging is complete, but do not deploy to phoebe-lab until the user authorizes it. | open | 1 | epic | NULL | 2026-07-18T15:21:48Z | Eugene Blikh | bigbes@gmail.com | 2026-07-19T21:06:13Z | NULL | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | �{} | 0 | NULL | NULL | NULL | 0 | 2026-07-19T21:04:26Z | 0 | ||||||||||||||||||||||||
| memestudio-cv9 | c7513e9eb2351dd76b0e09ab18b020c7be5ff5170feca97dc4a4fe08336a0806 | Dynamic breadcrumb | The 'Templates / Drake Hotline Bling' breadcrumb is static. Reflect the selected template/base name. | closed | 3 | chore | Eugene Blikh | NULL | 2026-07-18T15:21:27Z | Eugene Blikh | bigbes@gmail.com | 2026-07-19T21:52:46Z | 2026-07-19T21:52:46Z | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | �{} | Made the breadcrumb derive from the active template or uploaded base, with safe truncation and full-name title; verified selection, reload, and restored-history transitions. | 0 | NULL | NULL | NULL | 0 | 2026-07-19T21:50:34Z | 0 | |||||||||||||||||||||||
| memestudio-djc | 3bee86e47cc17d380694d04901226b02ef09215bd5a35acd55954f3d6379c6d1 | Reconcile manifest vs saved doc | On load, a saved doc fully replaces templates and the manifest bootstrap is skipped, so rebuilding the template library won't surface new templates in an existing doc. Decide/implement a merge (keep the doc's on-selection + uploads, refresh the library list). | closed | 3 | task | Eugene Blikh | NULL | 2026-07-18T15:21:28Z | Eugene Blikh | bigbes@gmail.com | 2026-07-19T21:38:16Z | 2026-07-19T21:38:16Z | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | �{} | Merged saved template state with the current manifest by ID, preserving the active template and user uploads; added browser and backend-startup regression coverage. | 0 | NULL | NULL | NULL | 0 | 2026-07-19T21:32:05Z | 0 | |||||||||||||||||||||||
| memestudio-jf0 | 92f42636d3dd18980eca726c8ce3b2f483f8aed0aa6381655d44a62d8053e3f0 | Rotate/scale text layers | Text layers only move + change font-size (matches the spec). Give them the same rotate/scale handles as placed images if desired — reuse beginTransform-style math. | in_progress | 3 | feature | Eugene Blikh | NULL | 2026-07-18T15:21:27Z | Eugene Blikh | bigbes@gmail.com | 2026-07-18T19:27:06Z | NULL | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | �{} | 0 | NULL | NULL | NULL | 0 | 2026-07-18T19:27:06Z | 0 | ||||||||||||||||||||||||
| memestudio-l6t | 1980dcc25dac467f5b5ad1ecf8647acc3830a2ada6f359f8e6dc50e376dec4f9 | Font choice beyond Impact | The Text inspector Font row is a static 'Impact' field. Make it a real picker (Impact + a couple of system faces), stored per text layer, honoured in textsHTML + drawText. | closed | 3 | feature | Eugene Blikh | NULL | 2026-07-18T15:21:26Z | Eugene Blikh | bigbes@gmail.com | 2026-07-18T19:03:50Z | 2026-07-18T19:03:50Z | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | �{} | Font row is now a real per-layer picker: FONTS map (Impact + system Sans/Serif, invariant 6), stored as texts[].font, honoured in textsHTML (inline font-family) and drawText (ctx.font via fontCSS) so preview==export. Wired via data-text-font seg with per-button font previews; one undo step; backward-compatible (missing font → impact). Fixed a real bug: double-quoted family stacks truncated the style="…" attribute — switched to single quotes. Verified headlessly + screenshot. | 0 | NULL | NULL | NULL | 0 | 2026-07-18T18:56:43Z | 0 | |||||||||||||||||||||||
| memestudio-uc3 | 16589fc733d9bff3048338a4420f02c9b4c4758f38a9068ab7664ab72516e5cb | Persist undo history across reload | Undo/redo history is in-memory; a reload restores the document but not the undo stack. Optionally persist a bounded history (or accept as-is). | closed | 3 | task | Eugene Blikh | NULL | 2026-07-18T15:21:28Z | Eugene Blikh | bigbes@gmail.com | 2026-07-19T21:45:41Z | 2026-07-19T21:45:41Z | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | �{} | Persisted a validated undo/redo window in the live draft, capped at 24 entries and 1 MiB; restored it across reload and reloads images referenced by restored states. | 0 | NULL | NULL | NULL | 0 | 2026-07-19T21:38:26Z | 0 |