Content becomes opportunity. A K-pop talent network with community voting, news, and multilingual support.
🌐 Live: https://mearrow.com
MEARROW is a K-pop talent network where content, community, and opportunity connect. Its initial community layer includes fan-driven company rankings: users vote each month to determine which companies lead 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, OpenNext) |
| Database | Supabase (PostgreSQL) |
| Hosting | Cloudflare Workers |
| 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/mearrow.git
cd mearrow
pnpm installCreate a .env.local file:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_keypnpm devpnpm buildThe production Worker bundle is generated in .open-next/.
mearrow/
├── 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
MEARROW is deployed as a Cloudflare Worker using OpenNext. Production deployment is browser-gated and runs through GitHub Actions. Never deploy from a shell that does not have the public Supabase variables loaded; the client would render the site shell but could not load live data.
pnpm check:deploy-env
DEPLOY_BROWSER_PATH=/path/to/chrome pnpm test:browser:deploy
pnpm workers:buildtest:browser:deploy starts the development server, checks that live Supabase
data renders company cards, verifies a news image is WebP-backed, and checks an
English news detail through the locale fallback. A failed browser gate blocks
the production deployment. The GitHub Actions workflow
.github/workflows/deploy-workers.yml runs the same gate before a Workers
production deployment. A push or merge to main starts the production job
automatically after validation. The job uses the workers-production
Environment, so its required-reviewer approval gate can pause deployment
before the Worker is released. A manual production run remains available from
the main branch when needed.
The .github/workflows/mearrow-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