I wasn't sweating the later phases that Claude generated even when I didn't 100% agree with them, but now I'm revising, esp now that I have more insight into what we're building.
5.2 KiB
Wardrobe V2 Migration Status
This document tracks the status of Wardrobe V2, a ground-up rewrite of the outfit editor using Rails + Turbo, replacing the React + GraphQL system embedded from Impress 2020.
Goal
Replace the complex React outfit editor (app/javascript/wardrobe-2020/) with a simpler Rails/Turbo implementation that:
- Eliminates dependency on Impress 2020's GraphQL API
- Uses progressive enhancement (works without JavaScript)
- Leverages Web Components for interactive features
- Reduces frontend complexity and maintenance burden
- Eventually enables full deprecation of the Impress 2020 service
Current Status
Wardrobe V2 is in active development on the feature/wardrobe-v2 branch. It's accessible at /wardrobe/v2 but is not yet linked from the main UI.
What Works
- Species/color/pose/style selection: Full picker UI with visual pose thumbnails, availability indicators, canonical fallback, and alt style picker with tabbed UI
- Item search: Text search with auto-filtering by pet compatibility, pagination, add/remove items
- Item display: Grouped by zone with multi-zone simplification, incompatible items section, NC/NP badges
- Outfit rendering: Uses the shared
<outfit-viewer>web component - Progressive enhancement: Everything works without JS; web components add auto-submit and smoother interactions
- Smooth navigation: Idiomorph DOM morphing reuses
<outfit-viewer>layers across full-page navigations - Outfit saving/loading: Load saved outfits at
/outfits/:id/v2, save changes (owner) or save copies (non-owner), editable outfit name, unsaved changes warning
Key implementation files
Code lives in app/controllers/wardrobe_controller.rb, app/views/wardrobe/, app/helpers/wardrobe_helper.rb, and app/assets/{stylesheets,javascripts}/wardrobe/.
Technical Approach
Simplicity over polish: Unlike many webapps, we value the simplicity of the codebase very highly, even at the expense of an ideal user experience. Start with simple solutions, even if the UX is clunky; then we'll iterate up as needed.
URL as single source of truth: All outfit state lives in URL params (species, color, pose, style, objects[], q[...]). Every interaction is a GET request that generates a new URL. No client-side state management. Browser back/forward work naturally.
Server-side rendering + Web Components: All HTML is generated server-side. Lightweight web components (<auto-submit-form>, <pose-picker-popover>, <tab-panel>, <outfit-viewer>) add interactivity without framework overhead.
Progressive enhancement: Submit buttons appear when JS is slow/disabled. Web components enhance forms with auto-submit on change.
Roadmap
Phase 1: Core Functionality (MVP) ✅
All core features are implemented:
- Species/color/pose selection with visual pose picker, canonical fallback
- Alt styles with tabbed Expressions/Styles picker, compatibility filtering
- Item search with auto-filtering by pet/style compatibility, pagination
- Closeted items (worn vs. closeted vs. absent states, zone-based mutual exclusivity)
- Outfit saving/loading (save, save copy, rename, unsaved changes warning)
- Progressive enhancement throughout (works without JS, web components add interactivity)
Phase 2: Detail-Oriented Experience
Additional information, additional search capabilities.
- Item UX: Item info links, zone badges, incompatibility tooltips
- User features: Closet/ownership/wishlist badges, filter search by owned/wanted
- Search filters: Can use the standard search syntax (
is:nc,occupies:background, etc.) - Improved pagination: Prev/next buttons, then a dropdown between them to choose an exact page
Phase 3: Advanced Features
Feature parity with Wardrobe 2020 where valuable.
- Preview controls: Download as PNG, copy link, settings (hi-res mode, archive toggle), HTML5 conversion badge
- Streamlined try-on: If you try on a background from search, then change your mind, restore the previous background
- Outfit auto-saving: Save outfit changes automatically over time, rather than requiring clicking Save
- Advanced search UI: Consider using Wardrobe 2020's autocomplete-based UI, or an advanced search form, or something else
Phase 4: Migration & Rollout
- Gradual rollout (staff → beta → default)
- Performance measurement and optimization (Turbo Frames for partial updates?)
- Visual polish and design refinement
- Remove wardrobe-2020 code and update Impress 2020 dependencies doc
Deferred / Maybe Never
- Support mode features (can keep using old wardrobe)
- Known glitches system (complex, low value)
- Appearance version pinning (niche)
- UC pet support (being phased out)
Open Questions
- Which Wardrobe 2020 features are actually essential vs. nice-to-have? (Need user feedback)
- How to handle the transition period (maintain both? redirect? feature flag?)
References
- Impress 2020 Dependencies - What still depends on the Impress 2020 service
- Customization Architecture - Data model deep dive
- Wardrobe 2020 source:
app/javascript/wardrobe-2020/(the authoritative reference for feature parity comparisons)