thePR0M3TH3ANandClaude Opus 4.7 40c0df6fee Publish-confirm modal, in-app toasts, Zapped tab fix, dc-designer layers, sticky-meta fix
Publish confirm modal:
- Replaces the bare confirm() before posting to Nostr. Shows a live
  preview of the design (uses the same renderers as the design
  browser), a metadata table (Type, Title, Category, Language,
  IMDb / UPC / TheTVDB / MusicBrainz when filled, Author), and an
  inline edit warning when the user is updating an existing design.
- Pre-flight validation surfaces missing title/category/artwork
  before opening the modal; publish errors render inline so the
  user can retry without losing context.
- ESC / × / backdrop close it; same modal-z-stack treatment as the
  other overlays so it lands on top.

Toast system:
- Replaces every native alert() across the app (41 callsites) with
  in-app toasts. toastError flags failures with a red border;
  toastSuccess paints publish/copy confirmations with the accent
  color. Toasts auto-dismiss (~3.5 s info/success, ~5.5 s error)
  and stack at the bottom-right with a manual close button.

Project metadata stickiness:
- Clear all images, Clear disc, and Clear jewel handlers now also
  reset state.meta (preserving the user's omdbApiKey) and re-sync
  the input fields. Previously, title / IMDb / UPC / TheTVDB /
  MusicBrainz carried over from a cleared project into the next
  one.
- The two existing reset helpers were missing the newer identifier
  fields (UPC, TheTVDB, MusicBrainz). All three call sites now use
  a single blankMeta() helper as the source of truth.

Disc Designer layers panel:
- Designer mode now has the same Add image / Add text / Add color
  controls as the template editor — a single panel since discs are
  one target. URL input + Copy button + the three add buttons.
  Previously the panel showed the layer list but no way to add
  layers in the first place.

Zapped tab fixes:
- _feedPagination was only initialised for New and Popular, so the
  Zapped rerender threw "Cannot set properties of undefined" on
  every paint and the panel never populated. Added the Zapped
  pagination state.
- fetchZapsForEvents now batches chunks in parallel instead of
  sequentially, and streams a debounced rerender on every ingested
  receipt, so zap totals appear within a second or two instead of
  taking up to ~28 s for a 200-design feed.
- invalidateFeedCache now also clears the zap cache (byEvent /
  byAuthor / receiptIds / fetchedFor* sets). Without that, hitting
  Refresh never re-queried receipts because every event id was
  already marked "fetched".

Co-Authored-By: Claude Opus 4.7 <[email protected]>
2026-05-18 17:35:04 -04:00
2026-05-13 17:25:59 -04:00
2026-05-18 13:21:30 -04:00

CaseWrap Studio

CaseWrap Studio is a static print-layout editor for physical media packaging. It supports DVD/Blu-ray case wraps, Avery 8960/8944 disc-label sheets, Avery 8693/8943 CD jewel-case insert sheets, and reusable single-disc designs.

What it supports

  • Separate front, spine, and back case artwork (or one combined wrap image)
  • Disc-label sheet mode (two print positions on one Avery 8960/8944 sheet)
  • CD jewel insert mode (front + tray inserts on one Avery 8693/8943 sheet)
  • Disc Designer mode for creating a reusable single-disc design
  • Additional image and text layers
  • Drag positioning, z-order changes, rotation, sizing, and opacity
  • PDF export through the browser print dialog
  • Nostr community browsing/sharing for templates and disc designs
  • Publishing, replies, reactions, follows, and reposts from inside the app

Important workflow

All image sources are remote URLs.

That means:

  • Case art, disc art, jewel insert art, and extra image layers should use http or https URLs
  • Saved project JSON remains portable across machines
  • Exported/copied Nostr events can reconstruct layouts from event content
  • Community feed data comes from relays listed in the Community panel
  • Publishing/social actions require a NIP-07 browser extension (for example Alby or nos2x)

If a URL stops working later, the image will no longer render. For long-term reliability, use stable hosted URLs.

Main file

  • src/index.html is the complete app entrypoint. Open it directly in a browser or serve it from any static host.

Export and print

  • Use Print / Save PDF for print-ready output
  • Keep browser scale at 100%
  • Disable browser headers and footers

Save, restore, and sharing

  • Save project writes project JSON
  • Load project restores project JSON
  • Copy Nostr event copies a signed event payload
  • Import from Nostr restores a template/design from a copied event
  • The Community modal lets you browse New/Popular/Search/Mine, preview templates, and import them
  • Disc designs can be published and reused independently, then imported into Disc 1 or Disc 2 positions on a disc sheet

Nostr data model

  • Template/design payloads are published as kind 30078 app-data events with casewrap tags
  • Typical social events use standard kinds (1, 7, 6, 3, 0)
  • Template modes include cover, disc, jewel, and disc-design
  • Current schema version is 5; minimum supported schema version is 4

Notes

  • The app is fully static and does not require a backend
  • Local browser autosave is still available
  • Older saved projects with embedded data URLs may still load, but new work should use remote URLs
S
Description
A static site DVD and Blu-Ray Case and disk label designer
Readme
5.7 MiB
0 Stars 1 Watchers 0 Forks
Languages
JavaScript 99.7%
HTML 0.3%