Skip to content

hackclub/stasis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ee78fb3 · · May 16, 2026

History

749 Commits
Apr 10, 2026
Mar 5, 2026
Dec 13, 2025
May 16, 2026
May 16, 2026
May 16, 2026
May 7, 2026
May 5, 2026
May 6, 2026
Jan 13, 2026
May 12, 2026
May 7, 2026
May 5, 2026
Feb 5, 2026
May 13, 2026
Mar 27, 2026
Feb 14, 2026
* Fix 3 critical security/logic issues in inventory system - Verify caller is a team member or admin before allowing member removal (previously any authenticated user could kick anyone off any team) - Exclude cancelled orders from maxPerTeam quota calculations in both item display and order validation queries - Verify SSE subscribers belong to the requested team (or are admin) to prevent cross-team event snooping Co-Authored-By: Claude Opus 4.6 * Security hardening: comprehensive inventory system audit fixes - Add input sanitization (DOMPurify) to all user-supplied fields across inventory routes (team names, locations, item names, descriptions) - Fix IDOR: require team membership/admin to add members or view team details - Fix authorization: restrict member removal to self-leave or admin only - Fix race condition: use Serializable isolation on order stock transactions - Remove email from non-admin API responses to protect minor PII - Add requireInventoryAccess() gate to items, tools, teams, orders, rentals - Validate quantity (positive int), floor (1-N range), location (max 200 chars), team name (max 100 chars), imageUrl (HTTPS-only, rejects javascript:/data:) - Add audit logging for all user actions (order place/cancel, rental create, team create/join/leave/delete/rename, member add/kick, badge assign) - Cap SSE connections (50/key, 500 total) to prevent DoS - Block team deletion when active orders or rentals exist - Fix shop purchase error re-throw that could leak internal state - Add import hardening (500 item cap, Infinity blocked, sanitized strings) Co-Authored-By: Claude Opus 4.6 * Add migration for inventory audit action enum values Co-Authored-By: Claude Opus 4.6 * Fix inventory prerender error with loading boundary * Fix Copilot review issues: inventory validation, notifications, team permissions * Fix Copilot review round 2: race conditions, validation, cart limits, partial checkout * Fix Copilot review round 3: lookup type mismatch, cart tracking, config NaN guard, import validation * Fix Copilot review round 4: SSE cleanup, import error handling, loading state, Slack escaping * Fix Copilot review round 5: team race conditions, nullable names, lock check, state refresh * Fix Copilot review round 6: rename race condition, tool input type guards * Fix Copilot review round 7: order state machine, cancel idempotency, serialization errors * Fix maxPerTeam input min value to match server validation --------- Co-authored-by: Amp Co-authored-by: Claude Opus 4.6 Co-authored-by: Clay Nicholson <[email protected]>ithub.com>uthored-by: Clay Nicholson <[email protected]>" class="Link--secondary" href="https://github.com/hackclub/stasis/commit/892929ef6badd6983c5293d1e8bb8093dfe30e18">Add inventory system for in-person hackathon (#13 * Fix 3 critical security/logic issues in inventory system - Verify caller is a team member or admin before allowing member removal (previously any authenticated user could kick anyone off any team) - Exclude cancelled orders from maxPerTeam quota calculations in both item display and order validation queries - Verify SSE subscribers belong to the requested team (or are admin) to prevent cross-team event snooping Co-Authored-By: Claude Opus 4.6 * Security hardening: comprehensive inventory system audit fixes - Add input sanitization (DOMPurify) to all user-supplied fields across inventory routes (team names, locations, item names, descriptions) - Fix IDOR: require team membership/admin to add members or view team details - Fix authorization: restrict member removal to self-leave or admin only - Fix race condition: use Serializable isolation on order stock transactions - Remove email from non-admin API responses to protect minor PII - Add requireInventoryAccess() gate to items, tools, teams, orders, rentals - Validate quantity (positive int), floor (1-N range), location (max 200 chars), team name (max 100 chars), imageUrl (HTTPS-only, rejects javascript:/data:) - Add audit logging for all user actions (order place/cancel, rental create, team create/join/leave/delete/rename, member add/kick, badge assign) - Cap SSE connections (50/key, 500 total) to prevent DoS - Block team deletion when active orders or rentals exist - Fix shop purchase error re-throw that could leak internal state - Add import hardening (500 item cap, Infinity blocked, sanitized strings) Co-Authored-By: Claude Opus 4.6 * Add migration for inventory audit action enum values Co-Authored-By: Claude Opus 4.6 * Fix inventory prerender error with loading boundary * Fix Copilot review issues: inventory validation, notifications, team permissions * Fix Copilot review round 2: race conditions, validation, cart limits, partial checkout * Fix Copilot review round 3: lookup type mismatch, cart tracking, config NaN guard, import validation * Fix Copilot review round 4: SSE cleanup, import error handling, loading state, Slack escaping * Fix Copilot review round 5: team race conditions, nullable names, lock check, state refresh * Fix Copilot review round 6: rename race condition, tool input type guards * Fix Copilot review round 7: order state machine, cancel idempotency, serialization errors * Fix maxPerTeam input min value to match server validation --------- Co-authored-by: Amp Co-authored-by: Claude Opus 4.6 Co-authored-by: Clay Nicholson <[email protected]>ithub.com>uthored-by: Clay Nicholson <[email protected]>" class="Link--secondary" href="https://github.com/hackclub/stasis/commit/892929ef6badd6983c5293d1e8bb8093dfe30e18">)
Apr 14, 2026
Mar 31, 2026
Dec 12, 2025
Mar 3, 2026
Dec 11, 2025
Mar 4, 2026
* Fix 3 critical security/logic issues in inventory system - Verify caller is a team member or admin before allowing member removal (previously any authenticated user could kick anyone off any team) - Exclude cancelled orders from maxPerTeam quota calculations in both item display and order validation queries - Verify SSE subscribers belong to the requested team (or are admin) to prevent cross-team event snooping Co-Authored-By: Claude Opus 4.6 * Security hardening: comprehensive inventory system audit fixes - Add input sanitization (DOMPurify) to all user-supplied fields across inventory routes (team names, locations, item names, descriptions) - Fix IDOR: require team membership/admin to add members or view team details - Fix authorization: restrict member removal to self-leave or admin only - Fix race condition: use Serializable isolation on order stock transactions - Remove email from non-admin API responses to protect minor PII - Add requireInventoryAccess() gate to items, tools, teams, orders, rentals - Validate quantity (positive int), floor (1-N range), location (max 200 chars), team name (max 100 chars), imageUrl (HTTPS-only, rejects javascript:/data:) - Add audit logging for all user actions (order place/cancel, rental create, team create/join/leave/delete/rename, member add/kick, badge assign) - Cap SSE connections (50/key, 500 total) to prevent DoS - Block team deletion when active orders or rentals exist - Fix shop purchase error re-throw that could leak internal state - Add import hardening (500 item cap, Infinity blocked, sanitized strings) Co-Authored-By: Claude Opus 4.6 * Add migration for inventory audit action enum values Co-Authored-By: Claude Opus 4.6 * Fix inventory prerender error with loading boundary * Fix Copilot review issues: inventory validation, notifications, team permissions * Fix Copilot review round 2: race conditions, validation, cart limits, partial checkout * Fix Copilot review round 3: lookup type mismatch, cart tracking, config NaN guard, import validation * Fix Copilot review round 4: SSE cleanup, import error handling, loading state, Slack escaping * Fix Copilot review round 5: team race conditions, nullable names, lock check, state refresh * Fix Copilot review round 6: rename race condition, tool input type guards * Fix Copilot review round 7: order state machine, cancel idempotency, serialization errors * Fix maxPerTeam input min value to match server validation --------- Co-authored-by: Amp Co-authored-by: Claude Opus 4.6 Co-authored-by: Clay Nicholson <[email protected]>ithub.com>uthored-by: Clay Nicholson <[email protected]>" class="Link--secondary" href="https://github.com/hackclub/stasis/commit/892929ef6badd6983c5293d1e8bb8093dfe30e18">Add inventory system for in-person hackathon (#13 * Fix 3 critical security/logic issues in inventory system - Verify caller is a team member or admin before allowing member removal (previously any authenticated user could kick anyone off any team) - Exclude cancelled orders from maxPerTeam quota calculations in both item display and order validation queries - Verify SSE subscribers belong to the requested team (or are admin) to prevent cross-team event snooping Co-Authored-By: Claude Opus 4.6 * Security hardening: comprehensive inventory system audit fixes - Add input sanitization (DOMPurify) to all user-supplied fields across inventory routes (team names, locations, item names, descriptions) - Fix IDOR: require team membership/admin to add members or view team details - Fix authorization: restrict member removal to self-leave or admin only - Fix race condition: use Serializable isolation on order stock transactions - Remove email from non-admin API responses to protect minor PII - Add requireInventoryAccess() gate to items, tools, teams, orders, rentals - Validate quantity (positive int), floor (1-N range), location (max 200 chars), team name (max 100 chars), imageUrl (HTTPS-only, rejects javascript:/data:) - Add audit logging for all user actions (order place/cancel, rental create, team create/join/leave/delete/rename, member add/kick, badge assign) - Cap SSE connections (50/key, 500 total) to prevent DoS - Block team deletion when active orders or rentals exist - Fix shop purchase error re-throw that could leak internal state - Add import hardening (500 item cap, Infinity blocked, sanitized strings) Co-Authored-By: Claude Opus 4.6 * Add migration for inventory audit action enum values Co-Authored-By: Claude Opus 4.6 * Fix inventory prerender error with loading boundary * Fix Copilot review issues: inventory validation, notifications, team permissions * Fix Copilot review round 2: race conditions, validation, cart limits, partial checkout * Fix Copilot review round 3: lookup type mismatch, cart tracking, config NaN guard, import validation * Fix Copilot review round 4: SSE cleanup, import error handling, loading state, Slack escaping * Fix Copilot review round 5: team race conditions, nullable names, lock check, state refresh * Fix Copilot review round 6: rename race condition, tool input type guards * Fix Copilot review round 7: order state machine, cancel idempotency, serialization errors * Fix maxPerTeam input min value to match server validation --------- Co-authored-by: Amp Co-authored-by: Claude Opus 4.6 Co-authored-by: Clay Nicholson <[email protected]>ithub.com>uthored-by: Clay Nicholson <[email protected]>" class="Link--secondary" href="https://github.com/hackclub/stasis/commit/892929ef6badd6983c5293d1e8bb8093dfe30e18">)
Apr 14, 2026
Mar 3, 2026
May 16, 2026
May 7, 2026
Apr 30, 2026
Dec 11, 2025
Jan 14, 2026
Apr 8, 2026
May 5, 2026
Feb 1, 2026
Feb 1, 2026
Mar 7, 2026
Dec 11, 2025
Mar 4, 2026
Dec 11, 2025
Apr 30, 2026

Stasis

stasis logo

We're bringing 100+ hack clubbers from all over the world to Austin, TX for a 4-day hardware hackathon. Design 3 projects, get to build them, and come down to Austin to meet talented teenagers from all over the world!

Development

First, populate the .env based on .env.example. On Hack Club Auth, create an application and set the callback url of http://localhost:3000/api/auth/oauth2/callback/hca

Install docker, then use ./dev.sh to start the dev environment.