Valhalla Brush is a real-time, multiplayer canvas application where users can:
- 🔗 Create or join drawing rooms
- ✍️ Collaboratively sketch, write, and visualize ideas
- 🔄 Share live canvas updates with all participants
This is an early-stage project; many features (e.g., authentication, advanced tools, session recording) will be added soon.
-
Room Management
- Create new canvas rooms
- Join existing rooms via unique URLs
-
Live Collaboration
- Real-time drawing and writing sync
- Multi-user cursors and color indicators
-
Share & Persist
- Share room links instantly
- Canvas state persisted in PostgreSQL
| Layer | Technology |
|---|---|
| Frontend | Next.js, TypeScript |
| Styling | Tailwind CSS |
| Backend | Next.js API routes |
| Database & ORM | PostgreSQL, Prisma |
| Monorepo | Turborepo |
| Deployment & DevOps | Nginx (reverse proxy), Docker, CI/CD pipelines |
-
Clone the Repo
git clone https://github.com/your-org/valhalla-brush.git cd valhalla-brush -
Install Dependencies
npm i -g pnpm install pnpm install
-
Environment Variables Create a
.envfile in the root:DATABASE_URL="postgresql://user:password@localhost:5432/valhalla"
-
Database Migrations
cd packages cd db touch .env DATABASE_URL="postgresql://postgres:password@localhost:5432/postgres" npx prisma migrate dev --name init\ npx prisma generate
-
Run Locally
pnpm run dev
-
Build
pnpm run build
-
Reverse Proxy (Nginx)
server { listen 80; server_name your-domain.com; location / { proxy_pass http://app:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
4
- User authentication & profiles
- Colour picker & brush settings
- Undo/redo functionality
- Session recording & playback
- Export canvas as image/PDF
- Fork the repository
- Create a feature branch (
git checkout -b feature/name) - Commit your changes (
git commit -m "feat: add new feature") - Push to branch (
git push origin feature/name) - Open a Pull Request
Distributed under the MIT License. See LICENSE for details.