Doop
Doop: 오픈소스 멀티플레이어 디자인 캔버스 및 AI 에이전트용 MCP
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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)