|
|
8b99c2f091
|
feat: 跨设备同步 + Logo v3 + 导航合并 + 窄屏适配 (v0.3.4)
Build and Deploy / build-and-deploy (push) Successful in 4m44s
- useSyncMe: 登录后拉 /api/me 用 votedArtists 覆盖本地 store,登出清本地
- Providers: SyncMeBridge 接入 SessionProvider
- Logo v3 替换登录页/弹窗/Footer 的旧 <Logo> 组件
- Footer 删除 logo,简化为版权行
- Navigation 删除 mobile 第二行 NavLinks,合并到第一行
- NavLinks 统一布局,响应式 gap+字号(gap-5 sm:gap-8 / text-[13px] sm:text-sm)
- HeroVoteProgress 窄屏(< md)隐藏 12 格点,只留文字
- scripts/screenshot-narrow.mjs 验证脚本(可配宽高)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-18 14:56:42 +08:00 |
|
|
|
5c009f38cd
|
fix(vote): 投票后立即 refresh ranking,不等 30s 轮询
Build and Deploy / build-and-deploy (push) Successful in 4m48s
- useVoteAction 加 onVoteSuccess 回调,服务端 200 立即触发
- page.tsx + ranking/page.tsx 传 live.refresh
- 顺手把 fire-and-forget 改成 await + 失败回滚 + /api/me 跨设备对齐
- store 新增 rollbackVote + hydrateFromServer 两个 action
体感:本地 30s → 700ms,生产 30s → 150ms
bump to v0.3.3
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-18 14:25:40 +08:00 |
|
|
|
51009616a1
|
fix(home): Top12 出道位接 /api/ranking 显示真实票数
Build and Deploy / build-and-deploy (push) Successful in 6m29s
- 首页 Top12Bar 之前只读 zustand store(初始 0 票),未登录访客永远看到"Awaiting Votes"
- 现在和 /ranking 页一样用 useRanking 30s 轮询,merge 服务端票数到本地 store(取 max)
- 与本地乐观投票兼容,投票后立即可见
bump to v0.3.2
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-18 14:03:51 +08:00 |
|
|
|
80c37923d4
|
chore(release): v0.3.1 - 13 号虞浓氛围图 2 替换
Build and Deploy / build-and-deploy (push) Successful in 4m6s
- TOS 缓存版本 7 → 8 触发 CDN 刷新
- CHANGELOG 加 v0.3.1 条目
- package.json 0.3.0 → 0.3.1
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-18 11:00:35 +08:00 |
|
|
|
93c3abe620
|
chore(release): v0.3.0 + 建立 CHANGELOG + 追溯版本号
Build and Deploy / build-and-deploy (push) Successful in 2m56s
- 新增 CHANGELOG.md(SemVer 0.x 开发期规则 + 5 个里程碑)
- package.json version: 0.1.0 → 0.3.0
- 追溯打 tag:v0.1.0 / v0.2.0 / v0.2.1 / v0.2.2 / v0.3.0
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-15 20:21:12 +08:00 |
|
|
|
0a7c1ec130
|
feat(auth): wire Aliyun SMS provider for phone OTP login
Build and Deploy / build-and-deploy (push) Successful in 4m33s
接入流程:
- src/lib/sms.ts: 封装 sendOtpSms(phone, code), 走 dysmsapi.aliyuncs.com 全局端点
- /api/auth/send-otp:
* 生成 6 位验证码 → Redis 5min TTL
* 调 Aliyun SDK 发送; OK → 200, isv.* 错误 → 422, 其它 → 500
* SMS_NOT_CONFIGURED 时 dev 仍能 console.log 验证码联调
- auth.ts verifyOtp:
* dev 万能码 123456 保留
* 否则 redis.get(sms:otp:phone) 比对, 通过后 del 防重放
* Redis 未配置时 prod 拒绝, dev 接受任意 6 位
环境变量 (.env.local, 不入仓库):
- SMS_ACCESS_KEY / SMS_SECRET_KEY (RAM 子账号)
- SMS_SIGN_NAME (例: 广州气元科技)
- SMS_TEMPLATE_CODE (例: SMS_506210397)
依赖:
+ @alicloud/dysmsapi20170525
+ @alicloud/openapi-client
+ @alicloud/tea-util
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-13 14:56:47 +08:00 |
|
|
|
9fe9fa914f
|
fix(ux): center modals with overlay; live vote with toast; deterministic mock data; cascade layer fix
|
2026-05-12 14:09:31 +08:00 |
|
|
|
b7fbd5ac53
|
feat(auth): Auth.js v5 with phone OTP login, send-otp API, login page and user state in nav
|
2026-05-12 10:03:58 +08:00 |
|
|
|
175276a085
|
feat(api): add REST API routes (artists/ranking/me/vote/signin) + Redis rate limiting + Zod validation
|
2026-05-12 09:59:38 +08:00 |
|
|
|
91a0dd0f05
|
feat(db): Prisma 6 + MySQL schema with all models, seed script and env example
|
2026-05-12 09:51:17 +08:00 |
|
|
|
abce95aae8
|
feat(components): add Button, Countdown, ArtistCard, Top12Bar, VoteModal core components
|
2026-05-12 09:37:23 +08:00 |
|
|
|
8a83815f1c
|
chore: bootstrap Next.js 16 + Tailwind v4 + TypeScript baseline
|
2026-05-12 09:26:46 +08:00 |
|