A real-time collaborative whiteboard with infinite zoom capabilities. Draw, write, and create together β from pixel-level detail to universe-scale views.
Try it now β crorry-dev.github.io/krasserUndKreativer
The demo runs entirely in your browser with local persistence. No account required!
- Infinite Zoom β Zoom from 0.0001% to 1,000,000%+ without limits
- Real-time Collaboration β Work together via WebSocket with live cursors
- Rich Drawing Tools β Pen, shapes (rect, circle, triangle, diamond, line, arrow), text, sticky notes
- Smart Eraser β Stroke-splitting eraser that cuts through lines
- Local Persistence β Board state survives page reloads
- History Tracking β Undo/redo with timestamps and user attribution
- Dark Mode UI β Modern, minimal interface with Apple-style design
infinite-canvas/
βββ apps/
β βββ api/ # Python FastAPI backend
β βββ web/ # React + TypeScript frontend
βββ docker-compose.yml
βββ dev.sh # Development startup script
| Layer | Technology |
|---|---|
| Frontend | React 18, TypeScript, Vite, Zustand, React-Konva, Tailwind CSS |
| Backend | Python 3.12, FastAPI, SQLAlchemy, Alembic |
| Database | PostgreSQL 16 + PostGIS |
| Cache | Redis 7 |
| Real-time | WebSockets |
- Node.js β₯ 20
- pnpm β₯ 8
- Python β₯ 3.12
- Docker & Docker Compose
git clone https://github.com/crorry-dev/krasserUndKreativer.git
cd krasserUndKreativer
# Install frontend dependencies
pnpm installcd apps/api
# Create virtual environment
python3 -m venv .venv
# Activate (macOS/Linux)
source .venv/bin/activate
# Activate (Windows)
# .venv\Scripts\activate
# Install dependencies
pip install -e ".[dev]"
cd ../..# Start PostgreSQL + Redis
docker compose up -dOption A: Start everything at once
./dev.shOption B: Start services separately
Terminal 1 β Backend:
cd apps/api
source .venv/bin/activate
export PYTHONPATH=$PWD
uvicorn src.main:app --host 0.0.0.0 --port 8000 --reloadTerminal 2 β Frontend:
cd apps/web
pnpm dev- Frontend: http://localhost:5173
- API Docs: http://localhost:8000/api/docs
- Health Check: http://localhost:8000/api/health
src/
βββ components/
β βββ Canvas/ # InfiniteCanvas with Konva
β βββ Toolbar/ # Tool selection & color picker
β βββ History/ # Undo/redo panel
β βββ Objects/ # Shape, Text, Sticky components
β βββ ...
βββ stores/
β βββ canvasStore.ts # Zustand state management
βββ hooks/
β βββ useWebSocket.ts # Real-time sync
β βββ useChunkedLoading.ts
βββ pages/ # Route pages
src/
βββ core/
β βββ config.py # Settings via pydantic-settings
β βββ database.py # SQLAlchemy async setup
βββ models/ # SQLAlchemy models
βββ routers/ # FastAPI route handlers
βββ services/ # Business logic
βββ websocket/ # WebSocket manager & handlers
# Frontend
cd apps/web
pnpm lint
# Backend
cd apps/api
source .venv/bin/activate
ruff check .
ruff format .
mypy src# Backend tests
cd apps/api
source .venv/bin/activate
pytestcd apps/api
source .venv/bin/activate
# Create migration
alembic revision --autogenerate -m "description"
# Run migrations
alembic upgrade headCreate .env.local in apps/api/:
DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/infinite_canvas
REDIS_URL=redis://localhost:6379
JWT_SECRET=your-super-secret-key
DEBUG=true| Service | Port | Description |
|---|---|---|
| PostgreSQL | 5432 | Main database with PostGIS |
| Redis | 6379 | WebSocket pub/sub & caching |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/health |
Health check |
| GET | /api/boards/{id} |
Get board data |
| POST | /api/boards |
Create new board |
| WS | /api/ws/{board_id} |
WebSocket connection |
Full API documentation available at /api/docs (Swagger UI).
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Frontend: ESLint + Prettier, strict TypeScript
- Backend: Ruff, strict mypy, type hints everywhere
- Follow existing patterns and conventions
This project is licensed under the MIT License β see LICENSE for details.
crorry-dev β GitHub
Made with β€οΈ for collaborative creativity