Skip to content

rmqg/playlist-challenge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

推歌挑战图标

推歌挑战

把“最近循环的一首歌”变成一场能和朋友一起玩的挑战。

现在开始推歌 · 看看项目故事 · 告诉我们想玩的功能

License 玩法 适合 Status

不是歌单,是一场推歌接力

推歌挑战适合朋友、群聊和社群。发起者出几道关于音乐的题,大家各自用一首或多首歌回答;再去听彼此的选择、点赞、留言,或用一首“印象曲”回应对方。

它不是固定的“三十日问卷”。你可以从空白题库开始,载入 30 题示例,自己写题,或者把已有问卷的图片变成一场新挑战。

三步开始

  1. 发起挑战:写下“最想推荐的一首”“一听就想起夏天的歌”这类题目,决定全部开放还是每天解锁一题。
  2. 认真推歌:搜索歌名或粘贴哔哩哔哩、网易云链接;一题可以多选,想说的话也可以一起留下。
  3. 交换感受:翻看大家的答案,去听没听过的歌,用点赞、评论和印象曲继续这段对话。

你可以怎么玩

挑战与题库 找歌与作答 分享与互动
题目数量不限 一题可选择多首歌 点赞、评论与站内通知
全部开放或逐日开放 哔哩哔哩与网易云链接 印象曲关键词互动
统一在北京时间 00:00 解锁 B 站前 50 项智能筛选 带题目、二维码和 Token 的海报
公开挑战或 6 位邀请 Token 本家、翻唱等结构化标签 响应式网页与 PWA

智能搜索

输入歌名后,智能搜索会从真实的 B 站候选中尽量找出原作,并标记翻唱、官方重制等不同版本;遇到本家不在候选里的小众曲,也会明确提示,而不是假装找到了答案。

图片题库

如果你已经收藏了一张音乐问卷,建房页可以识别 JPEG、PNG 或 WebP 图片里的题目。确认、编辑后就能直接开玩;原图不会保存在本站。

今天还想推什么

首页只列出当前已经开放、但你还没回答的挑战,并显示“已答 / 已开放”进度。逐日挑战当天答完后会暂时隐藏,下一题解锁时再出现。

给开发者与部署者

想把它部署到自己的社群,或想参与开发?下面保留了完整的技术、运行与贡献入口;普通玩家不需要配置任何东西,直接打开 game.rmqg.org 就可以开始。

技术结构

flowchart LR
  Browser[Next.js / React] --> Actions[Server Actions 与 API]
  Actions --> DB[(PostgreSQL 17)]
  Actions --> Bilibili[Bilibili Adapter]
  Actions --> Netease[NetEase Adapter]
  Bilibili --> DeepSeek[DeepSeek 筛选]
  Actions --> Vision[OpenRouter 视觉模型]
Loading
  • Next.js 16 App Router、React 19、TypeScript
  • Better Auth 用户名密码认证
  • Drizzle ORM 与 PostgreSQL
  • Lucide 图标、原生响应式 CSS
  • Docker Compose、健康检查、定时备份与平台登录态监控

平台 Cookie、模型密钥和 Bark 配置只应存放在服务器 secret 中,不得提交到仓库或暴露给前端。

本地运行

需要 Node.js 24、pnpm 11 和 PostgreSQL 17。

corepack enable
pnpm install

docker run --name playlist-postgres \
  -e POSTGRES_DB=playlist \
  -e POSTGRES_USER=playlist \
  -e POSTGRES_PASSWORD=playlist \
  -p 5432:5432 -d postgres:17-alpine

cp .env.example .env.local

.env.local 的数据库地址改为:

DATABASE_URL=postgres://playlist:playlist@localhost:5432/playlist
BETTER_AUTH_URL=http://localhost:3000
TRUSTED_ORIGINS=http://localhost:3000

然后执行:

DATABASE_URL=postgres://playlist:playlist@localhost:5432/playlist pnpm db:migrate
pnpm dev

未配置模型密钥时,账号、挑战、互动和平台链接解析仍可使用;智能歌名搜索需要 DEEPSEEK_API_KEY,图片题库需要 OPENROUTER_API_KEY。Turnstile 两项配置均为空时,本地注册不会显示验证码。

质量检查

pnpm typecheck
pnpm lint
pnpm test
pnpm build

浏览器回归测试需要先启动站点:

PLAYWRIGHT_BASE_URL=http://127.0.0.1:3000 pnpm test:e2e

部署

生产部署使用多阶段 Docker 镜像。首次启动时 PostgreSQL 会执行 drizzle/ 中的初始化迁移;已有数据库应先运行 scripts/backup.sh,再按顺序应用新增迁移。反向代理需要为 /api/questions/from-image 设置约 9 MB 的请求体硬上限。

图片题库当前通过 OpenRouter 调用视觉模型。该选型针对本项目的境外服务器:访问硅基流动服务的效果不佳,因此未将其作为生产 provider。

若在中国大陆服务器部署并希望评估硅基流动,可参考可选的硅基流动 SDK 配置。这份配置不改变本项目当前的 OpenRouter 默认 provider。

部署变量见 .env.example。平台 Cookie 与 Bark 告警变量另见 platform-monitor.env.example,实际文件应放在受限的 secrets/platform-monitor.env。生产 Cookie、模型密钥、数据库凭据和告警配置不得写入镜像、日志或仓库。

发布 Docker 镜像前,应先从本仓库的固定 Git tag 构建;运行镜像内的 /app/licenses/ 包含本项目许可证、版权说明与第三方通知。

一起完善它

欢迎提出新的题目灵感、玩法建议、无障碍改进或代码贡献。请先阅读 贡献指南安全政策,再通过 Issue 或 Pull Request 参与。

开源许可

原创项目代码以 GPL-3.0-only 发布,版权范围见 COPYRIGHT。第三方组件的归属、许可证与源码获取方式见 THIRD_PARTY_NOTICES.md;Noto Sans CJK 字体的完整 SIL Open Font License 位于 assets/fonts/OFL.txt

About

和朋友一起出题、推歌、交换音乐感受的开源挑战游戏。

Topics

Resources

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages