Files
soroban-abacus-flashcards/packages/abacus-react/CHANGELOG.md
semantic-release-bot fd7e317151 chore(abacus-react): release v2.15.0 [skip ci]
# [2.15.0](https://github.com/antialias/soroban-abacus-flashcards/compare/abacus-react-v2.14.0...abacus-react-v2.15.0) (2025-12-08)

### Bug Fixes

* **404:** reset easter egg config on page reload/close ([d6f1c13](d6f1c13317))
* account for SVG preserveAspectRatio in coordinate transforms ([e4e0925](e4e09256c2))
* add 'auto' to RuleMode type to prevent undefined display values ([a8636ca](a8636ca6a2))
* add comprehensive dark mode support to Smart Difficulty controls ([a65feb7](a65feb7344))
* add cooldown after quick-escape to prevent precision mode re-activation ([e885ae7](e885ae7ef4))
* add currentStepEstimate to required fields in JSON schema ([0d66c54](0d66c54991))
* add custom cursor when pointer lock is active ([5d6d6b4](5d6d6b4ddc))
* add missing openDeploymentInfo prop to MinimalNav ([30879d8](30879d8959))
* add missing scaleX and scaleY number conversions ([ae6cc5e](ae6cc5e326))
* add missing selectedContinent to default config and fix ts-expect-error directives ([07e9224](07e92240e8))
* add mode descriptions and remove double borders ([6f2f6d4](6f2f6d444c))
* add quotes around unquoted keys when parsing customCrops.ts ([0add49c](0add49c599))
* add seed and prngAlgorithm fields to all Zod schema versions (V1-V4) ([1782f42](1782f427f1))
* add shuffling to progressive difficulty mode & UI improvements ([38e9982](38e9982c3d))
* add zoom to selected continent and improve click detection ([6651979](6651979ea0))
* align share persistence with user session logic ([72c72fc](72c72fc218))
* calculate total problems correctly in preview API ([25dfb71](25dfb71b3e))
* cancel previous give-up animation when new give-up starts ([c01cb7f](c01cb7f384))
* cap zoom when releasing pointer lock (escape key) ([2331f10](2331f1038c))
* center crosshairs and re-enable pointer lock after escape ([814bf94](814bf949f2))
* change zoom capping to create pause effect instead of slow easing ([f2ca9d1](f2ca9d1ebe))
* combine fast easing with smooth precision mode transition ([cab1fbf](cab1fbff95))
* configure Next.js to transpile [@svg-maps](https://github.com/svg-maps) ES modules ([ebf2b66](ebf2b66910))
* consolidate worksheet validation constants and increase MAX_PAGES to 100 ([0f3ec36](0f3ec369bf))
* correct GPT-5 API parameters and surface actual grading errors ([2d33f35](2d33f35c4d))
* **create:** use inline styles for dynamic gradient backgrounds ([ed25b32](ed25b323e8))
* DevCropTool key quoting and magnifier label positioning ([2e4f22a](2e4f22a522))
* don't show labels for excluded/filtered regions ([a83fbb1](a83fbb1070))
* eagerly load map caches in browser and use Suspense pattern ([db6be73](db6be73a1c))
* eliminate cursor dampening lag when changing direction ([fc08b77](fc08b775db))
* enable page virtualization in worksheet creator ([b675f6c](b675f6c96e))
* enable vertical scrolling in layout controls ([a1b31f4](a1b31f454a))
* enable virtualization for worksheet preview by limiting SSR to 3 pages ([f409e3c](f409e3c2ed))
* ensure entire region path is clickable with pointerEvents: all ([eb94191](eb94191b2e))
* export worksheet schema tables from index ([6a16674](6a1667404f))
* hide abacus on /arcade and /arcade-rooms routes ([77033f0](77033f0b22))
* implement manual click detection using precise cursor position ([156f63f](156f63faaf))
* improve dark mode contrast in OrientationPanel dropdown ([f9e2343](f9e2343ffb))
* improve dark mode for orientation and page buttons ([fe9b9f9](fe9b9f9ffa))
* improve draggable button constraints to avoid action button overlap ([00b0fb2](00b0fb297b))
* improve magnifier zoom calculation for multi-piece regions ([cb4114f](cb4114f344))
* improve magnifier zoom smoothness and debug panel ([639e662](639e662d76))
* improve socket server error messages for better debugging ([5d1ea7d](5d1ea7db2d))
* improve text contrast for selected dropdown items in dark mode ([8d03452](8d0345287f))
* improve zoom easing to threshold by deferring capping ([b355a3f](b355a3fc8f))
* increase sampling density for tiny region detection and show all detected regions ([2c9f760](2c9f760ae9))
* increase super zoom multiplier from 2.5x to 5.0x for Gibraltar ([138e6c0](138e6c071b))
* increase z-index of pointer lock prompt overlay ([5388441](5388441ebb))
* **know-your-world:** actually change magnifier element dimensions to 1/3 ([31a06d6](31a06d6fef))
* **know-your-world:** allow space in name confirmation input ([285b128](285b128bb8))
* **know-your-world:** center setup settings panel horizontally ([5f69fab](5f69fab859))
* **know-your-world:** correctly identify local player for cursor sharing ([7aafe8c](7aafe8c92e))
* **know-your-world:** enable hot/cold only for current player in turn mode ([f5ce53e](f5ce53efc0))
* **know-your-world:** fix celebration timer restart and mobile magnifier dismissal bugs ([0558132](055813205a))
* **know-your-world:** fix hot/cold visual feedback delay ([a6352ec](a6352ec624))
* **know-your-world:** fix pointer lock escape for all edges and add smooth release animation ([a7fa858](a7fa858a29))
* **know-your-world:** fix server/client filter mismatch for USA map ([98e74ba](98e74bae3a))
* **know-your-world:** fix TypeScript build errors ([f622bfa](f622bfab54))
* **know-your-world:** guard against undefined state during session init ([ea8965b](ea8965bc95))
* **know-your-world:** improve crosshair UX and fix mobile Select button ([0584863](0584863bdd))
* **know-your-world:** improve mobile layout for setup screen ([81b44a6](81b44a6422))
* **know-your-world:** improve mobile magnifier positioning and sizing ([9a254e2](9a254e2933))
* **know-your-world:** improve mobile magnifier touch controls ([aee5f21](aee5f21ecc))
* **know-your-world:** make game settings visible in right panel ([11d2d56](11d2d5693c))
* **know-your-world:** move Start button to top-right settings panel ([cc51de3](cc51de35e3))
* **know-your-world:** normalize accented letters for keyboard input ([b27856e](b27856e9fc))
* **know-your-world:** prevent hint bubble closing when toggling settings ([a67c11a](a67c11ae04))
* **know-your-world:** raise auto-zoom thresholds for tiny regions ([17c113e](17c113e68b))
* **know-your-world:** reduce magnifier size to 1/3 of pane dimensions ([61a438d](61a438dd31))
* **know-your-world:** remove confidence gate from hot/cold visual emoji ([7f6b9dd](7f6b9dd558))
* **know-your-world:** remove hovered region label from setup screen ([5bb2288](5bb228883d))
* **know-your-world:** Remove redundant preventDefault calls in touch handlers ([021a75f](021a75f583))
* **know-your-world:** remove tips section from setup screen ([c9e9190](c9e9190937))
* **know-your-world:** replace react-spring with CSS animation for crosshair rotation ([af5e7b5](af5e7b59dc))
* **know-your-world:** restore no-music celebration sounds ([f6d1295](f6d1295c6f))
* **know-your-world:** restore Start button character ([7013a7b](7013a7b068))
* **know-your-world:** stabilize mobile magnifier 1:1 touch tracking ([ab30add](ab30adda25))
* **know-your-world:** suppress hot/cold hints during takeover and give-up ([9f6b425](9f6b425daf))
* **know-your-world:** use getBBox() for consistent takeover positioning ([f8acc4a](f8acc4aa6a))
* **know-your-world:** use localPlayerId for cursor updates in all modes ([5e8c37b](5e8c37b68e))
* **know-your-world:** use shared MAX_ZOOM constant for mobile magnifier ([e4c35e9](e4c35e9425))
* **know-your-world:** use spring-for-speed pattern for smooth crosshair rotation ([b7fe2af](b7fe2af369))
* **know-your-world:** use viewport-based maxHeight for right panel ([a4f9db6](a4f9db6d3f))
* lazy-load map data in know-your-world validator ([07c25a2](07c25a2296))
* lower quick-escape threshold to 15px/frame for easier triggering ([97b214d](97b214da12))
* make map-renderer fill parent container for fit-crop-with-fill ([18b1476](18b14766b2))
* make placeholder pages match actual page dimensions ([4003c5c](4003c5ceb7))
* make useArcadeSocket work without ArcadeErrorProvider ([01740af](01740afcb7))
* merge duplicate style attributes on magnifier SVG ([3eda493](3eda493051))
* move pointer lock management to MapRenderer ([0ed4d13](0ed4d13db6))
* page indicator not tracking scroll when showing all pages ([3d157e3](3d157e32ed))
* page indicator stuck on page 1 due to stale closure ([952ebc7](952ebc7756))
* pass correct parameter for borrow boxes in subtraction ([00d892a](00d892a05c))
* position debug panel opposite from magnifier ([aa80a73](aa80a73664))
* position shared worksheet banner below app nav ([fb3412c](fb3412c9a5))
* **practice:** add 80px top padding to account for app nav height ([a50b268](a50b268d35))
* **practice:** allow vertical overflow for help overlays ([1ddf9fc](1ddf9fc94f))
* **practice:** prevent decomposition math from wrapping ([52ea3f1](52ea3f10fa))
* **practice:** remove overflow clipping to allow help overlays ([e9b123a](e9b123a7b3))
* **practice:** remove redundant 'already at target' message ([e9ccfb9](e9ccfb9186))
* **practice:** use explicit padding to prevent shorthand override ([4c00d92](4c00d92ccb))
* preserve saved seed on page reload ([64ce64b](64ce64bd35))
* preserve seed and prngAlgorithm in config migrations ([b18c412](b18c412736))
* preserve user's scaffolding settings when changing skills ([1eb04ce](1eb04ce0c4))
* prevent duplicate API calls in React StrictMode ([0d59676](0d59676b38))
* prevent modal closure when clicking tabs in AllSkillsModal ([4746e1f](4746e1f8fe))
* prevent regrouping problems in no-regrouping skills and enable progressive difficulty toggle ([59712e1](59712e1021))
* prevent skill name wrapping in mini cards with single-line ellipsis ([a463d08](a463d088d7))
* prevent zoom jump on precision mode activation by resetting spring target ([33d9f15](33d9f15897))
* prevent zoom jump when activating precision mode ([9cb3c89](9cb3c898ec))
* properly apply dark mode hover states in dropdown ([34553ce](34553cebf7))
* properly cycle through problem sets when exceeding unique problem space ([55d4920](55d4920167))
* properly zoom to selected continent in game phases ([e900e44](e900e4465b))
* reduce font size for mini skill card titles to prevent wrapping ([833b481](833b481ebb))
* refactor worksheet config persistence to blacklist approach + Storybook stories ([5b6db58](5b6db588a2))
* regenerate lockfile to remove big.js dependencies ([05fc5cf](05fc5cfe49))
* remove all scaffolding from final mastery skills ([d7bec42](d7bec423e0))
* remove background rect from main map SVG ([7d3c5c3](7d3c5c304b))
* remove duplicate containerRect declaration ([1a690e0](1a690e00b0))
* remove magnifierSpring.zoom from effect dependencies ([5eb2eed](5eb2eeda32))
* remove mispositioned background rect from magnifier SVG ([5815cbe](5815cbee15))
* remove pages from visible set when they leave viewport ([9757449](9757449e21))
* remove redundant 'Teens minus singles' subtraction skill ([e156e87](e156e870df))
* remove regex lookbehind for Safari compatibility ([4d77f1f](4d77f1ffd3))
* remove unused velocity tracking and fix TypeScript errors ([0195a6d](0195a6dc6d))
* replace deprecated path() with curve() in borrow arrows ([47d149c](47d149ca17))
* replace ES module imports with JSON data files ([fb735be](fb735be014))
* resolve auto zoom freeze and stuck zoom issues ([0aee60d](0aee60d8d1))
* respect borrow boxes display setting regardless of actual borrowing ([1aef0f2](1aef0f292f))
* respect operator-specific scaffolding in mastery+mixed mode ([a6472a2](a6472a231b))
* respect user's layout options (problemNumbers/cellBorders) in mastery mode ([e708add](e708add9f2))
* responsive page indicator and settings summary improvements ([93ddc28](93ddc28a3a))
* resume zoom animation immediately when precision mode activates ([7ba7e03](7ba7e03661))
* resume zoom animation immediately when precision mode activates ([7c1f2e5](7c1f2e54c9))
* resume zoom animation when target drops below threshold ([e73b59d](e73b59d510))
* scaffolding changes now apply in mastery+mixed mode ([510f052](510f052978))
* **server:** lazy-load game validators to avoid ES module errors ([a88bd58](a88bd5844c))
* show hot/cold button on iPad with mouse attached ([1333818](1333818bae))
* skip pointer lock request on unsupported devices (iPad) ([d6eb997](d6eb997445))
* stabilize mini skill card height and fix preview updates ([4a52943](4a5294353e))
* take all measurements inside animation callback for label sync ([2191e07](2191e0732b))
* track both SVG units and screen pixels for zoom and dampening ([d72f309](d72f309bad))
* transform screen coordinates to SVG space for isPointInFill() ([4c933be](4c933be48a))
* transmit hovered region ID with network cursor to avoid hit-testing discrepancies ([6c3f860](6c3f860efc))
* **tutorial:** expose activeGroupTargetColumn state to context ([69f759a](69f759a178))
* update AbacusQRCode for qrcode.react v4 compatibility ([0f0c3c6](0f0c3c65e8))
* update operator-specific display rules in mastery+mixed mode ([4174b6d](4174b6d2e7))
* upgrade to Node.js 20 to resolve ES module import issues ([192de5c](192de5c6b5))
* use ± symbol for mixed operator icon consistently ([2695b50](2695b50abe))
* use actual SVG path geometry for region detection instead of bounding boxes ([e255ce2](e255ce2c6f))
* use animated spring for magnifier label positioning ([94d1cdf](94d1cdfcb5))
* use ASCII characters for operator icons to support dark mode ([3bd5c00](3bd5c00d21))
* use correct Unicode minus sign (−) for subtraction operator checks ([0dd9e45](0dd9e45952))
* use dynamic ES module imports for [@svg-maps](https://github.com/svg-maps) packages in know-your-world ([ab94fd3](ab94fd350f))
* use LAN IP instead of localhost for QR code camera uploads ([00b400a](00b400ae8a))
* use screen pixels for zoom, abandon SVG path parsing ([912dc38](912dc385b3))
* use subtle gray highlights for dropdown in dark mode ([8d6170a](8d6170a8c7))
* use SVG viewBox units instead of screen pixels for zoom ([0dcaabb](0dcaabb8a5))
* use white text for selected dropdown items in dark mode ([e1a7375](e1a73758d6))
* **worksheets:** add backward compatibility for displayRules in SmartModeControls ([b956e2d](b956e2d605))
* **worksheets:** add borrowNotation and borrowingHints to DisplayRules interfaces ([3b908ac](3b908ac453))
* **worksheets:** add borrowNotation and borrowingHints to validation fallback ([3f700af](3f700af643))
* **worksheets:** add mastery mode to Zod schema validation ([003f1d1](003f1d11cc))
* **worksheets:** correct Typst array membership syntax for ten-frames rendering ([14b3594](14b359462f))
* **worksheets:** enable borrowNotation and borrowingHints in smart difficulty mode ([8020ee8](8020ee835e))
* **worksheets:** prevent infinite loop when problem space is empty ([02463df](02463df8e5))
* **worksheets:** render operators last for proper layering ([cdd0de7](cdd0de797f))
* **worksheets:** sync preview and download problem generation ([822ef78](822ef78e58))
* **worksheets:** ten-frames not rendering in mastery mode ([b36df3a](b36df3a40c))
* **worksheets:** validation function was converting mastery mode to manual ([4ad687d](4ad687df73))

### Features

* **abacus-react:** add defaultValue prop for uncontrolled mode ([3ce12c5](3ce12c59fc))
* add 'auto' option for scaffolding to defer to mastery progression ([a945a62](a945a620c4))
* add adaptive zoom magnifier for Know Your World map ([1e8846c](1e8846cdb1))
* add AI-powered worksheet grading with GPT-5 vision ([6e95732](6e9573288f))
* add auto scaffolding mode with visual feedback and override notices ([b62db5a](b62db5a323))
* add auto-submit on correct answer + Newton poem blog post ([2f7cb03](2f7cb03c3f))
* add comprehensive error handling for arcade games ([e8c5256](e8c52561a2))
* add continent filtering to Know Your World game ([7bb03b8](7bb03b8409))
* add custom error boundaries with navigation ([73cc418](73cc4185c3))
* add database schema for custom skills and skill customizations ([906fa63](906fa63f24))
* add debug bounding boxes to magnifier view ([9c7d2fa](9c7d2fab5f))
* add debug indicator for custom crop region (dev only) ([9c89aad](9c89aadb17))
* add detailed zoom decision debug panel ([cb57f15](cb57f1585a))
* add dev-only crop tool for custom map region cropping ([855e5df](855e5df2c0))
* add download and share buttons to shared worksheet viewer ([9b8947a](9b8947a198))
* add dynamic layout preview component for orientation selection ([8df62d6](8df62d6a45))
* add dynamic operator icon to tab navigation ([b6ff995](b6ff995a8c))
* add exponential zoom scaling for sub-pixel regions ([101213b](101213ba1c))
* add fancy QR codes with abacus logo throughout app ([ebcabf9](ebcabf9bb9))
* add give up with zoom animation for Know Your World ([94cff43](94cff4374f))
* add gold scrim overlay and improve precision mode messaging ([4b20d07](4b20d0753f))
* add interactive world map continent selector ([245005c](245005c8ec))
* add Know Your World geography quiz game ([25e24a7](25e24a7cbc))
* add mobile drawer and detailed summary for shared worksheets ([0a35e70](0a35e70e28))
* add ngrok tunnel to dev server for HTTPS testing ([ab2bfde](ab2bfde9c2))
* add per-country coloring and individual region clicks to continent selector ([2e9f409](2e9f409f26))
* add per-page worksheet generation API ([6398fbe](6398fbead9))
* add Pointer Lock API for precision mode to prevent edge issues ([4d5953d](4d5953d034))
* add precision controls for tiny regions in Know Your World ([3bf127f](3bf127f344))
* add precision mode system with pixel grid visualization ([53e9041](53e90414a3))
* add prev/next navigation buttons to mixed mode mini skill panes ([498df2c](498df2ca5a))
* add problem space validation to warn about duplicate risk ([0b8c180](0b8c1803ff))
* add responsive mobile drawer with draggable settings button ([fc1d7fc](fc1d7fcbd6))
* add responsive page button layout with dynamic dropdown ([3f33cd1](3f33cd1924))
* add shared worksheet viewer with open-in-editor functionality ([4b8b3ee](4b8b3ee532))
* add single-page worksheet preview API endpoint ([10e97db](10e97db78a))
* add skill configuration system with interactive 2D difficulty plot ([7fbc743](7fbc743c4c)), closes [#9333](https://github.com/antialias/soroban-abacus-flashcards/issues/9333) [#10b981](https://github.com/antialias/soroban-abacus-flashcards/issues/10b981)
* add smooth fade-in animation for 404 message text changes ([e88380a](e88380a48d))
* add split-action share button with copy shortcut ([085d200](085d200da4))
* add themed backgrounds and enhanced styling to 404 page ([dd14062](dd14062112))
* add visible grab tab to worksheet panel resize handle ([288e6ed](288e6ed878))
* add visual debugging for zoom importance scoring ([e60a2c0](e60a2c09c0))
* add visual grab tab to resize handle with rounded corners ([6e55d5a](6e55d5add7))
* add visual warnings to page selector buttons ([5a87799](5a8779969c))
* add worksheet generation core logic and helpers ([163517d](163517db7d))
* add worksheet sharing infrastructure with database persistence ([7b4c7c3](7b4c7c3fb6))
* add worksheet studio with comprehensive features ([d5672bd](d5672bdddf))
* apply skill-specific scaffolding and fix mini card heights ([ee90182](ee90182ff2))
* **blog:** add subtraction and multi-digit worksheet blog posts ([dd9587f](dd9587f8cd))
* calculate zoom based on region under cursor, target 15% area ([6736336](6736336317))
* convert operator selection to checkboxes with required validation ([c997c4a](c997c4a7ba))
* create unified difficulty interface with 2-tab selector ([0b7382f](0b7382f1b6))
* enable production source maps for easier debugging ([d992e98](d992e98d77))
* enhance scaffolding tab with live preview and resolved display rules ([9a5a0d4](9a5a0d4e3c))
* **help-system:** add focus areas for skills needing reinforcement ([871390d](871390d8e1))
* **help-system:** add schema for progressive help and feedback loop ([41c4603](41c46038d8))
* **help-system:** add usePracticeHelp hook and skill extraction ([0b1ad1f](0b1ad1f896))
* **help-system:** integrate PracticeHelpPanel into ActiveSession ([373ec34](373ec34e46))
* hide easter egg hint until first discovery ([c2c7153](c2c71531ae))
* implement binary search for optimal zoom level ([1a54f09](1a54f09814))
* implement fit-crop-with-fill for custom map crops ([b6569ed](b6569ed4e1))
* implement lazy loading for worksheet preview with cursor pagination ([8b3d019](8b3d019652))
* implement lazy loading for worksheet preview with cursor pagination ([2a7d67d](2a7d67db58))
* improve shared worksheet viewer UX and multi-page support ([1c10a82](1c10a82c78))
* improve tab navigation layout and add pages to layout button ([926a029](926a029ff8))
* improve worksheet preview placeholder with cartoonish grid layout ([57fb99a](57fb99af63))
* increase max super zoom to 120x for ultra-tiny regions ([9b782be](9b782beabf))
* increase max zoom to 1000x with detailed debug logging ([a6be05f](a6be05f8c1))
* **know-your-world:** add 'H' keyboard shortcut for hint ([cdc9451](cdc94514d9))
* **know-your-world:** add adaptive hint cycling for struggling users ([5440250](54402501e5))
* **know-your-world:** add celebration animations for found regions ([3b9d6b0](3b9d6b0fdf))
* **know-your-world:** add device capability hooks and improve mobile support ([c502a4f](c502a4fa92))
* **know-your-world:** add drill-down map selector and improve setup UI ([a6f8dbe](a6f8dbe474))
* **know-your-world:** add filter tabs for size, importance, and population ([6c3c0ac](6c3c0ac70e))
* **know-your-world:** add fire tracer animation for learning mode takeover ([1e6153e](1e6153ee8b))
* **know-your-world:** add hint system, pointer lock buttons, and mobile magnifier support ([55e480c](55e480c03b))
* **know-your-world:** add hints for Europe and Africa regions ([46e5c6b](46e5c6b99b))
* **know-your-world:** add hot/cold audio feedback for cursor proximity ([69813e9](69813e92a2))
* **know-your-world:** add hot/cold debug panel and production debug mode ([493313a](493313a3bb))
* **know-your-world:** add hot/cold feedback for mobile magnifier ([824325b](824325b843))
* **know-your-world:** add interaction state machine foundation ([e4d6748](e4d6748d70))
* **know-your-world:** add Learning mode and fix hints before name unlock ([fc87808](fc87808b40))
* **know-your-world:** add learning mode takeover animation and fix give-up sequence ([3fd8472](3fd8472e68))
* **know-your-world:** add map zoom preview, remove study time feature ([57dd61b](57dd61b994))
* **know-your-world:** add missing island hints and revise all hints ([8b13b5a](8b13b5a455))
* **know-your-world:** add mobile cursor sharing and fix multi-device coop mode ([2ce5e18](2ce5e180b7))
* **know-your-world:** add mobile virtual keyboard and space-skipping ([5318d0d](5318d0dd89))
* **know-your-world:** add multiplayer cursor sharing and fix map viewport ([c3b94be](c3b94bea3d))
* **know-your-world:** add puzzle piece fly-to-map animation for learning mode ([7c49652](7c496525e9))
* **know-your-world:** add range thermometer for region size selection ([c7c4e7c](c7c4e7cef3))
* **know-your-world:** add region shape silhouette to learning takeover ([ebe07e3](ebe07e358f))
* **know-your-world:** add session-based give-up voting and fix cursor emojis ([bb2d6fc](bb2d6fc7d8))
* **know-your-world:** add speech announcements and compass-style crosshairs ([e0b762e](e0b762e3ee))
* **know-your-world:** add speech synthesis for hints with auto-hint/auto-speak ([cd841ff](cd841ff7dc))
* **know-your-world:** add Strudel-based music system ([7dab07b](7dab07b3a7))
* **know-your-world:** add SVG path geometry helpers for future use ([ea141f0](ea141f04f6))
* **know-your-world:** add turn-based restrictions for letter typing ([45730bb](45730bb4db))
* **know-your-world:** align guidance UI with assistance levels ([7e7a8dc](7e7a8dc1e8))
* **know-your-world:** auto-enable hot/cold for learning mode ([dcc32c2](dcc32c288f))
* **know-your-world:** enhance hint audio and region name display ([e6f58bf](e6f58bfd93))
* **know-your-world:** fix magnifier outline aspect ratio and add visual debug toggle ([ac915f2](ac915f2065))
* **know-your-world:** full-screen layout with squish-through pointer lock escape ([1729418](1729418dc5))
* **know-your-world:** implement empirical scale measurement for 1:1 magnifier tracking ([39886e8](39886e859c))
* **know-your-world:** improve magnifier UX and hide abacus on games ([fa1514d](fa1514d351))
* **know-your-world:** improve mobile magnifier controls and animations ([4449fb1](4449fb19b4))
* **know-your-world:** improve mobile magnifier with adaptive zoom and select button ([60cf98e](60cf98e77a))
* **know-your-world:** improve region size filter layout ([558d369](558d369ba0))
* **know-your-world:** improve setup screen UX ([dc4d621](dc4d62195b))
* **know-your-world:** improve takeover UI and fix celebration sound bug ([a8c6b84](a8c6b84855))
* **know-your-world:** live crop updates and safe zone improvements ([3f4691e](3f4691e8a3))
* **know-your-world:** make magnifier lazy - only move when cursor obscured ([ac82564](ac82564eac))
* **know-your-world:** make magnifier size responsive to aspect ratio ([5920cb4](5920cb4dc3))
* **know-your-world:** match setup phase map positioning with gameplay ([b030558](b0305581f9))
* **know-your-world:** move region size filters inside map preview ([81301ab](81301ab148))
* **know-your-world:** move start button below settings controls ([a05c4ca](a05c4ca5bf))
* **know-your-world:** Phase 2 - integrate useMagnifierZoom hook ([8ce878d](8ce878d03e))
* **know-your-world:** responsive setup + travel-themed start button ([02762fa](02762fad81))
* **know-your-world:** separate region filtering from assistance level ([9499e4e](9499e4e8b5))
* **know-your-world:** show magnifier on mobile drag gesture ([a02a710](a02a7108e9))
* **know-your-world:** speak country names in user's locale ([426a1e6](426a1e6868))
* **know-your-world:** sync letter confirmation across multiplayer sessions ([655660f](655660f7cf))
* **know-your-world:** unified region selector with inline list on desktop ([d329d80](d329d80399))
* **know-your-world:** unify setup and gameplay UI positions ([141a506](141a506739))
* **know-your-world:** unify setup UI positions with gameplay ([c1a0485](c1a0485b1d))
* **know-your-world:** wire interaction state machine to MapRenderer ([7e55953](7e55953eee))
* make 404 page abacus hero-sized and responsive ([41de252](41de25238f))
* make resize handle grab tab fully draggable with rounded corners ([be40f70](be40f70bc6))
* make scaffolding and preview collapsible ([804fb1a](804fb1a2f6))
* make super zoom threshold configurable and increase to 3px ([d7ce474](d7ce474a51))
* make zoom transitions 4x slower for smoother experience ([ca752bd](ca752bd0aa))
* move difficulty parameters into Smart mode ([4b66758](4b667587f8))
* move layout controls to OrientationPanel with toggles ([995966f](995966ffbc))
* operator-specific scaffolding for mixed mastery mode ([4d7d000](4d7d000046))
* optimize problem generation and add duplicate warning system ([11c46c1](11c46c1b44))
* pause zoom animation at precision mode threshold ([c4989b3](c4989b3ab0))
* pause/resume zoom animation at precision mode threshold ([bdf59e5](bdf59e571d))
* pause/resume zoom animation at precision mode threshold ([4687820](4687820d8a))
* persist seed and prngAlgorithm for exact problem reproducibility ([8cb2209](8cb2209d84))
* **practice:** add dark mode support and fix doubled answer digits ([026993c](026993cb05))
* **practice:** add progressive help overlay with proper positioning ([9a4ab82](9a4ab8296e))
* **practice:** add session HUD with tape-deck controls and PageWithNav ([b19c6d0](b19c6d0eca))
* **practice:** add smooth problem transition animation ([b12112e](b12112e8da))
* **practice:** add student onboarding and offline sync features ([b52f054](b52f0547af))
* **practice:** add three-part daily practice session system ([5855438](585543809a))
* **practice:** improve help UX with coach hints and simplified UI ([19169ad](19169ad9fe))
* **practice:** integrate progressive help with decomposition display ([804d937](804d937dd9))
* redesign shared worksheet viewer with read-only studio and proper error handling ([23dccc0](23dccc0ef3))
* remove all easter egg hints from 404 page ([1756182](17561829ef))
* remove redundant navigation buttons from 404 page ([e5262e5](e5262e5007))
* show magnifier only when current target region needs magnification ([996c973](996c973774))
* show magnifier only when target region needs it ([c6997ac](c6997ac9a7))
* show visual feedback for auto-resolved scaffolding values ([fbe776a](fbe776ac09))
* smooth cursor dampening transitions with react-spring ([66544dc](66544dc7dd))
* **thermometer:** add "only" buttons to quickly select single category ([623f882](623f882075))
* **worksheets:** add 3x scale effect to thrown dice ([920a855](920a855eb5))
* **worksheets:** add draggable dice easter egg with physics ([b8e66df](b8e66dfc17))
* **worksheets:** add duplicate risk warnings to page selector UI ([1d8dceb](1d8dceb55b))
* **worksheets:** add foundational steps to progression path ([7e6f99b](7e6f99b78c))
* **worksheets:** add QR codes with share codes for easy worksheet sharing ([a0e73d9](a0e73d971b))
* **worksheets:** add shuffle button with animated dice icon ([f97efb5](f97efb5c94))
* **worksheets:** add viewport edge ricochet to dice physics ([c6db7dc](c6db7dcfa2))
* **worksheets:** enhance dice throw physics for natural feel ([047a960](047a960567))
* **worksheets:** restore mastery progression UI with 3-way mode selector ([26a0885](26a08859d7))
* **worksheets:** smooth dice rotation settle to final face ([d00c707](d00c70750e))
* **worksheets:** upgrade to 3D dice with random rotation animation ([3cd5e49](3cd5e4992b))

### Performance Improvements

* add spatial filtering to skip distant regions ([8cb4c88](8cb4c88bef))
* cache polygon conversions to fix performance regression ([348ce8f](348ce8f314))
* **know-your-world:** memoize state machine return value and remove debug logging ([d85b976](d85b976f8b))
* reduce retry limit from 3000 to 100 in problem generators ([08fef59](08fef59cc5))

### Reverts

* **know-your-world:** undo premature extractions, restore working state ([f0bf205](f0bf2050d3))
* remove ngrok and LAN IP detection ([0040b57](0040b57829))
2025-12-08 17:50:10 +00:00

306 KiB
Raw Blame History

2.15.0 (2025-12-08)

Bug Fixes

  • 404: reset easter egg config on page reload/close (d6f1c13)
  • account for SVG preserveAspectRatio in coordinate transforms (e4e0925)
  • add 'auto' to RuleMode type to prevent undefined display values (a8636ca)
  • add comprehensive dark mode support to Smart Difficulty controls (a65feb7)
  • add cooldown after quick-escape to prevent precision mode re-activation (e885ae7)
  • add currentStepEstimate to required fields in JSON schema (0d66c54)
  • add custom cursor when pointer lock is active (5d6d6b4)
  • add missing openDeploymentInfo prop to MinimalNav (30879d8)
  • add missing scaleX and scaleY number conversions (ae6cc5e)
  • add missing selectedContinent to default config and fix ts-expect-error directives (07e9224)
  • add mode descriptions and remove double borders (6f2f6d4)
  • add quotes around unquoted keys when parsing customCrops.ts (0add49c)
  • add seed and prngAlgorithm fields to all Zod schema versions (V1-V4) (1782f42)
  • add shuffling to progressive difficulty mode & UI improvements (38e9982)
  • add zoom to selected continent and improve click detection (6651979)
  • align share persistence with user session logic (72c72fc)
  • calculate total problems correctly in preview API (25dfb71)
  • cancel previous give-up animation when new give-up starts (c01cb7f)
  • cap zoom when releasing pointer lock (escape key) (2331f10)
  • center crosshairs and re-enable pointer lock after escape (814bf94)
  • change zoom capping to create pause effect instead of slow easing (f2ca9d1)
  • combine fast easing with smooth precision mode transition (cab1fbf)
  • configure Next.js to transpile @svg-maps ES modules (ebf2b66)
  • consolidate worksheet validation constants and increase MAX_PAGES to 100 (0f3ec36)
  • correct GPT-5 API parameters and surface actual grading errors (2d33f35)
  • create: use inline styles for dynamic gradient backgrounds (ed25b32)
  • DevCropTool key quoting and magnifier label positioning (2e4f22a)
  • don't show labels for excluded/filtered regions (a83fbb1)
  • eagerly load map caches in browser and use Suspense pattern (db6be73)
  • eliminate cursor dampening lag when changing direction (fc08b77)
  • enable page virtualization in worksheet creator (b675f6c)
  • enable vertical scrolling in layout controls (a1b31f4)
  • enable virtualization for worksheet preview by limiting SSR to 3 pages (f409e3c)
  • ensure entire region path is clickable with pointerEvents: all (eb94191)
  • export worksheet schema tables from index (6a16674)
  • hide abacus on /arcade and /arcade-rooms routes (77033f0)
  • implement manual click detection using precise cursor position (156f63f)
  • improve dark mode contrast in OrientationPanel dropdown (f9e2343)
  • improve dark mode for orientation and page buttons (fe9b9f9)
  • improve draggable button constraints to avoid action button overlap (00b0fb2)
  • improve magnifier zoom calculation for multi-piece regions (cb4114f)
  • improve magnifier zoom smoothness and debug panel (639e662)
  • improve socket server error messages for better debugging (5d1ea7d)
  • improve text contrast for selected dropdown items in dark mode (8d03452)
  • improve zoom easing to threshold by deferring capping (b355a3f)
  • increase sampling density for tiny region detection and show all detected regions (2c9f760)
  • increase super zoom multiplier from 2.5x to 5.0x for Gibraltar (138e6c0)
  • increase z-index of pointer lock prompt overlay (5388441)
  • know-your-world: actually change magnifier element dimensions to 1/3 (31a06d6)
  • know-your-world: allow space in name confirmation input (285b128)
  • know-your-world: center setup settings panel horizontally (5f69fab)
  • know-your-world: correctly identify local player for cursor sharing (7aafe8c)
  • know-your-world: enable hot/cold only for current player in turn mode (f5ce53e)
  • know-your-world: fix celebration timer restart and mobile magnifier dismissal bugs (0558132)
  • know-your-world: fix hot/cold visual feedback delay (a6352ec)
  • know-your-world: fix pointer lock escape for all edges and add smooth release animation (a7fa858)
  • know-your-world: fix server/client filter mismatch for USA map (98e74ba)
  • know-your-world: fix TypeScript build errors (f622bfa)
  • know-your-world: guard against undefined state during session init (ea8965b)
  • know-your-world: improve crosshair UX and fix mobile Select button (0584863)
  • know-your-world: improve mobile layout for setup screen (81b44a6)
  • know-your-world: improve mobile magnifier positioning and sizing (9a254e2)
  • know-your-world: improve mobile magnifier touch controls (aee5f21)
  • know-your-world: make game settings visible in right panel (11d2d56)
  • know-your-world: move Start button to top-right settings panel (cc51de3)
  • know-your-world: normalize accented letters for keyboard input (b27856e)
  • know-your-world: prevent hint bubble closing when toggling settings (a67c11a)
  • know-your-world: raise auto-zoom thresholds for tiny regions (17c113e)
  • know-your-world: reduce magnifier size to 1/3 of pane dimensions (61a438d)
  • know-your-world: remove confidence gate from hot/cold visual emoji (7f6b9dd)
  • know-your-world: remove hovered region label from setup screen (5bb2288)
  • know-your-world: Remove redundant preventDefault calls in touch handlers (021a75f)
  • know-your-world: remove tips section from setup screen (c9e9190)
  • know-your-world: replace react-spring with CSS animation for crosshair rotation (af5e7b5)
  • know-your-world: restore no-music celebration sounds (f6d1295)
  • know-your-world: restore Start button character (7013a7b)
  • know-your-world: stabilize mobile magnifier 1:1 touch tracking (ab30add)
  • know-your-world: suppress hot/cold hints during takeover and give-up (9f6b425)
  • know-your-world: use getBBox() for consistent takeover positioning (f8acc4a)
  • know-your-world: use localPlayerId for cursor updates in all modes (5e8c37b)
  • know-your-world: use shared MAX_ZOOM constant for mobile magnifier (e4c35e9)
  • know-your-world: use spring-for-speed pattern for smooth crosshair rotation (b7fe2af)
  • know-your-world: use viewport-based maxHeight for right panel (a4f9db6)
  • lazy-load map data in know-your-world validator (07c25a2)
  • lower quick-escape threshold to 15px/frame for easier triggering (97b214d)
  • make map-renderer fill parent container for fit-crop-with-fill (18b1476)
  • make placeholder pages match actual page dimensions (4003c5c)
  • make useArcadeSocket work without ArcadeErrorProvider (01740af)
  • merge duplicate style attributes on magnifier SVG (3eda493)
  • move pointer lock management to MapRenderer (0ed4d13)
  • page indicator not tracking scroll when showing all pages (3d157e3)
  • page indicator stuck on page 1 due to stale closure (952ebc7)
  • pass correct parameter for borrow boxes in subtraction (00d892a)
  • position debug panel opposite from magnifier (aa80a73)
  • position shared worksheet banner below app nav (fb3412c)
  • practice: add 80px top padding to account for app nav height (a50b268)
  • practice: allow vertical overflow for help overlays (1ddf9fc)
  • practice: prevent decomposition math from wrapping (52ea3f1)
  • practice: remove overflow clipping to allow help overlays (e9b123a)
  • practice: remove redundant 'already at target' message (e9ccfb9)
  • practice: use explicit padding to prevent shorthand override (4c00d92)
  • preserve saved seed on page reload (64ce64b)
  • preserve seed and prngAlgorithm in config migrations (b18c412)
  • preserve user's scaffolding settings when changing skills (1eb04ce)
  • prevent duplicate API calls in React StrictMode (0d59676)
  • prevent modal closure when clicking tabs in AllSkillsModal (4746e1f)
  • prevent regrouping problems in no-regrouping skills and enable progressive difficulty toggle (59712e1)
  • prevent skill name wrapping in mini cards with single-line ellipsis (a463d08)
  • prevent zoom jump on precision mode activation by resetting spring target (33d9f15)
  • prevent zoom jump when activating precision mode (9cb3c89)
  • properly apply dark mode hover states in dropdown (34553ce)
  • properly cycle through problem sets when exceeding unique problem space (55d4920)
  • properly zoom to selected continent in game phases (e900e44)
  • reduce font size for mini skill card titles to prevent wrapping (833b481)
  • refactor worksheet config persistence to blacklist approach + Storybook stories (5b6db58)
  • regenerate lockfile to remove big.js dependencies (05fc5cf)
  • remove all scaffolding from final mastery skills (d7bec42)
  • remove background rect from main map SVG (7d3c5c3)
  • remove duplicate containerRect declaration (1a690e0)
  • remove magnifierSpring.zoom from effect dependencies (5eb2eed)
  • remove mispositioned background rect from magnifier SVG (5815cbe)
  • remove pages from visible set when they leave viewport (9757449)
  • remove redundant 'Teens minus singles' subtraction skill (e156e87)
  • remove regex lookbehind for Safari compatibility (4d77f1f)
  • remove unused velocity tracking and fix TypeScript errors (0195a6d)
  • replace deprecated path() with curve() in borrow arrows (47d149c)
  • replace ES module imports with JSON data files (fb735be)
  • resolve auto zoom freeze and stuck zoom issues (0aee60d)
  • respect borrow boxes display setting regardless of actual borrowing (1aef0f2)
  • respect operator-specific scaffolding in mastery+mixed mode (a6472a2)
  • respect user's layout options (problemNumbers/cellBorders) in mastery mode (e708add)
  • responsive page indicator and settings summary improvements (93ddc28)
  • resume zoom animation immediately when precision mode activates (7ba7e03)
  • resume zoom animation immediately when precision mode activates (7c1f2e5)
  • resume zoom animation when target drops below threshold (e73b59d)
  • scaffolding changes now apply in mastery+mixed mode (510f052)
  • server: lazy-load game validators to avoid ES module errors (a88bd58)
  • show hot/cold button on iPad with mouse attached (1333818)
  • skip pointer lock request on unsupported devices (iPad) (d6eb997)
  • stabilize mini skill card height and fix preview updates (4a52943)
  • take all measurements inside animation callback for label sync (2191e07)
  • track both SVG units and screen pixels for zoom and dampening (d72f309)
  • transform screen coordinates to SVG space for isPointInFill() (4c933be)
  • transmit hovered region ID with network cursor to avoid hit-testing discrepancies (6c3f860)
  • tutorial: expose activeGroupTargetColumn state to context (69f759a)
  • update AbacusQRCode for qrcode.react v4 compatibility (0f0c3c6)
  • update operator-specific display rules in mastery+mixed mode (4174b6d)
  • upgrade to Node.js 20 to resolve ES module import issues (192de5c)
  • use ± symbol for mixed operator icon consistently (2695b50)
  • use actual SVG path geometry for region detection instead of bounding boxes (e255ce2)
  • use animated spring for magnifier label positioning (94d1cdf)
  • use ASCII characters for operator icons to support dark mode (3bd5c00)
  • use correct Unicode minus sign () for subtraction operator checks (0dd9e45)
  • use dynamic ES module imports for @svg-maps packages in know-your-world (ab94fd3)
  • use LAN IP instead of localhost for QR code camera uploads (00b400a)
  • use screen pixels for zoom, abandon SVG path parsing (912dc38)
  • use subtle gray highlights for dropdown in dark mode (8d6170a)
  • use SVG viewBox units instead of screen pixels for zoom (0dcaabb)
  • use white text for selected dropdown items in dark mode (e1a7375)
  • worksheets: add backward compatibility for displayRules in SmartModeControls (b956e2d)
  • worksheets: add borrowNotation and borrowingHints to DisplayRules interfaces (3b908ac)
  • worksheets: add borrowNotation and borrowingHints to validation fallback (3f700af)
  • worksheets: add mastery mode to Zod schema validation (003f1d1)
  • worksheets: correct Typst array membership syntax for ten-frames rendering (14b3594)
  • worksheets: enable borrowNotation and borrowingHints in smart difficulty mode (8020ee8)
  • worksheets: prevent infinite loop when problem space is empty (02463df)
  • worksheets: render operators last for proper layering (cdd0de7)
  • worksheets: sync preview and download problem generation (822ef78)
  • worksheets: ten-frames not rendering in mastery mode (b36df3a)
  • worksheets: validation function was converting mastery mode to manual (4ad687d)

Features

  • abacus-react: add defaultValue prop for uncontrolled mode (3ce12c5)
  • add 'auto' option for scaffolding to defer to mastery progression (a945a62)
  • add adaptive zoom magnifier for Know Your World map (1e8846c)
  • add AI-powered worksheet grading with GPT-5 vision (6e95732)
  • add auto scaffolding mode with visual feedback and override notices (b62db5a)
  • add auto-submit on correct answer + Newton poem blog post (2f7cb03)
  • add comprehensive error handling for arcade games (e8c5256)
  • add continent filtering to Know Your World game (7bb03b8)
  • add custom error boundaries with navigation (73cc418)
  • add database schema for custom skills and skill customizations (906fa63)
  • add debug bounding boxes to magnifier view (9c7d2fa)
  • add debug indicator for custom crop region (dev only) (9c89aad)
  • add detailed zoom decision debug panel (cb57f15)
  • add dev-only crop tool for custom map region cropping (855e5df)
  • add download and share buttons to shared worksheet viewer (9b8947a)
  • add dynamic layout preview component for orientation selection (8df62d6)
  • add dynamic operator icon to tab navigation (b6ff995)
  • add exponential zoom scaling for sub-pixel regions (101213b)
  • add fancy QR codes with abacus logo throughout app (ebcabf9)
  • add give up with zoom animation for Know Your World (94cff43)
  • add gold scrim overlay and improve precision mode messaging (4b20d07)
  • add interactive world map continent selector (245005c)
  • add Know Your World geography quiz game (25e24a7)
  • add mobile drawer and detailed summary for shared worksheets (0a35e70)
  • add ngrok tunnel to dev server for HTTPS testing (ab2bfde)
  • add per-country coloring and individual region clicks to continent selector (2e9f409)
  • add per-page worksheet generation API (6398fbe)
  • add Pointer Lock API for precision mode to prevent edge issues (4d5953d)
  • add precision controls for tiny regions in Know Your World (3bf127f)
  • add precision mode system with pixel grid visualization (53e9041)
  • add prev/next navigation buttons to mixed mode mini skill panes (498df2c)
  • add problem space validation to warn about duplicate risk (0b8c180)
  • add responsive mobile drawer with draggable settings button (fc1d7fc)
  • add responsive page button layout with dynamic dropdown (3f33cd1)
  • add shared worksheet viewer with open-in-editor functionality (4b8b3ee)
  • add single-page worksheet preview API endpoint (10e97db)
  • add skill configuration system with interactive 2D difficulty plot (7fbc743), closes #9333 #10b981
  • add smooth fade-in animation for 404 message text changes (e88380a)
  • add split-action share button with copy shortcut (085d200)
  • add themed backgrounds and enhanced styling to 404 page (dd14062)
  • add visible grab tab to worksheet panel resize handle (288e6ed)
  • add visual debugging for zoom importance scoring (e60a2c0)
  • add visual grab tab to resize handle with rounded corners (6e55d5a)
  • add visual warnings to page selector buttons (5a87799)
  • add worksheet generation core logic and helpers (163517d)
  • add worksheet sharing infrastructure with database persistence (7b4c7c3)
  • add worksheet studio with comprehensive features (d5672bd)
  • apply skill-specific scaffolding and fix mini card heights (ee90182)
  • blog: add subtraction and multi-digit worksheet blog posts (dd9587f)
  • calculate zoom based on region under cursor, target 15% area (6736336)
  • convert operator selection to checkboxes with required validation (c997c4a)
  • create unified difficulty interface with 2-tab selector (0b7382f)
  • enable production source maps for easier debugging (d992e98)
  • enhance scaffolding tab with live preview and resolved display rules (9a5a0d4)
  • help-system: add focus areas for skills needing reinforcement (871390d)
  • help-system: add schema for progressive help and feedback loop (41c4603)
  • help-system: add usePracticeHelp hook and skill extraction (0b1ad1f)
  • help-system: integrate PracticeHelpPanel into ActiveSession (373ec34)
  • hide easter egg hint until first discovery (c2c7153)
  • implement binary search for optimal zoom level (1a54f09)
  • implement fit-crop-with-fill for custom map crops (b6569ed)
  • implement lazy loading for worksheet preview with cursor pagination (8b3d019)
  • implement lazy loading for worksheet preview with cursor pagination (2a7d67d)
  • improve shared worksheet viewer UX and multi-page support (1c10a82)
  • improve tab navigation layout and add pages to layout button (926a029)
  • improve worksheet preview placeholder with cartoonish grid layout (57fb99a)
  • increase max super zoom to 120x for ultra-tiny regions (9b782be)
  • increase max zoom to 1000x with detailed debug logging (a6be05f)
  • know-your-world: add 'H' keyboard shortcut for hint (cdc9451)
  • know-your-world: add adaptive hint cycling for struggling users (5440250)
  • know-your-world: add celebration animations for found regions (3b9d6b0)
  • know-your-world: add device capability hooks and improve mobile support (c502a4f)
  • know-your-world: add drill-down map selector and improve setup UI (a6f8dbe)
  • know-your-world: add filter tabs for size, importance, and population (6c3c0ac)
  • know-your-world: add fire tracer animation for learning mode takeover (1e6153e)
  • know-your-world: add hint system, pointer lock buttons, and mobile magnifier support (55e480c)
  • know-your-world: add hints for Europe and Africa regions (46e5c6b)
  • know-your-world: add hot/cold audio feedback for cursor proximity (69813e9)
  • know-your-world: add hot/cold debug panel and production debug mode (493313a)
  • know-your-world: add hot/cold feedback for mobile magnifier (824325b)
  • know-your-world: add interaction state machine foundation (e4d6748)
  • know-your-world: add Learning mode and fix hints before name unlock (fc87808)
  • know-your-world: add learning mode takeover animation and fix give-up sequence (3fd8472)
  • know-your-world: add map zoom preview, remove study time feature (57dd61b)
  • know-your-world: add missing island hints and revise all hints (8b13b5a)
  • know-your-world: add mobile cursor sharing and fix multi-device coop mode (2ce5e18)
  • know-your-world: add mobile virtual keyboard and space-skipping (5318d0d)
  • know-your-world: add multiplayer cursor sharing and fix map viewport (c3b94be)
  • know-your-world: add puzzle piece fly-to-map animation for learning mode (7c49652)
  • know-your-world: add range thermometer for region size selection (c7c4e7c)
  • know-your-world: add region shape silhouette to learning takeover (ebe07e3)
  • know-your-world: add session-based give-up voting and fix cursor emojis (bb2d6fc)
  • know-your-world: add speech announcements and compass-style crosshairs (e0b762e)
  • know-your-world: add speech synthesis for hints with auto-hint/auto-speak (cd841ff)
  • know-your-world: add Strudel-based music system (7dab07b)
  • know-your-world: add SVG path geometry helpers for future use (ea141f0)
  • know-your-world: add turn-based restrictions for letter typing (45730bb)
  • know-your-world: align guidance UI with assistance levels (7e7a8dc)
  • know-your-world: auto-enable hot/cold for learning mode (dcc32c2)
  • know-your-world: enhance hint audio and region name display (e6f58bf)
  • know-your-world: fix magnifier outline aspect ratio and add visual debug toggle (ac915f2)
  • know-your-world: full-screen layout with squish-through pointer lock escape (1729418)
  • know-your-world: implement empirical scale measurement for 1:1 magnifier tracking (39886e8)
  • know-your-world: improve magnifier UX and hide abacus on games (fa1514d)
  • know-your-world: improve mobile magnifier controls and animations (4449fb1)
  • know-your-world: improve mobile magnifier with adaptive zoom and select button (60cf98e)
  • know-your-world: improve region size filter layout (558d369)
  • know-your-world: improve setup screen UX (dc4d621)
  • know-your-world: improve takeover UI and fix celebration sound bug (a8c6b84)
  • know-your-world: live crop updates and safe zone improvements (3f4691e)
  • know-your-world: make magnifier lazy - only move when cursor obscured (ac82564)
  • know-your-world: make magnifier size responsive to aspect ratio (5920cb4)
  • know-your-world: match setup phase map positioning with gameplay (b030558)
  • know-your-world: move region size filters inside map preview (81301ab)
  • know-your-world: move start button below settings controls (a05c4ca)
  • know-your-world: Phase 2 - integrate useMagnifierZoom hook (8ce878d)
  • know-your-world: responsive setup + travel-themed start button (02762fa)
  • know-your-world: separate region filtering from assistance level (9499e4e)
  • know-your-world: show magnifier on mobile drag gesture (a02a710)
  • know-your-world: speak country names in user's locale (426a1e6)
  • know-your-world: sync letter confirmation across multiplayer sessions (655660f)
  • know-your-world: unified region selector with inline list on desktop (d329d80)
  • know-your-world: unify setup and gameplay UI positions (141a506)
  • know-your-world: unify setup UI positions with gameplay (c1a0485)
  • know-your-world: wire interaction state machine to MapRenderer (7e55953)
  • make 404 page abacus hero-sized and responsive (41de252)
  • make resize handle grab tab fully draggable with rounded corners (be40f70)
  • make scaffolding and preview collapsible (804fb1a)
  • make super zoom threshold configurable and increase to 3px (d7ce474)
  • make zoom transitions 4x slower for smoother experience (ca752bd)
  • move difficulty parameters into Smart mode (4b66758)
  • move layout controls to OrientationPanel with toggles (995966f)
  • operator-specific scaffolding for mixed mastery mode (4d7d000)
  • optimize problem generation and add duplicate warning system (11c46c1)
  • pause zoom animation at precision mode threshold (c4989b3)
  • pause/resume zoom animation at precision mode threshold (bdf59e5)
  • pause/resume zoom animation at precision mode threshold (4687820)
  • persist seed and prngAlgorithm for exact problem reproducibility (8cb2209)
  • practice: add dark mode support and fix doubled answer digits (026993c)
  • practice: add progressive help overlay with proper positioning (9a4ab82)
  • practice: add session HUD with tape-deck controls and PageWithNav (b19c6d0)
  • practice: add smooth problem transition animation (b12112e)
  • practice: add student onboarding and offline sync features (b52f054)
  • practice: add three-part daily practice session system (5855438)
  • practice: improve help UX with coach hints and simplified UI (19169ad)
  • practice: integrate progressive help with decomposition display (804d937)
  • redesign shared worksheet viewer with read-only studio and proper error handling (23dccc0)
  • remove all easter egg hints from 404 page (1756182)
  • remove redundant navigation buttons from 404 page (e5262e5)
  • show magnifier only when current target region needs magnification (996c973)
  • show magnifier only when target region needs it (c6997ac)
  • show visual feedback for auto-resolved scaffolding values (fbe776a)
  • smooth cursor dampening transitions with react-spring (66544dc)
  • thermometer: add "only" buttons to quickly select single category (623f882)
  • worksheets: add 3x scale effect to thrown dice (920a855)
  • worksheets: add draggable dice easter egg with physics (b8e66df)
  • worksheets: add duplicate risk warnings to page selector UI (1d8dceb)
  • worksheets: add foundational steps to progression path (7e6f99b)
  • worksheets: add QR codes with share codes for easy worksheet sharing (a0e73d9)
  • worksheets: add shuffle button with animated dice icon (f97efb5)
  • worksheets: add viewport edge ricochet to dice physics (c6db7dc)
  • worksheets: enhance dice throw physics for natural feel (047a960)
  • worksheets: restore mastery progression UI with 3-way mode selector (26a0885)
  • worksheets: smooth dice rotation settle to final face (d00c707)
  • worksheets: upgrade to 3D dice with random rotation animation (3cd5e49)

Performance Improvements

  • add spatial filtering to skip distant regions (8cb4c88)
  • cache polygon conversions to fix performance regression (348ce8f)
  • know-your-world: memoize state machine return value and remove debug logging (d85b976)
  • reduce retry limit from 3000 to 100 in problem generators (08fef59)

Reverts

  • know-your-world: undo premature extractions, restore working state (f0bf205)
  • remove ngrok and LAN IP detection (0040b57)

2.14.0 (2025-11-08)

Bug Fixes

  • add light/dark mode support to tutorial tooltips and decomposition UI (ea10249)
  • replace hardcoded colors with semantic tokens in HomeBlogSection (e124096)
  • use semantic tokens for nav bar transparent mode on hero (d05c6a8)
  • worksheets: Add "Practice" difficulty profile for scaffolded regrouping mastery (d23b606)
  • worksheets: Fix subtraction regrouping frequency bug (8d8e55d)

Features

  • add close button and theme support to mobile menu (ea41b32)
  • add function-based custom bead rendering and HTTP status code easter eggs (fde5ae9)
  • add theme support to abacus style dropdown (2e294ee)
  • add theme support to config panel components (c868421)
  • add theme support to desktop hamburger menu (ab9272b)
  • add theme support to MyAbacus button (702c1c9)
  • add theme support to orientation and generate panels (e38775b)
  • add theme support to worksheet page container (5c14925)
  • add theme support to worksheet preview (693b679)
  • implement full-screen mobile hamburger menu with portal (615cd28)
  • implement two-column landscape layout with smart viewport-based flexbox (b57458b)
  • make mobile menu more responsive with larger touch targets (3ad244f)
  • worksheets: filter operator-specific scaffolds from difficulty change descriptions (cace1c7)
  • worksheets: filter operator-specific scaffolds from preset summaries (8407b07)
  • worksheets: integrate subtraction scaffolding into smart difficulty mode (15bded1)

2.13.2 (2025-11-08)

Bug Fixes

  • abacus-react: remove duplicate numeral rendering and fix dark mode colors (fcbf0f5)

2.13.1 (2025-11-08)

Bug Fixes

  • abacus-react: showNumbers prop was hardcoded to false, breaking numeral display (de89dcd)

2.13.0 (2025-11-08)

Bug Fixes

  • add missing color definitions to example route (bc7ca12)
  • PDF generation now respects operator and digitRange settings (8b8dfee)

Features

  • abacus-react: add comprehensive Storybook stories for automatic theme detection (8ef57cc)

2.12.0 (2025-11-08)

Bug Fixes

  • add missing blog dependencies to package.json (ceefb2f)
  • arrow direction - go RIGHT to borrowed 10s box, not left (fab1fb1)
  • disable place value colors in subtraction borrow boxes to fix arrow layering (b4586ba)
  • make borrow notation destination boxes full height (17307f7)
  • position arrowhead at endpoint and increase size (bdf28b2)
  • prevent undefined displayRules error in worksheet generator (7c33d02)
  • reduce borrowing hint font size from 0.5x to 0.25x (f5d3de2)
  • resolve TypeScript errors blocking Docker build (a195338)
  • use curved Bezier path for borrow arrow (9b4eb14)
  • use dark gray for borrowing hints on colored backgrounds (5cb346d)
  • use numeric cellSize for borrow box sizing in hints (cc54176)
  • worksheets: actually fix dropdown button height by constraining description area (aa9052a)
  • worksheets: Add operator to preview query key and update UI labels (97ddc7e)
  • worksheets: add V4 fields to preview query key for cache invalidation (d9b54a7)
  • worksheets: align makeEasier fallback with spec priorities (3e56e1d)
  • worksheets: align makeHarder fallback with spec priorities (a170209)
  • worksheets: correct findNearestPreset direction logic (878cf02)
  • worksheets: correct scaffolding summary to include all conditional modes (2797038)
  • worksheets: dynamically size grid based on actual problem digits (130bbd4)
  • worksheets: increase color visibility for difficulty presets (a7412ad)
  • worksheets: increase dropdown button height to fit all content lines (3a43149)
  • worksheets: Make destination borrow box more visible (a01fa81)
  • worksheets: persist digitRange and manualPreset in auto-save (c874995)
  • worksheets: prevent wrong preset showing as active at custom positions (88e929e)
  • worksheets: Set showBorrowNotation to false for smart mode (e9d52ba)
  • worksheets: show ten-frames in smart mode when rule is 'always' (0bc8272)
  • worksheets: update display options preview to use new problem-stack signature (258b9ac)
  • worksheets: use fixed height instead of min-height for dropdown button (fe1ef8a)
  • worksheets: use imperative voice for difficulty adjustment button labels (d991512)
  • worksheets: use white text on colored backgrounds for readability (2b7b8ec)

Features

  • abacus-react: add automatic theme detection for numeral colors (cbfd861)
  • add arrow from '1' in borrow hint pointing right (b718994)
  • add diagonal arrow from '1' to borrowed 10s box (a9319c3)
  • add infrastructure for borrowing hints toggle (74c6756)
  • add smooth curved arrow for borrowing hints (112745c)
  • blog: add "The Calculator Won" post on abacus education history (8e04867)
  • blog: add navigation bar to blog pages (6b4ed5d)
  • handle cascading borrows in borrowing hints (3e1b51b)
  • implement borrowing hints arrow visualization (b2f875c)
  • implement borrowing hints visual guidance (89b8f98)
  • implement light/dark theme system with semantic tokens (210a014)
  • optimize ten-frame blog examples for dark theme (904701d)
  • refactor borrow scaffolding into unified UI with column alignment (41b5c05)
  • worksheets: Add borrow notation scaffolding for subtraction (ff161d4)
  • worksheets: add color-coding to difficulty presets with interpolation (b1201b8)
  • worksheets: add difficulty preset dropdown for Smart mode (49f6c02)
  • worksheets: add interactive 2D difficulty map with hover preview (b92b702)
  • worksheets: add ModeSelector component for Smart/Manual mode switching (4ffd47a)
  • worksheets: add operator selection and subtraction problem generation (ab87c6e)
  • worksheets: add regrouping frequency controls to Manual mode (f060692)
  • worksheets: add subtraction problem analysis and implementation plan (a7b48a2)
  • worksheets: add V3 config schema with Smart/Manual mode discrimination (cd1b3ed)
  • worksheets: add visual mode badges to scaffolding summary (eaeeae4)
  • worksheets: display scaffolding attributes on separate lines with fixed button height (cc9fff7)
  • worksheets: implement true RGB color interpolation for custom difficulty (952cffa)
  • worksheets: implement unique place value colors for 1-6 digit problems (65e272c)
  • worksheets: improve preset dropdown with descriptions and remove duplicate buttons (852504a)
  • worksheets: make progressive difficulty available in both Smart and Manual modes (54abd5d)
  • worksheets: Phase 10 - Add operator validation (d93dfac)
  • worksheets: Phase 5 - Update typstGenerator for operator support (b191bb9)
  • worksheets: Phase 7 - Add operator to auto-save persistence (01d0959)
  • worksheets: Phase 8 - Update preview and example routes for operator (0106068)
  • worksheets: Phase 9 - Update DisplayOptionsPreview for operator (d5bbd78)
  • worksheets: reorganize orientation panel with Radix dropdown and compact layout (f37960a)
  • worksheets: replace digit selector with Radix double-thumbed slider (c0298cf)
  • worksheets: show enabled scaffolding aids instead of numeric level (0b8b0d2)
  • worksheets: show nearest presets for custom difficulty configurations (0e3f0ae)
  • worksheets: update validation and generation for V3 mode-aware schema (ada9600)
  • worksheets: use more vibrant and distinct difficulty colors (984b75c)
  • worksheets: use scaffolding summary for all preset descriptions (23f0f1d)

Reverts

  • remove all color-coding attempts for difficulty presets (d52b2aa)

2.11.0 (2025-11-07)

Bug Fixes

  • abacus-react: include space for numbers in viewBox calculation (1da3358)
  • db: add statement-breakpoint to worksheet_settings migration (42e1a71)
  • docker: add libfuse2 and APPIMAGE_EXTRACT_AND_RUN for OpenSCAD extraction (12490a7)
  • syntax: correct div nesting and indentation in abacus page (3c9ecca)
  • syntax: remove emoji variation selector causing build error (00aabd8)
  • ui: add wrapper div to prevent content from appearing under nav (99f4dd5)
  • worksheets: only show ten-frames row for problems that need regrouping (8f92f5a)
  • worksheets: remove foreign key constraint to support guest users (e6e9ec3)
  • worksheets: resolve SSR URL error and guest user foreign key constraint (42ea8d5)

Features

  • add API endpoint for live worksheet preview examples (bef3a21)
  • add DisplayOptionsPreview component with debouncing (6502da7)
  • blog: add blog pages and API endpoints (1886ea0)
  • blog: generate worksheet examples showing scaffolding progression (b628a34)
  • create: add worksheet creator card to hub page (c84d712)
  • flashcards: add live preview functionality (b38bec8)
  • homepage: responsive 2-column layout with data attributes (ad33056)
  • i18n: add translations for addition worksheet creator (2bf645a)
  • i18n: add worksheet translations for all languages (6acd15a)
  • replace static examples with live preview in display options (4361ad3)
  • worksheets: add customizable operands to preview (21cda18)
  • worksheets: add diagonal-split pattern to carry boxes (5b91809)
  • worksheets: add double-digit addition worksheet creator (1a75213)
  • worksheets: add type-safe config persistence with schema versioning (0406adc)
  • worksheets: enhance addition worksheets with ten-frames and refinements (71ad300)
  • worksheets: generate discrete pages with precise sizing (56c0227)
  • worksheets: implement auto-save and load for worksheet settings (186fa81)
  • worksheets: implement constrained 2D difficulty system with pedagogical zones (c39b7f6)
  • worksheets: improve difficulty controls and problem sizing (aedeb45)
  • worksheets: improve preview error reporting (d8b4951)
  • worksheets: pre-generate preview on server to eliminate loading flash (02c9187)
  • worksheets: redesign display options as toggle buttons (ac3b749)
  • worksheets: simplify difficulty controls with collapsible regrouping pane (bb363c0)
  • worksheets: update ConfigPanel with accurate page calculations (2c0fbd9)

2.10.1 (2025-11-05)

Bug Fixes

  • i18n: add nav bar to 3D abacus creator page (827a949)

2.10.0 (2025-11-05)

Bug Fixes

  • replace regex HTML parsing with deterministic bead position calculations in icon generation (41a3707)

Features

  • add cropToActiveBeads prop to AbacusStatic and AbacusReact (35b0824)
  • calendar: add beautiful daily calendar with locale-based paper size detection (bdca315)
  • calendar: add i18n support and cropped abacus day numbers (5242f89)
  • i18n: add internationalization for all create pages (b080970)

2.9.0 (2025-11-05)

Bug Fixes

  • docker: upgrade OpenSCAD to 2024.11 to fix CGAL intersection bug (e1bcd24)
  • guide: increase abacus sizes - they were too small (1074624)
  • guide: make abacus sizes consistent and add nav spacing (bea4842)
  • guide: remove inner containers and tighten margins (7e54c6f)
  • layout: add systematic spacing for fixed nav bar (4559fb1)
  • layout: remove wrapper, use utility class for nav spacing (247c3d9)
  • nav: restrict transparent hero styling to home page only (fab227d)

Features

  • 3d-abacus: change default columns from 13 to 4 (cd15c70)
  • add client-side OpenSCAD WASM support for 3D preview (eaaf17c)

2.8.3 (2025-11-05)

Bug Fixes

  • tutorial: correct column validation for bead highlights (9ba1824)
  • tutorial: fix overlay rendering, arrow indicators, and bead visibility (a804316)
  • web,docker: add --format flag for Typst and upgrade to v0.13.0 (19b9d7a)
  • web: move tsx to production dependencies for calendar generation (ffae9c1)

2.8.2 (2025-11-04)

Bug Fixes

  • abacus-react: add data-testid attributes back to beads for testing (23ae1b0)

2.8.1 (2025-11-04)

Bug Fixes

  • abacus-react: fix animations by preventing component remounting (be7d4c4)
  • abacus-react: restore original AbacusReact measurements and positioning (88c0baa)

2.8.0 (2025-11-04)

Bug Fixes

  • docker: add scripts, abacus-react, and tsx for production calendar generation (33eb90e)
  • web: generate styled-system artifacts during build (293390a)
  • web: move react-dom/server import to API route to satisfy Next.js (00a8bc3)
  • web: prevent abacus overlap in composite calendar (448f93c), closes #f0f0f0
  • web: use dynamic import for react-dom/server in API route (4f93c7d)
  • web: use nested SVG elements to prevent coordinate space conflicts (f9cbee8)

Features

  • abacus-react: add shared dimension calculator for consistent sizing (e5ba772)
  • web: add Typst-based preview endpoint with React Suspense (599a758)
  • web: add year abacus to calendar header and make grid bolder (867c7ee), closes #333
  • web: optimize monthly calendar for single-page layout (b277a89)
  • web: redesign monthly calendar as single composite SVG (8ce8038)

2.7.1 (2025-11-04)

Bug Fixes

  • add xmlns to AbacusStatic for Typst SVG parsing (98cd019)
  • web: use AbacusStatic for calendar SVG generation (08c6a41)

2.7.0 (2025-11-04)

Bug Fixes

  • web: add dynamic export to rithmomachia page (329e623)
  • web: fix Typst PDF generation path resolution (7ce1287)

Features

  • abacus-react: add separate /static export path for React Server Components (ed69f6b)
  • web: add test page for AbacusStatic RSC compatibility (903dea2)
  • web: improve calendar abacus preview styling (8439727)

2.6.0 (2025-11-04)

Bug Fixes

  • abacus-react: correct column highlighting offset in AbacusStatic (0641eb7)

Features

  • abacus-react: add AbacusStatic for React Server Components (3b8e864)
  • web: add test page for AbacusStatic Server Component (3588d5a)

2.5.0 (2025-11-03)

Features

  • abacus-react: add core utility functions for state management (e65541c)
  • abacus-react: add layout and educational props (35bbcec)
  • abacus-react: add pre-defined theme presets (cf1f950)
  • abacus-react: add React hooks for abacus calculations (de038d2)
  • abacus-react: export new utilities, hooks, and themes (ce4e44d)

2.4.0 (2025-11-03)

Bug Fixes

  • remove distracting parallax and wobble 3D effects (28a2d40)
  • remove wobble physics and enhance wood grain visibility (5d97673)
  • rewrite 3D stories to use props instead of CSS wrappers (26bdb11)
  • use absolute positioning for hero abacus to eliminate scroll lag (096104b)

Features

  • complete 3D enhancement integration for all three proposals (5ac55cc)
  • enable 3D enhancement on hero/open MyAbacus modes (37e330f)

2.3.0 (2025-11-03)

Bug Fixes

  • adjust hero abacus position to avoid covering subtitle (f03d341)
  • configure favicon metadata and improve bead visibility (e1369fa)
  • correct hero abacus scroll direction to flow with page content (4232746)
  • extract pure SVG content from AbacusReact renders (b07f1c4)
  • games: prevent horizontal page scroll from carousel overflow (5a8c98f)
  • games: smooth scroll feel for carousel wheel navigation (f80a73b)
  • games: use specific transition properties for smooth carousel loop (187271e)
  • include column posts in favicon bounding box (0b2f481)
  • mark dynamic routes as force-dynamic to prevent static generation errors (d7b35d9)
  • nav: show full navigation on /games page (d3fe6ac)
  • reduce padding to minimize gap below last bead (0e529be)
  • resolve z-index layering and hero abacus visibility issues (ed9a050)
  • separate horizontal and vertical bounding box logic (83090df)
  • tolerate OpenSCAD CGAL warnings if output file is created (88993f3)
  • use Debian base for deps stage to match runner for binary compatibility (f8fe6e4)
  • use default BOSL2 branch instead of non-existent v2.0.0 tag (f4ffc5b)
  • use nested SVG viewBox for actual cropping, not just scaling (440b492)
  • various game improvements and UI enhancements (b67cf61)

Features

  • add 3D printing support for abacus models (dafdfdd)
  • add comprehensive Storybook coverage and migration guide (7a4a37e)
  • add game preview system with mock arcade environment (25880cc)
  • add per-player stats tracking system (613301c)
  • add unified trophy abacus with hero mode integration (6620418)
  • dynamic day-of-month favicon using subprocess pattern (4d0795a)
  • dynamically crop favicon to active beads for maximum size (5670322)
  • games: add autoplay and improve carousel layout (9f51edf)
  • games: add horizontal scroll support to carousels (a224abb)
  • games: add rotating games hero carousel (24231e6)
  • i18n: update games page hero section copy (6333c60)
  • install embla-carousel-autoplay for games carousel (946e5d1)
  • install embla-carousel-react for player profile carousel (642ae95)
  • switch to royal color theme with transparent background (944ad65), closes #fbbf24 #f59e0 #a855f7 #7e22

2.2.0 (2025-11-03)

Bug Fixes

  • arcade: add automatic retry for version conflict rejections (fbcde25)
  • arcade: allow deactivating players from users who left the room (7c1c2d7)
  • arcade: implement optimistic locking in session manager (71fd66d)
  • board rotation now properly fills height in portrait mode (b5a96ea)
  • card-sorting: add border radius to outer card container (a922eba)
  • card-sorting: add debug logging for spring animations (d42947e)
  • card-sorting: add missing gameMode support after hard reset (a832325)
  • card-sorting: add missing useMemo import (949d76d)
  • card-sorting: add overflow hidden to clip rounded corners (84c66fe)
  • card-sorting: adjust connecting paths for scaled cards (829c741)
  • card-sorting: adjust game board for spectator panels (fc5cf12)
  • card-sorting: adjust viewport dimensions for spectator panels (4dce16c)
  • card-sorting: animate cards from game board to results grid (17d45fe)
  • card-sorting: correct suffix card detection in auto-arrange (d02ab59)
  • card-sorting: enable card scaling for spectators (6b095c3)
  • card-sorting: enable New Game button during active gameplay (f3f6eca)
  • card-sorting: end drag immediately when card becomes locked (ae45298)
  • card-sorting: filter local player from emoji overlays on dragged cards (dc2d94a)
  • card-sorting: fix results panel layout to not cover cards (4b4fbfe)
  • card-sorting: hide activity notifications in spectator mode (5cca279)
  • card-sorting: keep arrow sequence numbers upright (79c9469)
  • card-sorting: lock correctly positioned prefix/suffix cards (170abed)
  • card-sorting: lock spring positions after initial animation completes (275cc62)
  • card-sorting: New Game now restarts with same settings instantly (f3687ed)
  • card-sorting: only shrink/fade cards in correct prefix (51368c6)
  • card-sorting: preserve card positions on pause/resume (0d8af09)
  • card-sorting: preserve rotation when starting drag (3364144)
  • card-sorting: prevent duplicate START_GAME moves on Play Again (a0b14f8)
  • card-sorting: prevent ghost movements with proper optimistic updates (bd014be)
  • card-sorting: prevent infinite loop when all cards are correct (34785f4)
  • card-sorting: prevent infinite loop with tolerance-based position comparison (627b873)
  • card-sorting: prevent position jump when clicking rotated cards (564a00f)
  • card-sorting: prevent replaying own movements from server (308168a)
  • card-sorting: prevent springs from reinitializing on window resize (30953b8)
  • card-sorting: prevent springs from resetting after animation (8aff60c)
  • card-sorting: remove hasAnimatedRef logic causing backwards animation (a44aa5a)
  • card-sorting: remove remaining reveal numbers references (15c53ea)
  • card-sorting: restore prefix/suffix card shrinking visual feedback (f5fb4d7)
  • card-sorting: show only active players in team members section (fa9f1a5)
  • card-sorting: smooth scale animation while dragging cards (0eefc33)
  • card-sorting: stabilize inferred sequence for locked cards during drag (b0cd194)
  • card-sorting: use empty deps array for useSprings to prevent recreation (cee399e)
  • card-sorting: use ref to track initialized state and prevent re-animation (f389afa)
  • card-sorting: use same coordinate system for game board and results (6972fdf)
  • complement-race: actually filter by isActive instead of just id (ef4ca57)
  • complement-race: ensure continuous position broadcasting during train movement (df60824)
  • complement-race: fix ghost train position update lag and reload position reset (ad78a65)
  • complement-race: fix react-spring interpolation TypeScript errors (0add9e4)
  • complement-race: prevent delivery move thrashing in steam sprint mode (e1258ee)
  • complement-race: show only first active player's passengers on train (2bfd5d2)
  • complement-race: use individual player positions for ghost trains (00dc4b1)
  • complement-race: use local player instead of first player for train display (915d8a5)
  • complement-race: use sendMove with correct parameters for position updates (06cd94b)
  • copy entire packages/core and packages/templates (0ccada0)
  • correct Typst template path in Dockerfile (4c518de)
  • delete existing user sessions before creating new ones (0cced47)
  • flashcards: correct pivot point to rotate around card center (50fc3fd)
  • flashcards: fix position snap-back by using api.set before decay (30e16c8)
  • flashcards: improve shadow speed logging with separate throttling (0f51366)
  • flashcards: increase rotation sensitivity 10x for visible grab point physics (c0fa926)
  • flashcards: keep grab point under cursor with proper coordinate conversion (1869216)
  • flashcards: revert to simple delta positioning to prevent card jumping (d018b69)
  • flashcards: store grab offset in local coordinates to prevent jump (39d93a9)
  • flashcards: use explicit per-property configs to fix decay physics (f32480a)
  • hero-abacus: restructure layout to prevent visual overlap (02b6c70)
  • hero: prevent nav thrashing with hysteresis (71b1b93)
  • hero: prevent SSR hydration mismatch for subtitle (1bfde8f)
  • hero: use Number.isNaN instead of global isNaN (c229faf)
  • homepage: add dark gradient overlay for better text contrast on game cards (6410b21)
  • homepage: add overflow hidden to skill cards (5070d8d)
  • homepage: add overflow hidden to Your Journey section (415a1fb)
  • homepage: adjust hero abacus scale for optimal sizing across devices (86dee31)
  • homepage: adjust responsive breakpoints to prevent skill card clipping (62ff067)
  • homepage: align container width breakpoint with grid columns (422bf3d)
  • homepage: correct flashcard transform rendering (5dc636a)
  • homepage: display gradient backgrounds on all game cards (c6dc210)
  • homepage: improve hero abacus sizing and layout (230f1dc)
  • homepage: improve text contrast on game cards with text shadows (b6410c7)
  • homepage: increase abacus container width to 120px/150px (57c212f)
  • homepage: increase skill card abacus container width (e65e969)
  • homepage: increase skill cards container width to prevent title wrapping (cd3eb61)
  • homepage: make MiniAbacus fill container properly (3b5d147)
  • homepage: prevent skill card overflow (fa26acf)
  • homepage: prevent text overflow in skill cards (a6ac55b)
  • homepage: reduce mobile abacus scale to prevent scroll hint overlap (b8235be)
  • homepage: restructure layout to center 1400px wide demo section (61403f2)
  • homepage: set fixed width for learning panel to prevent layout shift (dc19622)
  • homepage: set fixed width for tutorial panel to prevent layout shift (aba9f8a)
  • homepage: set min-width 1400px on container and remove max-width (aa297d4)
  • homepage: use actual container dimensions for flashcard positioning (4082a24)
  • homepage: use app-wide abacus config in interactive flashcards (cf1be2d)
  • homepage: widen skill cards container to 650px (bc1ad3a)
  • i18n: eliminate FOUC by loading messages server-side (4d4d930)
  • i18n: use useMessages() for tutorial translations (95b0105)
  • increase server update debounce to 2000ms for low bandwidth (633ff12)
  • Integrate threshold input into Point Victory card (b29bbee)
  • levels: add fixed dimensions and margins to kyu detail boxes (05dd0b3)
  • levels: add smooth CSS transitions for slider thumb movement (ca8cef1)
  • levels: adjust slider text positioning to prevent emoji overlap (e5ffe39)
  • levels: improve slider tick spacing to use full width (1e90d6c)
  • levels: increase animation speed to 10ms for 10th Dan (6f89d9e)
  • levels: match top/bottom margins to left padding on kyu detail boxes (aa0bdcf)
  • levels: reduce operator box sizes and remove divider line (29d20a6)
  • levels: use two-column grid for kyu details to prevent clipping (fa3b73c)
  • levels: use uniform padding on operator box grid (2818fd1)
  • mobile: optimize Your Journey section for iPhone displays (9167fb4)
  • mobile: reduce height of Your Journey section on mobile (8944035)
  • mobile: restore abacus visibility in "Your Journey" section (c96036d)
  • navbar: apply glassmorphism to transparent mode, not scrolled mode (8893675)
  • navbar: remove border artifact and add 10px bottom fade (d5f60ce)
  • nav: ensure nav bar appears above tutorial tooltips (cc31564)
  • nav: prevent thrashing by using fixed position always (eff44b3)
  • nav: remove unnecessary borders from transparent nav (8c2ddca)
  • qr-button: improve layout and z-index (646a422)
  • qr-button: increase mini QR code size to 80px (61ac737)
  • qr-button: increase mini QR code to 84px (3fae5ea)
  • qr-button: make button square and increase QR size (dc2d466)
  • qr-button: match height of stacked buttons (81f202d)
  • rithmomachia: add missing i18next dependencies (91154d9)
  • rithmomachia: add missing pyramid section keys to Japanese (ja.json) (dae615e)
  • rithmomachia: adjust error dialog sizing to prevent text clipping (cda1126)
  • rithmomachia: adjust roster notice position to not overlap nav (7093223)
  • rithmomachia: change undock icon to pop-out arrow (2a91748)
  • rithmomachia: correct board dimensions to 16x8 and restore original layout values (cfac277)
  • rithmomachia: Correct board setup to match reference image exactly (618e563)
  • rithmomachia: correct makeMove parameter types for capture handling (aafb64f)
  • rithmomachia: fix guide modal resize drift by calculating from initial state (1bcd99c)
  • rithmomachia: fix harmony section translation structure for hi/ja/es (14259a1)
  • rithmomachia: fix modal resizing zoom issue (4fa20f4)
  • rithmomachia: Fix TypeScript errors in playing guide modal (4834ece)
  • rithmomachia: handle pyramid pieces in hover error tooltip (56f3164)
  • rithmomachia: implement proper board cropping and highlighting in guide (d0a8fcd)
  • rithmomachia: improve guide modal tab navigation at narrow widths (a673177)
  • rithmomachia: reconnect player assignment UI and fix setup layout (a1a0374)
  • rithmomachia: render guide as docked in preview panel (190f8cf)
  • rithmomachia: show actual values in tooltips for non-helper relations (774c6b0)
  • rithmomachia: show guest-friendly message when they can't fix too many players (54bfd2f)
  • rithmomachia: smooth guide dragging from docked state without jump (8f4a79c)
  • rithmomachia: validate move path before showing capture error on hover (bd49964)
  • room-info: hide Leave Room button when user is alone (5927f61)
  • types: properly type HomeHeroContext in AppNavBar (f9a7cb7)

Features

  • abacus: add nativeAbacusNumbers setting to schema and UI (79f7347)
  • add comprehensive metadata, SEO, and make AbacusReact SSR-compatible (0922ea1)
  • add Strategy & Tactics section to Rithmomachia guide (81ead65)
  • add vibrant gradients and equal heights to game cards (a1a135a), closes #4 #00f2 #667 #764ba2 #f093 #f5576 #43e97 #38f9d7
  • arcade: add ability to deactivate remote players without kicking user (3628426)
  • arcade: add native abacus numbers support to pressure gauge (1d525c7)
  • arcade: add Rithmomachia (Battle of Numbers) game (2fc0a05)
  • arcade: add yjs-demo collaborative game and Yjs persistence layer (d568955)
  • arcade: auto-create room when user has none (ff88c3a)
  • branding: rebrand navigation from 'Soroban Generator' to 'Abaci One' (cce8980)
  • card-sorting: add activity feed notifications for collaborative mode (1461414)
  • card-sorting: add auto-submit countdown for perfect sequences (780a716)
  • card-sorting: add bezier curves to connecting arrows (4d8e873)
  • card-sorting: add CardPosition type and position syncing (656f5a7)
  • card-sorting: add collapsible stats sidebar for spectators (6527c26)
  • card-sorting: add game mode selector UI to setup phase (d25b888)
  • card-sorting: add GameMode type system for multiplayer support (fd76533)
  • card-sorting: add green border to correctly positioned cards (16fca86), closes #22c55
  • card-sorting: add player emoji indicators on moving cards (3a82099)
  • card-sorting: add react-spring animations for real-time sync (c367e0c)
  • card-sorting: add smooth transition to drop shadow (b0b93d0)
  • card-sorting: add spectator mode UI enhancements (ee7345d), closes #6366f1 #8b5cf6
  • card-sorting: add team scoring UI for collaborative mode (ed6f177), closes #a78 #8b5cf6
  • card-sorting: add updateCardPositions action to Provider (f6ed4a2)
  • card-sorting: auto-arrange prefix/suffix cards in corners (4ba7f24)
  • card-sorting: fade correctly positioned cards to 50% opacity (7028cfc)
  • card-sorting: gentler spring animation for locked cards (47189cb)
  • card-sorting: implement continuous bezier curve paths (2d93024)
  • card-sorting: improve card distribution for natural scattered look (0b0503f)
  • card-sorting: make player emoji fill entire card background (2e7a02c)
  • card-sorting: optimize results screen for mobile (d188789)
  • card-sorting: redesign setup screen with modern UI (73cf967)
  • card-sorting: scale correctly positioned cards to 50% (222dc55)
  • card-sorting: shrink/fade cards in correct suffix as well (8f6feec)
  • card-sorting: smooth spring transition from game table to results grid (c5f39d5)
  • card-sorting: wrap prefix/suffix cards to multiple rows (e3184dd)
  • complement-race: add ghost trains for multiplayer visibility (7668cc9)
  • complement-race: add react-spring animations to ghost trains for smooth movement (eb3700a)
  • complement-race: implement per-car adaptive opacity for ghost trains (9b1d47d)
  • complement-race: implement position broadcasting for ghost trains (c5fba5b)
  • create-room: replace hardcoded game grid with dynamic Radix Select dropdown (83d0ba2)
  • flashcards: add dynamic shadow based on drag speed (92148a4)
  • flashcards: add grab point physics for realistic rotation (bf37eb1)
  • flashcards: enable unbounded drag and position persistence (ad1ad69)
  • hero: persist random subtitle per-session (318f946)
  • homepage: add full-page hero abacus with scroll-based nav transition (d8ec642)
  • homepage: add interactive draggable flashcards with physics (0744883)
  • homepage: add interactive draggable flashcards with physics (e711c52)
  • homepage: add interactive learning panels with animated mini-tutorials (76d6f19)
  • homepage: add interactive levels slider to replace static progression (8a2d5ae)
  • homepage: create fancy flashcard display with spread-out cards (cd30944)
  • homepage: emphasize single-player and observer modes (a537bc1)
  • homepage: increase hero abacus size for better visibility (7666b0a)
  • homepage: make skills section responsive with emojis (9ec0a71)
  • homepage: significantly increase mobile hero abacus size (424f41d)
  • homepage: update section title to "The Arcade" (f47b172)
  • i18n: add dynamic locale switching without page reload (fe9bfea)
  • i18n: add global language selector to navigation (0506360)
  • i18n: add homepage translations for all supported languages (8c9d35a)
  • i18n: add Old High German (goh) language support (b334a15)
  • i18n: complete Old High German translations for all locales (0b06a1c)
  • i18n: internationalize games page and tutorial content (4253964)
  • i18n: internationalize homepage with English translations (40cff14)
  • i18n: migrate from react-i18next to next-intl (9016b76)
  • internationalize guide page with 6 languages (e9c320b)
  • internationalize tutorial player (26d41cf)
  • levels: add animated calculation effect to abacus display (4f4c735)
  • levels: add auto-advance slider with hover pause (41eaed2)
  • levels: add hover tracking to slider for real-time level preview (477a0b3)
  • levels: add kyu level details display with English translations (c650ffa)
  • levels: add structured kyu exam details with card UI (6501b07)
  • levels: make emoji tick marks clickable and remove redundant UI (07c783a)
  • levels: progressive animation speed for Dan levels (9dff3e7)
  • levels: redesign kyu details with larger operators and prominent digits (6739d59)
  • levels: right-align abacus display (8681b17)
  • nav: add transparent nav bar with borders when hero visible (463841e)
  • navbar: add glassmorphism effect to nav links when scrolled (89b9072)
  • optimize card sorting for mobile displays (b443ee9)
  • Redesign Rithmomachia setup page with dramatic medieval theme (6ae4d13)
  • rithmomachia: add 80% opacity to guide modal when not hovered (4a78485)
  • rithmomachia: add CaptureContext for capture dialog state management (d7eb957)
  • rithmomachia: add ghost panel preview for guide docking (c0d6526)
  • rithmomachia: add guide docking with resizable panels (f457f1a)
  • rithmomachia: add helper piece selection for mathematical captures (cae3359)
  • rithmomachia: add helpful error messages for failed captures (b172440)
  • rithmomachia: add initial board visual to guide Overview section (d42bcff)
  • rithmomachia: Add interactive playing guide modal (3121d82)
  • rithmomachia: add number bond visualization and helper placeholders (82d8913)
  • rithmomachia: add ratio capture example to guide (9150b0c)
  • rithmomachia: add standalone guide page route (3fcc79f)
  • rithmomachia: add useBoardLayout hook for centralized layout calculations (27f1c98)
  • rithmomachia: add usePieceSelection hook for selection state management (275f401)
  • rithmomachia: add visual board examples to Capture section (74bc3c0)
  • rithmomachia: add visual board examples to Harmony section (1d5f01c)
  • rithmomachia: add visual winning example to Victory section (b7fac78)
  • rithmomachia: auto-size tab labels with react-textfit (9fd5406)
  • rithmomachia: cycle through valid helpers with dynamic number tooltips (4829e41)
  • rithmomachia: enhance capture relation UI with smooth animations (0a30801)
  • rithmomachia: enhance Harmony section with comprehensive content (f555856)
  • rithmomachia: enhance Pieces section with visual examples and pyramid details (55aff82)
  • rithmomachia: enhance Pyramid section with comprehensive details (9fde1ef)
  • rithmomachia: guide defaults to docked right on open (11f674d)
  • rithmomachia: improve guide pieces section layout (a270bfc)
  • rithmomachia: improve guide UX and add persistence (b314740)
  • rithmomachia: improve roster status notice UX (e27df45)
  • rithmomachia: integrate roster warning into game nav (8a11594)
  • rithmomachia: make guide modal ultra-responsive down to 150px width (0474197)
  • rithmomachia: recreate original guide modal header layout (2489695)
  • rithmomachia: show capture error on hover instead of click (339b678)
  • rithmomachia: show pyramid face numbers on hover instead of selection (b0c4523)
  • rithmomachia: show pyramid face numbers when selected (5c186f3)
  • rithmomachia: show pyramid face numbers when selected with subtle animation (5c2ddbe)
  • rithmomachia: show real preview layout when dragging guide to dock (17d2460)
  • rithmomachia: simplify guide language for clarity (85cb630)
  • rithmomachia: skip helper selection UI and auto-select first valid helper (be2a00e)
  • rithmomachia: Update harmony system to classical three-piece proportions (08c9762)
  • rithmomachia: Update to traditional board setup with 25 pieces per side (0769eaa)
  • rithmomachia: use actual piece SVGs in number bond with 2.5s rotation animation (976a7de)
  • room-share: add QR code button for easy mobile joining (349290a)
  • show rithmomachia turn in nav (7c89bfe)

Performance Improvements

  • levels: speed up slider animations for more responsive feel (1e5467f)
  • optimize Docker image size to reduce build failures (9ca3106)

Reverts

  • card-sorting: remove auto-positioning and locked card features (23725ca)
  • navbar: remove bottom fade gradient (6e5aec8)

2.1.0 (2025-10-20)

Bug Fixes

  • levels: add fixed height to entire level display pane (200b26c)
  • levels: increase container height to prevent abacus clipping (cd5c15a)
  • levels: only animate abacus, not container with background/border (c80477d)
  • levels: reduce Dan scale and container height to prevent clipping (563136f)
  • levels: reduce max scale factor to allow more compact container (ead9ee9)
  • levels: reduce scale factor variation to minimize margin differences (abb647c)
  • levels: revert delayed column change, keep overflow hidden (22f00f5)
  • levels: stabilize slider position and prevent abacus clipping (09004dc)

Features

  • abacus-react: export StandaloneBead component wired to AbacusDisplayContext (0146ce1)
  • levels: add hover interaction and smooth React Spring transitions (fd2b633)
  • levels: redesign slider with abacus-themed beads (f3dce84)
  • levels: replace slider thumb with diamond-shaped abacus beads (0fbde53)

2.0.0 (2025-10-20)

Bug Fixes

  • add dark color for abacus numerals (73ff32c), closes #1f2937
  • add POST handler for join requests API endpoint (d3e5cdf)
  • add Typst to Docker image for flashcard generation (d9a7694)
  • allow join with pending invitation for restricted rooms (85b2cf9)
  • allow password retry when joining via share link (e469363)
  • api: add 'math-sprint' to settings endpoint validation (d790e5e), closes #1
  • api: include members and memberPlayers in room creation response (8320d9e)
  • arcade-rooms: navigate to invite link after room creation (1922b21)
  • arcade: add defensive checks and update test fixtures (a93d981)
  • arcade: add host-only game selection with clear messaging (22df1b0)
  • arcade: add host-only game selection with clear messaging (c0680ca)
  • arcade: add Number Guesser to game config helpers (7d1a351)
  • arcade: allow room creator to rejoin restricted/approval rooms (654ba19)
  • arcade: delete old session when room game changes (98a3a25)
  • arcade: implement settings persistence for matching game (08fe432)
  • arcade: only notify room creator of join requests (bc571e3)
  • arcade: preserve game settings when returning to game selection (0ee7739)
  • arcade: preserve gameConfig when switching games (2273c71)
  • arcade: prevent empty update in settings API when only gameConfig changes (ffb626f)
  • arcade: prevent gameConfig from being overwritten when switching games (a89d3a9)
  • arcade: prevent server-side loading of React components (784793b)
  • arcade: read nested gameConfig correctly when creating sessions (94ef392)
  • arcade: remove broken query param from game URLs (87631af)
  • arcade: remove legacy master-organizer placeholder (76d207e)
  • arcade: resolve TypeScript errors in game config helpers (04c9944)
  • build: resolve Docker build failures preventing deployment (7801dbb)
  • card-sorting: center AbacusReact SVGs in card tiles (26edec1)
  • card-sorting: faithfully port UI/UX from Python original (c92076f), closes #2c5f76 #1976d2
  • card-sorting: increase card tile sizes to contain abacuses (d2a3b7a)
  • card-sorting: increase SVG size to fill card containers (cf9d893)
  • card-sorting: match game selector background to other games (db62519), closes #ccfbf1 #99f6e4
  • card-sorting: match Python card layout with flex wrap (9679d68)
  • card-sorting: position slots flow horizontally with wrap (e14ffe4)
  • card-sorting: use blue gradient matching other game cards (bdb84f5)
  • clear hover state in CLEAR_MISMATCH for clean turn transitions (43f7c92)
  • clear hover state on turn changes and game transitions (6fd425c)
  • complement-race: add missing AI commentary cooldown updates (357aa30)
  • complement-race: add missing useEffect import (3054130)
  • complement-race: add missing useRef import (d43829a)
  • complement-race: add pressure decay system and improve logging (66992e8)
  • complement-race: balance AI speeds to match original implementation (054f0c0)
  • complement-race: clear input state on question transitions (5872030)
  • complement-race: correct passenger boarding to use multiplayer fields (7ed1b94)
  • complement-race: counter-flip AI speech bubbles to make text readable (07d5607)
  • complement-race: flip AI racers to face right in practice mode (ebfff1a)
  • complement-race: flip player avatar to face right in practice mode (fa6b3b6)
  • complement-race: implement client-side momentum with continuous decay for smooth train movement (ea19ff9)
  • complement-race: improve AI speech bubble positioning (6e436db)
  • complement-race: reduce initial momentum from 50 to 10 to prevent train sailing past first station (5f146b0)
  • complement-race: remove dual game loop conflict preventing route progression (84d42e2)
  • complement-race: resolve TypeScript errors in state adapter (59abcca)
  • complement-race: restore smooth train movement with client-side game loop (46a80cb)
  • complement-race: show new passengers when route changes (ec1c8ed)
  • complement-race: track physical car indices to prevent boarding issues (53bbae8)
  • complement-race: track previous position to detect route threshold crossing (a6c20aa)
  • complement-race: train now moves in sprint mode (54b46e7)
  • complement-race: update passenger display when state changes (5116364)
  • complement-race: use active local players pattern from navbar (71cdc34)
  • complement-race: use local player emoji instead of first active player (76eb051)
  • correct AbacusReact API usage and add structural styling (247377f), closes #fbbf24 #a78
  • create arcade sessions on room join to enable config changes (c29501f)
  • db: add 'math-sprint' to database schema enums (7b112a9), closes #1
  • deployment: pass git info to Docker build for deployment info modal (4b04e43)
  • docker: add packages/templates for Typst flashcard generation (1417722)
  • docker: add qpdf for PDF linearization and validation (c92ff39)
  • docker: bypass PEP 668 externally-managed-environment error (bb59c61)
  • docker: copy core package with Python scripts to production image (33e9ad2)
  • docker: include Panda CSS styled-system in production image (57fabff)
  • docker: install py3-pip for Python dependency installation (0f55909)
  • docker: install Python dependencies for flashcard generation (c9b7e92)
  • docker: remove reference to deleted @soroban/client package (2953ef8)
  • exclude dist from TypeScript compilation and add missing type import (b7f1d5a)
  • hide hover avatar for current user's own player (dba42b5)
  • homepage: adjust mini abacus container height (c4066d6)
  • homepage: correct positioning of progression arrows in Your Journey section (3fff9ef)
  • homepage: fix MiniAbacus runtime error and improve sizing (1fa0df8)
  • homepage: improve text contrast in Your Journey section (24d1200)
  • homepage: use correct AbacusReact API and fix clipping/styling issues (1432afd)
  • homepage: use direct conditionals for mini abacus padding (38ef16a)
  • homepage: use explicit RGBA colors for Your Journey text (9c51cc9)
  • homepage: use inline styles for journey level colors (5d85e89), closes #4ade80 #60a5 #a78 #fbbf24
  • homepage: use inline styles for Your Journey text contrast (8e51390), closes #e5e7 #e5e7 #9ca3 #d1d5
  • home: use Panda CSS token() for dynamic colors and center arrows properly (d52ba63)
  • improve authorization error handling and add missing decline invitation endpoint (97669ad)
  • improve join request approval error handling with actionable messages (57bf846)
  • improve kicked modal message for retired room ejections (f865ce1)
  • join user socket channel to receive approval notifications (7d08fdd)
  • levels: use correct AbacusReact API with direct props (892b377)
  • levels: use correct dark mode styling from homepage + docs update (c38767f)
  • matching: add settings persistence to matching game (00dcb87)
  • matching: apply turn indicators to arcade version too (e6f96a8)
  • matching: make MemoryGrid generic to support different card types (dcda826)
  • matching: only apply turn indicator when game is active (cb4c061)
  • matching: replace mismatch banner with card shake animation (804096f)
  • matching: use UUID instead of numeric index for scores (5036cb0)
  • math-sprint: remove unused import and autoFocus attribute (51593eb)
  • memory-quiz: fix playMode persistence by updating validator (de0efd5)
  • memory-quiz: persist playMode setting across game switches (487ca7f)
  • memory-quiz: prevent duplicate card processing from optimistic updates (51676fc)
  • memory-quiz: prevent input lag during rapid typing in room mode (b45139b)
  • memory-quiz: scope game settings by game name for proper persistence (3dfe54f)
  • memory-quiz: synchronize card display across all players in multiplayer (472f201)
  • migrations: add migration 0009 for display_password column (040d749)
  • moderation: don't show pending invitation for users already in room (fae5920)
  • moderation: improve access mode settings UX (dd9e657)
  • move invitations into nav and filter out current/banned rooms (cfaf82b)
  • nav: add delay to hamburger menu hover to prevent premature closing (95cd72e)
  • nav: add z-index to turn labels to prevent avatar overlap (7c294da)
  • nav: close hamburger menu when nested dropdown closes and mouse not hovering (7d65212)
  • nav: enable tooltips for local players during gameplay (5499700)
  • nav: improve readability of turn label text (bbd1da0)
  • nav: improve text contrast in room info pane (3e691cb)
  • nav: navigate to /arcade/room (not /arcade/rooms/{id}) (1c55f36)
  • nav: navigate to room after creation from (+) menu (21e6e33)
  • nav: prevent hamburger menu from closing when toggling Style dropdown (a898fbc)
  • nav: prevent style dropdown from closing hamburger menu (560a052)
  • nav: prevent turn label text from being obscured (c4b00dd)
  • nav: properly prevent nested style dropdown from closing hamburger menu (c5b6a82)
  • nav: remove animation/enlargement from network player turn indicator (53079ed)
  • nav: remove blue gradient background from network players (2881aff)
  • nav: remove opacity reduction from local players (5215af8)
  • nav: remove play arrow badge from turn indicators (80cfc10)
  • nav: update types for registry games with nullable gameName (a51e539)
  • number-guesser: add turn indicators, error feedback, and fix player ordering (9f62623)
  • pixel-perfect alignment across all nav elements (fa78a2c)
  • player-config: correct label positioning in player settings dialog (554cc40)
  • populate session activePlayers from room members on join (2d00939)
  • prevent duplicate arcade sessions per room (4cc3de5)
  • remove duplicate ModerationNotifications causing double toasts (c6886a0)
  • replace isLocked with accessMode and add bcryptjs (a74b96b)
  • replace last remaining isLoading with isPending in CreateRoomModal (85d13cc)
  • replace native alerts with inline confirmations in ModerationPanel (ebe123e)
  • reset join request toast state when moderation event cleared (6beb58a)
  • resolve Memory Quiz room-based multiplayer validation issues (2ffeade)
  • resolve TypeScript errors in MemoryGrid and StandardGameLayout (cabbc82)
  • room-data: update query cache when gameConfig changes (7cea297)
  • rooms: add real-time ownership transfer updates via WebSocket (c00cfa3)
  • room: update GAME_TYPE_TO_NAME mapping for memory-quiz (4afa171)
  • set color on abacus container div for numeral visibility (cd47960), closes #1f2937
  • show initial value and improve numeral contrast (1b57f6d), closes #fbbf24
  • simplify abacus pane with light background (30f48ab)
  • socket-io: update import path for socket-server module (1a64dec)
  • stack game title dropdown ABOVE room pane, not inside it (7bc815f)
  • toast: scope animations to prevent affecting other UI elements (245ed8a)
  • tutorial: correct column index calculation for variable column counts (bf1ced4)
  • tutorial: filter bead highlights when using fewer columns (4d906ec)
  • tutorial: reduce tooltip z-index to scroll under nav bar (47640f3)
  • tutorial: resolve React hydration error in TutorialPlayer (c883d9e)
  • tutorial: resolve TypeScript errors in TutorialPlayer (88f57ce)
  • tutorial: use correct customStyles API for dark mode frame styling (fdc882c)
  • update locked room terminology and allow existing members (1ddf985)
  • use app-wide abacus config and remove instruction text (0a50c73)
  • use color instead of fill for numeral styling (ea10c16)
  • use defaultValue for interactive abacus control (06aca98)
  • use useCreateRoom hook instead of nonexistent createRoom from useRoomData (f7d63b3)

Code Refactoring

  • db: remove database schema coupling for game names (e135d92), closes #1

Features

  • abacus-react: add BigInt support for 30-digit Dan level abacuses (0ab4cc2)
  • add API routes for moderation and invitations (79a8518)
  • add backend library functions for room moderation (84f3c4b)
  • add common UI components (cd3115a)
  • add database schema for room moderation and invitations (97d1604)
  • add drizzle migration for room_game_configs table (3bae00b)
  • add fun automatic player naming system (249257c)
  • add invitation system UI components (fd3a2d1)
  • add moderation panel with unban & invite feature (a2d0169)
  • add name generator button and abacus emoji (07212e4)
  • add player count to stacked room info (540f6b7)
  • add prominent join request approval notifications for room moderators (036da6d)
  • add real-time socket updates for moderation events (86ceba3)
  • add room access modes and ownership transfer (6ff21c4)
  • add room creation and join flow UI (7f95032)
  • add socket listener and polling for approval notifications (35b4a72)
  • add waiting state for approval requests in JoinRoomModal (f9b0429)
  • adjust tier probabilities for more abacus flavor (49219e3)
  • arcade: add Card Sorting Challenge game scaffolding (df37260)
  • arcade: add Change Game functionality for room hosts (ee39241)
  • arcade: add game selection screen with navigation to room page (4124f1c)
  • arcade: add Math Sprint game implementation (e5be09e)
  • arcade: add modular game SDK and registry system (de30bec)
  • arcade: add Number Guesser demo game with plugin architecture (0e3c058)
  • arcade: broadcast game selection changes to all room members (b99e754)
  • arcade: migrate matching pairs - phases 1-4 and 7 complete (2a3af97)
  • arcade: migrate memory-quiz to modular game system (f48c37a)
  • arcade: register Math Sprint in game system (0c05a7c), closes #2 #3
  • card-sorting: add spectator mode UX enhancements (4ab093a)
  • card-sorting: add UI components and fix AbacusReact props (d249ec0)
  • card-sorting: implement Provider with arcade session integration (7f6fea9)
  • complement-race: add infinite win condition for Steam Sprint mode (d8fdfee)
  • complement-race: add mini app navigation bar (ed0ef2d)
  • complement-race: enable adaptive AI difficulty in arcade (55010d2)
  • complement-race: implement state adapter for multiplayer support (13882bd)
  • complement-race: restore AI opponents in practice and survival modes (325e07d)
  • homepage: add animated mini abacus to "Read and set numbers" card (e028e34)
  • homepage: add more visual embellishments to learning cards (4ec1b95)
  • homepage: enhance "What You'll Learn" with visual cards (d142342)
  • home: redesign home page to showcase complete platform (ee6c4f2)
  • implement approval request flow for share links (4a6b3ca)
  • implement avatar-themed name generation with probabilistic mixing (76a8472)
  • implement proper retired room behavior with member expulsion (a2d5368)
  • improve arcade nav player grouping and add room join code display (8e9980d)
  • improve room creation UX and add password support for share links (dcbb507)
  • integrate moderation system into arcade pages (087652f)
  • levels: add Dan levels ladder visualization (c18012c)
  • levels: add dark mode styling and responsive scaling to abacus (92e1e62)
  • levels: add informational footer section (0b1bff7)
  • levels: add Kyu & Dan levels page with homepage link (39b1e7d)
  • levels: add kyu level data and cards (6463a3b)
  • levels: create true horizontal slider with abacus visualizations (6d734f1)
  • levels: implement interactive slider for exploring kyu & dan ranks (eb3b100)
  • levels: replace kyu grid with interactive slider and abacus visualizations (10978e8)
  • make home page abacus interactive with audio (9a53d7e)
  • matching: use nav avatars as turn indicators (7263828)
  • math-sprint: add game manifest (1eefcc8)
  • memory-quiz: add multiplayer support with redesigned scoreboards (1cf4469)
  • memory-quiz: persist game settings per-game across sessions (05a8e0a)
  • memory-quiz: show player emojis on cards to indicate who found them (05bd11a)
  • moderation: add inline feedback and persistent password display (86e3d41)
  • moderation: improve password input with copy button (2580e47)
  • nav: add prominent turn indicator arrow badge (f574558)
  • nav: add pulsing indicator for offline network players (64fb30e)
  • nav: add turn indicators to network players (623314b)
  • nav: add turn label text under current player avatars (52a66d5)
  • nav: center game context with hamburger menu for utilities (a35a7d5)
  • nav: combine room info and network players in single pane (d5473ab)
  • nav: unify room dropdown with join code and game menu (f7b83f8)
  • prevent invitations to retired rooms (a7c3c1f)
  • redesign home page with component showcase (29af265)
  • redesign homepage with educational vision and interactive demo (2f09cb5)
  • redesign room info as compact inline badge with click-to-copy (6b3a440)
  • replace access mode dropdown with visual button grid (e5d0672)
  • tutorial: add dark mode styling for coaching bar and abacus frame (7e2f580)
  • tutorial: add dark theme and column control props (d42f9b2)
  • tutorial: add fill color support for dark mode column posts and reckoning bar (2eb3ff3)
  • tutorial: add hideNavigation prop to TutorialPlayer (79ea52a)
  • tutorial: add hideTooltip prop and improve dark mode coaching bar (1ee25b3)
  • tutorial: add silentErrors prop to suppress error messages (8835e1c)

Reverts

  • nav: restore original room creation/join behavior (710e93c)

BREAKING CHANGES

  • db: Database schemas now accept any string for game names
  • Added DELETE /api/arcade/rooms/:roomId/invite endpoint for declining invitations

Authorization Error Handling:

  • ModerationPanel: Parse and display API error messages (kick, ban, unban, invite, data loading)
  • PendingInvitations: Parse and display API error messages (decline, fetch)
  • All moderation actions now show specific auth errors like "Only the host can kick users"

New Endpoint:

  • DELETE /api/arcade/rooms/:roomId/invite: Allow users to decline their pending invitations
    • Validates invitation exists and is pending
    • Only invited user can decline their own invitation
    • Returns proper error messages for auth failures

Bug Fix:

  • Fixed invitations/pending/route.ts ban check query (removed reference to non-existent unbannedAt field)
  • Ban records are deleted when unbanned, so any existing ban is active

🤖 Generated with Claude Code

Co-Authored-By: Claude noreply@anthropic.com

1.8.0 (2025-10-10)

Bug Fixes

  • add @types/minimatch to abacus-react devDependencies (fa45475)
  • add CLEAR_MISMATCH move to allow mismatch feedback to auto-dismiss (158f527)
  • add hasAttemptedFetch flag to prevent premature redirect (c30f585)
  • add missing DOMPoint properties to getPointAtLength mock (1e17278)
  • add missing name property to Passenger test mocks (f8ca248)
  • add non-null assertions to skillConfiguration utilities (9c71092)
  • add npmrc for hoisting and fix template paths (5c65ac5)
  • add optional chaining to stepBeadHighlights access (a5fac5c)
  • add Python setuptools and build tools for better-sqlite3 compilation (a216a3d)
  • add showAsAbacus property to ComplementQuestion type (4adcc09)
  • add userId to optimistic player in useCreatePlayer (5310463)
  • allow navigation to game setup pages without active session (c7ad3c0)
  • always show game control buttons in room-based sessions (14ba422)
  • auto-cleanup orphaned arcade sessions without valid rooms (3c002ab)
  • broadcast member join/leave events immediately via API (ebfc88c)
  • change TypeScript moduleResolution from bundler to node (327aee0)
  • compile TypeScript server files to JavaScript for production (83b9a4d)
  • complement-race: prevent passengers being left behind at delivery stations (e6ebecb)
  • convert guestId to internal userId for player ownership check (3a01f46)
  • convert Jest mocks to Vitest in useSteamJourney tests (e067271)
  • convert LocalMemoryPairsProvider to pure client-side with useReducer (b128db1)
  • convert player IDs from number to string in arcade tests (72db1f4)
  • correct avatar positioning to prevent fly-in animation (573d0df)
  • correct Docker CMD to use root-level server.js (48b47e9)
  • correct hover avatar and turn indicator to show only current player (0596ef6)
  • correct node_modules path for pnpm symlinks in Docker (c12351f)
  • correct playerMetadata userId assignment for room-based multiplayer (53797db)
  • correct static files and public path in Docker image (c287b19)
  • correct TypeScript build configuration to prevent .js pollution in src/ (2b7ff23)
  • correctly access getSocketIO from dynamic import (30abf33)
  • disable turn validation in arcade mode matching game (7c0e6b1)
  • enable real-time player name updates across room members (5171be3)
  • enable shamefully-hoist for semantic-release dependencies (6168c29)
  • enable smooth spring animations between card hovers (8d53b58)
  • enforce player ownership authorization for multiplayer games (71b0aac)
  • enforce playerId must be explicitly provided in arcade moves (d5a8a2a)
  • export MemoryPairsContext to fix provider hook error (80ad33e)
  • ignore all node_modules in Docker (4792dde)
  • ignore nested node_modules in Docker (f554592)
  • implement shared session architecture for room-based multiplayer (2856f4b)
  • include all players from room members in room games (28a2e7d)
  • lazy-load database connection to prevent build-time access (af8d993)
  • make leave room button actually remove user from room (49f12f8)
  • make results screen compact to fit viewport without scrolling (9d4cba0)
  • move auth.ts to src/ to match @/ path alias (7829d8a)
  • pass player IDs (not user IDs) in all arcade game moves (d00abd2)
  • preserve workspace node_modules in Docker for hoisted mode (4f8aaf0)
  • prevent avatar fly-in and hide local player's own hover (7f65a67)
  • prevent database imports from being bundled into client code (bda5bc6)
  • prevent duplicate display of network avatars in nav (d474ef0)
  • prevent redirect loops by checking if already at target URL (c5268b7)
  • real-time room member updates via globalThis socket.io sharing (94a1d9b)
  • regenerate lockfile with correct dependency order (51bf448)
  • regenerate lockfile with node-linker=hoisted from scratch (480960c)
  • regenerate pnpm lockfile for pnpm 9 compatibility (4ab1aef)
  • remove .npmrc from Dockerfile COPY (e71c2b4)
  • remove .npmrc in Docker to avoid hoisted mode issues (2a77d75)
  • remove ArcadeGuardedPage from room page to prevent redirect loop (4686f59)
  • remove build artifacts from source control (29f5adc)
  • remove duplicate PlayerStatusBar story file from arcade (4e721f7)
  • remove redirect loop by not redirecting from room page (10cf715)
  • remove remaining typst-dependent files (d1b9b72)
  • remove rootDir from tsconfig.server.json (431e4a6)
  • remove standalone output mode incompatible with custom server (c8da5a8)
  • require activePlayers in START_GAME, never fallback to userId (ea1b1a2)
  • resolve race condition in /arcade/room redirect (5ed2ab2)
  • resolve socket-server import path for Next.js build (12c3c37)
  • respect enabled flag in useArcadeGuard WebSocket redirects (01ff114)
  • revert to default pnpm mode for Docker compatibility (bd0092e)
  • revert to showing only active players in room games (87cc0b6)
  • rewrite layout.nav.test to match actual RootLayout props (a085de8)
  • send all members (not just online) in socket broadcasts (3fa6cce)
  • set room sessions to use /arcade/room URL (9dac431)
  • show "Return to Arcade" button only during active game (4153929)
  • show correct join/leave button based on room membership (5751dfe)
  • update Dockerfile for non-standalone production builds (14746c5)
  • update Dockerfile pnpm version and fix TypeScript config (43077a8)
  • update Dockerfile to copy dist/ instead of socket-server.js and src/ (e56517b)
  • update lockfile and fix Makefile paths (7ba746b)
  • update matching game for UUID player system (2e041dd)
  • update race track components for new player system (ae4e8fc)
  • update useArcadeGuard tests with proper useViewerId mock (4eb49d1)
  • upgrade CI dependencies and fix deprecated actions (6a51c1e)
  • use .npmrc in Docker for hoisted mode consistency (2df8cdc)
  • use game state playerMetadata instead of GameModeContext in UI components (388c254)
  • use node-linker=hoisted for full dependency hoisting (d3b2e0b)
  • use Object.defineProperty for NODE_ENV in middleware tests (e73191a)
  • use only local user's players in LocalMemoryPairsProvider (c26138f)
  • use player IDs instead of array indices in matching game (ccd0d6d)
  • use RoomMemoryPairsProvider in room page (c279731)
  • use UUID player IDs in session creation fallback (22541df)
  • wrap Buffer in Uint8Array for Next.js Response API (98384d2)

Features

  • add API routes for players and user stats (6f940e2)
  • add arcade matching game components and utilities (ff16303)
  • add arcade room system database schema and managers (Phase 1) (a9175a0)
  • add arcade room/session info and network players to nav (6800747)
  • add Biome + ESLint linting setup (fc1838f)
  • add build info API endpoint (571664e)
  • add build info generation script (416dc89)
  • add centralized player ownership utilities (1019a48)
  • add deployment info modal with keyboard shortcut (43be7ac)
  • add exitSession to MemoryPairsContextValue interface (abc2ea5)
  • add GameControlButtons component with unit tests (1f45c17)
  • add guest session system with JWT tokens (10d8aaf)
  • add networked hover state infrastructure for multiplayer presence (d149799)
  • add optimistic updates and remove dead code (b62cf26)
  • add pause/resume game state architecture (05eacac)
  • add player types and migration utilities (79f44b2)
  • add React Query setup with api helper (a3878a8)
  • add real-time WebSocket updates for room membership (7ebb2be)
  • add Resume button and config change warning to setup UI (b5ee04f)
  • add security tests and userId injection protection (aa1ad31)
  • add server-side validation for player modifications during active arcade sessions (3b3cad4)
  • add Setup button to exit arcade sessions (ae1318e)
  • display room info and network players in mini app nav (5e3261f)
  • dynamic player card rendering on games page (81d17f2)
  • emit session-state after creating arcade session (70d6f43)
  • extend GameModeContext to support room-based multiplayer (ee6094d)
  • fade out hover avatar when player stops hovering (820eeb4)
  • hide hover avatar when card is flipped to reveal value (a2aada2)
  • implement auto-save for player settings modal (a83dc09)
  • implement game control callbacks in MemoryPairsGame (4758ad2)
  • implement modal room enforcement (one room per user) (f005fbb)
  • implement networked hover presence for multiplayer gameplay (62f3730)
  • implement pause/resume in game providers with optimistic updates (ce30fca)
  • implement rich Radix UI tooltips for player avatars (d03c789)
  • implement room-wide multi-user game state synchronization (8175c43)
  • implement smooth hover avatar animations with react-spring (442c6b4)
  • improve hover avatars with smooth animation and 3D elevation (71b11f4)
  • improve room navigation and membership UI (bc219c2)
  • integrate GameControlButtons into navigation (fbd8cd4)
  • migrate abacus display settings to database (92ef136)
  • migrate contexts to React Query (remove localStorage) (fe01a1f)
  • migrate contexts to UUID-based player system (2b94cad)
  • refactor room addressing to /arcade/room (e7d2a73)
  • remove typst dependencies (eedce28)
  • remove typst-related code and routes (be6fb1a)
  • set up Drizzle ORM with SQLite database (5d5afd4)
  • update nav components for UUID players (e85d041)

1.7.0 (2025-10-01)

Bug Fixes

  • abacus-react: apply global columnPosts styling and fix reckoning bar width (bb9959f)
  • complement-race: improve abacus display in equations (491b299)

Features

  • complement-race: add abacus displays to pressure gauge (c5ebc63)

1.6.0 (2025-10-01)

Bug Fixes

  • align all bottom UI elements to same 20px baseline (076c97a)
  • align bottom-positioned UI elements (227cfab)
  • change pressure gauge to fixed positioning to stay above terrain (1b11031)
  • change question display to fixed positioning with higher z-index (4ac8758)
  • correct emoji category group IDs to match Unicode CLDR (b2a21b7)
  • defer URL update until game starts (12c54b2)
  • delay passenger display update until train resets (e06a750)
  • eliminate rail jaggies on sharp curves by increasing sampling density (46d4af2)
  • ensure passengers only travel forward on train route (8ad3144)
  • increase question display zIndex to stay above terrain (8c8b8e0)
  • move fontWeight to style object for station names (05a3ddb)
  • only show configuration gear icon for players 1 and 2 (d0a3bc7)
  • passengers now board/disembark based on their car position, not locomotive (96782b0)
  • position tunnels at absolute viewBox edges (1a5fa28)
  • prevent layout shift when selecting Steam Sprint mode (73a5974)
  • prevent multiple passengers from boarding same car in single frame (63b0b55)
  • prevent premature passenger display during route transitions (fe9ea67)
  • prevent random passenger repopulation during route transitions (db56ce8)
  • prevent route celebration from immediately reappearing (1a80934)
  • reduce landmark size from 4.0x to 2.0x multiplier (c928e90)
  • remove double PageWithNav wrapper on matching page (b58bcd9)
  • remove duplicate CAR_SPACING and MAX_CARS declarations (e704a28)
  • remove duplicate previousPassengersRef declaration (fad8636)
  • remove hard-coded car count from game loop (6c90a68)
  • remove unnecessary zIndex from question display (db52e14)
  • reset momentum and pressure when starting new route (3ea88d7)
  • smooth rail curves and deterministic track generation (4f79c08)
  • stabilize route completion threshold to prevent stuck trains (b7233f9)
  • use displayPassengers for station rendering in RailroadTrackPath (a9e0d19)
  • use style fontSize instead of attribute for landmarks (ebc6894)
  • wrap animated pressure value in animated.span to prevent React error (5c5954b)

Features

  • add category browsing and scrolling to emoji picker (616a50e)
  • add complement display options and unify equation display (2ed7b2c)
  • add Complement Race game with three unique game modes (582bce4)
  • add configuration access to active player emojis in prominent nav (6049a7f)
  • add configuration access to fullscreen player selection (b85968b)
  • add CSS animations and visual feedback system (80e33e2)
  • add direct URL routes for each game mode (a08f053)
  • add initialStyle prop to ComplementRaceProvider (f3bc2f6)
  • add interactive remove buttons for players in mini nav (fa1cf96)
  • add magnifying glass preview on emoji hover (2c88b6b)
  • add mini app nav to arcade page (a854fe3)
  • add passenger boarding system with station-based pickup (23a9016)
  • add prominent game context display to mini nav with smooth transitions (8792393)
  • add realistic mountains with peaks and ground terrain (99cdfa8)
  • add smooth spring animations to pressure gauge (863a2e1)
  • add train car system with smooth boarding/disembarking animations (1613912)
  • add Web Audio API sound effects system with 16 sound types (90ba866)
  • create mode selection landing page for Complement Race (1ff9695)
  • create PlayerConfigDialog component for player customization (4f2a661)
  • display passengers visually on train and at stations (1599904)
  • dynamically calculate train cars based on max concurrent passengers (9ea1553)
  • enable prominent nav and fix layout on arcade page (5c8c18c)
  • enhance emoji picker with super powered magnifying glass and hide empty categories (d8b4e42)
  • enhance passenger card UI with boarding status indicators (4bbdabc)
  • extend ground terrain to cover entire track area (ee48417)
  • extend player customization to support all 4 players (72f8dee)
  • extend railroad track to viewport edges (eadd7da)
  • extend track and tunnels to absolute viewport edges (f7419bc)
  • implement smooth train exit with fade-out through right tunnel (0176694)
  • improve game availability logic and messaging (9a3fa93)
  • increase landmark emoji size for better visibility (0bcd7a3)
  • integrate remaining game sound effects (600bc35)
  • integrate sound effects into game flow (countdown, answers, performance) (8c3a855)
  • make Steam Sprint infinite mode (32c3a35)
  • make SVG span full viewport width for sprint mode (7488bb3)
  • preserve track and passengers during route transitions (f2e7165)
  • redesign passenger cards with vintage train station aesthetic (651bc21)
  • skip countdown for train mode (sprint) (65dafc9)
  • skip intro screen and start directly at game setup (4b6888a)
  • sync URL with selected game mode (3920bba)
  • UI polish for Sprint mode (viewport, backgrounds, data attributes) (90ad789)
  • use CSS transitions for smooth fullscreen player selection collapse (3189832)
  • wire player configuration through nav component hierarchy (edfdd81)

Performance Improvements

  • optimize React rendering with memoization and consolidated effects (93cb070)

1.5.1 (2025-09-29)

Bug Fixes

  • resolve JSX parsing error with emoji in guide page (bf046c9)
  • resolve TypeScript errors in PlayerStatusBar component (a935e5a)
  • restore navigation to all pages using PageWithNav (183706d)
  • update workflow to support Personal Access Token for GitHub Packages publishing auth (ae4b71b)

1.5.0 (2025-09-29)

Bug Fixes

  • remove frozen lockfile flag from publishing workflow to resolve dependency installation issues (18af973)
  • resolve mini navigation game name persistence across all routes (3fa314a)
  • update pnpm version to 8.15.6 to resolve ERR_INVALID_THIS error in workflow (0b9bfed)
  • update tutorial tests to use consolidated AbacusDisplayProvider (899fc69)

Features

  • abacus-react: update description to mention GitHub Packages support (af77256)
  • add comprehensive E2E testing with Playwright (d58053f)
  • add comprehensive Storybook stories for PlayerStatusBar (8973241)
  • add consecutive match tracking system for escalating celebrations (111c0ce)
  • add PlayerStatusBar with escalating celebration animations (7f8c90a)
  • add sound settings support to AbacusReact component (90b9ffa)
  • implement cozy sound effects for abacus with variable intensity (c95be1d)
  • integrate user profiles with PlayerStatusBar and game results (beff646)

1.4.0 (2025-09-29)

Bug Fixes

  • export missing hooks and types from @soroban/abacus-react package (423ba55)
  • migrate viewport from metadata to separate viewport export (1fe12c4)

Features

  • add middleware for pathname header support in @nav fallback (b7e7c4b)
  • implement @nav parallel routes for game name display in mini navigation (885fc72)

1.3.0 (2025-09-29)

Bug Fixes

  • ensure game names persist in navigation on page reload (9191b12)
  • implement route-based theme detection for page reload persistence (3dcff2f)
  • improve navigation chrome background color extraction from gradients (00bfcbc)
  • resolve SSR/client hydration mismatch for themed navigation (301e65d)

Features

  • complete themed navigation system with game-specific chrome (0a4bf17)
  • implement cozy sound effects for abacus with variable intensity (cea5fad)

1.2.0 (2025-09-28)

Bug Fixes

  • abacus-react: add debugging and explicit authentication for npm publish (b82e9bb)
  • abacus-react: add packages: write permission for GitHub Packages publishing (8e16487)
  • add missing GameThemeContext file for themed navigation (d4fbdd1)

Features

  • implement game theming system with context-based navigation chrome (3fa11c4)

1.1.3 (2025-09-28)

Bug Fixes

  • abacus-react: force npm to use GitHub Packages registry (5e6c901)

1.1.2 (2025-09-28)

Bug Fixes

  • abacus-react: improve workspace dependency cleanup and add validation (11fd6f9)

1.1.1 (2025-09-28)

Bug Fixes

  • abacus-react: resolve workspace dependencies before npm publish (834b062)

1.1.0 (2025-09-28)

Bug Fixes

  • abacus-react: improve publishing workflow with better version sync (7a4ecd2)
  • add testing mode for on-screen keyboard and fix toggle functionality (904074c)
  • redesign matching game setup page for StandardGameLayout (cc1f27f)
  • update memory pairs game to use StandardGameLayout (8df76c0)
  • update memory quiz to use StandardGameLayout (3f86163)

Features

  • create StandardGameLayout for perfect viewport sizing (728a920)
  • implement innovative dynamic two-panel layout for on-screen keyboard (4bb8f6d)
  • implement simple fixed bottom keyboard bar (9ef72d7)

1.0.0 (2025-09-28)

Bug Fixes

  • abacus-react: simplify semantic-release config to resolve dependency issues (88cab38)
  • abacus-react: temporarily allow test failures during setup phase (e3db7f4)
  • add cssgen step to generate styles.css for Storybook (26077de)
  • add explicit type annotation for examples array in LivePreview (6c49e03)
  • add missing color-palette parameter to generate-flashcards function (18583d0)
  • add navigation to games from character selection modal (b64fb1c)
  • add onConfigurePlayer prop to ChampionArena (6e1050c)
  • add optional chaining to prevent TypeScript error (d42dca2)
  • add robust fallback system for term highlighting in guidance (decd8a3)
  • add tooltip targeting logic to only show on beads with arrows (4425627)
  • add xmlns attributes to SVG examples for GitHub compatibility (c2f33ce)
  • adjust tutorial editor page height to account for app navigation (9777bef)
  • allow semantic release to proceed despite build failures (73a6904)
  • apply CSS scaling to abacus components in memory quiz (599fbfb)
  • clean up component interfaces and settings (ce6c2a1)
  • convert foreignObject to native SVG text elements (3ccc753)
  • correct column indexing and add boundary checks for interactive abacus (bbfb361)
  • correct diamond bead column alignment to match Typst positioning (97690d6)
  • correct heaven bead positioning to match earth bead gap consistency (0c4eea5)
  • correct highlightBeads format in AbacusTest.stories.tsx (7122ad7)
  • correct mathematical inconsistency in cascading complement test (56cb69c)
  • correct pedagogical algorithm specification and tests (9e87d3a)
  • correct segment expression formatting and rule detection (e60f438)
  • correct static file paths in Docker for Next.js standalone mode (91223b6)
  • correct styled-system import paths in games page (82aa73e)
  • correct styled-system import paths in memory quiz page (a967838)
  • correct SVG text positioning to match React component alignment (8024d0a)
  • correct Tab navigation direction in numeral input system (d4658c6)
  • correct TanStack Form state selectors in create page (178f0ff)
  • correct term position calculation for complement segments (7189090)
  • correct tutorial bead highlighting to use rightmost column (ones place) (b6b1111)
  • correct tutorial highlighting placeValue to columnIndex conversion (35257b8)
  • correct tutorial step "7 + 4" to highlight all required beads (9c05bee)
  • correct workspace configuration and remove non-existent packages (39526eb)
  • crop interactive abacus SVG whitespace with simple CSS scaling (bb3d463)
  • disable pointer events on direction indicator arrows (944d922)
  • disable pointer events on overlay content div (b5db935)
  • display actual numbers in SVG examples (3308e22)
  • downgrade Docker action versions to available ones (57d1460)
  • enable individual term hover events within complement groups (0655968)
  • enable multi-bead highlighting in tutorial system (ab99053)
  • enhance collision detection to include all active beads (3d9d69c)
  • ensure abacus visibility in memory quiz display phase (fea7826)
  • ensure celebration tooltip shows when steps complete (5082378)
  • ensure consistent r×c grid layout for memory matching game (f1a0633)
  • exclude test files from TypeScript build (0e097da)
  • expand heaven-earth-gap to 30pt to accommodate equal 19pt gaps for both heaven and earth inactive beads (a048e11)
  • extract clean SVG content from component output (f57b071)
  • gallery now loads actual Typst-generated SVGs instead of fake placeholders (87eb51d)
  • generate Panda CSS styled-system before building in Docker (c7a45e9)
  • handle both direct and module execution for web format (a1fd4c8)
  • hide celebration tooltip when user moves away from target value (f9e42f6)
  • implement bead highlighting by modifying getBeadColor function (7ac5c29), closes #FFD700
  • implement consistent single-card preview generation (83da1eb)
  • implement focus handling for numeral input in place-value system (415759c)
  • implement gap-filling logic for sorting challenge boundary issues (df41f2e)
  • implement mathematical SVG bounds calculation for precise viewBox positioning (1b0a642)
  • implement prefix-conflict detection for speed memory quiz (01b00b5)
  • implement proper bi-directional drag and drop with useDroppable (53fc41c)
  • implement proper React controlled input pattern for AbacusReact (c18919e)
  • implement proper SVG cropping and fix abacus positioning (793ffd3)
  • implement ref-based fullscreen element tracking for proper persistence (7b947f2)
  • implement smooth cross-zone drag animations without scaling issues (7219a41)
  • improve abacus sizing across all components with CSS transforms (cd6165e)
  • improve error handling in ServerSorobanSVG component (ec51105)
  • improve game mode selection UX by removing redundancy (9fe7068)
  • improve pedagogical correctness and cascade carry handling (85ed254)
  • improve pedagogical segment detection and instruction quality (0ac51ae)
  • improve race mechanics and fix display issues (511eb2e)
  • improve sorting game UI with larger abacus and better slot design (d5e2fda)
  • improve visual balance of inactive heaven bead positioning (a789087)
  • keep tooltip visible when step completed to show celebration (b5d7512)
  • make inactive heaven bead gaps truly equal to earth bead gaps (209ea0f)
  • make lightbulb emoji inline with help text (43e046a)
  • make sorting game action buttons visible during gameplay (0c1f44b)
  • match React component font sizing for SVG numbers (dedc0e7)
  • maximize inactive heaven bead gap from reckoning bar (8f88eeb)
  • move inactive heaven beads HIGHER for larger gap from reckoning bar (2a82902)
  • move inactive heaven beads to 2pt from top for 18pt gap from reckoning bar (708cc91)
  • perfect crop mark detection and SVG dimension consistency (79f38c1)
  • position inactive heaven beads above reckoning bar, not below (2d7d4ef)
  • position inactive heaven beads relative to reckoning bar with same 19pt gap as earth beads (3424ca1)
  • position inactive heaven beads with maximum gap using available space (421ec11)
  • position success toast near abacus instead of app nav (ec40a8d)
  • preserve fullscreen mode when navigating from arcade to memory matching game (2505335)
  • prevent premature step completion for multi-step problems (41dde87)
  • prevent race end modal from breaking endless route progression (e06be9d)
  • regenerate example SVGs with actual soroban renderings (d94baa1)
  • remove broken display switching and add train emoji flip (3227cd5)
  • remove controlled tooltip state to enable proper HoverCard timing (e6e3aa9)
  • remove explicit conventionalcommits preset config to fix semantic-release (15a9986)
  • remove failing tests from GitHub Actions workflow to enable deployment (2eaeac6)
  • remove ordering mismatch warning and implement correct expected state calculation (9de48c6)
  • remove Panda CSS generated files from source control (18b685b)
  • remove redundant mode selection and revert game naming (03f5056)
  • remove TypeScript type check from GitHub Actions workflow (18e2aa9)
  • replace all window.location.href with Next.js router for proper navigation (2a84687)
  • replace invalid CSS 'space' property with 'gap' in guide page (5841f3a)
  • reposition on-screen keyboard to avoid covering abacus tiles (6e5b4ec)
  • resolve abacus sizing and prefix matching issues in memory quiz (b1db028)
  • resolve arrow disappearing and incorrect bead targeting in 3+14=17 story (b253a21)
  • resolve async/await issues in download API routes (9afaf6e)
  • resolve auto-incrementing counter in InteractiveWithNumbers story (1838d7e)
  • resolve circular dependency errors in memory quiz on-screen keyboard (d25e2c4)
  • resolve critical bugs in automatic instruction generator found by stress testing (e783776)
  • resolve critical ordering mismatch between multiStepInstructions and stepBeadHighlights (2c395f3)
  • resolve display switching bug causing game content to disappear (4736768)
  • resolve dnd-kit ref extension error in enhanced arena (fac3202)
  • resolve final TypeScript errors in place-value migration (9a24dc8)
  • resolve infinite render loop when clicking Next in tutorial player (4ef6ac5)
  • resolve nested border radius visual artifacts on match cards (c69f6a4)
  • resolve Python FileNotFoundError and improve error handling (69bda9f)
  • resolve ReferenceError by moving ref declarations before usage (fa153c6)
  • resolve runtime error - calculateOptimalGrid not defined (fbc84fe)
  • resolve SorobanGeneratorBridge path issues for SVG generation (845a4ff)
  • resolve stepIndex mismatch preventing arrows in multi-step sequences (96fda6b)
  • resolve style dropdown click-outside and infinite re-render issues (6394218)
  • resolve temporal dead zone error with goToNextStep (3d503dd)
  • resolve test failures and improve test robustness (3c0affc)
  • resolve TypeScript compilation errors (db3784e)
  • resolve TypeScript compilation errors blocking GitHub Actions build (83ba792)
  • resolve TypeScript errors across the codebase (5946183)
  • resolve zero-state interaction bug in AbacusReact component (f18018d)
  • restore click functionality alongside directional gestures (3c28c69)
  • restore interactive abacus display with TypstSoroban fallback (b794187)
  • restore missing typst dependencies for WASM loading (96aa790)
  • restore single-click player card functionality for arena toggle (1ba2a11)
  • restore workspace dependencies and fix TypeScript errors (31df87d)
  • show numbers in educational abacus examples (2b5f143)
  • simplify collision detection to resolve iterable error (0b3e8fd)
  • simplify inactive heaven bead positioning for better gap matching (22c4bd3)
  • simplify semantic-release config to use default conventional commits (e207659)
  • single digit values now correctly position in rightmost column (689bfd5)
  • stabilize smart help detection with timer-based state (9cc3a0e)
  • update bridge generator interface to support SVG format (a022852)
  • update GitHub Actions to use latest action versions (b674946)
  • update GitHub Actions to use latest action versions for Storybook deployment (f0bb411)
  • update GitHub Pages actions to v4 for better deployment reliability (be76c23)
  • update gitignore to follow Panda CSS best practices (ccd0aa7)
  • update pnpm lockfile to sync with semantic-release dependencies (9d23e82)
  • update relative import in generate.py for module compatibility (b633578)
  • update unified gallery to use correct crop examples (826e86d)
  • upgrade Node.js to version 20 for Storybook compatibility (4c33872)
  • use actual AbacusReact component for README examples via SSR (a630aa4)
  • use aggressive NumberFlow mock for SVG text rendering (1364b11)
  • use correct test command in GitHub Actions workflow (6483e28)

Features

  • abacus-react: add dual publishing to npm and GitHub Packages (242ee52)
  • abacus-react: comprehensive README overhaul with current capabilities (0ce351e)
  • abacus-react: configure GitHub Packages-only publishing workflow (5eeedd9)
  • abacus-react: enable dual publishing to npm and GitHub Packages (176a196)
  • abacus-react: enhance package description with semantic versioning details (af037b5)
  • abacus-react: implement GitHub Packages-only publishing workflow (b194599)
  • abacus-react: implement GitHub-only semantic release with manual package publishing (33b0567)
  • abacus-react: simplify to GitHub Packages-only publishing (acc126b)
  • abacus-react: use environment variables to override npm registry (ad444e1)
  • add 292 comprehensive snapshot tests for pedagogical algorithm (3b8f803)
  • add AbacusContext for global display configuration (6460089)
  • add ArithmeticOperationsGuide component to learning guide (902fa56)
  • add automated semantic release system with conventional commits (46c8839)
  • add backgroundGlow support for column highlighting (b1866ce)
  • add bead annotation support to SVG generation (ab244ea)
  • add browser fullscreen API context (8e1a948)
  • add browser-free example generation using react-dom/server (a100a6e)
  • add browser-side bead annotation processing (914e145)
  • add CI-friendly example generation and verification (1adbd1a)
  • add click-to-dismiss functionality for success popup (3066826)
  • add colored numerals feature to match bead colors (e4aaaea)
  • add complete NAS deployment system for apps/web (eb8ed8b)
  • add comprehensive .gitignore for monorepo (9eccd34)
  • add comprehensive soroban learning guide with server-generated SVGs (38d8959)
  • add comprehensive Storybook demos for problem generation system (c01f968)
  • add comprehensive Storybook examples for documentation (8289241)
  • add comprehensive test suite and documentation (bb869a0)
  • add comprehensive test suite with visual regression testing (7a2eb30)
  • add comprehensive tests for celebration tooltip behavior (a23ddf5)
  • add comprehensive tutorial system with editor and player (579caf1)
  • add comprehensive unit test suite for memory quiz functionality (a557362)
  • add comprehensive welcome page as default landing experience (556a830)
  • add concurrent Panda CSS watch to dev script (e8aed80)
  • add config presets for colored numerals and skip counting (a8a01a8)
  • add cosmic fullscreen mode to abacus style dropdown (afec22a)
  • add deprecation markers to legacy column-based API (22f1869)
  • add development tooling and comprehensive setup (7ca65bf)
  • add extracted TutorialDebugPanel and TutorialNavigation components (bc5446a)
  • add fox tunnel digging system for Lightning Sprint mode (b7fac3a)
  • add full-viewport abacus test page (861f0e0)
  • add fullscreen arcade page with Champion Arena (3edf35f)
  • add fullscreen game layout wrapper component (a25e611)
  • add fullscreen parameter handling to GameCard (337aa56)
  • add fullscreen support to Memory Quiz game (763fc95)
  • add Games navigation to main app header (b87ed01)
  • add GitHub Pages Storybook deployment with dual documentation sites (439707b)
  • add guided addition tutorial with five complements (8ca9dd7)
  • add input-based flashcard template with parameter parsing (b375a10)
  • add intelligent on-screen number pad for devices without keyboards (d4740ff)
  • add interactive abacus display to guide reading section (6d68cc2)
  • add interactive bead clicking to soroban abacus (697552e)
  • add interactive test story for column highlighting with bead interaction (ee20473)
  • add interactive tutorial system with step validation (c5c2542)
  • add invisible crop marks for consistent SVG viewBox boundaries (7731f70)
  • add Node.js/TypeScript integration with clean function interface (fb1b047)
  • add PDF print integration with modal interface (09b0fad)
  • add pedagogical segments for contextual learning (0053510)
  • add practice page system to guided addition tutorial (9adc3db)
  • add precise term position tracking to unified step generator (52323ae)
  • add production-ready defensive programming for pedagogical segments (704a8a8)
  • add proper step initialization and multi-step navigation to TutorialContext (153649c)
  • add Python bridge and optional FastAPI server (98263a7)
  • add Radix tooltip dependency for better tooltip accessibility (6c02ea0)
  • add real-time bead movement feedback to tutorial UI (4807bc2)
  • add reusable GameSelector and GameCard components (c5a654a)
  • add self-contained Storybook-like gallery for template visualization (efc5cc4)
  • add setGameModeWithPlayers method to GameModeContext (c3a4d76)
  • add single card template for PNG/SVG output (3315310)
  • add smooth cross-zone reordering animations and tone down scaling (b7335f0)
  • add soroban games section with Speed Memory Quiz (331a789)
  • add static site generator for gallery with embedded SVGs (505ff66)
  • add step parameter for skip counting (c94fa5c)
  • add Storybook stories for debugging zero-state interaction bug (f293e5e)
  • add stunning hero section with colorful soroban showcase (d65ac54)
  • add SVG post-processing to convert bead annotations to data attributes (8de3259)
  • add SVG post-processor to package exports (59f4022)
  • add testing framework dependencies (11306df)
  • add TouchSensor for mobile drag and drop compatibility (4fbf4d8)
  • add TypeScript client libraries for browser integration (f21b5e5)
  • add TypeScript configuration for core package (43b3296)
  • add typography improvements and subtle dev warning styling (12a8837)
  • add unified step generator for consistent pedagogical decomposition (93d2d07)
  • add UserProfileProvider to app layout for character support (21c430b)
  • add WASM preloading strategy with template deduplication (91e65c8)
  • add web development test files and public assets (0809858)
  • add web output format with interactive hover flashcards (0a4e849)
  • attempted floating math display following train (2d50eb8)
  • automatic abacus instruction generator for user-created tutorial steps (5c46470)
  • BREAKTHROUGH - eliminate effectiveColumns threading nightmare! (8fd9e57)
  • complete deployment documentation and infrastructure (26f9285)
  • COMPLETE place-value migration - eliminate all backward compatibility (67be974)
  • complete steam train sound system and smooth time-of-day transitions (6c60f94)
  • completely rewrite SorobanQuiz memory game with advanced features (c3fdbfc)
  • connect TutorialPlayer to universal AbacusDisplayContext (ff12bab)
  • convert SorobanQuiz memory game styling to Panda CSS (bed97e6)
  • create @soroban/templates package with dual Node.js/Python interface (7da0123)
  • create comprehensive interactive soroban tutorial with stunning UI (d78f19e)
  • create interactive gallery replicating original Typst design (1bcfd22)
  • create Next.js web application with beautiful UI (1b7e71c)
  • create sequential practice problem player with step-by-step guidance (8811106)
  • create shared EditorComponents library for tutorial UI consistency (4991a91)
  • create unified skill configuration interface with intuitive modes (fc79540)
  • disable NumberFlow animations for keyboard input to prevent jarring transitions (fe38bfc)
  • display pedagogical terms inline with current tutorial step (408eb58)
  • enable automatic live preview updates and improve abacus sizing (f680987)
  • enhance ChampionArena with integrated GameSelector and improved UX (aba3f68)
  • enhance column mapping for two-level highlighting (007d088)
  • enhance crop marks with edge-based positioning and comprehensive tests (8c7a5b1)
  • enhance GameCard with epic character celebration animations (b05189e)
  • enhance instruction generator with step bead highlighting and multi-step support (8518d90)
  • enhance memory quiz input phase for better learning experience (7c5556b)
  • enhance memory quiz with dynamic columns and adaptive transitions (aa1f674)
  • enhance navigation touch targets for mobile (6e09f21)
  • enhance pedagogical reasoning tooltips with comprehensive context (bb38c7c)
  • enhance steam train coal shoveling visual feedback (f26fce4)
  • enhance test page with lazy loading demo (5a8bb2f)
  • enhance tooltips with combined provenance and pedagogical content (0c7ad5e)
  • enhance tutorial system with multi-step progression support (3a63950)
  • enhance two-player matching game with multiple UX improvements (f35dcdc)
  • export bridge generator from core package (90a5c06)
  • export SVG processing functions from main module (bee866a)
  • extend provenance system for multi-column term tracking (013e8d5)
  • hide Next Action when at expected starting state for current step (aafee3a)
  • hide Next Action when current state matches step target (ed3d896)
  • hide redundant pedagogical expansions for simple problems (9d0e8c7)
  • hide timer bar for train variant only (84334f9)
  • implement 90s arcade sound system and tunnel digging mechanics (a43ab92)
  • implement actual abacus SVG generation for README examples (6e02102)
  • implement authentic adjacent bead spacing for realistic abacus appearance (f28256d)
  • implement clean background glow for term-to-column highlighting (ec030f0)
  • implement colorblind-friendly color palettes with mnemonic support (faf578c)
  • implement complete smart number entry system for quiz (150c195)
  • implement comprehensive bead diff tooltips with pedagogical decomposition (2e3223d)
  • implement comprehensive character integration for /games arcade (26bf399)
  • implement comprehensive customization API for AbacusReact (48f6e77)
  • implement comprehensive pedagogical algorithm improvements (72d9362)
  • implement comprehensive pedagogical expansion tests for abacus operations (5d39bdc)
  • implement context-aware English instruction generation (bd3f144)
  • implement CSS-based hidden inactive beads with smooth opacity transitions (ff42bcf)
  • implement dynamic bead diff algorithm for state transitions (c43090a)
  • implement dynamic train orientation following curved path direction (e6065e8)
  • implement elegant between-step hover-based add functionality (89a0239)
  • implement endless route progression system (a2b3e97)
  • implement enhanced tactile drag and drop arena with dnd-kit (4b840e9)
  • implement fair scoring algorithm for card sorting challenge (ee7a5e4)
  • implement global abacus display configuration and remove client-side SVG generation (5c3231c)
  • implement HoverCard-based tooltip with enhanced UX and accessibility (7fef932)
  • implement interactive pedagogical reasoning with compact tooltips (2c09516)
  • implement interactive place value editing with NumberFlow animations (684e624)
  • implement intuitive directional gesture system for abacus beads (7c104f3)
  • implement learner-friendly pedagogical tooltips with plain language (01ed22c)
  • implement mobile-first responsive design for speed memory quiz (13efc4d)
  • implement modal dialogs with fullscreen support for challenges (9b6cabb)
  • implement native place-value architecture for AbacusReact (3055f32)
  • implement physical abacus logic and fix numeral coloring regression (5e3d799)
  • implement precise inline highlighting of pedagogical terms (538d356)
  • implement progressive enhancement with minimal loading states (7e1ce8d)
  • implement progressive multi-step instruction system in AbacusReact (9195b9b)
  • implement proper SVG transform accumulation for crop mark viewBox calculation (03230a2)
  • implement provenance system for pedagogical term tracking (37b5ae8)
  • implement React abacus component with independent heaven/earth beads (528cac5)
  • implement real SVG generation from Python bridge in preview API (4b90d12)
  • implement realistic abacus drag mechanics (86cbbc8)
  • implement revolutionary drag-and-drop champion arena interface (dbf61c4)
  • implement semantic summarizer for pedagogical tooltips (d1f1bd6)
  • implement sequential addition problem generation with skill-aware logic (205badb)
  • implement skill-based practice step editor system (9a3afb1)
  • implement smart help detection for Next Action display (933b948)
  • implement smart tooltip positioning to avoid covering active beads (e104033)
  • implement toggleable on-screen keyboard to prevent UI overlap (701d23c)
  • implement two-level column highlighting in tutorial player (bada299)
  • implement type-safe place-value API for bead highlighting (9b6991e)
  • implement unified step positioning for tutorial editor (6aac8f2)
  • improve bead interaction handlers for place-value system (34b9517)
  • improve celebration tooltip positioning to last moved bead (91c5e58)
  • improve pedagogical decomposition to break down by place value (4c75211)
  • improve preview number selection for better variety demonstration (3eb053f)
  • improve sorting game UX with visual cues and auto-selection (a943ceb)
  • improve visual appearance with dynamic rod bounds and better spacing (6c95538)
  • initialize CHANGELOG.md for semantic release tracking (5dcee6b)
  • integrate bead diff algorithm with tutorial editor (472bdf8)
  • integrate guided addition tutorial into guide page (b82a8f1)
  • integrate memory pairs game with arena champions and N-player support (d9f07d7)
  • integrate MemoryPairs game with global GameModeContext (022dca6)
  • integrate NumberFlow for smooth animated number display (e330d35)
  • integrate pytest testing with make targets (8c15d06)
  • integrate typst.ts for browser-native SVG generation (c703a3e)
  • integrate unified skill configuration interface into practice step editor (9305f11)
  • integrate unified step generator into tutorial editor UI (88059b2)
  • make success notification prominent but non-blocking (7278590)
  • migrate all app abaci to browser-side generation (9be52ac)
  • move progressive test stories to web app with real instruction generator integration (9d568e3)
  • optimize games page for mobile devices (eb7202d)
  • optimize memory quiz layout for better viewport usage (2f0c0fe)
  • optimize mobile viewport configuration (476f0fb)
  • optimize Next.js webpack configuration for WASM (39b6e5a)
  • optimize showNumbers layout with three modes and visual improvements (77dc470)
  • polish interactive abacus with column-based digit display (ad11e3d)
  • redesign memory game with invisible input and penalty scoring (b92a867)
  • regenerate Panda CSS styles for memory quiz and other components (b8361ee)
  • remove normalizeBeadHighlight conversion layer (6200204)
  • reorganize main page into navigable sectioned layout (4d179b5)
  • replace Champion Arena with Enter Arcade button (2b98382)
  • replace inline success message with stunning floating overlay (43f02eb)
  • replace legacy abacus components with new AbacusReact (2a6a010)
  • replace manual dropdown with Radix UI for proper state management (bf050fa)
  • replace single-column results with persistent card grid layout (30ae6e1)
  • replace tutorial player arrows with dynamic bead diff algorithm (e8fe467)
  • restore steam train journey enhancements (045dc9f)
  • revolutionary single-element editable NumberFlow with live abacus updates (4bccd65)
  • set up automated npm publishing for @soroban/abacus-react package (dd80d29)
  • set up monorepo structure with pnpm workspaces and Turborepo (62e941e)
  • streamline practice step editor by removing redundant preview section (beaf3f0)
  • switch tooltip system from Tooltip to HoverCard for better interactivity (861904f)
  • transform tooltip into celebration when step completed (057f71e)
  • trigger storybook deployment after enabling GitHub Pages (64dc94e)
  • update ReasonTooltip UI to prioritize semantic summaries (6fb0384)

Performance Improvements

  • debounce value change events during rapid gesture interactions (82e15a1)
  • eliminate loading flash with delayed loading state (c70a390)
  • optimize tutorial abacus highlighting calculation (3490f39)
  • optimize TutorialEditor TutorialPlayer prop calculations (8e81d25)
  • speed up bead animations for fast abacus calculations (1303c93)

BREAKING CHANGES

  • abacus-react package now has independent versioning from monorepo