One browser source. Infinite canvas. Shared live overlay control for streamers and mods.
  • TypeScript 87.3%
  • CSS 10.3%
  • JavaScript 1.4%
  • Dockerfile 0.7%
  • Shell 0.3%
Find a file
beasty 89ba4d14e4
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
chore: upgrade dependencies and release tooling
2026-07-24 22:22:29 +02:00
.forgejo/workflows chore: upgrade dependencies and release tooling 2026-07-24 22:22:29 +02:00
.github/workflows.disabled feat: modernize canvas backend and authenticated media 2026-07-24 09:27:16 +02:00
.vscode Initial Moddrop snapshot 2026-04-06 19:00:46 +02:00
app feat: modernize canvas backend and authenticated media 2026-07-24 09:27:16 +02:00
backend/stream-canvas chore: upgrade dependencies and release tooling 2026-07-24 22:22:29 +02:00
components chore: worktree-safe Infisical config and Orca dev workspace 2026-07-24 09:30:33 +02:00
convex feat: modernize canvas backend and authenticated media 2026-07-24 09:27:16 +02:00
lib feat: modernize canvas backend and authenticated media 2026-07-24 09:27:16 +02:00
public fix: make Forgejo release builds reliable 2026-07-24 13:36:25 +02:00
scripts feat: modernize canvas backend and authenticated media 2026-07-24 09:27:16 +02:00
.dockerignore Fix Docker build context for stream-canvas 2026-04-06 20:54:18 +02:00
.env.example feat: modernize canvas backend and authenticated media 2026-07-24 09:27:16 +02:00
.gitignore Initial Moddrop snapshot 2026-04-06 19:00:46 +02:00
.infisical.json feat: media-first canvas toolbar and media inspector panel (#4) 2026-07-24 09:07:30 +02:00
.node-version feat: modernize canvas backend and authenticated media 2026-07-24 09:27:16 +02:00
.npmrc init 2026-03-13 13:59:20 -07:00
AGENTS.md feat: modernize canvas backend and authenticated media 2026-07-24 09:27:16 +02:00
biome.json feat: modernize canvas backend and authenticated media 2026-07-24 09:27:16 +02:00
components.json Initial Moddrop snapshot 2026-04-06 19:00:46 +02:00
compose.dev.yml feat: modernize canvas backend and authenticated media 2026-07-24 09:27:16 +02:00
convex.json Initial Moddrop snapshot 2026-04-06 19:00:46 +02:00
docker-entrypoint.sh security/stream canvas hardening (#2) 2026-04-26 12:52:04 +02:00
Dockerfile chore: upgrade dependencies and release tooling 2026-07-24 22:22:29 +02:00
LICENSE.md Add LICENSE.md file 2026-04-06 19:25:08 +02:00
next-env.d.ts Initial Moddrop snapshot 2026-04-06 19:00:46 +02:00
next.config.mjs feat: modernize canvas backend and authenticated media 2026-07-24 09:27:16 +02:00
orca.yaml feat: media-first canvas toolbar and media inspector panel (#4) 2026-07-24 09:07:30 +02:00
package.json chore: upgrade dependencies and release tooling 2026-07-24 22:22:29 +02:00
pnpm-lock.yaml chore: upgrade dependencies and release tooling 2026-07-24 22:22:29 +02:00
pnpm-workspace.yaml chore: upgrade dependencies and release tooling 2026-07-24 22:22:29 +02:00
postcss.config.mjs Initial Moddrop snapshot 2026-04-06 19:00:46 +02:00
README.md feat: modernize canvas backend and authenticated media 2026-07-24 09:27:16 +02:00
renovate.json chore: configure Renovate 2026-07-24 18:21:12 +00:00
tailwind.config.ts Initial Moddrop snapshot 2026-04-06 19:00:46 +02:00
tsconfig.json Initial Moddrop snapshot 2026-04-06 19:00:46 +02:00
vitest.config.ts feat: modernize canvas backend and authenticated media 2026-07-24 09:27:16 +02:00

Moddrop preview

Moddrop

One browser source. Infinite canvas.

Shared live overlay control for streamers and mods.

Next.js 16 React 19 pnpm tldraw

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:1355
  • https://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