Unfit for Printv3.12.0

Changelog

Every feature, fix, and improvement.

GitHub
v3.12.0 Latest April 8, 2026

โœจFeatures4
  • activity: add error diagnostic digest with copy-to-clipboard support94290a1
  • activity: add stage-aware error UI for Discord launch flow and allow sidebar during gameplayc3e7891
  • add settings to profile pagea9b2eb4
  • web: streamline Discord Activity launch to skip header and land on main page2ddffd0
๐Ÿ›Bug Fixes2
  • add optional chaining for strict array index access in discord-activity auth52bd851
  • tts: set default tts voice to kokoro nicoleb9713c6
v3.11.0April 8, 2026

โœจFeatures24
  • animations: arc trajectory and landing bounce for card submission9d07617
  • animations: enhanced FLIP overshoot, reveal flash, and whoosh SFXbddf7cc
  • animations: hand rise/lower, zone glow, black card slide-in, judge pulsea0dc5b0
  • app-shell: game menu landing page with atmospheric overlay71d9c3d
  • app-shell: lobby browser game tile styling43179f1
  • atmosphere: ambient dust motes and submission ripple effects7759724
  • board: wire skip-player event up to page handler989500c
  • celebrations: game win card sweep, crown decoration, and golden card display32f6d90
  • celebrations: round win spotlight, screen shake, confetti, and card slide-off93dcbc1
  • celebrations: score fly +1 badge arcing to winner seatca0cb70
  • deck: add pulsing draw indicator on white deck in manual draw modea06ecee
  • game: propagate card pack name through black card pipeline491a7e2
  • header: add back button to desktop nav on non-home, non-game pagesf252b4e
  • home: redesign user menu, add hover effects, and add footer legal links2101986
  • index: add avatarUrl, handleLogout, handleLoginWithDiscord, isAdmin, isDiscordActivity helpers96a68fa
  • index: gate admin button with isAdmin, add Hub for Discord Activity mode6705776
  • index: replace raw buttons with UButton AppHeader style075aab9
  • index: replace top-right corner with avatar UDropdownMenu00c0277
  • manual-draw: add engine logic and interactive deck UI1ade22b
  • seats: add host skip button to player seat arc and overflow4d63f16
  • settings: add manual draw toggle to game settings UId67961d
  • settings: add manualDraw setting to types and mutations468d2fa
  • sfx: wire placeholder sound effects to phase transitions8396254
  • table: bubble skip-player event and pass isHost to seats34f3e86
๐Ÿ›Bug Fixes9
  • game: add z-index to GameHeader and clean up BlackCardDeck offsets0fde8b7
  • game: fix manual draw indicator visibility and allow drawing in any phase0f54ee8
  • index: remove redundant ClientOnly wrapper around admin button8e0b1e7
  • index: restore footer flow layout, add accessible alt to avatar img6aaf221
  • layout: add AppHeader to default layout8336a0a
  • layout: replace AppHeader with standalone back button in default layoutb5c8b33
  • nav: move UModal inside root div, show back button on all screen sizesd7f9340
  • responsive: scrolling background column count at all viewports5f1ef58
  • seats: add aria-labels, fix overflow button, add missing i18n keys for skip-player9dc0374
โ™ป๏ธRefactors2
  • background: replace GSAP animation with CSS-only infinite scroll803c455
  • tts: export TTSProviderType and adjust Kokoro Nicole speedda605b9
v3.10.0April 7, 2026

โœจFeatures45
  • activity: add resume game button, error display, and existing lobby redirect in hub1eeda2f
  • admin: add decoration delete with improved edit modal layout79181e0
  • create lobby immediately on button click, remove dialogaa2a32e
  • create lobby immediately on button click, skip formbd352d9
  • decorations: add @lottiefiles/dotlottie-web dependencyad03613
  • decorations: add AvatarLottie canvas-based animation renderer119f0a3
  • decorations: add imageFormat field to data model and Appwrite schema7da06c0
  • decorations: add lottie/dotlottie upload validation and format detection5b9f853
  • decorations: add playback speed control for Lottie attachmentsb54f532
  • decorations: dispatch lottie formats to AvatarLottie component97fc2dd
  • decorations: pipe imageFormat through all API endpointse725bf3
  • decorations: support lottie upload and preview in admin DecorationManager1b41ffa
  • discord: add speakingDiscordIds ref and subscribeToSpeaking7912556
  • discord: show speaking dot on player list avatars in game4227389
  • discord: show speaking ring on game table seat avatarsce4e86f
  • discord: show speaking ring on VC member avatars in huba9a262b
  • discord: subscribe to speaking events during activity launch52e19a4
  • expose maxPick and password from Y.Doc settings reactive bindingae9661f
  • i18n: add nav.hub key to all locale files4e3e05e
  • layout: add AppHeader to activity layout with header-height marginb808636
  • lobby: include expansion packs in default card selectionb53d875
  • lobby: replace status icon with interactive start game button1dcd31a
  • mobile: add read-aloud speak button to revealed judge cards9c1e021
  • mobile: wire readingAloud and read-aloud event through MobileGameLayout to MobileCardList344d117
  • nav: activity-aware nav items and hide join/create in Discord activityf110e17
  • read lobbyName from lobby doc instead of gameSettings join1b1dd47
  • remove Appwrite gameSettings fallback from game start route1ed2b5b
  • remove Appwrite settings Realtime from WaitingRoom, use Y.Doc reactive settingsf16ba46
  • remove documentId from game start request bodye06cdff
  • remove useGameSettings from game page, read settings from Y.Doc reactive5c70e72
  • rewrite ChatBox to use Y.Array chat โ€” remove Appwrite gamechat dependency868566a
  • save game settings to Y.Doc via mutations instead of Appwrite7108300
  • tts: add 1000-char input limit to kokoro-speak endpointfb0af32
  • tts: add Google Neural2 AU and UK voices, dynamic language codee022bf4
  • tts: add Google Neural2 provider constants and getProviderFromVoiceId5ae14ef
  • tts: add Google Neural2 server endpointba779e8
  • tts: add Google Neural2 voices to admin VoiceSwitcher9f5806e
  • tts: add google provider routing in useSpeech8afb110
  • tts: add google to TTSProvider type in GameBoard1b0680b
  • tts: add kokoro provider to useSpeechaac5398
  • tts: add kokoro to GameBoard TTSProvider typefecc87e
  • tts: add Kokoro voice constants and provider detection3bb65c3
  • tts: add kokoro-speak server endpointd289216
  • tts: redesign VoiceSwitcher with submenus, add Kokoro voices for all usersf0cd247
  • write lobbyName to lobby doc, remove gameSettings/chat Appwrite calls from useLobbybd5a1bc
๐Ÿ›Bug Fixes35
  • activity: allow free navigation in Discord Activity, only redirect /activity init when authed8d9cbb8
  • activity: preserve Discord query params during init redirect3ec840c
  • activity: redirect to init flow when Discord Activity opens on non-activity pageaf199f9
  • activity: remove nav bar push-down and double margin in activity layout6f50fbb
  • activity: use h-screen on loading splash to prevent overflow2c2759d
  • add lobbyName to Lobby type, remove as any cast in game/index.vue303b0e8
  • auth: serve animated GIF format for animated Discord avatars811e3b0
  • bot: prune orphan bot docs using client Y.Doc statefcfdfdc
  • cards: filter by active field instead of disabled for card packse3ca1b2
  • config: set user decorations collection ID in wrangler50fdae0
  • decorations: correct imageFormat type and fix lottie thumbnail sizing91a03a5
  • decorations: fix AvatarLottie canvas sizing, cleanup race, and prop reactivity175a61d
  • decorations: handle x-zip-compressed MIME type and guard non-object JSON83cacdf
  • decorations: improve Lottie animation rendering and sizinga34ca71
  • decorations: prevent Tailwind preflight from clamping scaled attachment images3005add
  • decorations: restore amber-400 rarity color changed by formatter910cb69
  • discord-sdk: replace broken openInviteDialog with shareLink, fix setActivity clear call3d6a06e
  • discord: add explicit imports for getDiscordIdFromPlayer in game components6c39563
  • discord: add rpc.voice.read scope for speaking event subscriptions482db6f
  • discord: provide non-empty message for shareLink invite5fb6399
  • game-engine: support chunked cardTexts for large card sets70acdd6
  • game: clean up game chat and settings on lobby teardown965445c
  • game: prevent duplicate game settings initialization on sidebar layoutab789e7
  • game: use WebSocket-only connection to eliminate SSE fallback 404 errors342fe2c
  • hub: fix indentation of centered wrapper, add missing blank line in CSSfc733db
  • mobile: constrain player strip to viewport width to prevent horizontal page overflowa12277f
  • pwa: exclude HTML from SW precache to prevent stale navigationb8fad97
  • pwa: remove navigateFallback to fix refresh redirect on SSR routesd4ec522
  • remove .value from currentUserId in ChatBox template (auto-unwrapped in Vue templates0865c34
  • resolve TypeScript errors after gameChat/gameSettings migrationbe8df2a
  • security: address CodeQL and Dependabot vulnerability alertscf3fd87
  • tts: remove auth requirement from kokoro-speak endpointd74b389
  • tts: resolve google voice name dynamically, add server allowlist7d63b6f
  • tts: use kokoroVoiceIdSet, remove dead currentVoice, widen dropdownd35e056
  • useConfirm: use useState for SSR-safe promise resolver4134c8a
โ™ป๏ธRefactors2
  • discord: extract getDiscordIdFromPlayer to shared util, fix speaking ring priority3e5f169
  • tts: use TTS_PROVIDERS constant for kokoro fallback voice2a76132
v3.9.1April 5, 2026

๐Ÿ›Bug Fixes1
  • api: correct userDecorations collection ID casing993d942
v3.9.0April 5, 2026

โœจFeatures28
  • admin: add dedicated /admin/lobbies page9eb81b7
  • admin: add mergeLobbies utility with tests for unified lobby monitora9c0231
  • admin: enhance status endpoint with server-side Teleportal+Appwrite mergee837eff
  • admin: replace inline lobby monitor with link card to /admin/lobbiesd036bd6
  • admin: rewrite LobbyMonitor as unified single-endpoint component60e53cd
  • decorations: add admin catalog update APId8389c3
  • decorations: add admin decorations page with catalog table, edit modal, and grant/revoke69fa70b
  • decorations: add admin grant, revoke, and list APIs3dd9955
  • decorations: add admin sync API to register decorations in DB0221816
  • decorations: add Appwrite collection, API routes, and useDecorations composable95547ef
  • decorations: add AvatarAttachment, upload routes, and decoration utilitiesa2364a7
  • decorations: add AvatarDecoration wrapper component4539bca
  • decorations: add category field to admin decoration manager43bee57
  • decorations: add category field to schema, types, and server routesd27eefe
  • decorations: add decoration picker to profile pagef19703a
  • decorations: add Discord Ed25519 signature verification utility28e24f3
  • decorations: add Discord webhook endpoint for entitlement fulfillment52feffb
  • decorations: add display utility for rarity pips, colors, and category iconsaa3e58f
  • decorations: add Founder's Ring decoration component3896d18
  • decorations: add public catalog API endpoint4bf56a7
  • decorations: add Store & Cosmetics section to admin dashboard8fc83af
  • decorations: add types, registry, and activeDecoration fields3fee419
  • decorations: allow equipping freeForAll decorations without ownership row352063b
  • decorations: rarity pip stack + category icons, remove equipped badge, 3-line description4fd026e
  • decorations: rewrite useDecorations to fetch catalog from DB with freeForAll and purchase supportc9d1b2c
  • decorations: sync activeDecoration through Y.Doc and lobby join flow4343fbc
  • decorations: update profile page with catalog descriptions and purchase buttons0af50cd
  • decorations: wrap all avatar sites with AvatarDecoration4c625fe
๐Ÿ›Bug Fixes19
  • admin: add error handling to unified status endpointd67e9f5
  • admin: address review feedback - import shared type, fix partial cleanup, add tab visibility pause819b007
  • admin: correct settingsMap type to Map<string, string | null>fc410a7
  • admin: improve error extraction in LobbyMonitor notifications940ecd9
  • api: correct Teleportal GC HTTP methods and add error handling1f688dc
  • auth: use server-side sessions for Discord Activity iframe auth07e15cf
  • decorations: add fetch error display, clear grant fields after action, fix USelectMenu value-key990fd8b
  • decorations: add id alias, fix startPurchase SDK call, add enabled to catalog projection2f8415d
  • decorations: add input validation to sync, Query.limit(1) to grant/revoke2dfa6d6
  • decorations: add row click handler to open edit modalc4c3dcb
  • decorations: bridge allDecorations to not spread slimmed registry18520fe
  • decorations: correct Discord webhook event type, add OAuth user lookup, add header validation7a5d7a4
  • decorations: remove redundant import, add aria-hidden to decorative corner icons380048c
  • decorations: rename decorations index.get to list.get for Nitro compatibility54e5be5
  • decorations: restore appwrite.json defaults, add category to sync route084b94d
  • decorations: show category icon in admin modal previewb15426b
  • discord: preserve query params when redirecting to Activity page4aa74a0
  • discord: use /appwrite proxy prefix to avoid colliding with app API routesaf7453d
  • lobby: self-heal orphaned player docs and clean up on teardowne54b675
โ™ป๏ธRefactors2
  • decorations: replace fixed size configs with dynamic ResizeObserver sizingb865152
  • decorations: split types, slim registry, add catalog config60dad5f
v3.8.0April 3, 2026

โœจFeatures8
  • discord: add Discord Activity lobby flow with instance-based lobby matchingfbe0468
  • discord: add pure mapping function for rich presence activityed15556
  • discord: add rpc.activities.write scope for rich presencefb6cdf7
  • discord: add useDiscordPresence composable with reactive watch8e3f596
  • discord: wire up rich presence in game pagefad8dcb
  • mobile: add mobile game layout with phase-driven UXd32e658
  • mobile: add player strip with scores and replace status bar dots with phase labelf899463
  • mobile: merge winner screens into unified view and add card flip SFX5b1c179
๐Ÿ›Bug Fixes8
  • admin: wrap admin page in ClientOnly for SSR compatibility8018475
  • ci: pass Discord client ID to build step90ce14e
  • discord: align client ID env var with NUXT_PUBLIC_ conventiona7b363f
  • discord: fall back to consent dialog when silent auth fails in DMs580e497
  • discord: patch URL mappings to proxy Appwrite requests through Discord CSP7a41294
  • discord: redirect Activity iframe to /activity and skip eager session fetch2219edc
  • game: add null guard for lobby ID in ensureGameSettings5cae13b
  • labs: add auth headers to submission delete requesta11ebbe
โ™ป๏ธRefactors3
  • discord: type-narrow phase and export DiscordActivity interfacec9414aa
  • ui: migrate ConfirmDialog to Nuxt UI v4 UModal slots API9b7b93d
  • ui: simplify AppHeader layout and move blur to nav buttonsd8c7d0c
v3.7.0April 2, 2026

โœจFeatures2
  • admin: replace native confirm/fetch with modal dialog and server proxy for Discord Activity98664bb
  • legal: add Terms of Service and Privacy Policy as dedicated pagesbba29ff
๐Ÿ›Bug Fixes2
  • deps: add pnpm overrides to resolve 22 dependabot security alerts30afb0b
  • discord: add debug logging to SDK close() for troubleshootinga44b3b6
v3.6.0April 2, 2026

โœจFeatures11
  • admin: move submission deletion to server API route and pin vited8fd0fd
  • Discord Activity (Embedded App) integration3f035ed
  • discord-activity: add activity entry page with auto-lobby creation7c477b0
  • discord-activity: add CSP frame-ancestors for Discord iframe6f2b553
  • discord-activity: add minimal activity layout for Discord iframe9a6df5e
  • discord-activity: add server auth bridge (Discord code โ†’ Appwrite sessionc9f32a0
  • discord-activity: add useDiscordSDK composable3e00fd9
  • discord-activity: dynamic layout switching and Activity-mode guards076170e
  • discord-activity: install embedded app SDK and add confige22592f
  • discord-activity: redirect Discord iframe from / to /activity054b930
  • discord: improve activity UX โ€” auth-only splash, close button, no auto-lobbya7d459a
๐Ÿ›Bug Fixes6
  • discord-activity: handle retry after auth, revert aggressive session guard271cd17
  • discord-activity: skip auto session fetch in Activity mode to prevent 401sc4b2efe
  • discord-activity: SSR-safe dynamic import, scoped CSP, clean configc3edbd5
  • game: update GameSettings permissions on host transferfac3dcf
  • license: change license from CC BY-SA 4.0 to CC BY-NC-SA 4.0352b539
  • security: patch Dependabot alerts โ€” bump dompurify, add pnpm overridesf70fe51
v3.5.0March 5, 2026

โœจFeatures8
  • admin: add admin API endpoints for lobby deletion and status updates2d89db7
  • admin: add web-worker-powered duplicate card scanner with live progress1934963
  • admin: fix card upload pipeline with auth headers, progress bar, and live log terminalda979fb
  • admin: overhaul admin card manager into routed multi-page layout5acaba4
  • auth: always sync Discord username and avatar on session load6673317
  • changelog: redesign changelog page with split layout and categorized timelineacdc837
  • game: fix race conditions in round advancement and card dealing8386760
  • speech: add stop() to TTS composables and front-page speak toggle68f1afd
๐Ÿ›Bug Fixes1
  • game: fix host demotion not clearing isHost flag on prior host87da09c
v3.4.0March 2, 2026

โœจFeatures7
  • add About page with how-to-play guide and FAQ55d2bb4
  • add Changelog page with GitHub releases via MDC02f690b
  • add cross-environment UUID v4 utility3de461b
  • game: add draw-cards API and async deck replenishment33c5bd2
  • game: add host reset-to-lobby with confirmation modal3da85e4
  • game: add real-time lobby browser with live game infoa4d04b3
  • i18n: add reset-game and about nav translation keys8b07d2a
๐Ÿ›Bug Fixes1
  • game: pass card-pack prop to WhiteCard for report popoverb979f28
โ™ป๏ธRefactors3
  • admin: replace tabs with responsive card grid layoutc1a4436
  • extract shared lobby actions composable and simplify AppHeadere3af1ac
  • game: fix spectator filtering in lobby mutations and chat33e8dc6
v3.3.1March 1, 2026

๐Ÿ›Bug Fixes1
  • WhiteCard: Add correct card type0b31702
v3.3.0March 1, 2026

โœจFeatures5
  • game: add confetti blast when your card wins3c596cd
  • game: add maxPick setting UI with pick selector and hintsb76226d
  • game: add WaitingHero component for lobby display92e6089
  • game: enhance Y.Doc engine with card dealing, settings sync, and spectator conversion99dc9af
  • i18n: add game settings and lobby i18n keys for all localesb79aa39
โ™ป๏ธRefactors1
  • game: migrate game actions from server API to Y.Doc engine5a65709
v3.2.0March 1, 2026

โœจFeatures3
  • admin: update dashboard for yjs lobby monitoringcbf527b
  • api: add teleportal yjs server for realtime game lobbies326a8e5
  • web: update game ui and endpoints to use yjs state structuresc39d7ce
๐Ÿ›Bug Fixes4
  • api: force node-fetch-native-with-agent to workerd-compatible aliases1ebc1dc
  • api: shim json-bigint to fix instanceof BigNumber crash on CF Workersed175e4
  • api: use local fetch shim to bypass node-fetch-native-with-agent on workerd28b15c4
  • api: use unenv aliases for node-fetch-native-with-agent workerd compatibilityc7ee1b8
โ™ป๏ธRefactors1
  • web: decompose useLobby into reactive yjs composablese5d8f24
v3.1.0February 26, 2026

โœจFeatures2
  • web: add dynamic browser tab title with phase and round infodf98a3e
  • web: add dynamic favicon with round badge and status indicatorsb366cdf
๐Ÿ›Bug Fixes1
  • api: use requireAuth and admin SDK in assertAdmin utility0358ddc
โ™ป๏ธRefactors1
  • web: replace Rybbit analytics plugin with no-op stub6c319b7
v3.0.0 โš  Breaking February 26, 2026

โš Breaking Changes1
  • nuxt-appwrite module is no longer used as a dependency
โ™ป๏ธRefactors1
  • inline nuxt-appwrite module for Cloudflare Workers compatibilityd54a625
v2.7.1February 26, 2026

๐Ÿ›Bug Fixes1
  • nitro: add Cloudflare Workers export conditions for node-appwrite75870a6
โšกPerformance1
  • cursor: rewrite custom cursor with dual-strategy architecturea0c3485
v2.7.0February 26, 2026

โœจFeatures1
  • seo: add dynamic OG metadata for shared lobby linksc3ef1c6
๐Ÿ›Bug Fixes1
  • build: remove node-appwrite external to fix Cloudflare Workers 500s13a59a9
v2.6.3February 26, 2026

๐Ÿ›Bug Fixes1
  • ci: add github-pages environment to deploy jobf633248
v2.6.2February 26, 2026

๐Ÿ›Bug Fixes1
  • ci: switch deploy from Pages to Workers with wrangler.toml466c579
v2.6.1February 26, 2026

๐Ÿ›Bug Fixes1
  • deps: update nuxt-appwrite to pre-built dist commit7b81094
v2.6.0February 26, 2026

โœจFeatures5
  • game: add dynamic card shadows and improved flip animations4cff990
  • game: add player rankings to table seats6869b64
  • game: add TTS read-aloud broadcast with resilient round advancement1522afa
  • game: add unique bot names and DiceBear avatarseebacd0
  • game: scale hand cards smaller at rest and enlarge on hoverb180d04
๐Ÿ›Bug Fixes4
  • auth: persist Discord avatar URL and improve refresh reliability49df350
  • game: harden submission endpoints with retry and version checks82d4a52
  • home: correct homepage markupb243d61
  • pwa: service worker redirect fixddcb97e
v2.5.0February 25, 2026

โœจFeatures7
  • game: add GSAP animations to round counter, phase label, and seat interactions891f2a3
  • game: add GSAP entrance animations to winner celebration with confetti127e023
  • game: add GSAP smooth custom cursor with SVG images9ee84b7
  • game: add judge indicator banner and dynamic table paddinga2f8fee
  • game: give bots unique names and DiceBear avatars6e2c13f
  • game: redesign GameOver screen with full leaderboard and stats18bf9d6
  • pwa: add install banner to install as pwac6334a4
๐Ÿ›Bug Fixes5
  • game: defer bot cleanup until lobby resets to waiting phase9eb9b29
  • game: harden audio loader with content-type checks and error resiliencebaeb6eb
  • game: host resets lobby on auto-return and manual continuea0c3fed
  • game: improve WhiteCard error handling for catch clause typingd6d8351
  • server: correct Appwrite SDK method signatures and add lobbyId validation8db9802
v2.4.1February 24, 2026

๐Ÿ›Bug Fixes9
  • admin: update function to properly fetch admin sessionf141dad
  • api: restore secure session auth on bot endpoints7075a21
  • api: rewrite requireAuth to use admin-SDK session verificationf0a053c
  • api: use node-appwrite import and add error handlingf14b2bf
  • build: externalize node-appwrite from Nitro bundle085c39a
  • build: removed redundant packages for build succession3e29493
  • client: send auth headers on all authenticated API calls8192af9
  • game: restore bot UI updates and Discord avatar after auth migrationfa85459
  • realtime: replace TablesDB .rows channels with standard .documents format492d18b
v2.4.0February 24, 2026

โœจFeatures15
  • admin: enrich reports with card text and add dismiss/card-action endpointsade5420
  • admin: move setup page into admin section with access guardde09acd
  • auth: add Discord avatar persistence and streamline login flowf587eec
  • bot: add staggered card play and simulated thinking delaysf616961
  • chat: implement message pagination and server-side system events06a4d39
  • game: add win-round and win-game sound effects54d9dc8
  • game: allow host to skip unresponsive judgesbe227ee
  • game: decompose GameTable into focused sub-components0c7392e
  • game: improve user hand card interaction with earlier snapshottingfcf460e
  • game: redesign game UI โ€” lobby, waiting room, player list, sidebar, and cardsb61497e
  • hand: enhance mobile hand interactions and drag threshold gestures8a0dd5c
  • i18n: add lobby players-needed short label across all locales3f64717
  • labs: add Labs page with card submission browsing and submission formd19a7dc
  • table: overhaul card animations and layout with GSAP physics515b3a0
  • ui: overhaul global UI โ€” header, footer, homepage, profile, and error pages192cbe6
๐Ÿ›Bug Fixes7
  • api: harden api endpoints and improve team fetching using labels5a6196b
  • bot: bot orchestrator40abb5a
  • bots: resolve bots not playing cards after watcher refactor342c936
  • game: delay game-over screen to allow winning card celebration to complete5a7dc5d
  • game: hide placeholder card animation snap to correct drop coordinateseec86d6
  • lobby: auto-delete lobby when last human player leavesa380a0e
  • security: migrate bot & reveal-card auth from body-based to session-based69934bb
โ™ป๏ธRefactors2
  • client: migrate client-side composables and utils to TablesDB SDK809e609
  • server: migrate all server-side API calls to Appwrite TablesDB SDK3f507f5
v2.3.0February 22, 2026

โœจFeatures1
  • game: add card play mode preferences with click, instant, and gesture submission6daa365
๐Ÿ›Bug Fixes4
  • auth: improve Discord OAuth error logging with status codes and request host522d97e
  • build: enable wasm compatibility2a1f018
  • og-image: migrate from custom Nitro endpoint to native nuxt-og-image componentf07ee51
  • web: remove nuxt-og-image to resolve Cloudflare Pages build error4b25a25
v2.2.0February 21, 2026

โœจFeatures6
  • api: add server-side chat endpoints with rate limiting029fdc2
  • api: add server-side player verification utility38552d4
  • api: add synchronized card reveal endpoint for judging phasebcce143
  • game: add bot player system with host-controlled AI56ac6b0
  • game: add centralized SFX registry and card fly-coordinate composable90cd65e
  • game: redesign game board with immersive table layout and physics-based card animationsb9481fe
๐Ÿ›Bug Fixes1
  • api: simplify Discord OAuth to use SDK method directlyb39b0a7
โ™ป๏ธRefactors1
  • api: migrate game endpoints to body-based userId verification042b1a3
v2.1.2February 20, 2026

๐Ÿ›Bug Fixes1
  • auth: bypass node-appwrite fetch to prevent invalid redirect error on Netlify48241f8
v2.1.1February 20, 2026

๐Ÿ›Bug Fixes2
  • auth: dynamically compute base url for oauth success redirect881215e
  • web: comment out ShareImage component on home pagee2cabac
v2.1.0February 20, 2026

โœจFeatures2
  • api: migrate spectator conversion to secure server endpoint900148c
  • api: secure game endpoints with session and lobby validationb3ac7e8
๐Ÿ›Bug Fixes1
  • oauth: correct base_url environment variable priority and ensure httpsa93adfa
โ™ป๏ธRefactors1
  • game: remove unused playedCards and centralize round timerb924881
v2.0.1February 20, 2026

๐Ÿ›Bug Fixes1
  • replace local nuxt-appwrite file reference with GitHub source155d551