---
title: "Mult-Streak"
url: "https://aigamehub.app/ja/games/mult-streak-fc7325"
source: "https://github.com/pisan-labs/mult-streak"
source_type: "github"
play_url: "https://mult-streak.pisan.me"
platform: "desktop"
login_required: false
pricing: "free"
origin: "original"
ai_tools: ["Claude Code"]
game_languages: ["en"]
author: "pisan-labs"
author_handle: "pisan-labs"
category: "カジュアル"
categories: ["casual", "puzzle"]
tags: ["browser-game", "cookie-based", "math-practice", "mental-math", "multiplication", "streak"]
added: "2026-11-05T06:09:12.275Z"
updated: "2026-11-05T06:09:12.275Z"
locale: "ja"
content_locale: "ja"
---

# Mult-Streak

ブラウザベースの暗算ゲーム。2～3桁の数値を2つ掛け算し、10問連続で正解して24時間有効な王冠を獲得することを目指します。

## Description

プレイヤーには 10 から 999 までの2つの因数が表示され、積を入力して連続正解を伸ばします。不正解は連続正解数をゼロにリセットします。10問連続で正解すると王冠を獲得し、24時間プレイがロックされます。プレイヤーは匿名で、ゲーム状態は署名付き Cookie に保存されます。このプロジェクトは MIT ライセンスで、ライブデプロイを含みます。

## Original post

A multiplication streak game: multiply two 2-3 digit numbers, and ten correct in a row earns a 24-hour crown. State lives in a signed cookie; the Express API runs as a Netlify function. Built with Claude Code.

Topics: claude-code, express, game, math-game, mental-math, multiplication, netlify-functions, serverless, typescript

# mult-streak-edge The Netlify deployment of [mult-streak](../mult-streak): the same multiplication-streak game (two 2-3 digit factors, type the product, 10 correct in a row wins a 24-hour crown), packaged for Netlify's serverless platform. - **Live site:** https://mult-streak.pisan.me *(Netlify, live)* - **Source:** https://github.com/pisanuw/Claude-capstone/tree/main/mult-streak-edge - **Host:** Netlify (static page on the CDN + the API as a serverless function). ## What is the same, and what differs from the Render version The game logic is identical and shared verbatim: factors 10-999, streak grows on correct answers and resets to 0 on a wrong one, 10 in a row wins and locks the player out for 24 hours. Players are anonymous, identified by a signed cookie, and **all game state (streak, lockout) lives in that cookie**, so the game and the lockout work exactly as on Render. The one real difference is the **"player stopped" email**. That feature needs the server to remember each player's last activity, which means persistent server-side storage. Netlify Functions have no shared disk between invocations, so the file-based store cannot reliably retain that data here. As a result: - The game and 24h lockout: **fully working** on Netlify. - The idle-notification email: **not dependable** on Netlify. For the email, use the Render deployment ([`../mult-streak`](../mult-streak)), which has a warm instance and a background sweep. This split is a direct consequence of choosing a file store over a database; both deployments are otherwise the same code. ## Architecture on Netlify - `npm run build` compiles the server and copies the static game page to `dist/public`, which Netlify serves from its CDN. - `netlify/functions/api.mjs` wraps the same Express app with `serverless-http`; [`netlify.toml`](./netlify.toml) routes `/api/*` to it and serves the SPA otherwise. ## Run locally It runs as a normal Node server locally (the Netlify wrapper is only used in production): ```bash cd mult-streak-edge npm install npm run dev # http://localhost:3000 npm test # 42 tests ``` ## Deploy Config-driven, like the rest of the repo: editing [`deploy/target.yml`](./deploy/target.yml) and pushing triggers a Netlify deploy via GitHub Actions, using the `NETLIFY_AUTH_TOKEN` repo secret. The site name is `mult-streak-edge-pisan` (Netlify subdomains are globally unique).
