Self Hosting & Collaboration
Self-Hosted Deployment
DevBoard is a static single-file HTML app built with Vite and React. It runs entirely in your browser with no backend required for basic usage.
Option 1: Direct Deployment (Recommended for Most Users)
The simplest way to deploy DevBoard:
- Build the app:
npm run build - Deploy
dist/index.htmlto any static hosting: - Netlify: Drag and drop
dist/→ Netlify.com - Vercel:
vercel deploy - GitHub Pages: Push
dist/to agh-pagesbranch - Your own server: Copy
dist/index.htmlto any web root (Apache, Nginx, etc.) - Docker: Mount the file in a lightweight HTTP server
Option 2: Docker Container
Build and run:
Option 3: Behind Your Domain (Reverse Proxy)
Nginx example:
Apache example:
Real-Time Collaboration (Coming Soon)
DevBoard currently supports single-user boards with URL-based sharing. Real-time collaboration is on the roadmap but not yet implemented.
Planned Architecture for Collaboration
To add real-time editing, DevBoard would need:
- WebSocket or WebRTC for live updates across users
- Operational Transform (OT) or CRDT for conflict-free merging of edits
- Persistent database to save board state across sessions
- User authentication to identify collaborators
Suggested Tech Stacks
🚀 Supabase (Easiest)
PostgreSQL + real-time subscriptions + auth built-in.
- Store board JSON in Postgres
- Use Supabase Realtime for live updates
- Free tier covers dev/hobby projects
- Drop-in migrations from Zustand → Supabase
🔗 WebSocket + Database
Full control; higher maintenance.
- Backend: Node.js (Express/Fastify) + Socket.io
- Database: PostgreSQL, MongoDB, or Firebase
- Sync: Manual or Yjs/Automerge CRDT
- Host on Heroku, Railway, or your own server
⚛️ Yjs + Provider
CRDT library; works with any backend.
- Conflict-free merging out of the box
- Pair with WebSocket, WebRTC, or HTTP polling
- Integrate with existing Zustand store
- Works offline; syncs when reconnected
🔥 Firebase Realtime DB
Managed; good for rapid prototyping.
- No backend to maintain
- Real-time listeners built-in
- Auth via Firebase
- Scales easily; metered pricing
Integration Roadmap (For Contributors)
If you're forking DevBoard to add collaboration, here's a suggested approach:
- Keep single-user mode default — don't break existing deploys
- Add an optional backend flag:
VITE_BACKEND_URL=https://api.example.com - Create a separate branch for the backend integration (e.g.,
collab-supabase) - Migrate board state gradually:
- Phase 1: Load/save to backend instead of localStorage
- Phase 2: WebSocket listener for node changes
- Phase 3: Multi-user cursors and presence
- Document the fork and link it here
Contributing to DevBoard
DevBoard is open-source. Whether you want to add features, fix bugs, or suggest ideas, here's how to get involved:
Getting Started
- Fork the repo: github.com/MishaWave/devboard
- Clone your fork:
git clone https://github.com/YOUR-USERNAME/devboard.git cd devboard npm install npm run dev
- Create a feature branch:
git checkout -b feature/my-awesome-feature - Make your changes and test locally
- Push and open a PR: Describe what you built and why
Areas Looking for Help
- Real-time collaboration: Add WebSocket/Supabase integration (see above)
- Mobile support: Touch gestures, responsive UI tweaks
- Export options: PDF, Markdown, LaTeX for different workflows
- Performance: Large boards (1000+ nodes) can lag; optimizations welcome
- Templates: Pre-made boards (design sprint, retro, architecture diagrams)
- Plugins/extensions: API for third-party node types
- Localization: Translations for UI and docs
Code Overview (For Contributors)
Quick reference for the most important files:
src/types/index.ts— All TypeScript types and interfacessrc/store/boardStore.ts— Zustand state (nodes, camera, clipboard)src/App.tsx— Root component, keyboard shortcutssrc/components/Canvas.tsx— Main canvas, Konva stage, tool handlingsrc/components/Toolbar.tsx— Tool picker UIsrc/components/nodes/— Node implementations (StickyNote, ShapeNode, etc.)
Adding a new node type? The README.md in the repo has a checklist for this.
Project Guidelines
- Tests: Not strictly required, but appreciated
- Performance: Avoid large re-renders; use React.memo where appropriate
- Browser support: Modern browsers (Safari, Chrome, Firefox, Edge)
- Accessibility: Keyboard shortcuts, ARIA labels, high contrast in dark mode
- Mobile: Canvas works but not optimized yet; don't break it further
Reporting Issues & Suggestions
Found a bug or have an idea? Open an issue on GitHub.
Include:
- What you did (steps to reproduce)
- What you expected
- What happened instead
- Browser, OS, DevBoard version
Connect with the Community
- GitHub Discussions: Ideas, architecture questions, show & tell
- GitHub Issues: Bug reports, feature requests
- X/Twitter: @MishoWave — announcements, casual chat
FAQ
Can I use DevBoard offline?
Yes. The built dist/index.html is a fully self-contained app. Save the file and open it locally in your browser—no server needed.
Can I backup my boards?
Yes. Use the "Save JSON" button in the top bar to export your board. Keep it safe, then "Load JSON" to restore anytime.
Does DevBoard track me?
No. All data stays in your browser's localStorage. There's no analytics, tracking, or telemetry. Your boards are yours.
Can I self-host and add collaboration?
Yes—fork the repo and add a backend (see the Suggested Tech Stacks section above). Most users keep a branch for this.
How do I add a custom domain to my deployment?
If you're hosting on Netlify or Vercel, follow their docs for custom domains. For your own server, set up a reverse proxy (Nginx/Apache) to point your domain to the app.