FGCNotepad is a forum-wiki hybrid for fighting game analysis from a game theory perspective. It helps players study matchups, combos, oki setups, scenarios, and strategic decisions, with the current data focus on Street Fighter 6.
Questions, feedback, or want to contribute? Join our Discord server.
- Backend: Symfony 7.4, PHP
>=8.4, Composer, Doctrine ORM. - Frontend: Next.js 16, React 19, TypeScript, npm
10.8.1. - Node.js:
>=22.13.0for host development and frontend validation. - Database: PostgreSQL 15.
- Mixed strategy solver: PHP service using Multiplicative Weights Update.
backend/: Symfony API, Doctrine entities/migrations, services, and tests.frontend/: Next.js app, React UI, hooks, services, styles, and frontend checks.docker/: development and production Nginx/Docker support files.scripts/: production deploy and backup helpers.docs/: specialised planning and feature notes.AGENTS.md: required entry point for AI-assisted work.docs/ai/: detailed implementation rules for AI-assisted backend, frontend, and config/ops work.CONTRIBUTING.md: fork, branch, pull request, and review workflow.
- Use tracked examples as references:
backend/.env.example,backend/.env.test.example,frontend/.env.example, and.env.prod.example. - Keep real local overrides in ignored files such as
backend/.env.local,backend/.env.test.local, orfrontend/.env.local. - Keep real production values in ignored
.env.prodon the server. Never commit production secrets. - Browser/API authentication uses Symfony sessions with CSRF protection.
Default setup (Ubuntu on WSL locally, matching the Ubuntu + Docker production VM).
docker-compose.yml is the development Compose file. It starts PostgreSQL, Symfony PHP-FPM, Nginx, and a frontend container with bind-mounted source.
make build
make up
make composer-install
make npm-install
make create-test-database
make migrate
make migrate-testRun the frontend dev server in the frontend container when needed:
make frontend-devFrontend: http://localhost:3000. Backend through development Nginx: http://localhost:8000.
The frontend image includes Chromium's Linux dependencies. Install its browser binary once into the Docker-managed volume, then run the responsive suite:
make playwright-install
make playwright-test-mobilePlaywright failure artifacts stay inside the container in Docker development.
Secondary option for contributors running tooling directly on a Windows host.
Install PHP >=8.4, Composer, Node.js >=22.13.0, npm, PostgreSQL 15 or compatible, and Symfony CLI. Put machine-specific database settings in backend/.env.local and test settings in backend/.env.test.local when needed.
make local-setupRun the app in two terminals:
make local-servemake local-frontendFrontend: http://localhost:3000.
make help: list available project commands.make up: start Docker development services.make stop: stop Docker development services.make logs: follow Docker service logs.make local-setup: install dependencies, create databases, and run migrations for host development.make local-serve: start the local Symfony server.make local-frontend: start the local Next.js dev server.make check: run the canonical validation workflow.
Run this before opening a pull request:
make checkmake check runs npm run check in frontend/ and composer check in backend/. That currently includes frontend type checks, frontend tests, ESLint, React Doctor, backend PHPUnit, and PHPStan. No separate React Doctor command is required.
docker-compose.prod.ymlis the production Compose file. It builds production images, runs Nginx as the public entry point, and keeps application services on the Docker network.- Copy
.env.prod.exampleto ignored.env.prodon the server and fill in real secrets before starting production. - Start production with
docker compose -f docker-compose.prod.yml up -d --build. - Run production migrations explicitly with
docker compose -f docker-compose.prod.yml exec backend php bin/console doctrine:migrations:migrate --no-interaction. - PostgreSQL is bound to
127.0.0.1:5432in production for SSH tunnel access only. Do not open PostgreSQL to the public internet. NEXT_PUBLIC_API_URL=/apiis the production frontend API setting.scripts/deploy-prod.shand theprod-db-*Make targets provide deploy and backup helpers. Release-specific deploy steps live indocs/deploy.md. Seedocs/production-postgres-backups.mdfor the Lightsail backup and restore runbook.
- Contribution workflow:
CONTRIBUTING.md. - Production Postgres backups:
docs/production-postgres-backups.md. - AI agent rules:
AGENTS.md. - Backend architecture and rules:
docs/ai/BACKEND_FEATURE_MASTER.md. - Frontend architecture and UI rules:
docs/ai/FRONTEND_FEATURE_MASTER.md. - Config, operations, and deployment conventions:
docs/ai/CONFIG_OPS_MASTER.md. - Replay Lab notes:
docs/replay-lab-0x-plan.md. - Brand asset notice:
NOTICE.md.
FGCNotepad source code is licensed under AGPL-3.0-only. See LICENSE.
Logo and brand assets are covered separately in NOTICE.md.
FGCNotepad uses Street Fighter 6 frame data from Frame Assistant Tool (FAT).
- FAT repository: https://github.com/D4RKONION/FAT
- FAT license: GPL-3.0, as published in the FAT repository license file.
- JSON source used by this project: https://raw.githubusercontent.com/D4RKONION/FAT/refs/heads/main/src/js/constants/framedata/SF6FrameData.json
- Local commands using FAT data:
frame-data:download:fat-jsonandframe-data:import:fat-json.
FAT is a separate open-source project. FGCNotepad uses the FAT name only to identify the upstream data source and credits FAT in the application About page.