# Handoff for Next Instance — MyAnythingList / Media Wall App ## Current context This session focused on a single-file HTML app that has been repeatedly patched and is fragile. The user wants iterative repair, not a rewrite. The uploaded app lineage centered around files named like: - `index_beta_2026-05-04-vXX.zip` - matching internal beta html filename convention The user is frustrated with regressions and wants a clean handoff to a fresh instance. ## Most important product rule The **Download Thumbnail** button is the core product behavior. The user’s definition: - the button label must stay **static** - no status text inside the button, ever - no disappearance - no language-specific work-in-progress text in the button - selected tile should begin JPG prep immediately on selection - after a short wait, click should download the already-prepared JPG immediately - once the prepared JPG exists, download must be immediate and reliable every time, not only once - this must work across tiles, not just panel 1 ## Latest user-reported state before handoff User tested the latest builds and reported: - **v63:** “download works great” - later builds regressed again - **v66:** button feedback is fast, but download does not work even once - **v61/v62 area:** one build made all controls noninteractive - current request: make a handoff because session became unusably slow ## What was working well at various points The user explicitly praised these things when they worked: - grid visibility / reveal became “perfect and fast” in one later build - immediate click feedback on buttons is important - JPG download worked well in one build, at least once - selection-first interaction model is now essential and should never regress ## Hard interaction rules ### Tile selection The app is primarily for editing thumbnails. User’s hard rule: - if a tile is **not selected**, first click only **selects** - if a tile **is already selected**, the next click does the action - this rule applies everywhere - startup exception: panel 1 is already selected on boot, so the first runtime click on panel 1 should do action - after that, returning to any previously actioned tile should still require select-first unless it is currently selected ### Mouse wheel selection On PC wheel navigation: - selection border must update immediately on wheel movement - selection feedback must appear before any expensive work - unloading/teardown of YouTube player must never block visible selection feedback ### Control bar feedback All control bar interactions should feel immediate: - button/select/slider feedback on pointer-down - perceptually real-time from a human perspective - no visible latency before border/glow/click acknowledgment ## Grid reveal / startup rules User’s required startup behavior: - header text and command bar should be visible immediately, before content being edited - do **not** show content without the program UI - grid should remain hidden until panel 1 is completely initialized with visible thumbnail - user does not want to watch borders, boxes, glows, QR, URLs, and empty panels assembling live - first visible tiles should already be loading as soon as playlist parse completes - visible thumbs should already be cached/in memory before reveal, or as close as possible - reveal should feel like instant reward, not visible assembly Recent user feedback: - one later build got grid visibility “perfect and fast” - however, other builds showed black/empty panels, QR+URL without thumbs, or visible panel build-up ## Thumbnail and caching requirements User’s desired behavior: - as soon as playlist is parsed, visible thumbnail image downloads start immediately in background - no duplicate remote reloading for visible thumbs - thumbs should build once and not visibly rebuild unless user is actively changing them - lower visible tiles should not appear late after reveal - no visible black boxes for first visible set ## YouTube behavior requirements User’s hard requirement: - when activating a YouTube tile, the curtain/thumb must stay in front until the YouTube player is already built, loaded, showing video content, and paused - user must never see black box that later becomes the player - user wants player work to happen behind the curtain Also: - touching a selected tile that is already selected should do action - first click on an unselected YouTube tile should not launch player, only select ## iPad / touch requirements User reported several iPad-specific issues over time: - touch over tiles can block vertical scrolling - QR touch should show popup text instead of taking action - URL/QR touch behavior should be safe on tablet - page can visibly drain battery if there is too much rebuild/churn - no visible scroll-time rebuilding of thumbs One later build reportedly improved QR touch popup behavior on touch devices. ## Resolution dropdown requirements This was previously considered finalized, then regressed. User’s finalized spec: - every item begins with pixel dimensions - list sorted by X dimension - then explanation/description - paper formats must include portrait and landscape variants with those words included in description - keep the exact sales wording for DCI 8K - specifically preserve: **“Digital Cinema Initiatives, 17:9”** - default should be DCI 8K - do not lose the magic wording again ## Build/version/file-name rules User wants visible filename/build label in the control bar. Requirements: - keep the filename visible in control bar - it must derive from truthful current constants / actual current html filename - no stale hardcoded file names or old version strings anywhere - if old wrong code exists and is unnecessary, delete it instead of layering workaround - zip filename should match the beta file inside it - package timestamps should use LA time for sorting purposes where possible ## External dependency direction Not top priority until core bugs are fixed, but important next phase: - once download + image caching are optimized and app is live, next immediate operation is to eliminate all external dependencies - user wants local QR generation - no JS references for QR over the network - no QR traveling over network - WYSIWYG between on-panel appearance and downloaded thumb is required At one point it was verified that an old broken file still used external QR libraries and was **not** truly local QR. ## Dead code / cleanup expectations User explicitly asked: - do not just disable old click handlers, remove them - remove legacy/unused code around download function - remove irrelevant old branding JSON references - remove legacy footer references if unnecessary Specific irrelevant entries the user called out: - `./_MyAnythingListBrandingText.json` - `https://define.com/_MyAnythingListBrandingText.json` ## Key regression pattern from this session The app frequently improved one thing while breaking another. Especially common regressions: - download works once, then never again - download button changes text or disappears - controls become noninteractive - grid hangs on blank/white/black screen - startup reveal regresses - stale filename/version leaks back into control bar - panel 1 startup action rule regresses - YouTube curtain removal shows black box again - visible tiles assemble in front of user instead of being hidden until ready ## Recommended priority order for next instance 1. **Restore authoritative download behavior** - reliable repeated JPG download across all tiles - static button label forever - no status path inside button - no once-only object URL issue - no hidden alternate code paths 2. **Lock startup reveal behavior** - header and command bar visible first - grid hidden until panel 1 thumb is real and visible - no visible assembly of grid chrome - visible first-row thumbs should already be in transfer/preload ASAP after playlist parse 3. **Lock selection/action state machine** - first click selects - selected tile click acts - startup panel 1 counts as already selected 4. **Lock YouTube curtain behavior** - never reveal black before paused loaded frame exists 5. **Restore finalized resolution dropdown wording/order** - without touching the stabilized download path 6. **Then remove external dependencies** ## Most useful warning for next instance Do **not** over-layer more patches onto the download path. The user specifically asked for: - no patches - no legacy code - no dead code around download - one authoritative implementation The next instance should prefer a clean, singular download flow over stacked overrides. ## User sentiment / working style The user is highly detail-sensitive and notices behavioral feel, not just binary success. They care deeply about: - immediacy - perceptual smoothness - truthfulness of displayed build metadata - not exposing intermediate assembly/build states - preserving finalized wording once settled They will rapidly detect regressions in polish even if a feature technically works. ## Final note The user asked for this handoff because the session became too slow. They want a fresh instance to continue from here.