K-Pop entertainment company ranking platform with season-based leagues and multilingual support.
🌐 Live: https://kclhq.com
KCL is a fan-driven ranking platform for K-Pop entertainment companies. Users vote each month to determine which companies dominate the 1st and 2nd divisions of the league. At the end of each season, promotion and relegation are applied automatically, and a Hall of Fame records each month's champion.
- Company Rankings — Real-time league standings across 1st and 2nd divisions
- Season League — Monthly season cycle with promotion/relegation between divisions
- Firepower Voting — Community votes drive company rankings each season
- Hall of Fame — Monthly champions recorded permanently
- Multilingual — 7 languages: Korean, English, Japanese, Chinese, Spanish, French, German
- PWA — Installable as a Progressive Web App
- SEO Optimized — Static export with full sitemap, Open Graph, and structured data
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router, static export) |
| Database | Supabase (PostgreSQL) |
| Hosting | Cloudflare Pages |
| i18n | next-intl (7 languages) |
| Styling | SCSS Modules |
| Animation | Framer Motion |
| Charts | Recharts |
| Forms | React Hook Form + Zod |
| PWA | Web Manifest |
- Node.js 20+
- pnpm 10+
git clone https://github.com/moony01/kcl.git
cd kcl
pnpm installCreate a .env.local file:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_keypnpm devpnpm buildOutput is generated in the out/ directory (static export for Cloudflare Pages).
kcl/
├── src/
│ ├── app/
│ │ ├── [locale]/ # Localized routes (7 languages)
│ │ │ ├── company/ # Company detail pages
│ │ │ ├── hall-of-fame/# Season champions
│ │ │ ├── news/ # K-Pop news
│ │ │ ├── community/ # Community board
│ │ │ └── ...
│ ├── components/ # Shared UI components
│ ├── config/ # Feature flags
│ ├── i18n/ # next-intl configuration
│ ├── messages/ # Translation files (ko, en, ja, zh, es, fr, de)
│ ├── lib/ # Supabase client, utilities
│ └── types/ # TypeScript type definitions
├── public/ # Static assets
├── supabase/ # DB migrations and functions
└── .github/workflows/ # Automated monthly season settlement
Deployed on Cloudflare Pages as a fully static site (output: 'export').
The .github/workflows/kcl-league-promotion.yml workflow runs on the 1st of every month (UTC 00:00) to:
- Snapshot season rankings
- Record the monthly champion
- Execute league promotion + reset firepower
MIT — Copyright (c) 2026 moony01