{"id":49592185,"url":"https://github.com/byebyebryan/gomoku2d","last_synced_at":"2026-05-20T03:13:43.344Z","repository":{"id":351448966,"uuid":"115882094","full_name":"byebyebryan/gomoku2d","owner":"byebyebryan","description":"An old favorite, built properly.","archived":false,"fork":false,"pushed_at":"2026-04-29T11:35:11.000Z","size":9713,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-29T12:15:09.827Z","etag":null,"topics":["board-game","game","gomoku","phaser","pixel-art","react","rust","typescript","vite","wasm","wasm-pack"],"latest_commit_sha":null,"homepage":"https://gomoku2d.byebyebryan.com/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/byebyebryan.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-12-31T19:39:15.000Z","updated_at":"2026-04-29T11:35:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/byebyebryan/gomoku2d","commit_stats":null,"previous_names":["byebyebryan/gomoku2d"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/byebyebryan/gomoku2d","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/byebyebryan%2Fgomoku2d","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/byebyebryan%2Fgomoku2d/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/byebyebryan%2Fgomoku2d/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/byebyebryan%2Fgomoku2d/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/byebyebryan","download_url":"https://codeload.github.com/byebyebryan/gomoku2d/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/byebyebryan%2Fgomoku2d/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32591596,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"ssl_error","status_checked_at":"2026-05-03T22:09:10.534Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["board-game","game","gomoku","phaser","pixel-art","react","rust","typescript","vite","wasm","wasm-pack"],"created_at":"2026-05-04T01:30:59.021Z","updated_at":"2026-05-20T03:13:43.331Z","avatar_url":"https://github.com/byebyebryan.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gomoku2D\n\n*An old favorite, built properly.*\n\nGomoku2D is a simple, fun web Gomoku with a retro feel and serious engineering\nunderneath: a modern frontend, a Rust/WebAssembly rules core, and a Rust bot lab\nfor game logic and AI experiments.\n\nIt is also a production experiment: one developer, an AI-centric workflow, and\na question more interesting than raw speed: how much of a real product team's\nsurface area can agents help cover without lowering the quality bar?\n\n[![Gomoku2D hero capture — Local Match in progress on the pixel-art board](docs/assets/capture_v0_2_4_match_desktop.gif)](https://gomoku2d.byebyebryan.com/)\n\n**Play in browser:** https://gomoku2d.byebyebryan.com/\n\n**Pixel-art previews:** https://gomoku2d.byebyebryan.com/assets/\n\n**Bot lab report:** https://gomoku2d.byebyebryan.com/bot-report/\n\n**Replay analysis report:** https://gomoku2d.byebyebryan.com/analysis-report/\n\nThe answer so far is not \"type less code and ship anything.\" It is closer to\nrunning a tiny product team through agents: implementation, review, test\ncoverage, infrastructure, asset iteration, release notes, and design critique\nall stay in the loop.\n\n## What makes it different\n\n- **Personal, but not casual.** Gomoku was a paper-and-pencil childhood\n  favorite and one of my first game-dev targets. This version keeps that\n  sentimental thread, but treats it like a real alpha product instead of a\n  nostalgic weekend sketch.\n- **Small surface, serious foundation.** React owns the app shell, Phaser\n  renders the board, and Rust rules/bot logic ship to the browser through\n  WebAssembly. The split keeps the UI light without trapping core game logic in\n  the frontend.\n- **A lab under the board.** The Rust workspace is where rules, bots,\n  benchmarks, replay formats, and future analysis/puzzle features can be built\n  natively before they reach the browser.\n- **AI as production leverage.** The experiment is not whether agents can\n  generate code quickly. It is whether one person can use agents to cover more\n  of the product loop while still preserving taste, scope control, and review\n  discipline.\n- **Retro assets with a real workflow.** Sprites, icons, and fonts have source\n  assets, manifests, and live preview pages, so the pixel-art style can be\n  iterated deliberately instead of treated as decoration.\n\n## What works today\n\n- Start a practice match immediately, no account required.\n- Play Freestyle or Renju against configurable Easy / Normal / Hard bots, with\n  Renju forbidden-move feedback and mobile-friendly placement controls.\n- Review local replays, scrub the timeline, and branch from a replay position\n  into a fresh practice game.\n- Let the browser analyzer mark the setup corridor and latest escape in\n  finished decisive replays.\n- Keep guest-local history by default, or sign in with Google for private\n  cloud-backed history across browsers.\n- Use the same board-first app on desktop and portrait mobile.\n\nLives in [`gomoku-web/`](gomoku-web/) — see its README for stack, local\ndevelopment, and deploy/runtime details.\n\n---\n\n## The Bot Lab\n\n[`gomoku-bot-lab/`](gomoku-bot-lab/) is the other half of the project: a Rust\nworkspace where the game can grow beyond \"browser board plus bot.\" Rules,\nreplay format, and bot behavior live here first, can be tested and benchmarked\nnatively, and then ship to the web game through WebAssembly.\n\n```\ngomoku2d/\n├── gomoku-web/         ← the game (React + Phaser board + TypeScript)\n├── gomoku-bot-lab/     ← the Rust side\n│   ├── gomoku-core/      rules + board\n│   ├── gomoku-bot/       Bot trait + implementations\n│   ├── gomoku-analysis/  setup-corridor replay analysis\n│   ├── gomoku-eval/      self-play arena, tournaments, Elo\n│   ├── gomoku-cli/       native match runner\n│   └── gomoku-wasm/      wasm-pack bridge the game imports\n└── docs/\n```\n\n| Crate | What it does |\n|-------|--------------|\n| `gomoku-core` | Board state, rules (Freestyle + Renju), win detection, FEN, replay JSON |\n| `gomoku-bot` | `Bot` trait + implementations: `RandomBot`, `SearchBot` (negamax + α-β + iterative deepening + transposition table) |\n| `gomoku-analysis` | Shared setup-corridor replay analyzer used by reports and the browser |\n| `gomoku-cli` | Run one match: pick the bots, print the board, optionally save a replay |\n| `gomoku-eval` | Run many matches: self-play arena, round-robin tournaments, Elo ratings |\n| `gomoku-wasm` | `wasm-pack` bridge — exports the core + bots to the web game |\n\nBuild, CLI usage, replay format, and `SearchBot` notes live in\n[`gomoku-bot-lab/README.md`](gomoku-bot-lab/README.md) and\n[`docs/search_bot.md`](docs/search_bot.md).\n\n---\n\n## Current Status\n\nThe local-first `v0.2.x` product pass made the game feel complete without\ncloud: board-first play, desktop/mobile layout, replay, profile, and local\nhistory. The `v0.3` backend-continuity line added optional Google sign-in,\nFirebase/Firestore plumbing, local-to-cloud profile promotion, private\ncloud-backed history, schema/rules hardening, and Reset Profile without putting\nsign-in in front of the game.\n\nThe lab-powered line is now underway. Bot-lab reports, the static replay\nanalysis report, configurable bot settings, tactical hints, and the first\nin-product replay-analysis surface are now live. The next product questions are\nhow much explanation to add around replay analysis, then puzzles, bot\npersonalities, and broader game-review UI. For the longer-term sequencing, see\n[`docs/roadmap.md`](docs/roadmap.md).\n\n---\n\n## Learn More\n\nThe canonical design, architecture, and release docs live in `docs/`:\n\n- [`docs/project.md`](docs/project.md) — the product/production thesis and project tenets\n- [`docs/product.md`](docs/product.md) — what we're building and why\n- [`docs/architecture.md`](docs/architecture.md) — FE stack, DOM/Phaser boundary, core-sharing story\n- [`docs/app_design.md`](docs/app_design.md) — current local-first routes, flows, and screen contracts\n- [`docs/ui_design.md`](docs/ui_design.md) — DOM shell visual language and styling rules\n- [`docs/game_visual.md`](docs/game_visual.md) — Phaser canvas, sprite, warning, and animation language\n- [`docs/corridor_search.md`](docs/corridor_search.md) — strategic model behind replay analysis, bot diagnostics, and future forcing logic\n- [`docs/game_analysis.md`](docs/game_analysis.md) — replay analyzer mechanics, report schema, CLI workflow, and current limits\n- [`gomoku-web/assets/README.md`](gomoku-web/assets/README.md) — source asset folders and local preview pages\n- [Live asset previews](https://gomoku2d.byebyebryan.com/assets/) — published sprite, icon, and font previews\n- [Bot lab report](https://gomoku2d.byebyebryan.com/bot-report/) — published bot-lab tournament report target\n- [Replay analysis report](https://gomoku2d.byebyebryan.com/analysis-report/) — published setup-corridor analysis for the bot report's top matchup\n- [`docs/ui_screenshot_review.md`](docs/ui_screenshot_review.md) — screenshot history and UI critique\n- [`docs/backend.md`](docs/backend.md) — Firebase + Firestore + Cloud Run model for cloud, lab-powered, and online phases\n- [`docs/backend_infra.md`](docs/backend_infra.md) — live Firebase/GCP setup, rules deployment, and env checklist\n- [`docs/backend_cost.md`](docs/backend_cost.md) — backend free-tier assumptions, estimates, and headroom tracking\n- [`docs/roadmap.md`](docs/roadmap.md) — version-based phase plan from POC to cloud, lab-powered identity, skins, and online features\n- [`docs/release.md`](docs/release.md) — local preview, release checks, tagging, and publish workflow\n- [`docs/search_bot.md`](docs/search_bot.md) — configurable `SearchBot` strategy, pipeline, and experiment takeaways\n- [`docs/tactical_shapes.md`](docs/tactical_shapes.md) — canonical bot shape vocabulary for tactical facts and eval work\n- [`docs/tactical_scenarios.md`](docs/tactical_scenarios.md) — focused bot tactical cases with board prints and expected moves\n- [`docs/lethal_threats.md`](docs/lethal_threats.md) — position-level lethal-threat model, Renju caveats, and safety harness\n- [`docs/renju_rules.md`](docs/renju_rules.md) — Renju forbidden-move model and validation plan\n- [`docs/testing.md`](docs/testing.md) — test hygiene rules for durable contracts versus temporary scaffolding\n- [`gomoku-web/README.md`](gomoku-web/README.md) — web game stack, local dev, deploy/runtime details\n- [`gomoku-bot-lab/README.md`](gomoku-bot-lab/README.md) — bot-lab build/test, CLI usage, replay format, bot notes\n\nSuperseded exploratory docs and mock briefs are preserved under\n[`docs/archive/`](docs/archive/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbyebyebryan%2Fgomoku2d","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbyebyebryan%2Fgomoku2d","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbyebyebryan%2Fgomoku2d/lists"}