Doop
Doop: 오픈소스 멀티플레이어 디자인 캔버스 및 AI 에이전트용 MCP
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Full-stack template for generated web apps.
apps/clientapps/serverpackages/sharedInstall dependencies:
pnpm install
Start the local app:
cd apps/client
pnpm dev
Open:
http://localhost:3100/
The Vite dev server mounts the Hono backend under /api/* on the same origin.
The Vite dev server serves history routes from the same client app. For example:
http://localhost:3100/
Frontend env is public and must use VITE_.
Backend DB env is injected into the running function by skybase-controller for the current session_id. Local .env values are only for development/debugging.
Backend runtime env contract:
| Env | Required | Source | Purpose |
|---|---|---|---|
SKYBASE_DB_ENDPOINT | Yes for DB-backed APIs | skybase-controller | sqld/libsql user API endpoint for this session, for example http://10.59.118.218:8080 |
SKYBASE_DB_TOKEN / SKYBASE_DB_AUTH_TOKEN | Yes for DB-backed APIs | skybase-controller | libsql rw token used as Authorization: Bearer <token>; SKYBASE_DB_AUTH_TOKEN is accepted as a controller-compatible alias |
SKYBASE_DB_NAMESPACE | Yes for DB-backed APIs | skybase-controller | tenant namespace sent as x-namespace on libsql requests |
BETTER_AUTH_SECRET | Recommended for production | controller/deploy config, local .env in dev | Better Auth signing secret |
BETTER_AUTH_URL | Yes | controller/deploy config, local .env in dev | Public auth base URL, for example http://localhost:3100/api/auth |
ALLOWED_ORIGINS | Yes | controller/deploy config, local .env in dev | Comma-separated CORS origins |
GOOGLE_CLIENT_ID | Optional | OAuth provider config | Enables Google login when paired with GOOGLE_CLIENT_SECRET |
GOOGLE_CLIENT_SECRET | Optional | OAuth provider config | Enables Google login when paired with GOOGLE_CLIENT_ID |
SKYBASE_DB_TOKEN / SKYBASE_DB_AUTH_TOKEN is not a Better Auth session token, user token, or skybase-controller X-Auth-Token. It is the libsql database token injected into this backend runtime. The app does not create this token and does not use DB admin email/password at runtime. Template code normalizes both names to env.SKYBASE_DB_TOKEN; when both names are present, SKYBASE_DB_AUTH_TOKEN wins.
Local development can use a root .env file:
SKYBASE_DB_ENDPOINT=http://127.0.0.1:8080
SKYBASE_DB_AUTH_TOKEN=...
# SKYBASE_DB_TOKEN=... also works as a legacy alias
SKYBASE_DB_NAMESPACE=local
BETTER_AUTH_SECRET=replace-with-a-local-secret
BETTER_AUTH_URL=http://localhost:3100/api/auth
ALLOWED_ORIGINS=http://localhost:3100
If Vite starts on a fallback port such as 3101, update BETTER_AUTH_URL and ALLOWED_ORIGINS to that port for local testing.
Production startup does not fail when BETTER_AUTH_SECRET is missing; the app falls back to a template default so demos can boot. Set a stable random BETTER_AUTH_SECRET before using real user auth. Missing SKYBASE_DB_ENDPOINT, DB token, or SKYBASE_DB_NAMESPACE does not block /api/health, but DB-backed APIs and /api/auth/* return DATABASE_UNCONFIGURED.
Authentication is handled by Better Auth at:
/api/auth/*
Supported auth flows:
Better Auth data is stored in skybase-db through its Drizzle adapter. Required auth tables are defined in the Drizzle schema and applied by agent database tooling, not by this app at runtime.
The app exposes business APIs to browsers. It does not expose raw database APIs.
Template routes:
GET /api/health
GET /api/auth-config
/api/auth/*
GET /api/todos
POST /api/todos
PATCH /api/todos/:id
DELETE /api/todos/:id
The app runtime does not create db instances, create tables, run migrations, or seed data. Controller owns DB provisioning/deploy env injection. Agent tooling owns Drizzle schema setup/migrations through the self-host setup_database step. FC runtime only performs business CRUD. The template intentionally does not expose DB setup or migration package scripts; those commands belong to controller/agent tooling so namespace-aware sqld execution stays outside the generated app runtime.
Use the shared frontend API wrapper:
import { apiFetch } from "@/lib/api";
apiFetch() attaches the current Better Auth bearer token by default and shows a toast for non-2xx API responses.
Build frontend:
cd apps/client
pnpm build
Build backend for the default FC event adapter entry:
cd apps/server
pnpm build
Build backend for the long-running web entry used by the Docker image:
cd apps/server
SERVER_BUILD_TARGET=web pnpm build
Backend build output:
apps/server/dist/index.js
Build the backend web entry first, then build the image:
cd apps/server
SERVER_BUILD_TARGET=web pnpm build
cd ../..
docker build -t coding-agent-web-template-api .
The Docker image copies and runs the existing backend build output:
apps/server/dist/index.js
The runtime image has a root package.json start script and supports platforms that run:
npm start
For local container debugging, provide backend runtime env through local container tooling without committing secrets.
pnpm --filter server exec tsc -p tsconfig.json --noEmit
pnpm --filter server build
pnpm --filter client exec tsc -p tsconfig.app.json --noEmit
pnpm --filter client build