A collaborative drag and drop webpage builder where you can dump anything onto a canvas and share it with the world.
dumpster.page is a collaborative drag and drop webpage builder inspired by mmm.page, but with enhanced collaboration features. The original concept was to create a place for sharing photos from events and trips that felt more like a collaborative scrapbook than just a bunch of squares on a screen like iCloud/Google Photos albums.
The core philosophy is simple: no signups, no complex authentication - just claim a URL and put whatever you want on it. You create a dumpster.page with a slug of your choosing, get an editId for collaboration, and share your digital trash heap with the world.
- No Authentication Required: Just pick a URL and start creating
- Real-time Collaboration: Multiple people can edit the same page simultaneously
- Drag & Drop Interface: Intuitive canvas-based editing powered by tldraw
- Asset Uploads: Upload images, documents, and other files directly to your page
- Custom Styling: Set background colors and page metadata
- Instant Publishing: Changes are saved and published automatically
dumpster.page is built with:
- Frontend: Next.js 15 with React 19 and TypeScript
- Canvas Engine: tldraw SDK for the collaborative canvas experience
- Backend: Cloudflare Workers with Durable Objects for real-time sync
- Database: Turso (SQLite) with Drizzle ORM
- Storage: Cloudflare R2 for asset uploads
- Deployment: Vercel (frontend) + Cloudflare Workers (backend)
The application is broken down into four main components:
- Index Page - Landing page and discovery
- Create a new dumpster.page - Generate a new collaborative canvas
- Edit a dumpster.page - Real-time collaborative editing with editId
- View a dumpster.page - Public view of published content
dumpster.page/- Home pagedumpster.page/create- Create a new pagedumpster.page/edit/[editId]- Edit mode (collaborative)dumpster.page/[slug]- Public view
- Bun or Node.js 18+
- Cloudflare account for Workers and R2
- Turso account for the database
Create a .env.local file in the root directory:
# Database
TURSO_DATABASE_URL="libsql://"
TURSO_AUTH_TOKEN=""
# Cloudflare R2 Storage
R2_ACCESS_KEY_ID=""
R2_SECRET_ACCESS_KEY=""
R2_BUCKET_NAME=""
# Cloudflare Worker URL
NEXT_PUBLIC_TLDRAW_WORKER_URL=""- Clone the repository:
git clone https://github.com/yourusername/dumpster.git
cd dumpster- Install dependencies:
bun install- Set up the database:
bun run db:generate
bun run db:migrate- Start the development server:
bun run devThis will start both the Next.js frontend (port 3000) and the Cloudflare Worker (port 5172) in development mode.
bun run dev- Start both client and worker in development modebun run dev:client- Start only the Next.js development serverbun run dev:worker- Start only the Cloudflare Workerbun run build- Build the Next.js applicationbun run db:generate- Generate database migrationsbun run db:migrate- Run database migrationsbun run db:studio- Open Drizzle Studio for database management
The frontend can be deployed to Vercel with zero configuration:
- Connect your GitHub repository to Vercel
- Set the required environment variables
- Deploy
Deploy the worker using Wrangler:
wrangler deployMake sure to configure:
- Durable Objects binding:
TLDRAW_DURABLE_OBJECT - R2 bucket binding:
TLDRAW_BUCKET - Environment variables for database access
The application uses a simple schema with one main table:
pages (
id INTEGER PRIMARY KEY,
slug TEXT UNIQUE NOT NULL,
edit_id TEXT UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
title TEXT,
description TEXT,
background_color TEXT
)Contributions are welcome! This project embraces the spirit of creative chaos and collaborative building.
Check out some example dumpster pages:
MIT
made for raccoons. 🦝