streamable-httpupdated 17d ago
์น๊ตฌ๋ผ๋ฆฌ ํ๋ ๋๊ตฌ ๊ฒฝ๊ธฐ๋ฅผ ์ค๋์ ํ์ผ๋ก ๋ฑ๋กํ๊ณ , ๊ฒฝ๊ธฐ ํ ์ํ ์น์ธ์ผ๋ก ์ ์ ๊ณผ ํฐ์ด๋ฅผ ๋จ๊ธฐ๋ React + Vite MVP์ ๋๋ค.
What can you do with BoxTier Basketball Receipt?
RankBall
์น๊ตฌ๋ผ๋ฆฌ ํ๋ ๋๊ตฌ ๊ฒฝ๊ธฐ๋ฅผ ์ค๋์ ํ์ผ๋ก ๋ฑ๋กํ๊ณ , ๊ฒฝ๊ธฐ ํ ์ํ ์น์ธ์ผ๋ก ์ ์ ๊ณผ ํฐ์ด๋ฅผ ๋จ๊ธฐ๋ React + Vite MVP์ ๋๋ค.
์คํ
npm install
npm run dev
.env๊ฐ ์์ด๋ localStorage demo mode๋ก ์คํ๋ฉ๋๋ค.
Supabase
Vite์์๋ Vercel/Next ์คํ์ผ์ NEXT_PUBLIC_* ํ๊ฒฝ๋ณ์๋ฅผ ์ฝ๋๋ก ์ค์ ํ์ต๋๋ค.
NEXT_PUBLIC_SUPABASE_URL=...
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=...
Supabase ์์ ์ ์ฅ์ supabase/migrations๋ฅผ ์์๋๋ก ์ ์ฉํฉ๋๋ค. Supabase ํ๊ฒฝ์ด ์ค์ ๋ ๋ค ์๊ฒฉ ๋ก๋๊ฐ ์คํจํ๋ฉด localStorage demo state๋ก ํํดํ์ง ์๊ณ ์๊ฒฉ shell/error ์ํ๋ฅผ ์ ์งํฉ๋๋ค.
Supabase CLI migration
Production DB migration์ ๊ฐ๋ฅํ๋ฉด Supabase CLI๋ก ์ ์ฉํฉ๋๋ค.
supabase --version
$env:SUPABASE_ACCESS_TOKEN="..."
$env:SUPABASE_DB_PASSWORD="..."
supabase link --project-ref olzxextphxpniwiiwwda --password $env:SUPABASE_DB_PASSWORD
supabase db push --linked --dry-run
supabase db push --linked
DATABASE_URL์ด ์์ผ๋ฉด link ์์ด๋ ์ ์ฉํ ์ ์์ต๋๋ค.
supabase db push --db-url "$env:DATABASE_URL" --dry-run
supabase db push --db-url "$env:DATABASE_URL"
Production ์ ์ฉ ๋ค schema health๋ฅผ ํ์ธํฉ๋๋ค.
Invoke-RestMethod -Method Post -Uri "https://boxtier.kr/api/system/schema-health" -Headers @{ Authorization = "Bearer $env:CRON_SECRET" }
๋ฐฐํฌ ์ ๊ฒ์ฆ์ ํ ๋ช ๋ น์ผ๋ก ์คํํฉ๋๋ค.
npm run verify:release -- --confirm-production=olzxextphxpniwiiwwda
verify:release๋ production build ํ ์๊ฒฉ Supabase/Auth ๊ธฐ๋ฐ ์ ์ฒด backend simulation๊ณผ schema health๋ฅผ ์คํํฉ๋๋ค. production ref์ ์ ํํ ๊ฐ์ --confirm-production=<project-ref> CLI flag๊ฐ ์์ผ๋ฉด API/Auth ํธ์ถ ์ ์ ์ค๋จํฉ๋๋ค. SUPABASE_SERVICE_ROLE_KEY, ํ
์คํธ Auth ํ๊ฒฝ๋ณ์, CRON_SECRET์ด ํ์ํฉ๋๋ค. ์ข
๋ฃ ์ฝ๋๊ฐ 0์ด ์๋๋ฉด ๋ฐฐํฌํ์ง ์์ต๋๋ค.
simulation์ ์คํ ์ ์ environment, ์ง์ Supabase project ref, ์๊ฒฉ API host/ref๋ฅผ stderr์ ํ์ํฉ๋๋ค. process๋น ์ ์ฒด flow ๋ฐ๋ณต ์ํ์ 1ํ์ด๊ณ ์๋ ์ฌ์๋๋ cleanup ์คํจ ์ ์ต๋ 1ํ์
๋๋ค. ๋ณ๋ process๋ฅผ ๋ค์ ์คํํ๋ ์ธ๋ถ runner๋ ํธ์ถ ํ์๋ฅผ 1ํ๋ก ์ ํํด์ผ ํฉ๋๋ค. --safety-check-only๋ target guard๋ง ๊ฒ์ฆํ๊ณ DB/API๋ฅผ ํธ์ถํ์ง ์์ต๋๋ค.
ํ
์คํธ ์ ์ฉ Supabase๋ test URL, publishable key, service-role key๋ฅผ ํจ๊ป ์ค์ ํฉ๋๋ค. ์๊ฒฉ test API๋ฅผ ์ฐ๋ฉด ์ค์ ๋ฐฐํฌ ๋์๊ณผ ๊ฐ์ ref๋ฅผ --remote-project-ref=<test-ref>๋ก ์ถ๊ฐํฉ๋๋ค. ์ง์ ref์ ์๊ฒฉ ref๊ฐ ๋ค๋ฅด๋ฉด ์คํํ์ง ์์ต๋๋ค.
์๊ฒฉ DB์๋ supabase db reset --linked, DROP TABLE, TRUNCATE, ๋๋ DELETE๋ฅผ ์ฐ์ง ์์ต๋๋ค.
ํ๊ฒฝ๋ณ์
| ์ด๋ฆ | ์์น | ์ฉ๋ |
|---|---|---|
VITE_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_URL |
๋ธ๋ผ์ฐ์ /์๋ฒ | Supabase project URL |
VITE_SUPABASE_PUBLISHABLE_KEY / NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY / VITE_SUPABASE_ANON_KEY |
๋ธ๋ผ์ฐ์ | Supabase anon/publishable key |
SUPABASE_SERVICE_ROLE_KEY |
์๋ฒ/์คํฌ๋ฆฝํธ ์ ์ฉ | server action, seed, simulation |
VITE_ENABLE_SERVER_ACTIONS |
๋ธ๋ผ์ฐ์ | server action ํ์ฑํ |
VITE_DEMO_LOGIN |
๋ธ๋ผ์ฐ์ | localhost ํ ์คํธ ๋ก๊ทธ์ธ UI ํ์ฉ |
RANKBALL_SEED_REAL_TEST_AUTH / RANKBALL_SEED_AUTH_ONLY |
์คํฌ๋ฆฝํธ | ํ ์คํธ ๊ณ์ ์ Supabase Auth user๋ก ๋ง๋ค๊ณ ๊ธฐ์กด profile์ ์ฐ๊ฒฐ |
RANKBALL_TEST_PASSWORD / VITE_TEST_AUTH_PASSWORD |
์คํฌ๋ฆฝํธ/๋ธ๋ผ์ฐ์ | ํ ์คํธ ๊ณ์ password Auth์ฉ ๋น๋ฐ๋ฒํธ |
RANKBALL_TEST_AUTH_EMAIL_DOMAIN / VITE_TEST_AUTH_EMAIL_DOMAIN |
์คํฌ๋ฆฝํธ/๋ธ๋ผ์ฐ์ | ํ
์คํธ ๊ณ์ email domain. ๊ธฐ๋ณธ๊ฐ rankball.test |
VITE_ASSET_BASE_URL / VITE_PUBLIC_ASSET_BASE_URL |
๋ธ๋ผ์ฐ์ | ์๊ฒฉ asset base URL |
VITE_NAVER_MAP_CLIENT_ID / VITE_NAVER_MAP_NCP_KEY_ID |
๋ธ๋ผ์ฐ์ /์๋ฒ fallback | Naver map/geocode client id |
NAVER_MAP_CLIENT_SECRET / NAVER_MAP_NCP_KEY / NAVER_MAP_NCP_CLIENT_SECRET |
์๋ฒ ์ ์ฉ | Naver geocode fallback secret |
DISCORD_CLIENT_ID / DISCORD_CLIENT_SECRET / DISCORD_REDIRECT_URI |
์๋ฒ ์ ์ฉ | Discord OAuth |
DISCORD_BOT_TOKEN / DISCORD_GUILD_ID / DISCORD_GUILD_IDS |
์๋ฒ ์ ์ฉ | Discord DM worker |
DISCORD_PUBLIC_KEY |
์๋ฒ ์ ์ฉ | Discord interaction signature ๊ฒ์ฆ |
DISCORD_CHAT_BRIDGE_SECRET / DISCORD_CHAT_BRIDGE_URL |
bridge worker | Discord ๋ฐฉ ์ฑํ ์ ์น API๋ก ์ ๋ฌ |
DISCORD_CHAT_BRIDGE_REQUEST_TIMEOUT_MS / DISCORD_CHAT_BRIDGE_MAX_DELIVERY_ATTEMPTS |
bridge worker | ์ ๋ฌ timeout๊ณผ ์ฌ์๋ ํ์. ๊ธฐ๋ณธ 10000, 4 |
CRON_SECRET |
์๋ฒ/์คํฌ๋ฆฝํธ ์ ์ฉ | worker, maintenance, schema-health |
SUPABASE_ACCESS_TOKEN |
CLI ์ ์ฉ | Supabase Management API ์ธ์ฆ |
SUPABASE_DB_PASSWORD |
CLI ์ ์ฉ | supabase link, supabase db push --linked ์๊ฒฉ DB ๋น๋ฐ๋ฒํธ |
SUPABASE_PROJECT_ID |
CLI/CI ์ ์ฉ | Supabase project ref. ํ์ฌ production ref: olzxextphxpniwiiwwda |
DATABASE_URL |
CLI/์๋ฒ ์ ์ฉ | supabase db push --db-url ๋๋ ์ง์ Postgres ์ ์ |
RANKBALL_SIM_BASE_URL / RANKBALL_SIM_SECRET / RANKBALL_SIM_TIMEOUT_MS / RANKBALL_SIM_CLEANUP_TIMEOUT_MS |
์คํฌ๋ฆฝํธ | backend simulation |
RANKBALL_SIM_REMOTE_PROJECT_REF |
์คํฌ๋ฆฝํธ | ์๊ฒฉ test API๊ฐ ์ฌ์ฉํ๋ Supabase project ref. --remote-project-ref๊ฐ ์ฐ์ |
RANKBALL_SIM_REPEAT / RANKBALL_SIM_MAX_RETRIES |
์คํฌ๋ฆฝํธ | ์ ์ฒด flow ๋ฐ๋ณต ์ํ 1, cleanup ์ฌ์๋ ์ํ 1 |
Discord ๋ฐฉ ์ฑํ bridge
์์ ์คํ ํ๊ฒฝ์์ ์๋ ๋ช ๋ น์ ์คํํฉ๋๋ค. Gateway worker๋ heartbeat ACK ๋๋ฝ ์ ์ฌ์ฐ๊ฒฐํ๊ณ , ๊ฐ๋ฅํ ์ธ์ ์ resumeํ๋ฉฐ, ์น API์ timeoutยท429ยท5xx๋ฅผ ์ ํ ํ์๋งํผ ์ฌ์๋ํฉ๋๋ค.
npm run discord:room-chat-bridge
์ด์์์๋ DISCORD_CHAT_BRIDGE_SECRET์ ๋ณ๋๋ก ์ค์ ํฉ๋๋ค. CRON_SECRET fallback์ ๊ธฐ์กด ๋ฐฐํฌ ํธํ์ฉ์
๋๋ค.
Vercel
Framework preset์ Vite, build command๋ npm run build, output directory๋ dist์
๋๋ค.
Install
Add BoxTier Basketball Receipt to your client. Pick the one you use.
claude mcp add --transport http boxtier-basketball-receipt https://boxtier.kr/mcpcodex mcp add boxtier-basketball-receipt --url https://boxtier.kr/mcp{
"mcpServers": {
"boxtier-basketball-receipt": {
"url": "https://boxtier.kr/mcp"
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"servers": {
"boxtier-basketball-receipt": {
"type": "http",
"url": "https://boxtier.kr/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
{
"mcpServers": {
"boxtier-basketball-receipt": {
"url": "https://boxtier.kr/mcp"
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"boxtier-basketball-receipt": {
"serverUrl": "https://boxtier.kr/mcp"
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
Score
39 / 100
Incomplete
- Documentation25/25
- Maintenance19/25
- Trust6/20
- Capability0/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 9 days ago
- Has a release history
- Repository is not archived
- No licence detected
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 6 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint โ no local install
Version history
| Versions | Published |
|---|---|
| 1.0.0Latest | Aug 22, 2026 |