尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Background music for businesses. Curated daytime and evening playlists, a weekly schedule that plays them automatically, and in-store announcements. Built with Next.js, Convex and Clerk.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Curated ambient music for hospitality venues. A web app that lets venue operators stream atmosphere-matched audio channels, build playlists, and schedule automatic atmosphere changes throughout the day.
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router) |
| Auth | Clerk |
| Database | Convex |
| Client state | Zustand |
| Styling | Tailwind CSS |
| Deployment | Vercel |
| Testing | Vitest + convex-test |
src/
app/
(auth)/ — sign-in, sign-up, onboarding routes
(main)/ — protected app routes (dashboard, settings, etc.)
home/ — public marketing page (/home)
components/
landing/ — marketing page sections
layout/ — sidebar, top bar, player bar
ui/ — shared UI primitives
store/ — Zustand player store
proxy.ts — Clerk auth middleware (not middleware.ts)
convex/ — database schema, queries, and mutations
schema.ts — table definitions
channels.ts — curated music stream CRUD
tracks.ts — individual track CRUD
playlists.ts — user playlist CRUD + track management
scheduleBlocks.ts — timed atmosphere scheduling
userProfiles.ts — user preferences and plan
Prerequisites: Node.js 22+, pnpm
pnpm install
Copy the environment template and fill in your keys (see Environment variables):
cp .env.local.example .env.local
Start the Convex dev server (push schema + functions):
CONVEX_AGENT_MODE=anonymous npx convex dev --once
Start the Next.js dev server:
pnpm dev # http://localhost:3000
Run
npx convex dev --onceagain after any change toconvex/files.
Required in .env.local:
CLERK_SECRET_KEY=
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/signin
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/signup
NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL=/dashboard
NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL=/dashboard
CONVEX_DEPLOYMENT=
NEXT_PUBLIC_CONVEX_URL=
NEXT_PUBLIC_CONVEX_SITE_URL=
npx convex dev --once (e.g. http://127.0.0.1:3210 locally, https://<deployment>.convex.cloud in production)Convex tables:
| Table | Description |
|---|---|
channels | Curated music streams with BPM, category, and audio URL |
tracks | Individual tracks with energy level, duration, and channel assignment |
playlists | User-created playlists (public or private) |
playlistTracks | Join table linking tracks to playlists with ordering |
scheduleBlocks | Timed blocks that automate channel switching throughout the day |
userProfiles | User preferences, plan tier, and onboarding state |
Seed the database with sample channels and tracks:
npx convex run channels:seed --prod
npx convex run tracks:seed --prod
pnpm test # utils + Zustand store (jsdom, 15 tests)
pnpm test:watch # same, watch mode
pnpm test:convex # Convex function tests (in-memory, 33 tests)
All 48 tests run fully offline — no real Convex deployment is touched.
pnpm build
Run this before opening a pull request.
GitHub Actions runs on every push and pull request to main:
tsc --noEmit then next build (only runs if tests pass)Deployment is handled by Vercel's own Git integration, not by GitHub Actions: pushes to main deploy to production and pull requests get a preview deployment, both reported back as the Vercel check.
Required GitHub secrets (used by the build job): NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY, CLERK_SECRET_KEY, NEXT_PUBLIC_CONVEX_URL.
src/proxy.ts (Next.js 16 convention in this project — do not rename to middleware.ts)/dashboard, /account, /explore, /schedule, /playlists, /library, /settings/signinmain: feat/my-featurefeat:, fix:, refactor:, chore: