# Deployment Notes

## 目标

先测试免费部署组合：

1. Cloudflare + Supabase
2. 验收通过后再尝试 Vercel + Neon

## Cloudflare

- 部署方式：Cloudflare Pages，直接发布当前静态目录。
- 账号：使用当前 Codex Cloudflare 连接器中的账号。
- Pages 项目名：`jdp-deploy-probe`
- 线上链接：[https://jdp-deploy-probe.pages.dev](https://jdp-deploy-probe.pages.dev)

## Supabase

- 项目名称：`jdp_db`
- Region：`ap-southeast-1`
- 表：`public.demo_items`
- Project URL / publishable key：仅保存在本地 `config.js`，该文件已被 `.gitignore` 忽略。

### 连接信息说明

- 当前单页应用是纯前端静态页面，因此浏览器必须能拿到 Supabase Project URL 和 publishable key。
- publishable key 是 Supabase 设计给浏览器公开使用的 key，不等同于 `service_role` key。
- 本项目没有使用、没有写入 `service_role` key、数据库连接串、数据库密码。
- 当前已将具体 Project URL 和 publishable key 从 `app.js` 抽到 `config.js`。
- `config.js` 已加入 `.gitignore`，不会随 Git 提交；仓库只提交 `config.example.js` 模板。
- 直接使用 Wrangler 从本机部署时，`config.js` 会作为静态资源上传到 Cloudflare Pages，因此线上页面仍可访问 Supabase。
- 如果未来改成 GitHub 自动部署，Cloudflare 构建环境需要生成 `config.js`，或者接受把 publishable key 作为公开前端配置提交。
- 当前目录还不是 Git 仓库，`git check-ignore` 暂时无法运行；执行 `git init` 后可用 `git check-ignore -v config.js` 验证忽略规则。
- 真实生产项目建议：前端只保留 publishable key；敏感写入、管理操作、跨用户数据访问放到后端、Cloudflare Worker / Pages Functions 或 Supabase Edge Function 中执行。

### 表结构

```sql
create table public.demo_items (
  id uuid primary key default gen_random_uuid(),
  title text not null check (char_length(title) <= 120),
  note text not null default '' check (char_length(note) <= 500),
  done boolean not null default false,
  created_at timestamptz not null default now(),
  updated_at timestamptz not null default now()
);
```

### RLS

已启用 RLS，并只对 `demo_items` 开放 `anon` / `authenticated` 的 select、insert、update、delete。该表仅用于公开 demo，不要写入敏感信息。

Supabase security advisor 会提示该表的 insert/update/delete policy 过于宽松。这是本次公开 CRUD 验收的有意配置；进入真实业务阶段时应改成登录用户隔离或后端受控写入。

### CRUD 验证

已用 Supabase REST API 完成 smoke test：

- insert：成功
- select：成功
- update：成功
- delete：成功

## 验收项

- Cloudflare 链接可以公开访问。
- 页面 HTTPS 正常。
- HTML/CSS/JS 正常加载。
- 页面内 checklist 显示部署状态。
- 页面可查询 `demo_items`。
- 页面可新增、编辑、完成、删除 `demo_items` 记录。

## 后续

验收 Cloudflare + Supabase 页面后，创建第二阶段记录：

- Vercel 部署方式
- Neon Postgres 创建方式
- Vercel 环境变量
- Neon 连接串和迁移记录
