Soft moderation (Phase 5):
- Blur cards that ≥2 hop-1 follows have muted (kind-10000) or reported (kind-1984)
- Overlay shows count + dominant reason; "Show anyway" reveals for the session
- Settings toggle under Community (on by default, hidden when logged out)
- Trust beats crowd: self/trusted authors never blurred
- Spec doc at docs/WOT_SOFT_MODERATION_FEATURE.md
Feed scrolling:
- Removed nested scroll container on .feedWall (max-height + overflow-y caused
the wall to only show ~2 rows because the outer .modalCard ate scroll events)
- Re-targeted infinite-scroll listener to .modalCard
- Added top-up loop in appendFeedRows so the first chunk fills the viewport
Template d-tag collisions:
- Cover/disc/jewel/disc-design publishes now prefix the d tag with the mode
(e.g. cover:tt12345 vs disc:tt12345) so a user can publish multiple template
types for the same IMDB without one replacing the other at the relay level
- buildRowsFromEvents and deduplicateRows now key by (address, mode) so legacy
events with unprefixed d-tags also coexist correctly in the UI
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Phase 3:
- Streaming relay sync with progressive feed rendering (onEvent callbacks, 150ms debounce)
- Read-side soft cooldown (30s base, 5min max) so transient timeouts don't lock relays for an hour
- NIP-09 deletion fix: timestamp-aware tombstoning so re-published designs appear correctly
- Hop-2 follow graph (fetchHop2Follows) with 15min sessionStorage cache
- 4-tier trust system: self/trusted/extended/unknown with TIER_WEIGHT sort
- Trust filter select (All/Follows/Follows+Extended) on New and Popular tabs
- Trust badges on feed cards (Following / 2nd°) when logged in
- Streaming status line showing relay progress during fetch
Phase 4:
- NIP-56 kind-1984 report flow: modal with reason, note, and "also block" option
- Report button on each feed card alongside Block
- reportModal moved before <script> so DOM is ready when init() wires listeners
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
The template browser was returning zero results because kind 30078
(NIP-78 app data) is shared by many unrelated apps. A bare
{kinds:[30078], limit:200} query was getting flooded by other apps'
events (northlight-fragment alone had 300+ per relay), pushing
casewrap templates past the cutoff.
Narrow the relay-side query with #t:['casewrap'] for templates and
#k:['30078'] for deletions so the limit applies to this app only.
Also ships several supporting fixes that came out of the same
debugging session:
- queryRelays: add onEvent / onRelayDone streaming callbacks so
templates render as they arrive instead of after every relay
settles. Fast relays now populate the feed in < 1s.
- markRelayFailure: accept a context arg ('read' vs 'publish').
Read failures use 30s base / 5min max cooldowns (was 10min / 1hr).
A single transient read timeout no longer silently shrinks the
relay pool for an hour.
- fetchFeedAndReactions: stream into a Map, debounce a 150ms
rebuild of _feedCache.events, fire notifyFeedProgress() on each
batch so loadFeedTab re-renders progressively.
- loadFeedTab: register a per-tab rerender closure as
_currentFeedRerender, render whatever is cached immediately,
re-render on each progress tick. _currentFeedRerender === rerender
identity check prevents a late await from clobbering a tab the
user switched away from.
- Add live status line ("Streaming · N templates · R/T relays")
above the feed wall in New and Popular tabs.
- buildRowsFromEvents: respect NIP-09 deletion semantics by tracking
per-address deletion timestamps. Templates published AFTER a kind-5
deletion at the same address are no longer silently filtered.
- Drop wss://relay.nostr.pub from default relays (DNS no longer
resolves).
See docs/STREAMING_RELAY_SYNC_FEATURE.md for the full plan and
rationale.
Co-Authored-By: Claude Haiku 4.5 <[email protected]>
The layer hint was showing URLs and other internal data. The preview itself
is what matters, so just removed the hint text entirely.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Image layers now show as '[Image]' unless they have a specific name
- Text layers show extracted text content or '[Text]' if empty
- Prevents full image URLs from cluttering the layer list
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Disc preview now uses border-radius:50% circle matching app's real rendering
- Add white center hole overlay (not a cutout, just white circle on top)
- Layer positioning now correct: x,y,w,h as percentage of disc diameter
- Fix font sizing: convert pt to px with proper DPI scaling (96/72 ratio)
- Fix layer positioning from incorrect pixel-based to correct percentage-based
- Case template slots now use correct CSS transform for image positioning
- Show correct objectFit, zoom, x, y, rotate for both disc and template images
- Filter layers properly by target to show only designer-disc layers in preview
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Import buttons now set templateMode to 'case' for 2-disk print template view
- Shows the case cover with front/back/spine and 2 disc slots
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- For disc designs: show 'Import into Disk 1' and 'Import into Disk 2' buttons
- For templates: show 'Print / Save PDF' button
- Buttons are built dynamically based on design type
- Disc imports automatically switch to template mode
- Both designs still have 'Save JSON' option
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Add Preview button next to Use on all feed cards and search results
- Create full-screen preview modal showing disc/template design
- Preview renders background image + text layers for disc designs
- Preview shows front/spine/back images for case templates
- Save JSON button downloads design payload directly
- Print/Save PDF temporarily loads design, prints, then restores original state
- Uses afterprint event to seamlessly restore user's work after printing
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Add accent-color: #00d9ff to input[type='range'] and input[type='checkbox']
- Custom webkit slider thumb and track styling with cyan theme
- Custom Firefox slider styling with cyan theme
- Radio button styling with cyan accent
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Switch from @import to <link> tags for more reliable Google Fonts loading
- Add preconnect hints for faster font loading
- Change font-display from 'swap' to 'block' to ensure Press Start 2P loads
- Remove '~ DISC & CASE DESIGN STUDIO ~' tagline text
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Change 'Cover preview' from h1 to h2
- Add h2 styling: VT323 pixel font, normal color (no neon)
- h2 is 1rem (much smaller than h1's 2.2rem)
- Remove glow effects from section headings
- Maintain visual hierarchy: h1 is title, h2 is section header
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Increase h1 font size from 1.3rem to 2.2rem (!important)
- Force Press Start 2P font with !important flags
- Increase logo size from 28px to 48px
- Add !important to font-family and font-weight for consistency
- Better visual hierarchy and readability
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Increase font size from 0.9rem to 1.3rem for visibility
- Remove gradient effect that was obscuring the pixel font
- Switch to solid cyan color (#00d9ff) for clarity
- Keep neon glow effects (text-shadow + drop-shadow)
- Ensure Press Start 2P pixel font is clearly visible
- Increase letter-spacing slightly for better readability
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Title improvements:
- Add cyan-to-blue gradient text for dynamic look
- Multi-layer drop-shadow glow effects (4px + 12px)
- Text-shadow for additional neon glow
- Restructured layout: logo + title on one line, tagline below
Logo:
- Add cyan glow effect with drop-shadow filter
- Maintains 28px height with better visual impact
Tagline:
- New subtitle '~ DISC & CASE DESIGN STUDIO ~'
- Styled in bright cyan neon color
- Cyan text-shadow for layered glow effect
- Pixel-style spacing with wider letter-spacing
- Centered layout for visual balance
Result: Full neon cyberpunk aesthetic on header!
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Colors:
- Dark mode: Deep blue backgrounds (#0a0e27) with cyan accents (#00d9ff)
- Light mode: Cool cyan backgrounds (#e8f4f8) with bright cyan accents (#00b8e6)
- Updated text colors, borders, and highlights for cool palette
- Hot pink warnings (#ff006e) and bright green success (#00d084)
Edges:
- Remove all rounded corners (border-radius: 0px) for sharp pixel look
- Thicken borders from 1px to 2px for more defined edges
- Add subtle 2px box-shadows to fieldsets and buttons for 3D pixel effect
- Create hard-edged, retro computer aesthetic
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Reduce logo height from 40px to 28px
- Reduce logo right margin from 12px to 8px
- Reduce h1 font size from 1.2rem to 0.9rem
- Add white-space: nowrap to prevent title wrapping
- Tighten line-height and letter-spacing for compact display
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Add Google Fonts: Press Start 2P and VT323
- Use Press Start 2P for main heading (h1) - iconic 8-bit arcade style
- Use VT323 for body text, labels, buttons, hints - readable pixel font
- Add letter-spacing throughout for crisp pixel aesthetic
- Reduce border-radius on buttons for more angular pixel look
- Create complete retro pixel/8-bit visual style
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Use paper_icon_32px.png for Template tab
- Use disk_icon_32px.png for Disc Designer tab
- Remove old larger PNG icon files
- Icons maintain 40px display size with transparent backgrounds
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Increase icon size from 26px to 40px
- Set inactive tab background to transparent
- Adjust opacity from 0.85 to 0.75 for inactive state
- Remove margin-right from larger icons
- Increase gap between icon and text
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Change main font family to Verdana/Georgia for classic 90s feel
- Update headings to use Georgia serif font
- Use bold weights and classic sans-serif for buttons and labels
- Adjust font sizes and letter spacing for retro aesthetic
- Decrease button border radius for more angular 90s look
- Add Verdana/Arial to labels, hints, and buttons
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Add animated CD logo next to CaseWrap Studio title
- Logo sized at 40px height for clean look
- Provides visual branding for the app
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Add close buttons to Designer and Templates tabs
- Show confirmation dialog when closing projects with content
- Prompt user to save/publish before closing
- Designer: save as JSON file or publish to Nostr
- Template: save project as JSON file
- Clear all project state after closing
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Fix 'key is not defined' error in publishDiscDesignToNostr function
- Preserve layers when importing disc designs into template slots from both JSON files and Nostr
- Check both discDesign.layers and top-level payload.layers during import
- Populate designer metadata (title, category, imdbId) when loading projects
- Auto-set Nostr browse modal to 'disc-design' filter when importing from template slots
- Add undo/redo feature plan documentation for future implementation
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>