6620be379b
feat(blog): PostArticle 全文阅读页(编辑/删除二次确认)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 16:53:03 +08:00
f1487f509e
feat(blog): PostEditor 写/改文章(含 Markdown 预览)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 16:52:36 +08:00
f89345b6fa
feat(blog): Markdown 渲染组件(react-markdown + 暖色编辑风)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 16:52:07 +08:00
d25c65ef81
feat(blog): 前端 posts API 封装 + 摘要/时长派生
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 16:49:44 +08:00
edb975d818
feat(blog): 接入 posts 接口(CRUD + CORS PUT)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 16:48:26 +08:00
9d113b72f8
feat(blog): PostStore 文件存储 + 单测(按用户隔离 CRUD)
...
Post 加 derive(PartialEq, Eq) 以支持测试里对 Result<Post,_> 的 assert_eq。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 16:46:40 +08:00
c2016a8ea5
fix(blog-plan): 修就地编辑后文章不刷新(articleNonce 强制重挂载)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 22:54:23 +08:00
d08a23cced
docs(blog): 写博客功能实现计划(7 个任务,TDD + 端到端验证)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 22:49:05 +08:00
677856851b
docs(blog): 写博客功能设计方案——按用户隔离 + Markdown + #post/<id> 路由
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 22:41:59 +08:00
7d2a1f0ea5
docs(auth): 同步去兜底——强制 DATABASE_URL + 补 wall_users 表
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 21:12:40 +08:00
e5b27a6281
refactor(auth): 去掉登录/入口门的内置兜底,强制走数据库
...
- db_pool_from_env 强制要求 DATABASE_URL,缺失即 panic 拒启
- UserStore/WallUserStore/DevGate 改为只持连接池的 struct,
删除全部 seed()/Memory/dev_gate.txt 文件兜底——源码不再留写死账号/hash
- 本地新增 MariaDB(InternetProject 库 + ccuser/dev_gate/wall_users 三表)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 21:09:18 +08:00
fdc2f8b94b
feat(ui): 随机实心鼠标 + 拖动隐藏 + 修复刷新闪博客
...
- CursorFollower: 空心环→随机实心几何形状(7选1)+随机颜色,每次刷新换
- 照片墙拖动照片(移动后)隐藏自定义鼠标,松手复现
- App: 加 resolving 闸,异步路由解析完成前不渲染目标页,
修复已登录刷新特殊文件夹时先闪 BlogPage 再跳回照片墙
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 21:09:18 +08:00
6335654904
feat: 上传压缩改按需(>1MB) + 特殊文件夹 6340 兜底用户
...
- PhotoWallPage: 仅当原文件 >1MB 才 Canvas 压缩,小图原样上传
- auth.rs: seed 兜底表新增 UserTest6340(本地无 DB 时用;线上走 wall_users 表)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 19:42:06 +08:00
f4b417bcaf
@
...
feat(upload): 前端上传前 Canvas 压缩图片(大图缩至1920 + JPEG q=0.78)
Co-Authored-By: Claude <noreply@anthropic.com>
@
2026-06-24 23:24:55 +08:00
26443a1df5
fix: 移除未使用的 itemCount state
2026-06-24 23:20:32 +08:00
3248146c46
@
...
feat(folder): 特殊文件夹装饰/排版存服务器 + 100条上限
- 后端:WallState 存储模型 + GET/PUT /api/web/folder/{name}/state
- 后端:上传时检查照片+装饰总数 ≤ 100(409 超限拒绝)
- 后端:列表接口返回 max_items 字段
- 前端:特殊文件夹从服务器加载/保存装饰与排版(共享视图)
- 前端:工具栏显示条数计数器,满额变红
- 前端:添加装饰 / 上传图片前客户端检查上限
Co-Authored-By: Claude <noreply@anthropic.com>
@
2026-06-24 23:07:08 +08:00
0e6c774ed6
@
...
feat(auth): 新增 wall_users 表,照片墙与开发者登录分离
登录先查 ccuser(开发者),再查 wall_users(照片墙用户)。
wall_users 初始用户:cc / UserTest。
Co-Authored-By: Claude <noreply@anthropic.com>
@
2026-06-24 22:42:06 +08:00
8d89cee451
@
...
feat(photo-wall): 修复4个问题 + 特殊文件夹(共享公共相册)
**照片墙修复:**
- 右键菜单 z-index 40→9999,不再被元素遮挡
- 图片放大后强制重建 DOM(img key 绑定 w/h)
- 右键菜单添加滑条调节旋转步长(1°-90°)和缩放步长(照片 px / 其他 scale)
- Delete 键可删除右键菜单选中的元素(便签也能删)
**特殊文件夹功能(按设计文档实现):**
- 后端:FolderRegistry 解析 special_folders.txt 注册表 + FolderStore 按文件夹存图
- 后端:5 个接口(存在性检查/列表/上传/获取/删除),白名单 + 管理员鉴权
- 前端:App.tsx 按 hash 路由到特殊文件夹,复用 PhotoWallPage
- 前端:文件夹模式无张数上限,localStorage 按文件夹隔离
- 前端:管理员配额警告条(超 1GiB 时显示)
- 前端:403 无权访问时退回起始页
Co-Authored-By: Claude <noreply@anthropic.com>
@
2026-06-24 22:19:29 +08:00
fbac6de977
docs(special-folders): requirements/design spec for shared access-controlled folders
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:52:30 +08:00
f65ef6fb83
Merge: 照片墙服务器存图(按用户≤10、私有、JWT 鉴权)
...
合并 feat/photo-wall-server-storage:后端 JWT + 按用户图片接口,前端接服务器图片 +
排版/装饰存本地。已部署线上并通过端到端冒烟。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:43:57 +08:00
624b5eb284
fix(photo-wall): preserve saved layouts during async photo load (merge, not replace)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:37:00 +08:00
f88686cd21
docs(photo-wall): server-side image storage + deploy notes
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:33:07 +08:00
d038372336
feat(photo-wall): larger adjust steps + rotation/scale presets in context menu
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:29:14 +08:00
dba517df4e
fix(photo-wall): clear stale photos + revoke object URLs before (re)loading
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:27:24 +08:00
a9905b4fa7
feat(photo-wall): load/upload/delete photos via server, split local layout
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:22:58 +08:00
9685336903
feat(client): photos API client + expose auth token
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:18:43 +08:00
07b0299438
fix(web): scope 16MB body limit to photo routes only
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:15:52 +08:00
e8f3f1674d
feat(web): per-user photo endpoints (list/upload/get/delete) behind JWT
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:12:14 +08:00
29cbf524e9
feat(routes): AuthUser extractor validating Bearer JWT
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:08:42 +08:00
9d93a33bae
fix(photos): serialize save to enforce quota under concurrency; avoid empty-dir leak
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:07:05 +08:00
3af4893a81
feat(photos): per-user image store with size/count/path-safety guards
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:03:04 +08:00
1186d80475
fix(auth): fail loudly on JWT encode error instead of returning empty token
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:00:21 +08:00
e1820d0ec8
feat(auth): issue/verify username-bearing HS256 JWT
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 20:57:37 +08:00
42639856b2
docs(photo-wall): server-storage design spec + implementation plan
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 20:55:03 +08:00
d240c128dc
feat(photo-wall): client-only photo wall behind #photo login entry
...
已部署到线上(frontend-only)。本提交把工作区里已上线但未提交的实现固化为分支基线。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 20:55:03 +08:00
5652ccc2f0
docs: 移除 GitHub origin 远程,文档改为仅 gitea 一个远程
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 20:17:04 +08:00
d2ff88bc4d
feat(start): 补齐竖屏背景图(portrait 全套 webp)并重新验证部署
...
- portrait/ 加入 No.1~5.webp + Night.webp(由 Pictures/portrait 源图
用 sharp 转 webp,quality 82,体积 ~0.1~0.6MB)
- 前端 build 后两套图(landscape/portrait)均打包,已部署到
8.130.143.54:8548 并验证(title=CCStart,health 200)
- 更新部署文档:重新验证日期、portrait 集说明、转换工具改用 sharp
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 20:14:08 +08:00
Ryan
68df772ba5
feat(ui): 全站文字默认不可选(输入框等可编辑区例外)
...
body 设 user-select:none,避免拖选问候语/时间/导航等装饰文字;
input/textarea/contenteditable 及 [data-selectable] 仍可正常选中复制。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 14:08:43 +08:00
Ryan
25791f9268
perf(start): 优化高分屏卡顿 + 背景图按横竖屏切换
...
性能:
- 光标圆环去掉 mixBlendMode:difference(跟随时触发全屏重合成,
高分屏掉帧主因),并删除位置弹簧平滑,改为 1:1 跟手
- .glass-panel 的 backdrop-filter 模糊 20px→10px,每帧重算开销减半
背景:
- 横/竖图分别放 landscape//portrait/ 子目录(同名)
- 新增 useMediaQuery hook,按 (orientation: portrait) 选图,
转屏实时切换;竖图缺失自动回退同名横图
- 更新 startpage/README 说明新结构
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 13:52:28 +08:00
5b60185f94
feat(start): 背景按时段选图(6-24 随机 No.1~5,0-6 用 Night),标题改 CCStart
...
- StartPage 背景改为纯本地时间:白天从 No.1~No.5 随机取一张并固定整页生命周期,夜间(0-6点)用 Night
- 登录页 h2 与 index.html 标签页标题由 Sign in 改为 CCStart
- 起始页背景图压成 WebP(限宽 2560,质量 ~82),单图从 2.5~4.7MB 降到 113~375KB,适配 3Mbps 带宽
- 删除旧 dark.png/light.jpg
- 部署文档补充前端单独重发流程与 WSL 实际路径
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 22:18:47 +08:00
e4383cf4b5
docs: 记录 git 两个远程与推送方式(gitea 直推、GitHub 需手动 Token)
...
补充行尾 CRLF/LF 提醒,避免行尾噪声混入功能提交。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 21:28:41 +08:00
0b3b85c528
feat(start): 快捷入口改为底部分类抽屉
...
- 移除搜索框下方的快捷入口宫格(QuickLinks)
- 新增 CategoryDock:底部玻璃分类胶囊(社交/娱乐/开发/游戏),
悬停时菜单以 transform-origin:bottom 从胶囊向上抽出,链接错位浮现;
含悬停桥、点击/焦点开合、reduced-motion 降级
- StartPage 加透明占位,保持问候/搜索框删除前的垂直位置与比例
- 文档:startpage-quicklinks → startpage-category-dock 并重写;
修正 weather 部署文档过期的 /mnt/f 路径
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 21:23:12 +08:00
a3075133d1
feat(monitor): 顶部栏增加磁盘占用,格式与内存一致
...
采集根分区(/)容量,按 DISK x% · x/x GB · Free x GB 拼入展示文本,
Stats 新增 disk_used_pct / disk_total_bytes / disk_available_bytes 字段。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 15:31:27 +08:00
f576b03315
feat(start): 填充起始页快捷入口并补文档
...
搜索框下方快捷入口由占位空槽改为 8 个实链接:
第一行 DeepSeek/GitHub/Bilibili/知乎/FMHY,
第二行 Rust/C++/C# 文档(col-start-2 居中)。
品牌图标内联 simple-icons 单 path,FMHY 用字标。
新增 docs/startpage-quicklinks.md 记录搜索框 + 入口及增删方法。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 21:10:38 +08:00
d7d520058c
docs: 补登录/入口门走 MySQL 的说明,修起始页过期引用
...
- 新增 docs/auth-login-gate.md:入口门 + 登录的 MySQL 后端、表结构、
建库步骤、DATABASE_URL、无库兜底、安全待办
- startpage 文档:层级图删掉已移除的「齿轮」;weather.env 示例补 DATABASE_URL
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 20:49:04 +08:00
4c8c4360ad
feat(weather): 起始页天气/定位细节完善
...
- 新增 Client/src/lib/amap.ts:高德 JS 定位封装
- weather.ts / useWeather.ts:带经纬度/城市请求,定位失败不兜底
- Server weather.rs:相应调整
- 文档同步;.gitignore 忽略本地 .codegraph 索引
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 20:45:39 +08:00
b2a0b563c9
feat(client): 隐藏登录入口改为后端校验 URL hash
...
去掉起始页右下角设置齿轮(SettingsGear),登录页不再有任何 UI 入口;
改为监听地址栏 `#<hash>`,经 checkGate() 交后端 /api/web/gate 校验,
命中合法开发者才放行到登录页。合法 hash 只存在后端、前端不写死。
- 新增 api/gate.ts;App.tsx 用 hashchange 监听 + 防竞态校验
- 返回起始页时抹掉地址栏 hash,避免密钥留在历史里
- Server/.gitignore 忽略 dev_gate.txt(秘密,单独部署)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 20:45:30 +08:00
58bed0ae44
feat(server): 登录与开发者入口门改走 MySQL
...
UserStore/DevGate 不再写死,改为从 MySQL 实时查询(每次校验一条索引查询、
不缓存整表,照顾内存):
- 新增 db_pool_from_env(),UserStore 与 DevGate 共用一个 sqlx 懒连接池
- verify() 查 ccuser 表、allows() 查 dev_gate 表,均改为 async
- 未设置 DATABASE_URL 时各自回退到内置/文件兜底,便于本地无库开发
连接串经环境变量 DATABASE_URL 注入(线上写在 weather.env)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 20:43:23 +08:00
f4342e7c82
docs: 天气定位失败时不兜底、不显示
...
线上不设 WEATHER_DEFAULT_LOCATION:高德定位失败即返回 failed,
不再回退默认城市、也不调和风,前端静默不显示。更新文档说明。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 20:35:54 +08:00
a185e56c22
feat: 导航起始页 + 天气/定位 + 天气动态效果
...
起始页(StartPage)
- 极简玻璃风导航页作未登录首页:时段问候、Bing 默认可切换搜索、10 个快捷位、右下齿轮进登录
- 昼夜背景自动切换(light/dark),按天气图标码 + 本地时间判断
- 天气动态效果(WeatherFx canvas):雨/雪/雷,克制风格,尊重 reduced-motion
天气与定位(前后端)
- 后端 /api/web/weather:高德 IP 定位(城市+坐标) + 和风实时天气
- 和风用 JWT(EdDSA/Ed25519)认证,密钥走环境变量、仅后端持有
- 每日限流(高德 300、和风 900,北京 0 点归零) + 10 分钟按 IP 缓存
- 前端 useWeather + WeatherIcon(7 类极简 SVG)
导航与登录
- 浏览器返回键支持(History API);返回即登出
- 记住我:勾选存 localStorage、不勾存 sessionStorage,默认不勾
其他
- .gitignore 忽略 *.pem/*.env 等密钥
- 新增文档 docs/startpage-weather-location.md 及部署 spec/plan
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 20:13:18 +08:00