- TypeScript 87.3%
- CSS 10.3%
- JavaScript 1.4%
- Dockerfile 0.7%
- Shell 0.3%
|
All checks were successful
Build and Push Container Images / deploy-convex (push) Has been skipped
Build and Push Container Images / build-stream-canvas (push) Successful in 2m29s
Build and Push Container Images / tag-convex-changes (push) Has been skipped
Build and Push Container Images / changes (push) Successful in 3s
Build and Push Container Images / build-frontend (push) Successful in 1m39s
|
||
|---|---|---|
| .forgejo/workflows | ||
| .github/workflows.disabled | ||
| .vscode | ||
| app | ||
| backend/stream-canvas | ||
| components | ||
| convex | ||
| lib | ||
| public | ||
| scripts | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| .infisical.json | ||
| .node-version | ||
| .npmrc | ||
| AGENTS.md | ||
| biome.json | ||
| components.json | ||
| compose.dev.yml | ||
| convex.json | ||
| docker-entrypoint.sh | ||
| Dockerfile | ||
| LICENSE.md | ||
| next-env.d.ts | ||
| next.config.mjs | ||
| orca.yaml | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| postcss.config.mjs | ||
| README.md | ||
| renovate.json | ||
| tailwind.config.ts | ||
| tsconfig.json | ||
| vitest.config.ts | ||
Moddrop
One browser source. Infinite canvas.
Shared live overlay control for streamers and mods.
Moddrop gives a stream one live canvas inside OBS. The streamer owns the room, invited mods join the same board, and media dropped into the stream zone renders live without scene juggling.
Stack
Next.js React Clerk Convex tldraw Hono WebSocket PostgreSQL Drizzle Garage/S3 pnpm
Run
pnpm install
pnpm dev
pnpm dev owns the whole local lifecycle: it starts PostgreSQL, waits for its
health check, applies the Drizzle migrations, and then launches the Portless
frontend and canvas routes plus Convex. Pressing Ctrl-C stops the applications
and removes the Compose container and network; the named database volume is
kept for the next run. Clerk Development instance credentials are loaded from
the shared Infisical development project into both applications without being
written to disk. Local startup rejects pk_live_ / sk_live_ keys because
Clerk restricts the production instance to moddrop.live; it requires the
matching pk_test_ / sk_test_ pair instead. If needed, authenticate once with
infisical login --domain http://192.168.60.11:8080. Set
MODDROP_DEV_DATABASE_URL only when intentionally using a different
development PostgreSQL instance.
https://moddrop.localhost:1355https://moddrop-stream-canvas.localhost:1355
See the stream canvas backend guide for the data model, migration flow, and production storage design.
Check
pnpm run lint && pnpm run typecheck && pnpm run test && pnpm run build
pnpm --dir backend/stream-canvas run typecheck && pnpm --dir backend/stream-canvas run test