A full-stack web dashboard for Google Cloud Arcade Festival (GCAF) players featuring real-time point tracking, a tier system, and a comprehensive catalog of skill badges
Paste your public Skills Boost profile URL and immediately see:
- Arcade Points game badges (+1) and skill badges (+0.5) for the active period
- Tier Eligibility Trooper (50+) โ Ranger (75+) โ Champion (95+) โ Legend (120+)
- Facilitator Milestones M1 (+5 pts), M2 (+15 pts), Ultimate (+25 pts) progress bars
- Active July 2026 Tracks the six monthly game tracks with completion status
- FastTrack Catalog 50+ skill badges searchable by name, difficulty, and category
- Live Leaderboard real-time with a podium and full rankings
- Automatic Point Summary Automatic calculation: Game Badge (ร1 pt) + Skill Badge (ร0.5 pt) + Facilitator Milestone Bonus
- Tier System Legend (120+), Champion (95+), Ranger (75+), Trooper (50+) with a progress bar to the next tier
- Milestone Tracker M1 / M2 / M3 / Ultimate Milestone with extra bonus points
- Active Game Tracks 6 Arcade tracks complete with access codes
- Fast Track Catalog 50+ GCAF 2026 skill badges that can be filtered by category, difficulty level, and completion status
- Badge History โMy Badgesโ tab displaying all earned badges, with current/archive filters and an activity heatmap
- Activity Chart Visual breakdown of badge earnings over time
- Activity Heatmap 26 week GitHub-style calendar heatmap of badge earning days
- Streak Counter Current and all-time longest consecutive activity streak
- Leaderboard Track your rank and compete with other players based on total points, badges earned, and milestone progress.
- Member Management View and manage all participants associated with a facilitator code
- CSV Import Bulk-upload participant data via CSV with validation, per-row status feedback, and rollback support
- Email Sending Send targeted emails to selected participants directly from the dashboard
- Batch History Full log of every CSV import with rollback option for any batch
- Real-Time Sync Member list updates instantly via Supabase Realtime subscriptions
- Global Statistics Live counts: total participants, total badges, game badges, skill badges, active facilitators
- Participant Overview Lists of recently synced and unsynced participants with direct profile links
- Facilitator Code Management Add and delete facilitator codes with name labels
- Master Sync Trigger a bulk synchronization of all participant data to the Arcade sheet
- Maintenance Mode Toggle site-wide maintenance mode on/off with a single click
- Audit Log Paginated, timestamped log of all admin actions with actor, target, and metadata
- Feedback Management View and manage player feedback submissions with ratings and categories
Total Points = Game Badges ร 1 pt
+ Skill Badges ร 0.5 pt
+ Facilitator Bonus (from achievement milestones)
| Milestone | Game Badges | Skill Badges | Point Bonus |
|---|---|---|---|
| Milestone 1 | 6 | 14 | +7 points |
| Milestone 2 | 8 | 28 | +18 points |
| Achievement Milestone 3 | 10 | 42 | +29 points |
| Highest Achievement Milestone | 12 | 56 | +40 points |
| Tier | Min. Points | Level |
|---|---|---|
| Legend | 120+ | 1 |
| Champion | 95+ | 2 |
| Ranger | 75+ | 3 |
| Trooper | 50+ | 4 |
- Node.js 18+
- pnpm / npm / yarn
# 1. Clone the repository
git clone https://github.com/RakkaEvandra06/ArcadeTracker.git
# 2. Navigate to the project folder
cd ArcadeTracker
# 3. Install dependencies
npm install
# 4. Run the development server
npm run devArcadeTracker/
โโโ src/
โ โโโ app/ # Next.js App Router
โ โ โโโ admin/ # Admin panel page
โ โ โโโ admin-login/ # Admin login page
โ โ โโโ facilitator/ # Facilitator dashboard page
โ โ โโโ facilitator-login/ # Facilitator login page
โ โ โโโ player-login/ # Player login (Skills Boost URL input)
โ โ โโโ dashboard/ # Player dashboard page
โ โ โโโ api/
โ โ โ โโโ auth/
โ โ โ โ โโโ login/ # POST โ authenticate & create session cookie
โ โ โ โ โโโ logout/ # POST โ destroy session (rate-limited)
โ โ โ โ โโโ me/ # GET โ validate active session
โ โ โ โโโ participants/
โ โ โ โ โโโ route.ts # GET โ list all participants (leaderboard)
โ โ โ โ โโโ [id]/route.ts # GET/PUT/DELETE โ single participant CRUD
โ โ โ โโโ scrape/route.ts # POST โ scrape Skills Boost profile via Cheerio
โ โ โ โโโ skills/route.ts # GET โ list all GCAF skill badges
โ โ โ โโโ feedback/route.ts # POST โ submit player feedback
โ โ โ โโโ facilitator/
โ โ โ โ โโโ batches/ # GET/POST โ CSV import batch management
โ โ โ โ โโโ email/ # POST โ send emails to selected members
โ โ โ โ โโโ import/ # POST โ bulk CSV participant import
โ โ โ โ โโโ members/ # GET/POST/DELETE โ member management
โ โ โ โโโ admin/
โ โ โ โ โโโ stats/ # GET โ global statistics
โ โ โ โ โโโ facilitators/ # GET/POST/DELETE โ facilitator code management
โ โ โ โ โโโ audit-logs/ # GET โ paginated audit trail
โ โ โ โ โโโ master-sync/ # POST โ bulk sync all participants
โ โ โ โ โโโ maintenance/ # POST โ toggle maintenance mode
โ โ โ โโโ cron/
โ โ โ โโโ sync-participants/ # Scheduled: sync badge data (16:00 UTC)
โ โ โ โโโ refresh-leaderboard/ # Scheduled: rebuild rankings (16:30 UTC)
โ โ โโโ globals.css # Global styles & Tailwind design tokens
โ โ โโโ layout.tsx # Root layout with metadata and providers
โ โ โโโ page.tsx # Root redirect (โ /player-login)
โ โ
โ โโโ components/
โ โ โโโ Dashboard.tsx # Player dashboard (Overview / Catalog / Badges tabs)
โ โ โโโ DashboardSkeleton.tsx # Loading skeleton for player dashboard
โ โ โโโ FacilitatorPanel.tsx # Facilitator dashboard (members, import, email, history)
โ โ โโโ Leaderboard.tsx # Leaderboard panel for Players
โ โ โโโ AdminPanel.tsx # Full admin control panel
โ โ โโโ ProfileHeader.tsx # Avatar, name, tier badge, points, sync button
โ โ โโโ ActivityChart.tsx # Badge activity bar/line chart
โ โ โโโ ActivityHeatmap.tsx # 26-week calendar heatmap
โ โ โโโ AccessCodeModal.tsx # Modal for game track access codes
โ โ โโโ Header.tsx # Navigation bar with theme + language toggle
โ โ โโโ PlayerShell.tsx # Layout wrapper for player-facing pages
โ โ โโโ Icons.tsx # SVG
โ โ โโโ PlayerDashboardClient.tsx # Client-side state for player dashboard
โ โ โโโ Providers.tsx # Global context providers (theme, language)
โ โ โโโ SignOutDialog.tsx # Confirmation dialog for sign-out
โ โ โโโ ThemeLangToggle.tsx # Combined dark/light + language switcher
โ โ โโโ ThemeToggle.tsx # Dark/light mode toggle button
โ โ โโโ Toast.tsx # Toast notification system
โ โ
โ โโโ lib/
โ โ โโโ db.ts # Supabase client + all database query functions
โ โ โโโ i18n.ts # Full i18n string map (EN / ID / JP)
โ โ โโโ LanguageContext.tsx # React context for language switching
โ โ โโโ localAuth.ts # LocalStorage-based facilitator auth persistence
โ โ โโโ security.ts # Rate limiting, CSRF, SSRF, input sanitization
โ โ โโโ session.ts # HMAC session creation and verification
โ โ โโโ session-constants.ts # Cookie name and max-age constants (Edge-safe)
โ โ โโโ streak.ts # Consecutive-day streak computation + localStorage cache
โ โ โโโ supabase-client.ts # Browser-side Supabase client (anon key)
โ โ โโโ ThemeContext.tsx # React context for dark/light theme
โ โ โโโ useTheme.ts # Dark/light theme hook with localStorage persistence
โ โ
โ โโโ middleware.ts # Edge Middleware โ role-based route protection
โ
โโโ public/
โ โโโ banner.svg # Repository banner
โ โโโ icon.png # App icon / favicon
โ โโโ OpenGraph.png # Social share preview image
โ
โโโ .env.local # Local environment variables (never commit)
โโโ eslint.config.mjs # ESLint configuration
โโโ next.config.ts # Next.js config: security headers, image hosts
โโโ postcss.config.mjs # PostCSS config for Tailwind
โโโ tsconfig.json # TypeScript configuration
โโโ vercel.json # Vercel deployment config + cron job schedules
โโโ package.json # Dependencies and npm scripts
Contributions are welcome and appreciated! Here's how to get involved:
- Search the Issues page to check if it's already reported
- Open a new issue with the Bug Report template
- Include: your OS, Node.js version, steps to reproduce, expected vs actual behavior, and any error messages
- Open a new issue with the Feature Request template
- Describe the problem your idea solves and your proposed solution
- Discuss the approach in the issue before opening a pull request
# 1. Fork the repository on GitHub
# 2. Clone your fork
git clone https://github.com/RakkaEvandra06/ArcadeTracker.git
cd ArcadeTracker
# 3. Create a feature branch
git checkout -b feature/your-feature-name
# 4. Install dependencies
npm install
# 5. Make your changes โ keep commits focused and descriptive
# 6. Lint your code before committing
npm run lint
# 7. Push your branch
git push origin feature/your-feature-name
# 8. Open a Pull Request on GitHub against the main branch- Follow the existing TypeScript and Tailwind code style
- Keep pull requests focused one feature or bug fix per PR
- Add or update comments for any non-obvious logic
- Do not commit
.env.localor any secrets - Test your changes locally with
npm run devandnpm run buildbefore submitting
Have a question, found a bug, or want to collaborate?
| Channel | Link |
|---|---|
| GitHub | @RakkaEvandra06 |
| Issues | ArcadeTracker Issues |
Feel free to open a GitHub issue for any bug reports, feature requests, or general questions about the project.
This project is licensed under the MIT License. See LICENSE.txt for the full license text.
Made with โค๏ธ by RakkaEvandra06, Google Cloud Arcade 2026