url.tschoolsu.org/<slug> → 先落一頁極輕 HTML 蒐集點擊者資訊(IP、Cloudflare 地理、UA、螢幕、時區…)→ 跳轉。
管理員在 /admin 建連結、看點擊明細、下載 QR。只有管理員能用(auth /admin 給 url 服務的 role)。
設計:tpass-ops/docs/specs/2026-09-08-tpass-url-design.md。
pnpm install
cp .env.example .env.local # 值照 example 即可
psql -d postgres -c "CREATE ROLE t_url LOGIN PASSWORD 't_url';" -c "CREATE DATABASE t_url OWNER t_url;"
pnpm exec prisma migrate dev
pnpm dev # https://url.lvh.me:3007憑證 SAN 要含 url.lvh.me;本機 auth 的白名單來自 ../tpass-registry/services.json,要有 url 那筆。
檢查:pnpm lint && pnpm exec tsc --noEmit && pnpm test && pnpm build。
tpass-registry合併url那筆。- Cloudflare DNS
url灰雲 → 主機certbot certonly --nginx -d url.tschoolsu.org→ nginx server block(照其他服務,反代127.0.0.1:3007)→ 切橘雲。 - Cloudflare → Rules → Settings → Managed Transforms → 開 Add visitor location headers(城市/經緯度/時區靠它;沒開只有國家)。
- 主機 root:
CREATE ROLE t_url LOGIN PASSWORD '<強密碼>'; CREATE DATABASE t_url OWNER t_url; - 主機 service:clone 到
/home/service/tpass-url、寫.env.local(URL_SELF_URL=https://url.tschoolsu.org、正式 auth 網址、DATABASE_URL)、pnpm install --frozen-lockfile、pnpm exec prisma migrate deploy、pnpm build、pm2 start ecosystem.config.js && pm2 save。 - auth
/admin給要用的人url的 role。 - registry 翻
deployed: true。
Server 層:IP、國家/城市/行政區/郵遞區號/經緯度/時區(Cloudflare header)、UA 與解析後的瀏覽器/OS/裝置、Referer、Accept-Language。
JS 層(beacon 一次性補入):螢幕與視窗尺寸、DPR、色深、瀏覽器時區、語言清單、平台、觸控、CPU 核心、記憶體、連線型態。
爬蟲(LINE/Discord/FB 預覽等)直接 302 並標 isBot。無保留期限。