- 薄自建 LLM 网关:OpenAI 兼容适配器(DeepSeek) + instructor 结构化输出 + usage_ledger 记账 + 档位路由 - 记忆服务 assemble:确定性选择(显式+主角+近况) + 渲染卡 + 缓存断点(中性文本) - LangGraph 写章节点 + Postgres checkpointer + SSE 归一(token/done/error) - API:立项 + 写章 draft(SSE) + PUT 自动保存 + 提供商凭据(Fernet 加密/测试连接) - 前端:AppShell + 作品库 + 5 步立项向导 + 写作工作台(流式打字机+自动保存) + 设置页 - M1 E2E:真实 DB + mock 网关零 token 走通闭环
27 lines
911 B
TypeScript
27 lines
911 B
TypeScript
import Link from "next/link";
|
||
|
||
import type { ProjectResponse } from "@/lib/api/types";
|
||
|
||
interface ProjectCardProps {
|
||
project: ProjectResponse;
|
||
}
|
||
|
||
// 作品卡(UX §6.1):书名衬线大字、题材、一句话故事。
|
||
// M1 无字数/章数/待办统计端点 → 暂不展示该徽标(避免编造 API)。
|
||
export function ProjectCard({ project }: ProjectCardProps) {
|
||
return (
|
||
<Link
|
||
href={`/projects/${project.id}/write`}
|
||
className="flex h-full min-h-[160px] flex-col rounded border border-line bg-panel p-6 shadow-paper hover:border-cinnabar"
|
||
>
|
||
<h2 className="font-serif text-2xl text-ink">〈{project.title}〉</h2>
|
||
{project.genre ? (
|
||
<p className="mt-2 text-sm text-ink-soft">{project.genre}</p>
|
||
) : null}
|
||
{project.logline ? (
|
||
<p className="mt-3 line-clamp-3 text-sm text-ink">{project.logline}</p>
|
||
) : null}
|
||
</Link>
|
||
);
|
||
}
|