尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Upload HTML, CSS, JS, or JSX. Render it in a sandbox. Share with a link.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Upload HTML, CSS, JS, or JSX. Render it in a sandboxed iframe. Share it with a public link.
Built with Next.js 16 (App Router) + Supabase (Postgres) + Tailwind 4.
Sign-in is centralized behind the shared hub SSO at
tools.suncoast.studio — this app has no
login/signup pages of its own.查看完整 README ↗Upload HTML, CSS, JS, or JSX. Render it in a sandboxed iframe. Share it with a public link.
Built with Next.js 16 (App Router) + Supabase (Postgres) + Tailwind 4. Sign-in is centralized behind the shared hub SSO at tools.suncoast.studio — this app has no login/signup pages of its own.
*.tools.suncoast.studio toolsArtifacts allow up to 6 MiB of decoded file content. Saves above 1 MiB of JSON
are gzip-compressed in the browser and decoded on the server. Compressed uploads
are capped at 3 MiB to leave headroom for the hosting platform's request limit.
Already-compressed images barely shrink under gzip, so image-heavy artifacts can
hit that cap well below 6 MiB; import-time photo resizing keeps typical builds
under it.
Upload failures appear in the editor without discarding your work. Increasing
Next.js's serverActions.bodySizeLimit does not override a platform-level limit.
Identity and data are split across two Supabase projects:
NEXT_PUBLIC_SUPABASE_URL and
NEXT_PUBLIC_SUPABASE_ANON_KEY.artifacts table, accessed
server-side with the service role: SUPABASE_URL +
SUPABASE_SERVICE_ROLE_KEY.cp .env.example .env.local
# the URLs are pre-filled; fill in the two keys
Beyond the four Supabase vars above:
NEXT_PUBLIC_AUTH_COOKIE_DOMAIN — .tools.suncoast.studio in prod, and it
must be identical across all tool Vercel projects (that's what makes the
session shared). Leave empty for local dev (host-only cookie).HUB_LOGIN_URL — where signed-out users are sent
(https://tools.suncoast.studio/login).NEXT_PUBLIC_SITE_URL — this app's own URL.There are no login/signup pages in this app — sign in through the hub at tools.suncoast.studio.
Supabase dashboard → SQL Editor → paste and run each file in
supabase/migrations/ in numeric order:
001_artifacts.sql — artifacts
table + RLS policies.002_directory_and_description.sql
— description, in_directory, owner_email columns, directory RLS
policy, and the owner_email trigger.003_backfill_legacy_descriptions.sql
— backfills placeholder descriptions on legacy rows so they pass the
minimum-length validation on save.004_share_tokens_for_directory_artifacts.sql
— backfills share_token for legacy rows already in the directory.Migrations 001–004 are idempotent — safe to re-run.
005_external_identity.sql
is part of the hub-SSO cutover (drops the local-auth FK + owner_email
trigger) and is applied once, at cutover — not before.
None here. Providers, redirect URLs, and email confirmation are configured on
the hub's identity project — this app no longer has /auth/callback or
login/signup routes. The only auth route it owns is POST /auth/signout,
which clears the shared sb-* cookies and redirects to the hub login.
Paste the HTML from supabase/templates/ into
Authentication → Email Templates — on the hub identity project's
dashboard (project elkplwruyikftwccarpy), not this app's data project;
auth emails are sent by the identity project. See
supabase/templates/README.md for the
file-to-slot mapping.
pnpm install
pnpm dev
Open http://localhost:3000.
vercel CLIpnpm dlx vercel@latest # first-time link (will prompt to create project)
pnpm dlx vercel env add NEXT_PUBLIC_SUPABASE_URL
pnpm dlx vercel env add NEXT_PUBLIC_SUPABASE_ANON_KEY
pnpm dlx vercel env add NEXT_PUBLIC_AUTH_COOKIE_DOMAIN # .tools.suncoast.studio
pnpm dlx vercel env add HUB_LOGIN_URL # https://tools.suncoast.studio/login
pnpm dlx vercel env add SUPABASE_URL
pnpm dlx vercel env add SUPABASE_SERVICE_ROLE_KEY
pnpm dlx vercel env add NEXT_PUBLIC_SITE_URL # https://artifacts.tools.suncoast.studio
pnpm dlx vercel --prod
NEXT_PUBLIC_SUPABASE_URL + NEXT_PUBLIC_SUPABASE_ANON_KEY — the shared
identity (hub SSO) projectNEXT_PUBLIC_AUTH_COOKIE_DOMAIN — .tools.suncoast.studio (identical
across all tool projects)HUB_LOGIN_URL — https://tools.suncoast.studio/loginSUPABASE_URL + SUPABASE_SERVICE_ROLE_KEY — this app's own data projectNEXT_PUBLIC_SITE_URL — your production URL (e.g. https://artifacts.tools.suncoast.studio). Set this on Production only. Preview deploys don't participate in SSO — the shared .tools.suncoast.studio cookie can't reach *.vercel.app — so leaving Preview unset (falling back to http://localhost:3000) is fine.No Supabase auth URL configuration is needed here — Site URL and redirect
URLs live on the hub's identity project, and this app has no /auth/callback
route.
Existing share links keep working — the share token is stored in the DB and
doesn't depend on the host. Any links you sent with localhost in them die;
new links picked up from the deployed site use the production host.
Each artifact is a bundle of files stored as JSONB. On render, the server
builds a single HTML document that's piped into an iframe via srcDoc. The
iframe is sandboxed (sandbox="allow-scripts allow-forms allow-popups allow-modals")
so artifact code can't reach into the parent page, cookies, or storage.
index.html), inlines any
local <link> and <script> references against the uploaded files.import/export
syntax, base64-encodes the result into the iframe, then uses Babel standalone
at runtime to transform JSX and mount the first component named App,
Page, Main, or the default export.app/
page.tsx Landing page (live JSX demo in an iframe)
auth/signout/ POST /auth/signout — purges sb-* cookies, redirects to hub login
dashboard/ User dashboard
new/ Create artifact
a/[id]/ Owner view + editor + share bar
d/[id]/ Directory artifact view (signed-in users)
directory/ Team directory of shared artifacts
s/[shareId]/ Public share view (cached, OpenGraph metadata)
not-found.tsx 404 page
components/
ArtifactEditor.tsx Main editor (files, code, preview)
ArtifactRenderer.tsx Sandboxed iframe
ShareBar.tsx Share toggle + copy
Header.tsx, FileList.tsx, ui/*
lib/
renderer.ts Builds the iframe document
artifacts.ts Server actions (create / update / share / delete)
auth.ts requireUser() — hub SSO session + allowlist gate
supabase/ server.ts (identity session), data.ts (service-role data client)
utils.ts
supabase/migrations/ SQL schema
proxy.ts Session cookie refresh (Next 16 replaces middleware.ts)
vercel.ts Vercel deploy config (cache headers)