小蓝书 · 瀑布流社区(DeepSeek-V4.1-Flash-0731 · high · r01)
构建型纯前端项目。源码在本目录,构建产物由 npm run build:demo -- bluebook--deepseek-v4-1-flash-0731-high-r01 生成并提交到 previews/bluebook/deepseek-v4-1-flash-0731-high-r01,无需安装依赖即可通过静态服务器预览。
原始提示词
版本说明:主题下有 v1、v2 两个版本,属于同主题下的不同任务——v1 额外要求把图片资源放在 images 目录并在编译时自动拷贝、头像做成文字类型;v2 改为 mock 数据 + 不同高度图片。未指定版本时按测试约定使用版本号最大的 v2,v1 未在本轮执行。
技术栈与目录
React 18 + TypeScript + Vite + Tailwind CSS + Zustand + react-lazyload。图片为本地 SVG,放在 public/images/,Vite 构建时自动拷贝到产物 images/ 并随预览提交,不引用任何外部图片数据。
src/
main.tsx 入口
App.tsx 页面骨架、整体渐入、搜索与发布提示
index.css Tailwind 指令与骨架屏高光样式
types.ts Note / FeedStatus 类型
data/mock.ts 24 张本地图片尺寸表 + 60 条 mock 笔记 + 内联 SVG 兜底图
store/useFeedStore.ts Zustand:分页、状态、点赞与动画计数
hooks/usePullToRefresh.ts 下拉刷新手势(阻尼、阈值、鼠标与触摸通用)
components/TopBar.tsx 顶部搜索栏(logo / 搜索框 / 发布)
components/MasonryGrid.tsx 瀑布流容器、IntersectionObserver 无限滚动
components/NoteCard.tsx 卡片:图片、标题、文字头像、点赞动画
components/SkeletonCard.tsx 骨架卡片
components/LoadingSpinner.tsx 加载动画
types/react-lazyload.d.ts react-lazyload 的类型补充声明
需求对照
| 提示词要求 | 实现 |
|---|---|
| React 18 + TypeScript + Tailwind + Zustand + react-lazyload | 全部采用,见 package.json |
| 顶部搜索栏:logo「小蓝书」/ 搜索图标 + placeholder「搜索你感兴趣的内容」/ 发布按钮 | TopBar.tsx |
| 2 列(移动)/ 3 列(平板)/ 4 列(桌面) | CSS 多列:columns-2 md:columns-3 xl:columns-4 |
| 卡片:图片宽 100% 高自适应、标题两行截断、24px 圆形头像 + 昵称、点赞数 | NoteCard.tsx,图片用 aspect-ratio 占位避免布局跳动 |
| 卡片 hover 轻微上浮 + 阴影加深;点击按压效果 | hover:-translate-y-0.5 hover:shadow-… 与 active:scale-[0.985] |
| 首次加载 20 条、滚动到底部自动加载更多、加载动画 | Zustand 分页 + IntersectionObserver + 骨架屏与圆点动画 |
| 使用 mock 数据,包含不同高度的图片 | data/mock.ts,宽高比覆盖 0.53 ~ 1.45 |
| 主色 #fe2c55、背景 #f5f5f5、卡片纯白圆角 8px、适配 iPhone 12+ | tailwind.config.js 主题色 + rounded-card + 安全区留白 |
| 下拉刷新 | usePullToRefresh,带阻尼与「松开立即刷新」提示 |
| 图片加载失败显示默认图 | onError 切换到内联 SVG 兜底图 |
| 点赞动画:红心放大再缩小 | 每次点击递增 likeBumps,以 key 重放 heart-pop 动画 |
| 页面切换渐入 | 首屏 opacity 过渡 + 每张卡片 animate-fade-in |
| 组件拆分、样式处理、数据 mock | 见上方目录 |
验收自测
通过本地静态服务器访问构建产物 previews/bluebook/.../index.html,用无头 Chromium 核对:
| 检查项 | 实测 |
|---|---|
| 首次加载 20 条 | 20 张 article |
| 列数响应式 | 390px → 2 列;820px → 3 列;1440px → 4 列 |
| 滚动到底部自动加载更多 | 20 → 40 → 60 条 |
| 图片加载与高度差异 | 可见卡片图片全部加载成功;宽高比 0.66 / 0.94 / 0.55 / 0.54 / 0.83 / 1.45 |
| 点赞与动画 | 120 → 121(aria-pressed=true)→ 再点回 120 |
| 下拉刷新 | 拖动时出现「松开立即刷新」,松开后列表回到 20 条 |
| 图片加载失败兜底 | 指向不存在的图片后 src 变为内联 SVG 兜底图 |
| 无脚本错误 | 仅有测试中故意触发的一次 404 资源请求 |
| 横向溢出 | 390 / 820 / 1440 三种宽度下均为 0px |
运行与复盘
- 预览:构建产物已提交,用任何静态服务器指向仓库根目录即可访问
previews/bluebook/deepseek-v4-1-flash-0731-high-r01/。 - 重新构建:
npm run build:demo -- bluebook--deepseek-v4-1-flash-0731-high-r01(脚本会在本目录执行npm ci与npm run build -- --base=./,再把dist同步到previews/并记录源码与产物指纹)。 - 本地开发:在本目录
npm install后npm run dev。 - 复盘:两次构建失败在交付前修复,记入
changes的两条依赖适配:①react-lazyload@3.2.0未随包提供 TypeScript 类型,tsc -b严格模式下报 TS7016,补了src/types/react-lazyload.d.ts;② 该库的package.json并未声明它实际require的prop-types,导致 Vite 把它当成外部依赖(产物里留下裸模块引用,浏览器必然报错),已把prop-types显式加入依赖。另外该库的 peerDependencies 只写到 React 17,与正文要求的 React 18 冲突,通过本目录.npmrc的legacy-peer-deps=true保留该库。
当前归档信息(自动生成)
- 实验 ID:
bluebook--deepseek-v4-1-flash-0731-high-r01 - 模型:DeepSeek-V4.1-Flash-0731;推理档位:high
- 类型:app;预览:build;网络:offline
- 完整原始输入快照 · 主题与其他版本
- 输入记录:本次批量执行的完整指令 + 主题任务正文;正文与 demos/bluebook/prompts/v2/prompt.md 逐字一致。该主题下有 v1 与 v2 两个版本(v1 额外要求本地 images 目录编译时自动拷贝、头像用文字实现;v2 改为 mock 数据 + 不同高度图片),未指定版本时按测试约定使用版本号最大的 v2,v1 未在本轮执行。
- 工具:Claude Code。模型名称由用户指定为 DeepSeek-V4.1-Flash-0731;会话内模型标识为 deepseek-flash[1m]。单会话直接执行,未委派子代理。Windows 11 + Node 22.16.0。构建产物由 npm run build:demo 生成并提交到 previews/,指纹由脚本记录。
- 运行方式:在本目录 npm ci 后 npm run dev;Pages 使用根目录 previews 中已提交的构建产物。
- 费用记录:Deepseek 批次合计 2.71 CNY(11 个案例;批次 deepseek-v4-1-flash-0731-high-2026-10-13;未记录单案例费用)
- 主页面
部署适配记录
- react-lazyload@3.2.0 的 peerDependencies 只声明 React 16/17,与任务正文要求的 React 18 冲突。为保留该库,实验目录内加入 .npmrc 写入 legacy-peer-deps=true,使 npm ci 可以安装;这是为满足任务正文技术栈所做的依赖适配。
- react-lazyload@3.2.0 未随包提供类型声明,tsc 严格模式报 TS7016;新增 src/types/react-lazyload.d.ts 补充最小类型声明。
- react-lazyload@3.2.0 的 package.json 未声明其代码实际 require 的 prop-types,导致 Vite 将其视为外部依赖、产物中残留裸模块引用(浏览器必然报错);已把 prop-types@15.8.1 显式加入 dependencies。
- 迁移来源:F:\dev\ai-coding-demo-test(model-test-base 工作区)/demos/bluebook/runs/deepseek-v4-1-flash-high-r01;保留原测试轮次 r01 与完整输入快照。
- 迁移验收:通过本地 HTTP 实际入口补拍 desktop screenshot.png;390px 页面无横向溢出。
- 模型与实验目录标识按用户确认更新为 DeepSeek-V4.1-Flash-0731;历史输入、评分、产物与迁移来源保留。
- 维护者于 2026-10-22 按 v3 对本轮桌面、手机及补充状态逐图重评并绑定 captures 证据;旧截图和 v2 评分见 catalog/score-reviews/2026-10-21-v3-source.json。未重跑模型或改写实验源码,截图不证明完整功能、算法、手势或性能。