Open source · Django · Self-hosted

Who sits where,
at a glance.

Window-Works turns your office into one clickable, colour-coded floor plan. Anyone can grab a free desk by typing their name. Staff repaint the layout right in the browser, with no spreadsheets and no database edits.

  • No accounts to book a seat
  • Runs on SQLite out of the box
  • Apache-2.0 licensed
window-works.local / floor-plan Live demo

Office floor plan

The real 13 × 30 layout that ships with the project. Click a desk to see who's there, or claim a free one.

0 free 0 occupied

    This demo runs entirely in your browser; nothing is saved. In the real app every reservation goes through the Django back end.

    How it works

    From "is anyone sitting here?" to booked in three clicks

    1. 1

      Look

      Every desk is a cell on a fixed grid, coloured by department and badged Free or Occupied. Right-click and drag to pan around big floors.

    2. 2

      Inspect

      Click any desk to see its department, who's sitting there, and for how long.

    3. 3

      Reserve

      Click a free desk, type your name, confirm. It's yours until the end of the day, and your name is remembered for next time.

    4. 4

      Manage

      Staff paint departments, labels and colours onto the grid, and record desk or work-from-home assignments.

    Features

    Small enough to understand, complete enough to use

    Window-Works does one job well: it keeps an accurate, shared picture of your office.

    Zero-friction booking

    No sign-up, no passwords. Type a name and the seat is yours. Booking another desk automatically frees the old one.

    Paint the layout in the browser

    Select cells, then assign a department, label, colour override or notes. Changes save instantly for everyone.

    Scheduled assignments

    Record temporary or permanent desk and work-from-home assignments with start and end times. Preview any date.

    Colour-coded departments

    Teams get their own colour, so you can spot Marketing, Finance or IT from across the room. Override per desk when you need to.

    JSON API included

    The front end runs on plain JSON endpoints, so kiosks, chat bots and dashboards can plug straight in.

    Yours to host

    A single Django project with SQLite and WhiteNoise. No SaaS subscription, and your seating data stays on your servers.

    Admin console

    Re-arrange the office without touching the database

    Staff sign in to the admin console and work on the same grid everyone else sees.

    • Layout mode: multi-select cells and set department, label, fill colour, or notes, or clear them.
    • Seat assignment mode: create desk or WFH assignments, temporary or permanent, and note who made the change.
    • Schedule date: view the plan for any day and end an assignment with one click.
    The Window-Works admin console: three Marketing cells selected on the grid, with Layout and Seat assignment modes and fields for department, label, fill colour override and notes.

    Built to integrate

    A tiny API you can read in one sitting

    Desk identifiers follow the grid. For example, enrollment-r13c10 is the Enrollment desk at row 13, column 10. Plug the endpoints into a lobby kiosk, a Slack command or a status board.

    EndpointPurpose
    POST/api/assignment-info/Latest assignment for a name
    GET/api/desks/<id>/Desk metadata and status
    POST/api/desks/<id>/assign/Reserve a free desk
    POST/api/layout/update/Staff-only layout edits

    Get started

    Up and running in five minutes

    All you need is Python 3.12 or newer. The bundled fixture gives you a full sample office to explore.

    Terminal
    # Clone and install
    git clone https://github.com/miles-howell/Window-Works.git
    cd Window-Works
    python3 -m venv venv && source venv/bin/activate
    pip install -r requirements.txt
    
    # Configure, migrate and load the sample office
    echo "SECRET_KEY=change-me-in-production" > .env
    python manage.py migrate
    python manage.py loaddata floorplan/fixtures/floorplan_layout.json
    
    # Create a staff login for the admin console, then run it
    python manage.py createsuperuser
    python manage.py runserver

    Open http://127.0.0.1:8000/ for the floor plan and /admin-console/ for the staff tools. Before deploying, turn off DEBUG, set ALLOWED_HOSTS, and run collectstatic.

    Give your office a map everyone can read.

    Free, open source and self-hosted. Star the repo, try it locally, and tell us what your floor needs.