What's Changed
- Implement user leveling and rewards by @nagisa77 in #257
- Add password recovery by @nagisa77 in #258
- Add level display on profile page by @nagisa77 in #259
- Prevent XP farming via deletion by @nagisa77 in #260
- Add experience info tooltip by @nagisa77 in #261
- Add activity module with milk tea event by @nagisa77 in #262
- Add milk tea event detail page by @nagisa77 in #263
- Refine milk tea redeem flow by @nagisa77 in #264
- Add milk tea activity popup by @nagisa77 in #265
- Add milk-tea activity popup for new users by @nagisa77 in #266
- Fix menu unread indicator by @nagisa77 in #267
- Implement dynamic metadata for post pages by @nagisa77 in #268
- Add global popups component by @nagisa77 in #269
- Implement comment and post rate limits by @nagisa77 in #270
- Fix PostService test import by @nagisa77 in #271
- Add comment sorting by date and interactions by @nagisa77 in #272
- Add email notifications for replies and reactions by @nagisa77 in #274
- Improve push notifications by @nagisa77 in #275
- Add web push notification support by @nagisa77 in #273
- Fix NotificationService tests by @nagisa77 in #276
- Enable asynchronous notification sending by @nagisa77 in #277
- Add Teleport for mobile dropdown menu by @nagisa77 in #278
- Switch to DiceBear default avatars by @nagisa77 in #279
- Fix duplicate test mocks in NotificationServiceTest by @nagisa77 in #280
- Count real milk tea redemptions by @nagisa77 in #281
- Fix alt attributes for SEO by @nagisa77 in #282
- Add robots.txt file by @nagisa77 in #283
- Add sitemap.xml endpoint by @nagisa77 in #284
- Fix sitemap access without auth by @nagisa77 in #285
- Fix sitemap lastmod format by @nagisa77 in #286
- Adjust default topic view to latest reply by @nagisa77 in #287
- Add categories/tags to search by @nagisa77 in #288
- Refine USER_ACTIVITY notifications by @nagisa77 in #289
- Fix SearchServiceTest constructor by @nagisa77 in #290
- Add counts for categories in menu by @nagisa77 in #291
- Add user mention hyperlink by @nagisa77 in #293
- Add mention notification feature by @nagisa77 in #292
- Fix vditor upload insertion by @nagisa77 in #295
- Fix paste upload in custom Vditor handler by @nagisa77 in #296
- Fix paste image upload in Vditor by @nagisa77 in #297
- Fix image paste event by @nagisa77 in #298
- Enable presigned URL uploads by @nagisa77 in #294
- Implement menu caching by @nagisa77 in #299
- Implement deduplication for post view notifications by @nagisa77 in #300
- Fix duplicate post view notifications by @nagisa77 in #301
- Expand first-level comments by default by @nagisa77 in #302
- Fix profile like counts by @nagisa77 in #303
- Add reactions to comment listing by @nagisa77 in #304
- fix comment replies expansion by @nagisa77 in #305
- Adjust message for mark-all-read by @nagisa77 in #306
- Fix post scroller sync and top time by @nagisa77 in #307
- feat: count nested replies in post lists and comments by @nagisa77 in #308
- feat: add optimistic reaction update by @nagisa77 in #309
- feature: 优化目录结构 by @WilliamColton in #310
- feat: add new reaction types by @nagisa77 in #319
- chore: clear stale vditor caches by @nagisa77 in #320
- Add popup-based Google login option by @nagisa77 in #321
- 修复收到的点赞计数错误问题 by @WilliamColton in #329
- Open Google login in new window by @nagisa77 in #330
- refactor: reuse callback page component by @nagisa77 in #331
- chore: add debug logging for comments by @nagisa77 in #337
- feat: add hourly rolling logs by @nagisa77 in #338
- feat: add avatar cropping by @nagisa77 in #339
- chore: add hourly log rotation by @nagisa77 in #340
- fix: guard against null exception messages by @nagisa77 in #341
- Handle null exception messages in global handler by @nagisa77 in #342
- 添加显示最后评论时间的功能 by @WilliamColton in #351
- 修复申请原因可能为空的bug by @WilliamColton in #356
- refactor: extract post dtos by @nagisa77 in #357
- test: include mapper deps in PostControllerTest by @nagisa77 in #358
- test: mock NotificationMapper in NotificationControllerTest by @nagisa77 in #359
- test: provide jwt secrets for tests by @nagisa77 in #360
- Ensure ReactionMapper bean in controller tests by @nagisa77 in #367
- Send email and push notification every five reactions by @nagisa77 in #368
- test: add missing JWT secrets for tests by @nagisa77 in #361
- Add missing mocks for AuthControllerTest by @nagisa77 in #362
- Fix notification handling and email content by @nagisa77 in #363
- test: mock mapper dependencies in SearchControllerTest by @nagisa77 in #364
- test: mock PostMapper in CategoryControllerTest by @nagisa77 in #369
- test: mock CommentMapper in controller tests by @nagisa77 in #365
- Fix TagControllerTest dependency setup by @nagisa77 in #366
- Add website URL property for tests by @nagisa77 in #370
- Add default website URL for tests by @nagisa77 in #371
- test: mock user controller dependencies by @nagisa77 in #372
- test: fix auth controller tests by @nagisa77 in #374
- test: mock user mapper for user endpoints by @nagisa77 in #376
- Handle missing push notification keys by @nagisa77 in #377
- Preserve home page state when navigating back by @nagisa77 in #381
- fix: support iOS safe area for header by @nagisa77 in #387
- Fix homepage reply count display by @nagisa77 in #388
- fix: handle iOS Safari keyboard scroll offset by @nagisa77 in #391
- feat: unify scroll-based loading for outer scroll by @nagisa77 in #392
- Feature/site fix by @nagisa77 in #393
- fix: sticky scroller and hash comment navigation by @nagisa77 in #394
- fix: mark admin register requests read once processed by @nagisa77 in #404
- fix: add missing highlight.js by @WoJiaoFuXiaoYun in #405
- fix: npm ci "highlight.js" build fail by @WoJiaoFuXiaoYun in #406
- feat: vditor add loading by @WoJiaoFuXiaoYun in #410
- fix: offset vditor toolbar when pinned by @nagisa77 in #408
- feat: improve notification read UX by @nagisa77 in #411
- refactor: centralize reaction emoji map by @nagisa77 in #412
- fix: preserve comment text on failure by @nagisa77 in #415
- feat: show compact vditor toolbar on mobile by @nagisa77 in #416
- fix: Click outside the drop-down box to not hide by @WoJiaoFuXiaoYun in #414
- feat: add tieba emoji support by @nagisa77 in #413
- 增加积分系统 by @WilliamColton in #423
- feat: migrate legacy Vue pages to Nuxt by @nagisa77 in #427
- fix: stable editor id on SSR by @nagisa77 in #428
- feat: add initial Nuxt frontend with SSR by @nagisa77 in #426
- Enable SSR initial render for home and post pages by @nagisa77 in #430
- Fix post edit navigation in Nuxt frontend by @nagisa77 in #433
- fix: initialize router before async operations in MenuComponent by @nagisa77 in #435
- Feature: nuxt optimization by @nagisa77 in #432
- feat(frontend_nuxt): add global loading progress bar by @nagisa77 in #436
- fix: persist theme mode across refresh by @nagisa77 in #437
- fix: handle mobile detection during SSR by @nagisa77 in #438
- fix: support user profile trailing slash by @nagisa77 in #439
- fix: apply theme before render to avoid flash by @nagisa77 in #440
- fix: apply global Vditor styles in SSR by @nagisa77 in #441
- feat: enable page keepalive by @nagisa77 in #442
- feat: reuse server data on home page by @nagisa77 in #443
- Fix scroll reset on home page after hydration by @nagisa77 in #445
- fix: correct SSR mobile detection by @nagisa77 in #446
- feat: wire achievements to backend by @nagisa77 in #448
- feat: optimize achievements tab loading by @nagisa77 in #449
- feat: add medal popup by @nagisa77 in #450
- feat: enable user medal selection and display by @nagisa77 in #451
- feat: auto select medals and make badges interactive by @nagisa77 in #452
- feat: auto select medals and improve navigation by @nagisa77 in #454
- feat: auto select medal for user in mappers by @nagisa77 in #455
- feat: add contributor achievement by @nagisa77 in #456
- feat: implement medal API by @nagisa77 in #447
- test: update MedalService tests for contributor medal by @nagisa77 in #457
- Reset auth on token expiry by @nagisa77 in #459
- fix comment reply editor visibility by @nagisa77 in #461
- Feature/nuxt opt by @nagisa77 in #460
- fix: correct SSR mobile detection by @nagisa77 in #465
- fix: ensure unique avatar keys on home page by @nagisa77 in #468
- Merge pull request #468 from nagisa77/codex/fix-avatar-misalignment-on-refresh by @nagisa77 in #469
- feat: add lottery post options by @nagisa77 in #471
- Revert "feat: add lottery post options" by @nagisa77 in #472
- feat: add lottery post fields by @nagisa77 in #473
- Revert "feat: add lottery post fields" by @nagisa77 in #474
- feat: add lottery post type options by @nagisa77 in #475
- feat: add lottery section logic by @nagisa77 in #476
- feat: add lottery post type with participation API by @nagisa77 in #470
- Cancel scheduled lottery finalizations when deleting posts by @nagisa77 in #477
- test: update PostService tests for new signature by @nagisa77 in #478
- Reschedule lottery finalization on startup by @nagisa77 in #479
- Fix lottery finalization scheduling by @nagisa77 in #480
- refactor: remove circular dependency in PostService by @nagisa77 in #481
- Revert "refactor: remove circular dependency in PostService" by @nagisa77 in #482
- Avoid PostService self-dependency at startup by @nagisa77 in #483
- feat: add lottery icon to post list by @nagisa77 in #495
- feat: enhance SEO titles and descriptions by @nagisa77 in #497
- feat: add pioneer medal for first 1000 users by @nagisa77 in #498
- Use DTO for activity list by @nagisa77 in #504
- fix: 前端水合前ui优化. 可以考虑评论➕框不出 by @nagisa77 in #503
- feat: close mobile menu on outside tap by @nagisa77 in #505
- feat: add daily stats reports by @nagisa77 in #506
- fix: stat problems by @nagisa77 in #507
- feat: support notification type preferences by @nagisa77 in #511
- fix: 统一使用绝对路径别名“~”并加入jsconfig方便编辑器跳转 by @AnNingUI in #513
- feat: add notification settings popup by @nagisa77 in #518
- Disable post-viewed and user-activity notifications by default by @nagisa77 in #519
- feat: message control by @nagisa77 in #512
- fix: 清理掉了大部分warn,优化了在移动端侧边栏的逻辑问题 by @AnNingUI in #520
- feat: add lottery win notification by @nagisa77 in #528
- feat: move API and OAuth IDs to runtime config by @nagisa77 in #529
- feat: notify lottery author by @nagisa77 in #531
- feat: support comment pinning by @nagisa77 in #532
- fix:外链新窗口跳转 #509 by @CH-122 in #533
- fix: 前后端代码域名hardcode调整(for预发环境做准备) by @nagisa77 in #530
- feat: refresh home when clicking header logo by @nagisa77 in #536
- fix: 首屏幕ssr优化 by @nagisa77 in #537
- fix: 首屏幕ssr优化 by @nagisa77 in #538
- fix: prevent homepage reload on logo click by @nagisa77 in #539
- fix: prevent header logo from triggering page reload by @nagisa77 in #540
- fix: 首屏ssr优化 by @nagisa77 in #541
- fix: 首屏ssr优化 by @nagisa77 in #542
- fix: use home path by @nagisa77 in #543
- Feature/first screen by @nagisa77 in #545
- optimize(backend): batch query for /api/categories && /api/tags by @netcaty in #546
- fix: fix reward db error by @nagisa77 in #550
- feat: add code block line number display by @immortal521 in #552
- fix: restore comment pin handling by @nagisa77 in #553
- 优化主页列表接口/api/posts/latest-reply by @netcaty in #555
- fix: 代码风格设置 by @nagisa77 in #557
- fix: 让代码展示背景的样式更加现代化,修复分类选择框仅有一个当前分类的问题 by @AnNingUI in #559
- fix: 移动端 header 点击搜索图标功能异常 by @CH-122 in #562
- feat: 忘记密码页面添加提示 & 修复缺少定义导致的报错 #535 by @CH-122 in #560
- 若干问题修复,见评论 by @nagisa77 in #563
- fix: revert vditor change by @nagisa77 in #565
- fix(about): fix link color issue on about page (#566) by @immortal521 in #568
- fix: correct theme toggle button position (#564) by @immortal521 in #569
- refactor: 在 header 组件中添加发帖功能,移动端添加发帖悬浮按钮,优化首页搜索标题样式 , by @CH-122 in #572
- fix: ui fix by @nagisa77 in #574
- fix: 仅仅在主页显示 by @nagisa77 in #575
- fix: 移动端才显示 by @nagisa77 in #576
- feat: Add Messages Update by @AnNingUI in #578
- feat: 更新 README “开发”章节 by @palmcivet in #579
- chore: split large vite chunks by @nagisa77 in #580
- feat: implement theme transition animations and dark mode improvements by @immortal521 in #581
- fix: 手机状态栏暗黑模式背景颜色显示不正确 by @CH-122 in #584
- fix: 添加对非startViewTransition支持的浏览器添加一个回退的主题切换动画 by @AnNingUI in #589
- fix: allow theme toggle without requiring user login by @immortal521 in #592
- fix: incorrect animation start position on mobile theme toggle by @immortal521 in #593
- feat: add transition effects for page and dropdown by @immortal521 in #594
- fix: 修复我的信息界面中的header无法粘性布局的bug以及解决了一些-webkit样式警告 by @AnNingUI in #595
- feat: persist home tab selection by @nagisa77 in #596
- feat: persist home tab selection by @nagisa77 in #597
- feat: add timeline filters on profile page by @nagisa77 in #598
- Add frosted glass effect toggle by @nagisa77 in #600
- feat: remember home tab selection by @nagisa77 in #601
- Feature/daily bugfix 0816 by @nagisa77 in #599
- feat: add point mall module by @nagisa77 in #603
- feat: add point rules and products to points mall by @nagisa77 in #604
- feat: add point mall redemption by @nagisa77 in #605
- feat: add point redeem notification type by @nagisa77 in #606
- Add invite points activity by @nagisa77 in #609
- feat: add invite token support by @nagisa77 in #612
- feat: add invite link generation and copy by @nagisa77 in #613
- 支持积分商城 & 邀请码 by @nagisa77 in #607
- fix: 优化邀请链接组件样式,增加文本换行支持;调整积分商城页面内边距 by @CH-122 in #617
- fix: router-link by @nagisa77 in #619
- Feature/fix vditor css by @nagisa77 in #620
- feat: provide RSS feed with admin exclusion by @nagisa77 in #626
- Handle nullable rssExcluded flag by @nagisa77 in #627
- style: 优化行内代码样式 by @WoJiaoFuXiaoYun in #631
- fix: 帖子描述与参与人员重叠 by @CH-122 in #634
- fix:删帖需要给发帖者提示 by @zpaeng in #637
- 修复文章详情页面返回后不更新数据 & 优化 /reaction-types 接口重复调用 by @CH-122 in #639
- feat: paginate notifications and add unread filter by @nagisa77 in #641
- feat: add paginated notifications and unread endpoint by @nagisa77 in #642
- feat: add paginated notification APIs and frontend by @nagisa77 in #643
- feat: paginate and load notifications per page by @nagisa77 in #644
- feat: add paginated notification endpoints by @nagisa77 in #645
- feat: add paginated notifications and unread endpoint by @nagisa77 in #646
- Fix notification pagination after filtering disabled types by @nagisa77 in #647
- 支持分页加载 by @nagisa77 in #638
- feat: allow closing posts by @nagisa77 in #649
- feat: allow closing posts by @nagisa77 in #650
- Feature/daily bugfix 0819 by @nagisa77 in #648
- fix:验证邮箱有歧义,修改为验证并注册 by @zpaeng in #658
- fix: 修复超长文本造成ui宽度撑开 by @WoJiaoFuXiaoYun in #661
- feat: notify authors when admin deletes post by @nagisa77 in #671
- Remove notification after marking read by @nagisa77 in #672
- daily bugfix by @nagisa77 in #670
- feat: add point history by @nagisa77 in #674
- refactor: add reusable switch component by @nagisa77 in #675
- Daily bugfix by @nagisa77 in #673
- Add point redemption history record by @nagisa77 in #678
- fix: 微信黑名单申诉 #676 by @nagisa77 in #677
- feat: enrich rss items with comments and source link by @nagisa77 in #679
- feat: comment by @nagisa77 in #680
- feat: add featured content rewards and badge by @nagisa77 in #681
- Fix PostService tests for PointService dependency by @nagisa77 in #682
- chore: 移除未使用的依赖 && 调整 husky 配置 by @palmcivet in #688
- feat: 优化部分样式和文案 by @palmcivet in #686
- feat:【站内信】 by @zpaeng in #687
- fix: 消息页面ui重构 by @nagisa77 in #689
- fix: 移动端 ui适配 by @nagisa77 in #692
- fix: 发送信息,携带头像 by @nagisa77 in #693
- fix: 修复nginx /ws拦截问题 by @nagisa77 in #697
- fix: api fix by @nagisa77 in #698
- feat: add person search dropdown by @nagisa77 in #700
- feat: add channel support by @nagisa77 in #702
- Add last message retrieval and display for channels by @nagisa77 in #703
- feat: show channel unread indicator by @nagisa77 in #704
- feat: show channel message indicator by @nagisa77 in #705
- feat: separate channel unread notifications by @nagisa77 in #706
- Handle multiple conversations between users by @nagisa77 in #707
- Fix findOrCreateConversation to only retrieve private conversations by @nagisa77 in #708
- daily bugfix by @nagisa77 in #699
- feat: add message feature popup by @nagisa77 in #709
- feat: limit BaseTimeline hover to private messages by @nagisa77 in #713
- feat: use Google emoji CDN by @nagisa77 in #715
- Feature/daily bugfix 0825 by @nagisa77 in #714
- feat: 编辑器支持引用站内帖子 by @WoJiaoFuXiaoYun in #717
- fix(frontend): 修复 Safari 浏览器下邀请链接复制问题 by @4twocc in #716
- feat: add floating message window by @nagisa77 in #718
- feat: support message replies and reactions by @nagisa77 in #719
- feat: add floating message window by @nagisa77 in #721
- feat: add floating message box window by @nagisa77 in #722
- Feature/daily bugfix 0825 b by @nagisa77 in #720
- fix: 修复小窗口点击站内链接,会从小窗直接跳,预期主窗口跳转 #723 by @WoJiaoFuXiaoYun in #726
- feat: add favorites tab to user profile by @nagisa77 in #729
- feat: integrate points with lottery participation by @nagisa77 in #730
- 0826 daily bugfix by @nagisa77 in #725
- feat: add Nuxt image component with LQIP placeholder by @nagisa77 in #737
- feat: add reusable multi-tabs component by @nagisa77 in #739
- feat: unify tab navigation with reusable swipeable component by @nagisa77 in #740
- feat: add reusable swipeable tabs component by @nagisa77 in #741
- daily bugfix by @nagisa77 in #734
- fix: svg 采用本地,避免加载不了 by @nagisa77 in #742
- fix: iOS修复blur问题 by @nagisa77 in #744
- fix: 修复贴吧表情显示问题 by @nagisa77 in #750
- feat: show 30-day point trend chart by @nagisa77 in #751
- feature: 积分趋势统计 by @nagisa77 in #752
- fix: 回复表情通知为空的问题 #735 by @nagisa77 in #755
- fix: 站内信 scroll问题 #749 by @nagisa77 in #756
- fix: 站内信 scroll问题 #749 by @nagisa77 in #757
- fix: gray out unearned medals by @nagisa77 in #758
- Feature/daily bugfix 0827 by @nagisa77 in #759
- fix: resolve repeated reaction issues by @nagisa77 in #760
- fix: 帖子可被刷积分,应新增取消赞消除积分😂 #685 by @nagisa77 in #761
- Adjust mobile post icon position and add close button to message box by @nagisa77 in #762
- fix: 新增相对时间 by @nagisa77 in #763
- fix: 简化time规则 by @nagisa77 in #764
- 解决文章和草稿长度不够的问题 by @sivdead in #773
- feat: add mermaid support to markdown rendering by @nagisa77 in #776
- fix: 新增ipx依赖,新增node环境说明 by @nagisa77 in #781
- 更新评论项组件,添加回复用户头像和样式优化 by @CH-122 in #779
- feat: MENU UI 优化 by @nagisa77 in #784
- fix: menu ui by @nagisa77 in #785
- fix: 首页 & 全局文字优化 by @nagisa77 in #789
- fix: UI部份美化 by @nagisa77 in #790
- feat: add poll post type by @nagisa77 in #791
- feat: add poll post support by @nagisa77 in #792
- feat: expose poll option participants by @nagisa77 in #793
- feat: return poll option participants by @nagisa77 in #794
- feat: render poll results with real data by @nagisa77 in #795
- Refactor poll module and add poll notifications by @nagisa77 in #796
- refactor: extract poll and lottery sections by @nagisa77 in #799
- refactor: extract poll and lottery components by @nagisa77 in #800
- feat: support multi-option polls by @nagisa77 in #801
- feat(poll): use BaseSwitch for multiple selection by @nagisa77 in #803
- Fix poll multiple property null handling by @nagisa77 in #804
- feat(model): 为评论和积分历史实体添加逻辑删除功能 by @sivdead in #802
- feat: add join button for single polls by @nagisa77 in #806
- feature for vote by @nagisa77 in #798
- test: fix PostServiceTest for new PostService deps by @nagisa77 in #807
- feat: add email notification settings by @nagisa77 in #808
- feat: shorten invite links by @nagisa77 in #809
- fix(frontend): scroll to bottom on channel entry by @nagisa77 in #810
- feat: show message when user has no posts by @nagisa77 in #811
- feat: add Telegram authentication by @nagisa77 in #812
- feat: unify third-party auth component by @nagisa77 in #813
- feat: unify third-party auth buttons with customizable styles by @nagisa77 in #814
- fix: 解决删除评论后积分历史和当前积分不一致的问题 by @sivdead in #815
- Fix CommentServiceTest compilation by mocking PointService by @nagisa77 in #818
- feat: 增加通知设置的权限控制,只有管理员可以显示特定通知类型 by @CH-122 in #820
- 修改部署教程 by @smallclover in #821
- 指定Node.js最低版本为20.0.0 by @sivdead in #819
- fix: scroll to bottom when entering channel by @nagisa77 in #822
- fix: markdown渲染的分割线有点深 #767 by @nagisa77 in #824
- feat: show featured marker only for RSS posts by @nagisa77 in #825
- Feature/good posts by @nagisa77 in #826
New Contributors
- @WilliamColton made their first contribution in #310
- @WoJiaoFuXiaoYun made their first contribution in #405
- @AnNingUI made their first contribution in #513
- @CH-122 made their first contribution in #533
- @netcaty made their first contribution in #546
- @immortal521 made their first contribution in #552
- @palmcivet made their first contribution in #579
- @zpaeng made their first contribution in #637
- @4twocc made their first contribution in #716
- @sivdead made their first contribution in #773
- @smallclover made their first contribution in #821
Full Changelog: v1.0...v2.0