Commit graph

122 commits

Author SHA1 Message Date
NotARoomba
6cdebfa56f aaa 2026-03-03 12:53:31 -05:00
NotARoomba
8af711ef7e actuall 2026-03-03 12:41:29 -05:00
End Nightshade
73e709fe2d
format omg why didnt ever run this 2026-03-03 07:31:25 -07:00
End Nightshade
827f285438
guh hackatime work 2026-03-02 21:41:00 -07:00
NotARoomba
df2039908f update logic fix 2026-02-23 15:35:59 -05:00
End Nightshade
3e897fbd26
chore: tighten typings and frontend fixes (admin/shop, orders) 2026-02-23 13:03:25 -07:00
NotARoomba
c9643e3df4 new shop calcs 2026-02-23 14:34:42 -05:00
End Nightshade
89069f3fa9
fix(admin): fix EV simulation using perRollMultiplier as base cost multiplier
Same bug as backend — perRollMultiplier (0.05) was applied as a direct
multiplier on base roll cost in the admin shop EV simulation, making
everything appear exploitable (red).
2026-02-22 18:46:49 -07:00
End Nightshade
55477673ab
fix(frontend): resolve all 5 pre-existing TypeScript errors
- i18n: widen Translations type to accept any string values
- home: fix async onMount returning cleanup function
- CreateProjectModal: import Project from stores instead of local interface
- user profile: non-null assert githubUrl inside existence check
2026-02-22 18:42:59 -07:00
End Nightshade
f85fde1937 feat(frontend): fetch server config on startup for canonical pricing
- Add fetchServerConfig to config.ts (fetches /admin/config endpoint)
- Call fetchServerConfig in +layout.svelte onMount for early client init
- Format long lines in admin dashboard page
2026-02-22 17:04:45 -08:00
End Nightshade
7367dac120 feat(shop): add displayRollCost and perRollMultiplier frontend support
- Add displayRollCost to ShopItem interface in stores
- ShopItemModal and shop page prefer server-provided displayRollCost
- Clean up as-any casts in ShopItemModal roll cost computation
- Admin shop: add perRollMultiplier to item type and EV simulation
- Remove unused modalEV derived (dead code, formEV used in template)
2026-02-22 17:04:45 -08:00
End Nightshade
719b4cb04d feat(admin): add order delete confirmation modal with undo toast
- Delete modal requires reason (min 3 chars) before sending DELETE
- Undo toast allows 30-second window to restore deleted order
- Admin user detail page: replace soft-delete + DELETE with single DELETE
  call including reason payload
- Add lightweight DOM toast helper for status messages
2026-02-22 17:04:45 -08:00
NotARoomba
2348592b58 no hackatiem id sent 2026-02-21 01:14:19 -05:00
NotARoomba
78a0ef69da fix hackatimea aaaaaaaaaaa 2026-02-21 01:05:56 -05:00
NotARoomba
ca20718445 fix hackatime hopefully 2026-02-21 00:13:04 -05:00
NotARoomba
cd7a078e57 hackatime banned ppl 2026-02-20 20:06:57 -05:00
End Nightshade
1fbcdaab93
idek 2026-02-20 17:33:06 -07:00
NotARoomba
2a0a9ec79b non buyer refinery 2026-02-20 18:55:55 -05:00
NotARoomba
fa338e9229 maybe final shop update 2026-02-20 18:40:22 -05:00
NotARoomba
9421db9672 aaa 2026-02-20 18:15:20 -05:00
NotARoomba
a25fe6eae4 Merge branch 'main' of https://github.com/hackclub/scraps 2026-02-20 17:16:51 -05:00
NotARoomba
d76aedf85e sold out items section 2026-02-20 17:16:45 -05:00
sbeltranc
90a42307a7 Merge branch 'main' of https://github.com/hackclub/scraps 2026-02-20 16:56:45 -05:00
sbeltranc
d4bb402702 rework in the orders page 2026-02-20 16:55:59 -05:00
NotARoomba
9289d0bbe9 add in more admin info 2026-02-20 16:50:50 -05:00
End Nightshade
92fb79fe7a
feat(admin): show base and +1-upgrade roll costs in roll-cost placeholder and text 2026-02-20 13:37:24 -07:00
End Nightshade
674b7fe8f9
docs(admin): update pricing reference to match backend semantics (roll cost scales with effective probability, upgrade budget 3x) 2026-02-20 13:28:35 -07:00
Nathan
a8c3a05332 revert new budget 2026-02-20 10:32:39 -05:00
Nathan
ab6d711b49 add in cost breakdown 2026-02-20 10:14:54 -05:00
End Nightshade
aeb10b65ec
feat(admin): change rate to $4/hr and simplify order revert to single-step delete with logging
- change DOLLARS_PER_HOUR from 5 to 4 across backend and frontend
- merge soft-delete/restore/permanent-delete into single DELETE endpoint
- refund scraps, restore inventory, reverse penalties, and delete order row in one step
- add console.log for admin order reverts with full context
- simplify admin orders UI to single revert button with confirmation modal
2026-02-19 20:23:47 -07:00
End Nightshade
e55b939c3f
feat(shop): add admin roll cost override
- New nullable roll_cost_override column on shop_items (migration 0011)
- calculateRollCost uses override if set, otherwise auto-calculates
- Admin UI: new 'roll cost override' input with auto placeholder + reset button
- EV simulation and item cards respect the override
- Frontend shop page + ShopItemModal use override for display and affordability
- Backend try-luck endpoint uses override from locked row
2026-02-19 19:28:44 -07:00
End Nightshade
0a3e51e1e5
fix(admin): compute EV-safe upgrade costs against overridden scraps price
- calculatePricing now accepts optional priceOverride parameter
- When price is overridden, optimal pricing uses actual price for EV checks
- hasCustomPricing now also checks price mismatch
2026-02-19 19:18:33 -07:00
End Nightshade
37443fa48d
fix(shop): EV-safe pricing — iteratively increase upgrade cost until no level is exploitable
- calculateShopItemPricing now simulates all upgrade levels and bumps
  baseUpgradeCost until expectedTotalCost >= price at every level
- Synced to shop-pricing.ts (computeItemPricing) and frontend calculatePricing
- All price points from $5-$800 verified safe (house edge 0.2-18%)
- Show detailed required/available scraps in insufficient funds errors
2026-02-19 19:02:12 -07:00
End Nightshade
5633c3c4a5
fix(shop): show detailed insufficient funds error, add debug logging
- ShopItemModal: show required vs available scraps in error message
- Backend: log balance details on try-luck to debug mismatches
2026-02-19 18:39:02 -07:00
End Nightshade
42dd5eb229
fix(shop): fix try-luck error handling and roll cost display
- ShopItemModal: check data.error/data.success instead of response.ok
  (backend returns 200 for all responses including errors, so response.ok
  was always true and errors were silently swallowed, closing the modal)
- Shop page + ShopItemModal: use baseProbability for roll cost display
  (matching backend calculateRollCost which uses fixed base probability)
- Auth: anchor session cookie regex to prevent matching wrong cookies
- Auth: keep dev-mode reduced OAuth scopes
2026-02-19 18:29:15 -07:00
End Nightshade
0963b78cdb
fix(admin): sync pricing formula with backend, add scraps price override
- Fix upgradeBudget: was 3×price−rollCost, now 1.5×price to match backend
- Add direct scraps price override input (yellow border when overridden)
- Auto-detect overrides when editing existing items
- Update pricing model reference panel to match actual backend semantics
- Fix win condition display: show eff% × 17/20 threshold
2026-02-19 18:18:45 -07:00
Nathan
144993457a fix pricing 2026-02-19 16:32:41 -05:00
Nathan
ad001bd9ad add in markdown 2026-02-19 16:07:09 -05:00
Nathan
62a983f00d Update +page.svelte 2026-02-19 15:25:38 -05:00
Nathan
c7d0411fe5 Update +page.svelte 2026-02-19 14:52:00 -05:00
End Nightshade
b0c25fe2c8
fix(frontend): sync shop admin EV simulation with backend pricing semantics
- Use effectiveProbability (not baseProbability) for roll cost
- Add computeRollThreshold (17/20) for actual win chance calculation
- Rename EVSummary fields to bestPlayer* (remove old optimal*/base*/maxUpgrade*)
- Update modal form EV display to use new property names
- Add actualWinChance column to detailed EV table
- Simplify item card EV display to show house edge + best strategy
2026-02-19 10:53:22 -07:00
End Nightshade
0ed253ed99
feat(shop): change DOLLARS_PER_HOUR from 5 to 4 2026-02-19 09:53:24 -07:00
End Nightshade
5e445cbf9c
fix(shop): sync frontend pricing calc with backend and show optimal pricing in admin
- Fix calculatePricing: use 'price * 3.0 - rollCost' matching backend
  (was incorrectly using 'price * 1.5')
- Fix simulateEV: use baseProbability for rollCost (backend uses base,
  not effective probability for roll cost)
- Fix simulateEV: use effectiveProbability directly as win chance
  (backend has no threshold scaling, remove bogus computeRollThreshold)
- Fix house edge reference panel to reflect actual pricing model
- Add optimal pricing hint in add/edit modal showing server-calculated
  values with yellow highlights when fields diverge from optimal
- Add 'use optimal' button to reset pricing fields to calculated values
- Update shop-pricing.ts return type to Promise<number>
2026-02-19 09:53:00 -07:00
End Nightshade
93fee9d101
feat(admin): add shop pricing recalculation button
- Add POST /admin/recalculate-shop-pricing endpoint (admin only)
  that calls updateShopItemPricing() and returns updated item count
- Add recalculate button to admin dashboard under the admin-only
  tools section with loading/error/success states
- Pricing already recalculates on server startup; this gives admins
  a manual trigger after changing the calc formula or item data
2026-02-19 09:52:29 -07:00
End Nightshade
0fadf46be0
fix(shop): scale roll cost with effective probability and block refinery on out-of-stock items
- Roll cost now scales with effective probability (base + boosts - penalties)
  instead of being fixed at base probability. At any probability level p,
  expected roll spend = item price. Upgrades reduce variance, not expected
  value. The house edge is exactly the total spent on refinery upgrades.
- Block refinery upgrades on out-of-stock items (both frontend and backend)
- Frontend refinery page shows sold out badge instead of upgrade button
- Update pricing calculator upgrade budget to reflect new model
- Fix lint: remove debug forEach, != to !==, unused variable
2026-02-19 08:40:30 -07:00
Nathan
988b02c7d2 cph 2026-02-18 19:09:19 -05:00
Nathan
11cf5e632b admin button of doom to fraud squad 2026-02-18 12:23:13 -05:00
Nathan
e737cf7648 add fraud check and airlock 2026-02-18 10:59:51 -05:00
Nathan
7ec39c4ccc perm del and shop ricing 2026-02-17 17:41:24 -05:00
Nathan
c177a69a51 undo stuffs 2026-02-17 16:38:10 -05:00