Skip to content

Repository files navigation

skillbase

검증된 AI Skills를 출처·설치 경로·검증 정보와 함께 탐색하는 카탈로그입니다. GitHub, skills.sh, 국내 디렉터리에서 Agent Skills 표준 SKILL.md를 주기적으로 수집하고, 운영자 검토를 거친 항목만 공개합니다.

Prerequisites

  • Node.js >=22.13.0

개발 시작

npm install
npm run dev
npm run build

로컬 환경 변수 이름은 .env.example을 참고하세요. 운영 환경의 secret은 Sites runtime settings에서 관리합니다.

출시 전 검사는 다음 명령을 사용합니다.

npm run health:release

1인 운영 절차와 중단 기준은 docs/one-person-runbook.md에 정리되어 있습니다.

주요 구성

  • edit site code under app/
  • .openai/hosting.json declares Sites D1 and R2 bindings
  • vite.config.ts simulates declared bindings for local development
  • db/schema.ts contains catalog, approval, verification, quality, usage, backup, and workspace tables
  • worker/index.ts runs scheduled collection, summary generation, health monitoring, and retention
  • sandbox-adapter/ verifies installation in an isolated Worker

Workspace Auth Headers

Signed-in visitors receive both oai-authenticated-user-id and oai-authenticated-user-email. Private Sites require every visitor to sign in; public Sites may also have anonymous visitors, for whom neither header is present.

The user ID is stable for the same user on the same Site and different across Sites. Email and name are intended for display or contact purposes.

SIWC-authenticated workspace sites may also receive oai-authenticated-user-full-name when the user's SIWC profile has a non-empty name claim. The full-name value is percent-encoded UTF-8 and is accompanied by oai-authenticated-user-full-name-encoding: percent-encoded-utf-8.

Treat the full name as optional and fall back to email when it is absent:

import { headers } from "next/headers";

export default async function Home() {
  const requestHeaders = await headers();
  const userId = requestHeaders.get("oai-authenticated-user-id");
  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;
  // ...
}

Optional Dispatch-Owned ChatGPT Sign-In

Import the ready-to-use helpers from app/chatgpt-auth.ts when the site needs optional or required ChatGPT sign-in:

  • Use getChatGPTUser() for optional signed-in UI.
  • Use requireChatGPTUser(returnTo) for server-rendered pages that should send anonymous visitors through Sign in with ChatGPT.
  • Use chatGPTSignInPath(returnTo) and chatGPTSignOutPath(returnTo) for browser links or actions.
  • Pass a same-origin relative returnTo path for the destination after sign-in or sign-out. The helper validates and safely encodes it.
  • Mark protected pages with export const dynamic = "force-dynamic" because they depend on per-request identity headers.

Dispatch owns /signin-with-chatgpt, /signout-with-chatgpt, /callback, the OAuth cookies, and identity header injection. Do not implement app routes for those reserved paths. Routes that do not import and call the helper remain anonymous-compatible.

SIWC establishes identity only; it does not prove workspace membership. Use the Sites hosting platform's access policy controls for workspace-wide restrictions, or enforce explicit server-side membership or allowlist checks.

Use SIWC for account pages, user-specific dashboards, saved records, and write actions tied to the current ChatGPT user. Leave public content anonymous.

Useful Commands

  • npm run dev: start local development
  • npm run build: verify the vinext build output
  • npm test: build the starter and verify its rendered loading skeleton
  • npm run db:generate: generate Drizzle migrations after schema changes

Learn More

About

국내, 해외의 AI 스킬들을 담은 사이트입니다.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages