533 - 《手写 sorrycc.com》
发布于 2025年3月9日
简单记录下手写 sorrycc.com 的过程。
1、契机是我之前用 WordPress 做的博客,一周之前,在我的小破 VPS 上的 CPU 和内存都占得比较满,一度导致网站非常卡顿。卡顿的原因,我觉得可能是有很多垃圾的注册信息,后天有几千个奇怪邮件的注册用户。然后我尝试了各种性能优化的手段,但效果都不太好,还导致了一个 bug。于是,作为程序员,手痒了就决定手写一个版本。
2、之前没有正式用过 Next.js,借这一次机会试试看。整个研发过程中大量使用 AI、Cursor、Gemini 等工具,参考 530 - 《我怎么用 AI 辅助编程》。虽然是第一次使用,但是研发的过程还是很流畅的。
3、我的技术选型如下。
框架:Next.js with App Router
数据库:Prisma
UI:Shadcn/ui + TailwindCSS
邮件:AWS SES
Cookie Session:iron-session
压测:k6
API Test:REST Client
工程化:Pnpm、TypeScript、Prettier 等
部署:pm2、1panel
其他工具:TablePlus
4、我的大部分时间花在想需求和写 prompt 上。 以下是我的第一个 Prompt。
我要写一个 App。
技术栈如下。
1、Next.js
2、Prisma (先用 Sqlite,后续部署时用 PostgreSQL)
3、UI 用 shadcn/ui
4、提供 /api,基于 header 中的 token 访问,类 chatgpt api 的授权方式,提供给三方开发者
5、api 基于 swagger,主要用于文档
6、pnpm
7、邮件发送基于 AWS SES,用 aws-sdk 这个依赖
细节如下:
1、/category/$id 用于渲染某个分类下的文章列表
2、/$post_id 用于渲染某个 post
3、/ 用 page_on_front 的 page 渲染
4、/login、/logout、/signup、/active、/reset_password 等用于鉴权,登录 Cookie 保持时间为 3 个月,注册后有一个激活邮箱的流程,会给用户发一封邮件,然后用户点击邮件里的地址进行激活
表结构要求如下,基于前面的描述,如有补充,可以增加表结构。
1、users 表,包含 id、name、photo、mail、role(包含 subscriber、contributor、admin)、mail_confirmed、articles、created_at、expired_at 等
subscriber 可以评论,contributor 可以浏览 categories 中 slug 为 vip 的文章,。
2、tokens 表,包含 id、user_id、key 等,用于 api
3、posts 表,包含 id、user_id、parent_id(optional)、title、content、post_name、creat