Chrome sidepanel extension + Web3 rewards platform. Viewers spend Bits to earn on-chain tokens; streamers manage rewards from the dashboard.
tachigo/
├── backend/ # Go API (Gin + GORM + PostgreSQL)
├── tachimint/ # Chrome sidepanel frontend (React + TypeScript + Vite)
└── dashboard/ # Admin dashboard (React + TypeScript + Vite)
Prerequisites: Docker, Docker Compose
git clone <repo>
cd tachigo
docker compose up --build| Service | URL |
|---|---|
| Backend | http://localhost:8080 |
| Swagger | http://localhost:8080/swagger/index.html |
| Frontend | http://localhost:5173 |
| Postgres | localhost:5433 |
If you want local .env files, copy the examples first. Docker Compose can still start without them because the env files are optional.
Fill in the secrets in backend/.env before using OAuth or Twitch Extension features.
On Windows PowerShell, you can generate the local env files with:
./scripts/setup-env.ps1docker compose up --build # start all services (foreground — see logs)
docker compose up -d --build # start in background
docker compose down # stop all services
docker compose logs -f # tail all logsmake is still available as a convenience on macOS/Linux, but it is not required.
- Hot reload via air — save any
.gofile to rebuild - Swagger docs regenerated automatically on each build (
swag init) - Tests use SQLite in-memory — no Postgres required
docker compose run --no-deps --rm app go test ./...- Hot reload via Vite HMR
- current migration direction is Chrome sidepanel runtime
- Twitch identity / extension auth related flows are still retained during the migration stage
docker compose run --no-deps --rm frontend npm run build # production buildCopy the examples and fill in your secrets:
cp backend/.env.example backend/.env
cp tachimint/.env.example tachimint/.env
cp dashboard/.env.example dashboard/.envWindows PowerShell:
./scripts/setup-env.ps1Key backend variables:
| Variable | Description |
|---|---|
TWITCH_CLIENT_ID |
From dev.twitch.tv/console |
TWITCH_CLIENT_SECRET |
From dev.twitch.tv/console |
TWITCH_EXTENSION_SECRET |
Extension secret (base64) |
GOOGLE_CLIENT_ID |
From Google Cloud Console |
GOOGLE_CLIENT_SECRET |
From Google Cloud Console |
JWT_ACCESS_SECRET |
Random string ≥ 32 chars |
JWT_REFRESH_SECRET |
Random string ≥ 32 chars |
TACHI_CONTRACT_ADDRESS |
Sepolia TachiToken contract address |
SEPOLIA_SIGNER_KEY |
Backend signer key for TACHI mint/burn |
See docs/architecture.md for the full system diagram. For the current frontend migration decision, see docs/tachimint-chrome-sidepanel-migration.md.
- docs/auth-architecture.md — current auth state 與 migration guardrails baseline
- docs/architecture.md — system architecture
- docs/claude-codex-cheatsheet.md — quick reference for Claude Code + Codex collaboration
- docs/claude-codex-workflow.md — full workflow guide for low-token Claude Code usage
- docs/pr-scope-policy.md — PR 邊界規則、required checks、scope police 設定
- CLAUDE.md — repo-specific collaboration rules and command entry points
GitHub Actions 目前分兩段:
PR Scope Police先檢查 PR 邊界;超大包或跨 scope PR 會先被擋下CI會直接出現在 PR 上,但會先經過輕量Scope gate;只有 scope 合格才會跑 backend / frontend / dashboard 的重型 job
在受保護分支上的 CI:
- Backend tests —
go test ./...inside the dev Docker image - Frontend build —
npm run buildinside the frontend Docker image