尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Citizen-reported status board for Busan's shark "Bukangi" (bukangi.com). React on Cloudflare Workers, Express + SQLite on a Mac mini, local open-model photo screening (Jev-style).
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Is Bukangi Here Now? (부캉이 지금 있나, bukangi.com) A citizen-reported status board for "Bukangi," the shark that showed up at Bukhang Waterfront Park in Busan's North Port in September 2026. When someone at the park uploads a photo of the shark or taps "I see it / I don't," the last-seen time updates right away. • Service: https://bukangi.com (launched 2026-09-22, developed with Claude Code) • Write-up, including why it is built this way: English · Korean Home · Report · Hall of Fame · Card rarity tiers (actual screens, 2026-09-30)檢視完整 README ↗
English | 한국어
A citizen-reported status board for "Bukangi," the shark that showed up at Bukhang Waterfront Park in Busan's North Port in September 2026. When someone at the park uploads a photo of the shark or taps "I see it / I don't," the last-seen time updates right away.
User ──┬─ bukangi.com ──────▶ Cloudflare Workers static assets (React app)
│ └ worker.js: forwards only /c/<card> previews to the API
│
└─ api.bukangi.com ──▶ Cloudflare Tunnel (only allowed paths pass; everything else 404s)
│
▼ a single Mac mini (no external ports opened; listens on 127.0.0.1 only)
Express server :8787 ── SQLite (WAL) + photo folder
├─ AI screening engine :8788 (jev-visual + Qwen3.5-4B-4bit, MLX, local only)
└─ Discord webhook (decision alerts + signed approve/reject/undo links)
docs/operations.md.docs/screening.md, eval/README.mdops/cloudflared-config.example.yml).timingSafeEqual, and the server will not start without a token. Uploads are checked by their leading bytes, and photo IDs are unguessable random values.docs/data.md). Google Analytics loads only when VITE_GA_ID is set. Report photos, the production DB, and secrets are not in this repository.src/ React + TypeScript UI (Vite)
server/ Express API, SQLite, AI screening integration, Discord alerts, card images
eval/ AI photo screening evaluation scripts and results (report IDs anonymized)
ops/ Mac mini ops scripts, launchd config, example tunnel config, jev engine installer
test/ Load test and browser flow check (Playwright)
public/ Static assets
worker.js Cloudflare Worker (forwards only card preview paths to the API)
docs/ Deployment, operations, AI screening, data, third-party notices (English and Korean)
Requirements: Node.js (v25 in the development environment) and npm. To also run the AI screening engine, you need an Apple Silicon Mac (MLX) and Python 3.13.
npm install
# 1) UI only
npm run dev # http://localhost:5173
# 2) With the API server
export ADMIN_TOKEN=$(openssl rand -hex 24) # admin token (required)
export BUKANG_DATA=~/bukang-dev # folder where the DB and photos are stored
export SITE_URL=http://localhost:5173 # UI origin that calls the report/admin APIs
export SCREEN_ENGINE=off # no screening engine (a human reviews on the admin page)
npm run seed # sample data (optional)
npm run server # http://127.0.0.1:8787 , admin page at #/admin
| Name | Default | Description |
|---|---|---|
ADMIN_TOKEN | (required) | Admin API token. 32+ random characters recommended |
BUKANG_DATA | ~/bukang | Location of the SQLite DB and photo folder |
PORT / HOST | 8787 / 127.0.0.1 | Server address. Loopback only, in production too |
SITE_URL, ALLOWED_ORIGINS | UI origins allowed to call the report/admin APIs | |
PUBLIC_URL | The API's external URL. If set, photos are returned as absolute URLs | |
SERVE_STATIC | 1 | Whether the server serves dist/ and card images itself |
SCREEN_ENGINE | claude | Photo screening engine: claude / api / jev / off |
JEV_URL, JEV_THRESHOLD | http://127.0.0.1:8788, 0.7 | jev engine URL and auto-approve threshold (auto-reject if ≤ 1 − threshold) |
ANTHROPIC_API_KEY | Required only when SCREEN_ENGINE=api | |
DISCORD_WEBHOOK | If set, sends decision alerts and signed links | |
PARK_RADIUS | 700 | Park radius (m) within which on-site buttons are accepted |
VITE_GA_ID | (none) | Frontend build value. Google Analytics measurement ID. Leave empty to disable GA |
./ops/jev/setup.sh # installs jev-visual (pinned commit) and the model, registers with launchd, 127.0.0.1:8788
export SCREEN_ENGINE=jev
npm run server
Domain, the Mac mini (launchd), the Cloudflare Tunnel, and the Workers frontend: docs/deploy.md. Security checklist and load tests: docs/operations.md.
MIT. See LICENSE. Third-party code: docs/third-party.md. jev-visual (MIT) and the Qwen3.5 models (Apache-2.0) are downloaded at install time and are not included in this repository.