Skip to content

Beautiful, intuitive visual seating chart planner for events. Drag-and-drop interface for weddings, conferences, and celebrations.

License

Notifications You must be signed in to change notification settings

gabriel1ll7/Seating-Planner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

26 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Seating.Art ๐Ÿช‘โœจ

A beautiful, intuitive visual seating chart planner for events of all sizes.

Plan your perfect seating arrangement with an elegant drag-and-drop interface. From intimate family gatherings to large weddings and corporate events, Seating.Art makes organizing your guests effortless and enjoyable.

License: MIT GitHub issues GitHub last commit Made with React TypeScript


๐ŸŽ‰ The Story

I built this app to plan the seating arrangement for my son's baptism party. What started as a weekend project to avoid drawing tables on paper became a fully-featured event planner that friends and family now use for their own celebrations.

Whether you're organizing a baptism, wedding, conference, or dinner party, Seating.Art helps you visualize and perfect your seating arrangements with ease.


โœจ Features

๐ŸŽจ Visual Canvas

  • Interactive canvas with zoom, pan, and drag-and-drop
  • Circular tables with 6-12 adjustable seats
  • Custom venue elements for bars, dance floors, DJ booths, and more
  • Venue space boundary to define your event area
  • Real-time visual feedback with hover highlights and tooltips
  • Keyboard shortcuts (Ctrl+0 to fit all, Delete to remove, Alt+drag to pan)

๐Ÿ‘ฅ Guest Management

  • Drag-and-drop guests between tables
  • Quick-add guests directly from the sidebar
  • Bidirectional highlighting between canvas and guest list
  • Capacity indicators showing filled/total seats per table
  • Unassigned guests section for easy organization
  • Guest search by hovering over chairs or names

๐Ÿ” Collaboration

  • Shareable URLs with unique slugs (e.g., happy-table-742)
  • PIN protection for edit access
  • View-only mode by default for shared links
  • Auto-save to localStorage and server (2-second debounce)
  • Offline support with localStorage fallback

๐ŸŽจ Beautiful UI

  • Dark/Light mode with system preference detection
  • Responsive design optimized for desktop and mobile
  • Paper-texture aesthetic throughout
  • Toast notifications for all actions
  • Smooth animations and transitions
  • Mobile-friendly sidebar with sheet overlay

๐Ÿ’พ Persistence

  • Automatic saving with visual status indicator
  • PostgreSQL backend for reliable data storage
  • localStorage caching for instant loads
  • Last venue auto-loads on return visit

๐Ÿš€ Quick Start

Prerequisites

  • Bun (recommended) or Node.js 18+
  • PostgreSQL 14+

Local Development

  1. Clone the repository

    git clone https://github.com/yourusername/seating-art.git
    cd seating-art
  2. Install dependencies

    bun install
    cd server && bun install && cd ..
  3. Set up the database

    Create a PostgreSQL database and update server/.env:

    DATABASE_URL="postgresql://USER:PASSWORD@localhost:5432/seating_art"
    PORT=3000

    Initialize the database schema:

    bun run db:init
  4. Start development servers

    # Start both frontend and backend concurrently
    bun run dev
    
    # Or start them separately:
    bun run dev:frontend  # Frontend on http://localhost:8080
    bun run dev:backend   # Backend on http://localhost:3000
  5. Open your browser

    Navigate to http://localhost:8080 and start planning!


๐ŸŒ Deployment

Deploy to Fly.io (Recommended)

  1. Install Fly CLI

    curl -L https://fly.io/install.sh | sh
  2. Login to Fly

    fly auth login
  3. Create a Fly app

    fly launch
    # Follow the prompts, use the included fly.toml
  4. Create a PostgreSQL database

    fly postgres create
    fly postgres attach <your-postgres-app>
  5. Deploy

    fly deploy
  6. Initialize the database

    fly ssh console
    cd server && bun run db:init

Your app will be live at https://your-app-name.fly.dev!

Deploy to Other VPS (DigitalOcean, AWS, etc.)

  1. Build the application

    bun run build          # Frontend
    bun run build:backend  # Backend
  2. Set up PostgreSQL on your VPS and create a database

  3. Configure environment variables

    Create server/.env on your server:

    DATABASE_URL="postgresql://USER:PASSWORD@localhost:5432/seating_art"
    PORT=3000
    NODE_ENV=production
  4. Initialize the database

    cd server && bun run db:init
  5. Start the server

    cd server && bun run src/index.ts
  6. Set up a reverse proxy (nginx/caddy)

    Example nginx config:

    server {
        listen 80;
        server_name your-domain.com;
    
        location / {
            proxy_pass http://localhost: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;
        }
    }
  7. Use PM2 for process management (optional)

    npm install -g pm2
    pm2 start server/src/index.ts --interpreter bun
    pm2 save
    pm2 startup

Docker Deployment

# Build the image
docker build -t seating-art .

# Run the container
docker run -p 8080:8080 \
  -e DATABASE_URL="postgresql://USER:PASSWORD@host:5432/db" \
  seating-art

๐Ÿ› ๏ธ Tech Stack

Frontend

  • React 18 - UI framework
  • TypeScript - Type safety
  • Vite - Build tool
  • Jotai - State management
  • Konva - Canvas rendering
  • shadcn/ui - UI components
  • Tailwind CSS - Styling
  • React Query - Server state
  • dnd-kit - Drag and drop

Backend

  • Express - Web framework
  • PostgreSQL - Database
  • bcrypt - PIN hashing
  • TypeScript - Type safety

DevOps

  • Bun - JavaScript runtime & package manager
  • Docker - Containerization
  • Fly.io - Deployment platform

๐Ÿ“– Usage Guide

Creating Your First Seating Chart

  1. Define Your Venue

    • Click "Draw Event Space" to set boundaries
    • Drag the corners to resize
  2. Add Tables

    • Click "Add Table" to create circular tables
    • Drag tables to position them
    • Use +/- buttons to adjust seat count (6-12 seats)
  3. Assign Guests

    • Option A: Click any chair on a table
    • Option B: Type names in the sidebar and press Enter
    • Option C: Drag guests from "Unassigned" to tables
  4. Add Decorations

    • Click "Add Custom Element" for bars, dance floors, etc.
    • Drag to position, resize by selecting and dragging corners
    • Double-click to rename elements
  5. Share Your Plan

    • Copy the URL from your browser
    • Share with collaborators
    • They'll need your PIN to make edits

Tips & Tricks

  • Zoom: Use mouse wheel or +/- buttons
  • Pan: Hold Alt and drag, or drag the background
  • Fit All: Press Ctrl+0 (Cmd+0 on Mac) to center everything
  • Delete: Select a shape and press Delete key
  • Lock Venue Space: Prevent accidental moves of your boundary
  • Hover Highlighting: Hover over guests or chairs to see connections

๐Ÿ”ฎ Future Features

These features aren't built yet, but I'd love to add them if there's enough interest:

  • ๐Ÿ“Š Export & Print - PDF/PNG export for printing or sharing
  • โ†ฉ๏ธ Undo/Redo - Full history of changes
  • ๐Ÿ“‹ Bulk Import - CSV upload for large guest lists
  • ๐Ÿ”„ Real-time Collaboration - Multiple people editing simultaneously
  • ๐Ÿ–ผ๏ธ Floor Plan Upload - Use your venue's actual floor plan as background
  • ๐Ÿฝ๏ธ Dietary Restrictions - Track guest dietary needs and allergies
  • ๐Ÿค– Auto-Arrange - AI-powered seating suggestions based on relationships
  • ๐Ÿ” Guest Search - Filter and find guests quickly
  • ๐Ÿ“ More Table Shapes - Square, rectangle, banquet, and custom shapes
  • ๐Ÿ“ Notes & Annotations - Add reminders and comments to tables
  • ๐ŸŽญ Table Templates - Pre-configured layouts for common venue types
  • ๐Ÿ“Š Analytics - Insights on seating capacity and utilization
  • ๐Ÿ“ฑ Mobile App - Native iOS/Android apps

Want one of these features? Open an issue and let me know!


๐Ÿค Contributing

Contributions are welcome! Whether it's:

  • ๐Ÿ› Bug reports
  • ๐Ÿ’ก Feature requests
  • ๐Ÿ“– Documentation improvements
  • ๐Ÿ”ง Code contributions

Please feel free to open an issue or submit a pull request.

Development Workflow

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Commit with clear messages (git commit -m 'Add amazing feature')
  5. Push to your fork (git push origin feature/amazing-feature)
  6. Open a Pull Request

๐Ÿ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

MIT License

Copyright (c) 2025

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

๐Ÿ™ Acknowledgments

  • Built for my son's baptism celebration
  • Inspired by the need for better event planning tools
  • Thanks to the open-source community for the amazing tools and libraries

About

Beautiful, intuitive visual seating chart planner for events. Drag-and-drop interface for weddings, conferences, and celebrations.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages