# 班级论坛（MVP）

一个零成本可运行的班级论坛：发帖（提问 / 学习资料 / 公告 / 学习方法）、问答与采纳、附件上传、
**点赞**、**收藏**、**Markdown 轻量排版**。前端是纯静态页面，后端用 **Supabase**（免费额度足够一个班级用）。
未配置后端时自动进入 **演示模式**，数据存浏览器本地，方便先体验。

## 文件结构
```
class-forum/
├─ index.html      # 页面结构
├─ styles.css      # 样式
├─ config.js       # 后端配置（填 Supabase 信息）
├─ app.js          # 逻辑（Supabase + 本地演示 双数据层）
├─ schema.sql      # 数据库表 + 权限策略
└─ README.md
```

## 一、本地预览（无需任何配置）
直接用浏览器打开 `index.html` 即可。此时是演示模式，已预置几条示例内容，
可以登录（随便填邮箱密码）、发帖、回答、采纳，数据存在本机浏览器。

> 想用本地服务器打开（更接近线上）：在目录里执行 `python -m http.server 8080`，
> 然后访问 http://localhost:8080 。

## 二、接入真实后端（Supabase，免费）
1. 打开 https://app.supabase.com ，用 GitHub 登录并新建一个项目（免费）。
2. 进入 **SQL Editor**，把本仓库 `schema.sql` 全部粘贴执行，创建表、权限和存储桶。
3. 进入 **Authentication → Providers**，确认 Email 登录已开启。
4. 进入 **Storage**，确认已存在 `materials` 公共桶（脚本会尝试自动建，没有就手动建）。
5. 进入 **Project Settings → API**，复制：
   - Project URL
   - anon public key
6. 打开 `config.js`，把上面两项填进去：
   ```js
   window.APP_CONFIG = {
     SUPABASE_URL: "https://xxxx.supabase.co",
     SUPABASE_ANON_KEY: "eyJhbGciOi...",
   };
   ```
7. 刷新页面，演示横幅消失，顶栏显示「✅ 已连接真实后端」，数据即真实存储到云端、全班共享。

## 二之一、关闭「新用户邮箱验证」（⚠️ 必须做，否则注册后登不进去）

Supabase 默认新用户注册后必须点验证邮件才能登录。**实测本项目当前 Confirm email 是开启状态**，
所以注册完不点邮件里的链接就登录失败。班级内部用应关掉。关闭步骤：

1. 左侧 **Authentication → Providers → Email**
2. 把 **Confirm email**（确认邮箱）开关**关掉**
3. 保存

关掉后，再去 **Authentication → Users**，把之前"已注册但未验证"的旧账号**删掉**（或手动点 Confirm 标为已验证），
然后回到论坛用同一个邮箱**重新注册**，这次注册即自动登录，无需收邮件。（仍保留密码，不影响安全。）

> 演示模式注册过的账号只存在浏览器本地，云端没有，不能用那套邮箱密码登录真后端，需在 Supabase 重新注册。

> **国内访问说明**：supabase-js 库已内置到本地 `vendor/supabase.js`，页面打开不再依赖境外 CDN，更快更稳。
> 唯一的跨境请求是访问 Supabase 云端（海外服务器），班级量级下延迟可接受；若该请求也偏慢，
> 再考虑迁移到国内轻量服务器自建后端（见费用章节）。部署时记得把 `vendor/` 文件夹一起上传。

## 三、上线（任选其一，基本免费）
- **Cloudflare Pages**：登录 dash.cloudflare.com → Pages → 上传 `class-forum` 文件夹，
  或连接 GitHub 仓库自动部署。免费、国内访问也还行。
- **Vercel**：vercel.com 导入文件夹 / 仓库，静态项目直接部署，免费。
- **GitHub Pages**：把文件夹推到仓库，Settings → Pages 选 main 分支根目录，免费。

部署后把网址发给同学即可。无需租服务器、无需备案（海外静态托管）。

## 四、费用估算
| 项目 | 费用 |
| --- | --- |
| Supabase（数据库 + 登录 + 存储） | 免费（500MB 库、2 项目，班级够用） |
| 静态托管（Cloudflare / Vercel / GitHub Pages） | 免费 |
| 域名（可选，想用自定义网址） | ¥30–60 / 年 |

> 只有当你想要「国内服务器 + 自有域名」时才需要租轻量应用服务器（¥60–100/年）并做 ICP 备案。
> 班级内部先用上面的免费方案即可。

## 五、功能范围
- 邮箱注册 / 登录（Supabase 鉴权）
- 四类内容：提问、学习资料、公告/消息、学习方法
- 提问下可追加回答，楼主可「采纳」最佳回答
- 学习资料可上传附件（Supabase Storage）
- **点赞**：帖子可点赞，列表/详情显示点赞数
- **收藏**：帖子可收藏，顶栏新增「🔖 收藏」分类查看
- **Markdown 轻量排版**：正文支持 `**加粗**`、`` `代码` ``、`*斜体*`、`[链接](url)`、换行
- 分类筛选 + 关键词搜索
- 作者可删除自己的帖子和回答
- 顶栏「连接状态」徽标：一眼区分演示模式 / 已连真实后端

### 数据库（schema.sql 已含）
`posts`、`answers`、`profiles`、`post_likes`、`bookmarks` 五张表，配套 RLS 行级权限、
索引，以及 `materials` 公共存储桶策略。脚本在 SQL Editor 一次性执行即可。

后续可加：@提醒、实时通知、AI 自动答疑、楼中楼评论等。
