A beautiful, modern spatial notebook for visual thinking
Organize ideas, files, and visuals on an infinite zoomable canvas
Features โข Quick Start โข Documentation โข Demo
Infinite Canvas is a web-based spatial notebook that lets you organize your thoughts, code, images, and documents on an infinite 2D workspace. Think of it as a digital desk where everything floats beautifully in space.
- ๐จ Beautiful Design - Minimalist Apple-inspired aesthetic
- โพ๏ธ Infinite Workspace - Pan and zoom freely
- ๐ Multiple Card Types - Text, Markdown, Code, Images, Sticky Notes
- ๐ญ Smooth Animations - Physics-based motion with Framer Motion
- ๐พ Auto-save - Local storage + optional backend sync
- ๐ฏ Intuitive Gestures - Drag, zoom, multi-select
- ๐ฆ Export/Import - Save and share your canvases
- Node.js 20 or higher
- npm or yarn
- PostgreSQL 14+ (optional, for backend features)
# Clone or navigate to the repository
cd infinite-canvas
# Install all dependencies (root, client, server)
npm run install:all
# Copy environment variables
cp .env.example .env
# Edit .env with your configuration (optional)Option 1: Full Stack (Frontend + Backend)
npm run devThis starts:
- Frontend at http://localhost:5173
- Backend at http://localhost:3001
Option 2: Frontend Only (No Database)
cd client
npm install
npm run devThe frontend works standalone with localStorage!
Comprehensive documentation is available in the /docs folder:
| Document | Description |
|---|---|
| README.md | Complete user guide and setup instructions |
| API.md | Backend API reference |
| DESIGN.md | Design system and visual guidelines |
| ROADMAP.md | Future features and development plans |
| Action | How to |
|---|---|
| Pan | Click and drag the canvas |
| Zoom | Scroll or pinch (trackpad) |
| Select | Click a card |
| Multi-select | Shift + Click |
| Move card | Drag it |
| Resize | Drag bottom-right corner |
| Delete | Select and press Delete/Backspace |
| Edit | Click inside a card |
Escape- Deselect allDelete/Backspace- Delete selected cardsCmd/Ctrl + E- Export canvas
- React 18 + TypeScript
- Vite - Lightning-fast dev server
- Zustand - State management
- Framer Motion - Animations
- TailwindCSS - Styling
- React Markdown - Document rendering
- Node.js 20 + Express
- TypeScript - Type safety
- Drizzle ORM - Database queries
- PostgreSQL - Data storage
- Zod - Validation
- Multer - File uploads
infinite-canvas/
โโโ client/ # React frontend
โ โโโ src/
โ โ โโโ canvas/ # Canvas rendering
โ โ โโโ components/ # UI components
โ โ โโโ nodes/ # Card types
โ โ โโโ store/ # State management
โ โ โโโ hooks/ # React hooks
โ โ โโโ utils/ # Helpers
โ โโโ package.json
โ
โโโ server/ # Express backend
โ โโโ src/
โ โ โโโ routes/ # API routes
โ โ โโโ controllers/# Business logic
โ โ โโโ db/ # Database
โ โ โโโ models/ # Data models
โ โ โโโ middlewares/# Express middleware
โ โโโ package.json
โ
โโโ docs/ # Documentation
โ โโโ README.md
โ โโโ API.md
โ โโโ DESIGN.md
โ โโโ ROADMAP.md
โ
โโโ package.json # Root scripts
โโโ .env.example # Environment template
โโโ README.md # This file
- Infinite zoomable workspace
- Multiple card types floating in space
- Smooth pan and zoom
- Text Notes - Simple formatted text
- Markdown - Rich documents with preview
- Code Snippets - Syntax-highlighted code
- Images - Photos and graphics
- Sticky Notes - Quick colorful notes
- Drag cards to organize
- Zoom in for detail, zoom out for overview
- Multi-select for bulk operations
- Right-click for context menu
cd client
npm run dev # Start dev server
npm run build # Production build
npm run preview # Preview buildcd server
npm run dev # Start with hot reload
npm run build # Compile TypeScript
npm run start # Production server
npm run db:generate # Generate migrations
npm run db:push # Push to databaseCreate a .env file:
# Server
PORT=3001
NODE_ENV=development
# Database (optional)
DATABASE_URL=postgresql://user:pass@localhost:5432/infinite_canvas
# CORS
CLIENT_URL=http://localhost:5173Every interaction is smooth and delightful. Cards float with subtle shadows, lift on hover, and respond to gestures with physics-based animations.
Built with TypeScript throughout, comprehensive error handling, security headers, CORS protection, and optimized bundle size.
Easy to add new card types, customize styling, and extend functionality. Clean separation of concerns and modular design.
The frontend works perfectly without a backend using localStorage. Add the backend when you need sync or collaboration.
- Bundle Size: ~180KB gzipped
- First Load: <1.5s
- Smooth 60fps: Up to 50 cards
- Optimized: Code splitting, lazy loading
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
See ROADMAP.md for planned features.
This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by Apple Notes, FigJam, and Notion
- Built with amazing open-source tools
- Design philosophy influenced by Apple's Human Interface Guidelines
- ๐ Check the documentation
- ๐ Report bugs via GitHub Issues
- ๐ก Request features via GitHub Discussions
- โ Ask questions in Discussions
See our ROADMAP.md for upcoming features:
- Real-time collaboration
- Mobile apps
- AI-powered features
- Advanced card types
- And much more!