三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Three.js 交互式 3D 人体解剖开源项目

Three.js 交互式 3D 人体解剖开源项目

thebuggeddev/anatomy: An interactive 3D human anatomy explorer built using threejs with GPT 5.6 Sol

Three.js 交互式 3D 人体解剖开源项目

vinext-starter

一个基于vinext​ 的简洁全栈 starter,可选集成 Cloudflare D1 与 Drizzle ORM。


环境要求

  • Node.js >= 22.13.0


快速开始

npm install npm run dev # 启动本地开发服务器 npm run build # 构建项目,验证 vinext 构建产物

本项目不使用wrangler.jsonc


项目结构

路径

说明

app/

站点业务代码(vinext / Next.js 风格)

.openai/hosting.json

声明可选的 Sites D1 和 R2 绑定

vite.config.ts

在本地开发环境中模拟声明的绑定

db/schema.ts

数据库 Schema,初始为空,按需添加

examples/d1/

可选的 D1 示例用法

drizzle.config.ts

Drizzle 配置,支持本地迁移生成


工作空间用户身份(Workspace Auth Headers)

OpenAI Workspace Sites 可以通过请求头读取当前登录用户的信息:

  • 邮箱:从oai-authenticated-user-email头中获取。

  • 全名(SIWC 认证后):从oai-authenticated-user-full-name头中获取,值为percent-encoded UTF-8​ 编码,同时附带oai-authenticated-user-full-name-encoding: percent-encoded-utf-8

全名为可选字段,缺失时请回退到邮箱:

import { headers } from "next/headers"; export default async function Home() { const requestHeaders = await headers(); const email = requestHeaders.get("oai-authenticated-user-email"); const encodedFullName = requestHeaders.get("oai-authenticated-user-full-name"); const fullName = encodedFullName && requestHeaders.get("oai-authenticated-user-full-name-encoding") === "percent-encoded-utf-8" ? decodeURIComponent(encodedFullName) : null; const displayName = fullName ?? email; // ... }

可选的 ChatGPT 登录(Dispatch 托管)

当站点需要可选的​ 或必须的​ ChatGPT 登录时,从app/chatgpt-auth.ts导入即用型工具函数:

函数

用途

getChatGPTUser()

获取当前登录用户(可选登录场景)

requireChatGPTUser(returnTo)

未登录访客强制跳转至 Sign in with ChatGPT(服务端渲染页面)

chatGPTSignInPath(returnTo)

生成登录链接,供前端<a>或跳转使用

chatGPTSignOutPath(returnTo)

生成登出链接

  • returnTo同源相对路径,指定登录/登出后的跳转目标,工具函数会自动校验并安全编码。

  • 受保护页面必须添加export const dynamic = "force-dynamic",因为它们依赖每次请求的动态身份头。

重要说明

  • Dispatch 平台​ 托管了以下路径和逻辑,你不需要app/中实现它们:

    • /signin-with-chatgpt

    • /signout-with-chatgpt

    • /callback

    • OAuth Cookie 管理

    • 身份头注入

    只有调用了上述 helper 的路由才会触发登录流程,未调用的路由保持匿名可访问。

  • SIWC 仅建立用户身份,不证明工作空间成员资格。​ 如需工作空间级别的访问限制,请使用 Sites 托管平台的访问策略控制,或在服务端自行实现成员校验 / 白名单逻辑。

使用建议

场景

推荐做法

个人账户页、用户仪表盘、已保存记录、写操作

✅ 使用 SIWC 绑定当前 ChatGPT 用户

公开内容

✅ 保持匿名访问


常用命令

npm run dev # 启动本地开发 npm run build # 验证 vinext 构建产物 npm test # 构建并验证渲染的加载骨架屏 npm run db:generate # Schema 变更后生成 Drizzle 迁移文件

了解更多

  • 📖 vinext 文档

  • 📖 Drizzle + Cloudflare D1 指南


提示:如需自定义数据库 Schema,编辑db/schema.ts后运行npm run db:generate即可生成迁移文件。D1 绑定和 R2 绑定在.openai/hosting.json中声明,本地开发由vite.config.ts自动模拟,无需额外配置。

← 返回列表