Commit graph

2342 commits

Author SHA1 Message Date
4f2691ef43 [WV2] Switch search to text-based filter syntax
Replace the structured search filter approach with from_text(), enabling
the full search syntax (is:nc, occupies:background, user:owns, etc.) in
a single text field.

Changes:
- Search form now uses single `q` text param instead of `q[name]`
- Controller uses Item::Search::Query.from_text instead of from_params
- Auto-fit filter applied via .merge(Item.fits(body_id)) in controller
- Added error handling for Item::Search::Error
- Updated pagination param from `q[page]` to `page`
- Removed build_search_filters method (no longer needed)
- Fixed outfit_state_params helper to handle q as string

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 21:07:54 -08:00
ff7c590790 [WV2] Add ownership and wishlist badges
Show "Own" (green) and "Want" (blue) badges on item cards when a logged-in user has items in their closet lists. Badges appear on both search results and outfit items.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 21:03:36 -08:00
8d728c84d1 [WV2] Add zone badges to search results
Show which zones each item occupies in search result cards. Zone badges appear as small, muted labels (e.g., "Background", "Hat", "Static") after the NC/NP and date badges. Items that occupy multiple zones show multiple badges.

Zone badges only appear in search results, not in outfit items, since outfit items are already grouped by zone which provides sufficient context.

Implementation:
- Created zones badge partial to render zone labels from item appearances
- Updated controller to load item appearances with zone data for search results
- Pass appearance data through the rendering chain (search_results → item_card → item_card_content)
- Added subtle CSS styling for zone badges (light gray background, gray text)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 20:54:00 -08:00
4ab1426c61 [WV2] Fix bug for item info link when item is worn 2026-02-15 20:37:39 -08:00
72ac4a5f2e Merge branch 'claude/hopeful-edison' into feature/wardrobe-v2 2026-02-15 20:33:18 -08:00
602e928180 [WV2] Add item info links
Add an info link (ℹ️) to each item card that opens the item's detail
page in a new tab. The link is:
- Subtle and hidden by default (opacity: 0)
- Visible on hover or focus-within for mouse/keyboard users
- Always visible (60% opacity) on touch devices
- Accessible with proper aria-label
- Opens in new tab with target="_blank" and rel="noopener"

This is the first commit of Phase 2 (Detail-Oriented Experience),
adding contextual navigation to item details.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 20:32:11 -08:00
d02afd87e8 [WV2] Add Phase 2 implementation plan 2026-02-15 19:53:23 -08:00
d4e2f1c1d8 [WV2] Revise migration plan details
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.
2026-02-15 19:14:20 -08:00
def8a3e694 Merge branch 'main' into feature/wardrobe-v2 2026-02-15 19:03:14 -08:00
c51dd611a5 Add scraping for Styling Studio "Restyle" exclusives 2026-02-15 19:02:53 -08:00
75769304c1 Fix CORS bug when downloading in Chrome
Chrome has a known issue where `Vary: Origin` is not respected by its in-memory cache w/r/t CORS. By requesting the original image with `crossorigin="anonymous"` set, we provide `Origin` during this request, which gets the appropriate CORS response set in the cache.
2026-02-07 00:21:56 -08:00
f4b1309149 [WV2] Stabilize IDs for pose picker outfit viewers
This should help with the morphing for the main preview
2026-02-06 19:27:22 -08:00
f13481783d Merge branch 'main' into feature/wardrobe-v2 2026-02-06 19:24:30 -08:00
0691153101 Stabilize IDs for outfit viewer component 2026-02-06 19:22:02 -08:00
f9b040c20b Upgrade Idiomorph to 0.7.4
This seems to fix some morphing issues, whew!
2026-02-06 19:19:14 -08:00
0a9c346fa6 [WV2] Minor update to WV2 migration doc 2026-02-06 18:11:11 -08:00
6f7b307e39 [WV2] Fix bug with play/pause visibility 2026-02-06 17:50:32 -08:00
b462272dc3 [WV2] Add search keyboard shortcuts 2026-02-06 17:20:10 -08:00
10e2140045 [WV2] Progressive enhancement for item search 2026-02-06 17:05:01 -08:00
36a28cff10 [WV2] Add progressive enhancement for outfit item list toggles
Rather than just buttons, upgrade to radio buttons when we have JS.
2026-02-06 16:42:42 -08:00
81b60eefad [WV2] Unify auto-submit behaviors into a shared web component 2026-02-06 11:29:04 -08:00
9baa64d39a [WV2] Unify common CSS patterns 2026-02-06 09:17:37 -08:00
3582b3674b [WV2] Remove unnecessary worn/closeted state tracking from helper fn 2026-02-06 09:10:37 -08:00
d0acb1c7e5 [WV2] Use variables for colors 2026-02-06 09:09:58 -08:00
0a82ed7b68 [WV2] Reorganize partials into subdirectories 2026-02-06 08:11:19 -08:00
fd881ee31d [WV2] Support closeted items as well as worn items 2026-02-06 07:54:09 -08:00
f5ad5d2b17 [WV2] Simplify canceling outfit renaming
Don't need a button anymore, with focusout and escape doing it
2026-02-05 22:01:45 -08:00
d7c561f91d [WV2] Use outfit name for page title 2026-02-05 21:58:27 -08:00
6fa4e57184 [WV2] Outfit renaming as an atomic operation 2026-02-05 21:56:23 -08:00
0d4b553162 [WV2] Outfit saving first draft 2026-02-05 20:47:05 -08:00
5e68d3809c [WV2] Fix syncing for play/pause state across page morphs
Reproduce:
1. Add an item with animations, and play them.
2. Remove the item.
3. Add it back.
4. Observe the button shows up in "Paused" state, even though it's playing.

This is because the server-side template wasn't doing anything to try to keep the play/pause button it renders in sync with the current saved state in the cookies, so it was always causing a morph to the pause state. Now we listen to the cookie instead!

I also updated the JS behavior to be a bit more consistent: treat the behavior as defaulting to true, unless it's explicitly set to the string "false".
2026-02-05 19:15:09 -08:00
ff3dd2249e [WV2] Fix Safari-specific bug for play/pause button state 2026-02-05 19:03:17 -08:00
97a035b3a3 [WV2] Fix bug where play/pause button shows even after anims removed 2026-02-05 18:59:08 -08:00
d7b1f0e067 [WV2] Minor tweaks to look more like the real wardrobe 2026-02-05 18:49:07 -08:00
4503c12a1f [WV2] Make show.css a bit more manageable 2026-02-05 18:43:02 -08:00
e694bc5d05 [WV2] Minor UI improvements to pose picker 2026-02-05 18:35:10 -08:00
fc93239482 [WV2] Scroll selected alt style into view 2026-02-05 18:17:34 -08:00
b7bbd1ace3 [WV2] Simplify pose vs style picking
Rather than surface the fact that pose and style are independent values, in this change we treat them as basically mutually exclusive appearance options.

If there's no alt style selected, a pose option is visibly selected instead. If there's an alt style selected, no pose option is visibly selected (even though the data model contains one), and selecting one removes the alt style.
2026-02-05 18:11:01 -08:00
3b471fcb05 [WV2] Add alt style picker 2026-02-05 18:04:49 -08:00
fd2940880f [WV2] Update migration status doc 2026-02-05 17:33:30 -08:00
df043b939e Support GET requests for /pets/load 2026-02-05 17:17:46 -08:00
304a7ac9e1 Add 2min items:auto_model cron job 2026-02-05 17:07:52 -08:00
366158b698 Add time frames to the Top Contributors list
Note that these queries are a bit slow. I don't think these new subpages will be accessed anywhere near often enough for their ~2sec query time to be a big deal. But if we start getting into trouble with it (e.g. someone starts slamming us for fun), we can look into how how cache these values over time.
2026-01-20 19:54:22 -08:00
b03b32c538 Merge branch 'main' into feature/wardrobe-v2
# Conflicts:
#	app/models/outfit.rb
#	spec/models/outfit_spec.rb
2026-01-20 18:53:21 -08:00
04ed182cef First draft of auto-modeling
Run `rails items:auto_model`! We'll set this up on a cron if we continue to be satisfied with the results.
2026-01-20 18:37:17 -08:00
fff8079a63 Remove temporary files used in previous glitch-fixing commit
This reverts commit 08a64d4987.
2026-01-19 11:15:33 -08:00
08a64d4987 Remove glitch from items resolved by the new renderer fix
I'll revert this commit in a sec, these are just temporary files I used to audit our assets with the `DISPLAYS_INCORRECTLY_BUT_CAUSE_UNKNOWN` glitch, and remove it from the ones I've decided seem functional now.

This commit is intended as a historical record of what we changed in the database and how and why.

```
["DISPLAYS_INCORRECTLY_BUT_CAUSE_UNKNOWN"] -> [] | A Grey Day Background | Item 39708 | Asset 39694 | http://impress.openneo.net/swf-assets/39694?playing=true
["DISPLAYS_INCORRECTLY_BUT_CAUSE_UNKNOWN"] -> [] | A Haunting Path Background | Item 78585 | Asset 468669 | http://impress.openneo.net/swf-assets/468669?playing=true
["DISPLAYS_INCORRECTLY_BUT_CAUSE_UNKNOWN"] -> [] | Autumnal Scenescape | Item 80632 | Asset 497773 | http://impress.openneo.net/swf-assets/497773?playing=true
["DISPLAYS_INCORRECTLY_BUT_CAUSE_UNKNOWN"] -> [] | Beautiful Butterfly Foreground | Item 83714 | Asset 558774 | http://impress.openneo.net/swf-assets/558774?playing=true
["DISPLAYS_INCORRECTLY_BUT_CAUSE_UNKNOWN"] -> [] | Food Fight Shower | Item 57781 | Asset 139542 | http://impress.openneo.net/swf-assets/139542?playing=true
["DISPLAYS_INCORRECTLY_BUT_CAUSE_UNKNOWN"] -> [] | Glowing Light Sky Background | Item 54176 | Asset 112686 | http://impress.openneo.net/swf-assets/112686?playing=true
["DISPLAYS_INCORRECTLY_BUT_CAUSE_UNKNOWN"] -> [] | MiniMME11-S1: Approaching Eventide Skirt | Item 65801 | Asset 225267 | http://impress.openneo.net/swf-assets/225267?playing=true
["DISPLAYS_INCORRECTLY_BUT_CAUSE_UNKNOWN"] -> [] | MiniMME11-S1: Approaching Eventide Skirt | Item 65801 | Asset 225277 | http://impress.openneo.net/swf-assets/225277?playing=true
["DISPLAYS_INCORRECTLY_BUT_CAUSE_UNKNOWN"] -> [] | MiniMME11-S1: Approaching Eventide Skirt | Item 65801 | Asset 225805 | http://impress.openneo.net/swf-assets/225805?playing=true
["DISPLAYS_INCORRECTLY_BUT_CAUSE_UNKNOWN"] -> [] | Mutant Containment Suit | Item 81643 | Asset 520525 | http://impress.openneo.net/swf-assets/520525?playing=true
["DISPLAYS_INCORRECTLY_BUT_CAUSE_UNKNOWN"] -> [] | Negg Fountain Background | Item 82391 | Asset 537342 | http://impress.openneo.net/swf-assets/537342?playing=true
["DISPLAYS_INCORRECTLY_BUT_CAUSE_UNKNOWN"] -> [] | Rainbow Fountain Background | Item 36747 | Asset 27886 | http://impress.openneo.net/swf-assets/27886?playing=true
["DISPLAYS_INCORRECTLY_BUT_CAUSE_UNKNOWN"] -> [] | Written Word Shower | Item 51134 | Asset 94213 | http://impress.openneo.net/swf-assets/94213?playing=true
["DISPLAYS_INCORRECTLY_BUT_CAUSE_UNKNOWN"] -> [] | Starry Glowstone Path Background | Item 74542 | Asset 390340 | http://impress.openneo.net/swf-assets/390340?playing=true
```
2026-01-19 11:14:22 -08:00
dd2f6be79f Fix HTML5 rendering differences in us vs Neopets
I pulled the source map for the Neopets renderer, and had Claude compare it to ours. It noticed the key issue responsible for a high number of unsolved rendering issues: we weren't setting up the `MotionGuidePlugin`, which I've never heard of before. Whoops!

In addition to this, we made some other minor fixes for consistency:
- Use whatever Stage object the library exports (will sometimes be StageGL)
- Resize the stage rather than the clip (shouldn't matter?)
- Send a callback to the library when done (I'm not aware of any anims that use this but some may!)

The specific item I was debugging was "Food Fight Shower", and it works now! But I also know we've had a solid handful of similar inexplicable wild rendering bugs, which I imagine this solves as well.

We might want to consider auditing our Known Glitches on SWF assets to see how many of them can be removed, now that this is resolved.
2026-01-19 11:00:59 -08:00
6aff39dfed Always show rack-mini-profiler in development 2026-01-17 22:16:33 -08:00
5f342ae0ee Upgrade rack-mini-profiler 2026-01-17 22:16:33 -08:00