Pengfei · 个人产品集

一个账号, 打开六个子站。

从认证、音乐、写作,
到导航与 AI 网关。

01 / 06
认证中心

Pengfei Auth

auth.pengfei.ink
  • 01OAuth 2.0 标准协议

    四种授权方式:授权码、密码、刷新令牌、客户端凭证。
    访问令牌走 JWT,吊销走 RFC 7009,发现走 RFC 8414。

  • 02账号或邮箱登录

    identifier 任意填账号或邮箱,邮箱仅做身份校验。
    支持密码、邮件验证码两条登录路径。

  • 03白名单 + 防爆破

    应用可单独配白名单,未授权用户被 403 兜住。
    账号 + IP 双维度锁定,15 分钟自动解锁。

  • 04审计日志与告警

    登录、授权、拒绝、锁定全部入审计表。
    支持事件类型 / 用户 / 时间多维过滤,前端 10 行分页。

访问 auth.pengfei.ink
auth.pengfei.ink
Pengfei Auth
step 01
/oauth/authorize
客户端跳过来 → 用户登录 → 带 code 回跳
step 02
账号 / 邮箱
同一个输入框,identifier 自适应
step 03
白名单 = 真白名单
password / refresh / code 三处都查
step 04
审计 · 防爆破
同时记录账号 / IP / event / 详情
02 / 06
音乐播放器

Bear Music

music.pengfei.ink · m.music.pengfei.ink
  • 01桌面与移动 · 双工程

    PC 站参考 Apple Music。移动端是独立 Vue 工程,
    Bottom Tab + 迷你播放器 + 全屏 + 底部弹层。

  • 02账号 · 收藏 · 历史

    所有数据绑定 Pengfei 账号,跨端同步。
    新用户首次 SSO 登录时本地 user 表自动 provisioning。

  • 03统一登录入口

    需要登录的功能点击后 → 毛玻璃弹窗 → "使用 Pengfei 账号登录"。
    token 失效自动回弹弹窗,不用刷页面。

访问 music.pengfei.ink
music.pengfei.ink
Bear Music PC
Bear Music mobile
03 / 06
写作工具

小说管理后台

novel.pengfei.ink
  • 01章节统计与进度

    顶部面板:累计字数、章节数、最新进展。
    每章 markdown 存盘,可以直接读、直接改。

  • 02伏笔与摘要

    每章自动抽取伏笔、摘要、人物动线,
    点开就能看哪条线还没回收。

  • 03夜间定时任务

    cron 跑续写 / 审稿 / 规则检查 / 复盘,
    每个任务一个独立提示词文件,单独开关。

  • 04登录就用 Pengfei 账号

    毛玻璃弹窗 → OAuth 跳一次,
    token 失效自动弹回,不用刷页面。

访问 novel.pengfei.ink
novel.pengfei.ink
Novel dashboard
step 01
版本快照
每次写作都进版本表,可对比回滚
step 02
伏笔时间轴
引入 vs 回收,颜色编码
step 03
定时任务面板
每个 cron 单独的提示词文件
step 04
OAuth 弹窗
和 music / auth 共享 token
04 / 06
导航页

Pengfei Nav

nav.pengfei.ink
  • 01搜索引擎一键切换

    Google / Bing / DuckDuckGo / 百度,
    偏好跟着账号走,跨设备同步。

  • 02收藏夹存在服务器

    已登录时存 SQLite,未登录时存 localStorage。
    换台机器登录,收藏自动同步。

  • 03四套主题随你切

    浅色 / 深色 / 极简灰 / 极光渐变。
    主题、引擎、收藏全部跟账号走。

访问 nav.pengfei.ink
nav.pengfei.ink
Pengfei Nav
基础设施

剩下两个,撑起整个生态

它们不抢戏,但少了任何一个都跑不起来。

api.pengfei.ink

New API

多模型 LLM 网关。OpenAI 协议统一接 Claude / GPT / Gemini / DeepSeek,配额、计费、用量、令牌全部可视化。

OpenAI 兼容多模型计费
mail.pengfei.ink

Pengfei Mail

docker-mailserver + Roundcube。DKIM / SPF / DMARC 全配齐,
no-reply@pengfei.ink 给所有站发验证码。

SMTPSDKIMWebmail
怎么做的

每一个选择,背后都有一个原因

不是技术清单 —— 是每个技术解决了什么具体问题。

01

为什么是 SQLite,不是 PostgreSQL

所有服务跑在一台机器上,better-sqlite3 同进程零延迟读写。 开 WAL 后并发够用,备份就是 cp auth.db /backup/。 部署不用额外起 Postgres 容器。

better-sqlite3WAL零运维
02

OAuth 2.0 自己实现,不用 Keycloak

Keycloak 太重,要 JDK、要单独进程、要专门的 admin 控制台。 自己写四种 grant 用了约 500 行 Express, 加 RFC 7009 吊销、RFC 8414 发现,全过 OIDC userinfo。

ExpressJWT HS256RFC 8414
03

Vue 3 + Vanilla JS 混搭

音乐站状态复杂(播放器、队列、收藏跨页同步),用 Vue 3 + Pinia。 认证中心是表单流,用 Vanilla + history.pushState 写了个 200 行 SPA 路由, 没必要拉 React。

Vue 3PiniaVanilla SPA
04

双 Token 轮转 + IP/账号双防爆破

Access token 30 分钟,refresh token 30 天,自动旋转拒重放。 登录失败 IP 维度(10/15min)+ 账号维度(5 次)双重锁定, 全部进 audit_log 可查可过滤。

bcryptjs cost 12IP 锁定审计
05

Nginx + Let's Encrypt 自动续期

每个子域一份 nginx config,certbot --webroot 自动跑 cron 续期。 证书到期日跟着 systemd timer 走,no-reply@pengfei.ink 主动通知。 Cloudflare 只做 DNS,不走代理。

Let's Encryptsystemd timerCloudflare DNS
06

自建 docker-mailserver,告别 SendGrid 月租

所有验证码、通知邮件从 no-reply@pengfei.ink 发出。 DKIM + SPF + DMARC 三件套配齐,进 Gmail 收件箱不进垃圾箱。 Roundcube 给我一个 webmail 用。

PostfixDKIMRoundcube