ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證MMRC 26 — Micro Mouse Robot Competition site for the IEEE RAS HTU Student Chapter
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Website for the IEEE RAS HTU Student Chapter's Micro Mouse Robot Competition 2026 — competition
info pages, registration, and the Pac Mouse browser game (Classic top-down + First-Person
raycaster modes).
Next.js (App Router) + TypeScript, Tailwind CSS, Prisma + PostgreSQL (Supabase), Vitest,
Playwright, Docker.
The app needs a PostgreSQL database to start — there is no file-based fallback. The simplest
setup is to point local development at a Supabase project (use a separate one from production,
so test registrations never land in the real table).檢視完整 README ↗Website for the IEEE RAS HTU Student Chapter's Micro Mouse Robot Competition 2026 — competition info pages, registration, and the Pac Mouse browser game (Classic top-down + First-Person raycaster modes).
Next.js (App Router) + TypeScript, Tailwind CSS, Prisma + PostgreSQL (Supabase), Vitest, Playwright, Docker.
The app needs a PostgreSQL database to start — there is no file-based fallback. The simplest setup is to point local development at a Supabase project (use a separate one from production, so test registrations never land in the real table).
npm install
cp .env.example .env # then fill in DATABASE_URL and DIRECT_URL
npx prisma migrate deploy # applies migrations to that database
npx prisma db seed # seeds the initial Counter rows
npm run dev # http://localhost:3000
Both connection strings come from the Supabase dashboard, under Project Settings → Database → Connection string:
| Variable | Which string | Port | Used for |
|---|---|---|---|
DATABASE_URL | Transaction pooler | 6543 | Every query the app runs |
DIRECT_URL | Direct connection | 5432 | Prisma migrations only |
Migrations need the direct connection because the pooler cannot run the statements they issue.
npm run test # Vitest: game engine unit tests + component tests
npx playwright test # Playwright e2e (builds + serves a standalone build automatically)
The Pac Mouse game (src/game/classic/) is an imperative canvas game ported directly from
the standalone ieee-ras-mouse-maze site rather than a pure-function engine, so it isn't unit
tested the way the original pure-function engine was; component/e2e tests cover the surrounding
page (routing, registration, dark mode) and a Playwright smoke test drives the game itself.
The pure parts that are unit tested live in shared.ts (maze enclosure, speed tuning) and
src/lib/leaderboard.ts (player-name sanitising) — see tests/component/game-maze.test.ts.
Game notes:
isWall()/cellAt() treat out-of-bounds columns as solid.GAME_SPEED_SCALE, MOUSE_SPEED_SCALE, and ROBOT_SPEED_SCALE in
shared.ts. Keep MOUSE_SPEED_SCALE > ROBOT_SPEED_SCALE or the game becomes unwinnable..game-stage wrapper so
the HUD stays on screen; because the browser consumes Esc to leave fullscreen, leaving
fullscreen mid-game pauses, and P works as a second pause key.pacmouse:gameover event that Leaderboard.tsx picks up to show the
name-entry form; scores POST to /api/game/scores and are boarded per mode. Scores are
client-reported and therefore not tamper-proof — the board is for fun, not ranking./admin/broadcasts groups people into lists (custom, confirmed, waiting) and sends each member
their own copy of a message. Confirmed and waiting lists can import team members straight from
registrations with a matching status; the import is re-runnable and never touches hand-added
contacts. Sends are sequential to stay inside Resend's rate limit, and each run is logged to the
Broadcast table.
next.config.mjs sets output: "standalone", so next start won't work directly — use one of:
# Local, without Docker
npm run build:standalone-serve
# Docker (recommended for anything resembling production)
docker compose up -d --build
docker compose run --rm migrate # first run only: applies migrations to the volume
docker compose run --rm --entrypoint "npx tsx prisma/seed.ts" migrate # first run only: seeds Counter rows
The Docker image is a plain 12-factor Next.js container — no AWS-specific code or config, so it runs unmodified on EC2, ECS/Fargate, App Runner, or any other Docker host. Only the connection strings change between environments.
The site renders on the server and writes to the database on nearly every page — registration, the admin panel, session login, the live stat counters, and the game leaderboard. It cannot be served as static files, so GitHub Pages and similar static hosts will not run it. It needs a host that executes Node.
Any of these work, with Supabase as the database in each case:
Set these in the host's environment settings, never in the repository:
| Variable | Notes |
|---|---|
DATABASE_URL | Supabase pooled string, port 6543 |
DIRECT_URL | Supabase direct string, port 5432 |
SESSION_SECRET | Fresh random hex, different from any other environment |
ADMIN_BOOTSTRAP_USERNAME | Creates the first admin on first run |
ADMIN_BOOTSTRAP_PASSWORD | Only used when no admin exists yet |
RESEND_API_KEY | Outbound email |
RESEND_FROM_EMAIL | Verified Resend sender, e.g. MMRC 26 <[email protected]> |
ADMIN_NOTIFICATION_EMAIL | Where FAQ questions are sent |
SITE_URL | Public URL, used for links inside emails |
Then apply the schema once, from a machine holding the production connection strings:
npx prisma migrate deploy
npx prisma db seed
Before deploying email, add and verify your domain in Resend under Domains, then add the DNS
records Resend provides at your DNS host. Set RESEND_FROM_EMAIL to an address on that verified
domain, such as MMRC 26 <[email protected]>. The domain must be verified before Resend
will deliver to arbitrary recipients.
public/brand/logo/*.png and public/brand/favicon/* were extracted from the official
docs/brand/RAS Logos.pdf IEEE RAS brand guideline (transparent-background crops of the RA mark
and HTU Student Chapter lockup in each required color variant). Replace them with true vector
(SVG) exports from IEEE RAS if/when official source files become available — components/brand/Logo.tsx
just needs the file paths updated.
src/app/ — routes (home, /game, /rules, /schedule, /register, /faq, API routes)src/game/classic/ — Pac Mouse (Classic + First-Person modes), isolated behind
GameTabs.tsx; shared.ts/audio.ts hold the maze layout, robot defs, and sound effects
common to both modessrc/components/ — layout, brand, and shared UI componentssrc/lib/ — Prisma client, content loader, registration logic, broadcast-list and
leaderboard rules shared between the API routes and the clientcontent/ — hand-authored rulebook/FAQ (MDX) and schedule (JSON); swap for a CMS later by
changing only src/lib/mdx.tsprisma/ — schema, migrations, seed scripttests/ — unit/, component/, e2e/