Files
Artstr-Studio/TODO.md
T
thePR0M3TH3ANandClaude Opus 4.7 7439bc12b2 Slide deck PDF export: one page per slide
The Print / Save PDF button is now context-aware. In the Deck Builder
(deck mode, no slide open in the editor) it builds a hidden print-only
DOM container with one page per slide, each rendered via the same
renderCustomArtPreviewDOM the sorter thumbnails use:

- Themed at render time via composeSlideForDeck so the deck's font /
  background applies (and per-slide ignoreDeckTheme is honoured).
- Each page sized to the preview's native dimensions
  (PREVIEW_BASE_PX / 96 inches wide, aspect-matched from the first
  slide) so the @page directive is the exact slide size and the
  slide content fills the page edge-to-edge without scaling.
- `page-break-after: always` between slides; no trailing blank.
- Print-only CSS hides every other top-level element on body so
  the editor chrome doesn't bleed through.
- document.title is set to "<save-stem>_deck" so the browser
  defaults the saved PDF's filename helpfully.
- A `window.afterprint` listener tears the print container, the
  injected stylesheet, and the title override back down — so
  cancelling the dialog leaves no residue.

Inside a single-slide editor (deck mode, a slide is open), the
Print button still calls printWithCurrentFilename for the existing
single-page slide print.

TODO.md: move Slide deck PDF export and Copy / paste transform
consistency into "Shipped (recent)". Adam's working list is empty.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
2026-05-26 14:18:11 -04:00

119 lines
5.7 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.
# Artstr Studio — TODO
Running list of deferred work. Detailed specs for the larger items live in
`docs/`. Each entry notes scope and where the spec is (if any).
## Adam's working list
_(All of Adam's working-list items are currently shipped — see
"Shipped (recent)" below. New items go here.)_
## QR code layer — remaining phases
Phases A and B shipped (the `qr` layer type: data, error-correction level,
quiet zone, module / background colors, transparent background, renders
on every surface + canvas export, JSON round-trip; plus "Insert npub" and
"Insert share link" buttons under the QR data field).
- **Phase C — visual polish.** Optional center logo overlay and rounded
modules. Riskier: a logo eats into the error-correction budget, so it
should nudge the ECC level up. Skippable.
## Editor / tool UX
Small editor-usability improvements — no spec doc; scoped here.
Shipped: on-canvas drag-resize handles for every layer type, text-box
resize that never rescales the point size, the expanded Text tool panel
(font / size / color / alignment / bold / italic), a collapsible sidebar
toggle that fits the early-web aesthetic. Add new editor-UX items below.
## Profile pages — deferred polish
(Core profile pages at `/u/<npub>` already shipped.)
- Make author chips clickable in the **community thread view** (comments and
reposts) — currently only feed-card and preview-meta author chips route to
`openProfilePage`.
- **About-text clamp** — long bios overflow the profile header; clamp to ~4
lines with a "Show more" toggle.
- **Profile-grid pagination** — an author with 100+ designs renders them all
at once; cap the initial render and add a "Show more" pager.
## Edit-published-designs — deferred polish
(Core edit-in-place via NIP-33 replaceable semantics already shipped.)
- Replace the remaining `confirm()` calls in the edit / publish flow with the
styled in-app modal pattern, for consistency with the close-project and
publish-confirm modals.
- "Editing a previously-deleted design" warning — if the user opens Edit on a
design they had tombstoned with a kind-5, warn that publishing will
republish it.
## Pixel art — future polish
- **`pixelsB64` size-fallback encoder.** The spec calls for each frame
to store whichever is smaller: `pixels` (RLE pairs) or `pixelsB64`
(base64 of the raw `Uint8Array` of indices). Only RLE is implemented
today. For noisy / photo-pixelized content with many palette colours,
base64 is ~5× smaller — a 24-frame 64×64 sprite tested at 785 KB
RLE would drop to ~150 KB. Worth shipping alongside a live event-size
readout in the editor (soft warn at 50% of relay budget, hard block
at 90%) so users see the budget before publish.
## Drafted-but-unbuilt features
Each has a full spec in `docs/`.
- **Private (encrypted) publishing** — `docs/PRIVATE_PUBLISHING_FEATURE.md`.
Publish any design encrypted, readable only by the author (Phase 1
"private to me"). The agreed next build; Phase 0 is a validation spike.
- **Artstr Stacks** — `docs/STACKS_FEATURE.md`. Interactive fullscreen
page/card stacks (HyperCard for Nostr) — the Slide Deck extended with
layer actions and an interactive viewer. Queued after private publishing.
- **Badges (NIP-58)** — `docs/BADGES_FEATURE.md`. Award / display Nostr
badges on profile pages.
- **Collections (NIP-51 sets)** — `docs/COLLECTIONS_FEATURE.md`. Let users
organize favorite community templates into named sets.
- **Zap-gated premium templates** — `docs/ZAP_GATED_TEMPLATES_FEATURE.md`.
Creators mark a template premium with a minimum-zap threshold.
- **Zaps via Nostr Wallet Connect** — `docs/ZAPS_NWC_FEATURE.md`. In-app
zapping without the wallet handoff. (Tracked LNURL-pay tips already ship;
this would be the NWC path.)
## Shipped (recent)
- **Slide deck PDF export** — multi-page PDF, one page per slide. The
existing Print / Save PDF button is context-aware: in the Deck Builder
it builds a hidden print-only container with one page per slide (themed
via `composeSlideForDeck`, each page sized to the preview's native
dimensions so the slide fills the page exactly) and emits one PDF via
`window.print()`. Inside a single-slide editor, the button still prints
just that slide.
- **Copy / paste transform consistency** — paste now computes a single
group bounding box across all clipboard items, applies one shared scale
(only shrinks, never enlarges) and one shared translation, so cross-
target paste keeps every layer's relative position and size to the
others intact.
- **Pixel-editor colour picker** — ported the OS native `<input type="color">`
over from the vector tools (same swatch styling; opens the OS picker with
its built-in eyedropper on click). Removed the Screen-Capture-API screen-
eyedropper workaround (~170 lines of dead code). Palette swatches and
the in-canvas eyedropper tool now sync the picker too, so grabbing a
palette colour as the starting point for a tweaked variant just works.
- **Pixel Art** — `docs/PIXEL_ART_FEATURE.md`. Phases A–D all shipped:
embedded `pixelart` layer + standalone `casewrap-pixelart` design,
PNG / sprite-sheet / GIF export, drawing tools (line / rect / ellipse,
flip / rotate, grid resize), animation (multi-frame timeline, playback,
onion-skin), image → pixelize, and animated previews in every preview
surface. Undo / redo integrated with the top-level toolbar.
- **Pixel editor layout expansion** — addressed by the collapsible
sidebar (gives both the pixel and vector editors a lot more breathing
room when needed).
- **Print / Save event ID wrapping** — the event-id `<dd>` already uses
`overflow-wrap: anywhere; word-break: break-word`, so no horizontal
scroll.
- **TMDB auto-fill cleanup** — `docs/TMDB_AUTOFILL_FEATURE.md` removed.