thePR0M3TH3ANandClaude Opus 4.7 acae6afc62 Add edit-in-place for published designs
Phase A — State, helpers, banner:
- New state.editingDTag / editingKind / editingEventId / editingTitle.
- enterEditMode / exitEditMode / isEditing helpers.
- Yellow banner across the top of the editor reading
  "Editing published design: <title> [Cancel edit]" whenever
  editing context is active.
- Editing state is cleared on close-project, disc-designer reset,
  fresh load from disk, and on successful publish.

Phase B — Publish-flow rewire:
- publishCurrentTemplateToNostr and publishDiscDesignToNostr both
  reuse state.editingDTag when set, so the new kind-30078 event
  shares the (kind, pubkey, d-tag) address of the original and
  supersedes it on relays via NIP-33 replaceable semantics. No
  NIP-09 deletion is needed for the replace itself.
- Publish buttons relabel to "Publish update" in edit mode.
- First-time-per-session confirm explains the tradeoff: zaps and
  reactions tagged to the old event id remain on relays but no
  longer link to this design (totals reset). naddr share links
  keep working; nevent links don't.
- Success message reads "Design updated." in edit mode.

Phase C — UI entry points:
- Owner-only Edit button in buildFeedCard's actions row, so it
  appears on My Designs cards, the profile page grid (own profile),
  and any other surface that uses the shared card factory.
- Owner-only Edit button in the design preview action row, between
  Save JSON and the existing action stack.
- Edit launches startEditFromRow which closes any open community/
  profile modal, loads the design via importDiscDesignFromPayload
  (disc-design mode) or loadProjectFromText (everything else), and
  then enters edit mode with the original d-tag and event id.

Preview header layout fix:
- The nostrPreviewActions wrapper used to be a flex item that
  wrapped its 7 dynamic buttons inside itself, then Refresh / Back
  / Close sat beside it as separate flex items — producing three
  staggered rows. The wrapper now uses display:contents when
  visible (toggled via data-visible attribute) so all preview
  buttons share the same flex container, wrap together, and align
  to the right edge in at most two rows. Buttons in this row also
  get smaller padding and white-space:nowrap to keep them stable.

Self-targeting hidden:
- Block and Report buttons no longer render on feed cards whose
  author is the signed-in user; profile-page chips already had
  the equivalent isSelf gate.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
2026-05-18 15:21:50 -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%