Erik
936628065c
feat(frontend): replace inventory pagination with one-shot load + incremental scroll render
...
Sort/filter always operate on the full result set server-side; the whole set
(up to 10k) loads in one request and rows render progressively on scroll.
Over-cap searches show a "narrow your filters" notice.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 21:52:50 +02:00
Erik
e4960eae5e
build(frontend): deploy integer OD rendering
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 19:14:58 +02:00
Erik
9f908aed9e
fix(inventory-go): backfill-od clears stale od_rating for non-matching weapons
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 19:12:40 +02:00
Erik
2395bd6267
feat(frontend): render weapon OD as integer (0-10 loot-profile scale)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 19:10:03 +02:00
Erik
cbc8785c47
feat(inventory-go): recompute OD from VTank loot-profile ladder (0-10 / casters 0-7)
...
Replaces the UtilityBelt over-retail float with the user's actual in-game OD:
per-weapon-type MaxDamage/elemVsMon thresholds from Loot.utl. Bows/thrown
deferred (null) pending a computed-stat calibration. (L) Dagger MS bucket
folded into (L) Dagger (indistinguishable by captured fields).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 19:09:22 +02:00
Erik
7a11122a26
docs: spec + plan to recompute OD from VTank loot profile (0-10 scale)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 19:06:02 +02:00
Erik
cc403240d6
build(frontend): deploy weapon-type-by-skill filter + OD column
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 08:50:39 +02:00
Erik
29f8bec046
fix(frontend): only show weapon-type chips when item type is Weapons
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 08:48:27 +02:00
Erik
d6fa0fa9b0
feat(frontend): multi-select weapon-type-by-skill filter + auto OD column
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 08:44:00 +02:00
Erik
b4bee24773
feat(inventory-go): weapon_types multi-select filter by skill (melee/missile/war/void)
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 08:41:43 +02:00
Erik
29d400f86a
docs: spec + plan for weapon-type-by-skill multi-select filter + OD column
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 08:38:18 +02:00
Erik
d5febaabda
build(frontend): deploy weapon OD rating
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 08:23:07 +02:00
Erik
1dd95819c7
feat(frontend): weapon OD rating filter, column, and detail row
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 08:22:54 +02:00
Erik
fb6b54f9bd
feat(inventory-go): min_od/max_od search filters + od sort
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 08:05:03 +02:00
Erik
3c0a8d9de8
feat(inventory-go): POST /admin/backfill-od recompute endpoint
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 08:04:00 +02:00
Erik
e07a9459cd
feat(inventory-go): store od_rating at ingest + schema column
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 08:03:57 +02:00
Erik
9b2f28d942
fix(inventory-go): add Prodigal Spirit Drinker effect; document dmgMod key substitution; test wand mastery fallback
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 08:00:22 +02:00
Erik
99f394d1ef
docs(spec): OD — add missing Prodigal Spirit Drinker effect, document dmgMod key substitution
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 07:58:36 +02:00
Erik
f75a236f54
fix(inventory-go): OD variance orientation per UB source; exact SpellInfo change/bonus semantics; missile golden test
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 07:46:07 +02:00
Erik
16077633c5
docs: correct OD spec/plan — variance orientation per UB source, SpellInfo change/bonus semantics
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 07:43:26 +02:00
Erik
231e6e799f
feat(inventory-go): Mag-Tools OD weapon rating calculation (od.go)
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 07:39:49 +02:00
Erik
f92d158fd0
docs(plan): weapon OD rating implementation plan
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 07:29:10 +02:00
Erik
10f8d135e5
docs(spec): weapon OD rating — compute at ingest, filter in search
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 07:26:32 +02:00
Erik
71f235c8b1
feat(frontend): inventory item-state filter — Any/Equipped/Not equipped radios, moved under Characters
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 06:59:22 +02:00
Erik
4e1b9f4a1f
build(frontend): deploy hardened inventory search
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 06:43:07 +02:00
Erik
edbf7086a6
fix(frontend): harden inventory search — q= validation, error boundary, stable selection, URL throttle
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 06:41:54 +02:00
Erik
ae24cad458
build(frontend): deploy inventory search redesign
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 06:31:25 +02:00
Erik
66ee4bd82b
feat(frontend)!: replace inventory.html with /?view=inventory (set analysis dropped)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 06:30:59 +02:00
Erik
559fd6596a
feat(frontend): inventory item detail panel
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 06:26:55 +02:00
Erik
4735aa72e9
feat(frontend): inventory chips row + results table (sort, columns, paging, keyboard)
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 06:26:38 +02:00
Erik
0533e2b9ee
feat(frontend): inventory filter sidebar (characters, type, slots, cantrips, ratings, sets, state, reqs)
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 06:22:10 +02:00
Erik
9a9b33a528
feat(frontend): /?view=inventory route + inventory page scaffold + dark CSS
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 06:16:12 +02:00
Erik
6fd87a3751
feat(frontend): useInventorySearch hook (debounced abortable search, URL state)
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 06:09:47 +02:00
Erik
5ddcecaece
feat(frontend): inventory search types + filter/column constants
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 06:09:22 +02:00
Erik
93982ac3dd
docs(plan): inventory search redesign implementation plan
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 06:06:41 +02:00
Erik
edf76f50db
docs(spec): inventory search redesign — React full-page view + approved mockup
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 05:57:10 +02:00
Erik
7096f30566
feat(inventory-go): wire spell filters into /search/items; harden empty-input guards
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-14 23:53:38 +02:00
Erik
4edf94f416
feat(inventory-go): build EXISTS conditions for spell filter params
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-14 23:44:51 +02:00
Erik
b0a6b494bf
feat(inventory-go): spell name -> ID matchers for search spell filters
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-14 23:37:28 +02:00
Erik
bd9c1ba556
docs(plan): inventory spell filters implementation plan; spec: reuse existing slots UI
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:32:53 +02:00
Erik
aa3139b586
docs(spec): inventory search spell filters + jewelry-type selection
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:26:29 +02:00
Erik
5f7b4dcd55
fix(tracker-go): key login rate limiter on X-Real-IP, not spoofable XFF
...
nginx's X-Forwarded-For is $proxy_add_x_forwarded_for, which only appends
to whatever the client sends — a forged leftmost hop passed straight
through, letting an attacker rotate spoofed values to dodge the 5s login
cooldown. X-Real-IP is set by nginx to $remote_addr on every proxied
location and can't be forged by the client, so key on that instead.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-04 22:43:43 +02:00
Erik
db534ea389
fix(inventory-go): restore GET /inventory/{name} (live Inv window was empty)
...
The Go cutover omitted get_character_inventory; the React InventoryWindow
fetches GET /inventory/{name} and got 404 -> empty. Port the endpoint:
per-character items with placement (current_wielded_location/container_id/
items_capacity), mana (current_mana/max_mana from original_json IntValues),
icon overlays, and join-table combat/req/enh/rating stats; material-prefixed
name. Returns {character_name,item_count,items}.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 21:44:16 +02:00
Erik
4bc51a1f48
feat(suitbuilder): Select All / Clear All toggle for Legendary Wards
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 21:24:52 +02:00
Erik
09bde83325
feat(suitbuilder): CD0/CD1/CD2 allowed-tier checkboxes (replace dead crit min/max)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 20:36:45 +02:00
Erik
75a735d589
feat(suitbuilder): apply CD-tier filter in loadItems (before domination)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 20:35:20 +02:00
Erik
7155055072
feat(suitbuilder): CD-tier filter helpers + tests; gate inventory-go build on go test
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 20:35:20 +02:00
Erik
593e99894f
feat(suitbuilder): add allowed_crit_damage constraint field
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 20:35:20 +02:00
Erik
dfdfd41882
docs: implementation plan for suitbuilder CD-tier filter
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 20:30:26 +02:00
Erik
f7fd6415a9
docs: design for suitbuilder CD-tier filter (CD0/CD1/CD2 toggles)
...
Per-search filter selecting which crit-damage tiers are allowed on armor.
Default (all allowed) is byte-identical to current behavior; "prefer highest
allowed tier" falls out of existing scoring. Go-only (live solver); Python
copy left frozen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 20:14:54 +02:00