freefire 962bb15298 chore: 不再跟踪 embed_static/static/spa 构建产物
SPA 由 Vite 输出至 embed_static,发布前通过 build 脚本构建即可。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 02:41:32 +08:00
2026-06-26 05:27:06 +08:00

姜十三论坛 Jiang13 Forum

轻量 · 好看 · 单文件部署的现代化论坛

面向小圈子内部交流,编译为单个 Go 二进制,前端 SPA 内嵌,内置 SQLite开箱即用。


License: MIT Go React SQLite

快速开始 · 界面预览 · 功能亮点 · 路线图 · 参与贡献


姜十三论坛首页 - 浅色主题三栏布局

浅色主题 · 三栏布局 · Feed 排序 · 虚拟滚动帖列表


开发状态: 项目积极开发中。管理后台已统一为 React SPA/admin),欢迎参与共建。
查看 路线图 ROADMAP.md · Issues 反馈


界面预览

论坛用户第一眼看到的是界面。姜十三论坛采用清新绿色主题、高密度信息布局,兼顾桌面与移动端体验。

浅色主题首页
浅色主题
左栏板块导航 · Feed 排序切换 · 右栏热门/动态/在线
暗色主题首页
暗色主题
一键切换 · 护眼阅读 · 全局色彩自适应
帖子详情页
帖子详情
TipTap 富文本渲染 · 标签展示 · 点赞收藏互动
移动端首页
移动端适配
板块快捷筛选 · Feed 排序 · 触控友好列表

发帖页
发帖 — 板块胶囊选择 · TipTap 工具栏 · 本地上传图片


功能亮点

界面与交互

特性 说明
三栏布局 左栏板块菜单(可折叠)+ 中间虚拟滚动帖列表 + 右栏热门/通知/在线
虚拟滚动 @tanstack/react-virtual 驱动帖列表与楼层回复,长列表依然流畅
帖子排序 最新发帖 / 最新回复 / 热门讨论,一键切换 Feed 排序
主题切换 浅色 / 暗色一键切换,跟随 prefers-color-scheme 与本地记忆
响应式 平板 / 手机自动收起侧栏,搜索、发帖、登录触手可及
高密度排版 V2EX / NGA 风格信息密度,一屏浏览更多内容

社区功能

  • 用户注册 / 登录bcrypt + JWT Cookie
  • 普通用户 / 管理员两级权限,首个注册用户自动成为管理员
  • 板块管理、发帖、TipTap 富文本编辑、正文图片本地上传、标签、置顶
  • 帖子修订历史:编辑后保留版本记录,支持 diff 对比查看
  • 可配置编辑时限:管理员设定普通用户修改帖子的有效窗口
  • 楼层式评论,支持回复指定楼层、@ 高亮、引用回复
  • 点赞、收藏、热门帖、最新动态
  • 管理员后台删帖、删评论、禁言、论坛参数配置、敏感词管理、SQLite 一键备份
  • 内置敏感词过滤、发帖 / 评论 / 注册 / 登录限流(后台可配)

部署体验

  • 单二进制部署 — 与 Gitea 同款 go:embed 打包,无需 Nginx 反代静态资源
  • 零依赖数据库 — SQLite 内建,数据目录 --data 一处管理
  • 跨平台 — Windows / Linux / macOS 一键编译

快速开始

1. 编译

Windows推荐

.\build.ps1
# 或双击 build.bat

Linux / macOS

make build

手动分步(全平台):

cd frontend && npm install && npm run build
cd .. && go build -trimpath -ldflags "-s -w" -o dist/jiang13 ./cmd/jiang13

Windows 自带的 make 通常是 Embarcadero MAKE不能识别本项目 Makefile。请用 .\build.ps1 或安装 GNU Make 后再用 make build

跨平台编译:

.\build.ps1 -Target build-windows
.\build.ps1 -Target build-linux
.\build.ps1 -Target build-all

2. 启动

# Windows
.\dist\jiang13.exe --port 3000 --data ./data

# Linux / macOS
./dist/jiang13 --port 3000 --data ./data

3. 首次使用

  1. 浏览器打开 http://localhost:3000/register 注册账号
  2. 第一个注册的用户自动成为管理员
  3. 登录后访问 http://localhost:3000/admin/dashboard 进入后台

启动参数

参数 默认值 说明
--port 3000 HTTP 监听端口
--data ./data 数据目录SQLite、上传、日志
--jwt-secret 自动生成 JWT 签名密钥(留空则持久化到 data/.jwt_secret

技术栈

层级 技术
后端 Go 1.26 · Gin · GORM · SQLite
前端 React 18 · TipTap · Radix UI · Tailwind CSS · TanStack Virtual
构建 Vite → go:embed 内嵌 SPA单二进制发布
认证 bcrypt · JWT Cookie

前端开发

日常改前端不需要重新 npm run buildgo buildVite 开发服务器支持秒级热更新HMR热模块替换

.\build.ps1 -Target dev    # Windows
make dev                   # Linux / macOS

浏览器访问 http://localhost:5173API 自动代理到 http://localhost:3000

何时需要完整构建:

  • 修改 Go 代码、HTML 模板、embed 静态资源 → go build / make build
  • 发布单二进制前 → npm run build + make build
  • 更新 README 界面截图 → 启动服务后执行 node scripts/capture-screenshots.mjs

直接访问 :3000 看到的是上次 build 嵌入的前端;开发时请用 :5173


项目结构

jiang13-forum/
├── cmd/jiang13/           # 程序入口
├── config/                # 命令行参数与配置
├── model/                 # GORM 模型与数据库迁移
├── service/               # 业务逻辑(认证、帖子、评论…)
├── handler/               # HTTP 处理器(前台 + 后台)
├── middleware/            # JWT 鉴权、在线状态
├── router/                # 路由注册
├── embed_static/          # go:embed 内嵌的 SPA 与模板
├── frontend/              # React 源码Vite 构建)
├── docs/screenshots/      # README 界面截图
├── docs/issue-templates.md # Issue 预填模板
├── ROADMAP.md             # 路线图与已知问题
└── scripts/               # 开发辅助脚本

数据目录

data/
├── jiang13.db              # SQLite 主数据库
├── jiang13.log             # 运行日志
├── filter_words.txt        # 敏感词配置
├── .jwt_secret             # JWT 密钥(自动生成)
├── uploads/avatars/        # 用户头像
├── uploads/posts/          # 帖子正文图片
└── jiang13_backup_*.db     # 后台导出的备份

开发状态

项目积极开发中,作为论坛产品功能尚未完善,欢迎参与共建。

类型 示例
已可用 三栏布局、暗色主题、虚拟滚动、Feed 排序、楼层评论
发帖体验 TipTap 富文本、正文图片上传、修订历史、可配置编辑时限
管理后台 React SPA仪表盘、帖子置顶、用户禁言、论坛参数与敏感词配置
📋 计划中 通知动态优化、邮件提醒

完整列表见 路线图 ROADMAP.md。发现问题请提交 Issues,认领任务请参考 CONTRIBUTING.md


参与贡献

欢迎提交 Issue 和 Pull Request详见 CONTRIBUTING.md


许可证

MIT — 自由使用、修改与分发。

Description
轻量自用论坛:Go 单二进制 + React SPA 内嵌 + SQLite,面向小圈子内部交流。
Readme MIT 5.8 MiB
Languages
TypeScript 50.1%
Go 18.8%
CSS 18.6%
HTML 7.1%
JavaScript 4.2%
Other 1.2%