尚未检测到更新。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: