Skip to content

Deploying Seatsurfing

Introduction

Seatsurfing is a modern, self-hosted desk booking and workspace management platform designed for hybrid work environments. As organizations embrace flexible work arrangements, Seatsurfing provides an intuitive solution for employees to book desks, meeting rooms, and other office resources while giving administrators visibility into space utilization.

Built with Go on the backend and a React-based frontend, Seatsurfing offers a responsive web interface and mobile apps for convenient booking on the go. The platform supports multiple locations, floor plans with interactive maps, and integrates with popular identity providers for seamless authentication.

Key highlights of Seatsurfing:

  • Interactive Floor Plans: Upload floor plans and place bookable spaces visually
  • Flexible Booking: Book desks by day, half-day, or custom time slots
  • Multi-Location Support: Manage multiple offices and buildings
  • Space Types: Support for desks, meeting rooms, parking spots, and custom resources
  • Buddy System: See when colleagues are in the office
  • Capacity Management: Set and enforce occupancy limits
  • Analytics Dashboard: Track space utilization and booking patterns
  • SSO Integration: OIDC/OAuth2 authentication support
  • Mobile Apps: Native iOS and Android applications
  • 100% Open Source: Licensed under GPL-3.0

This guide walks through deploying Seatsurfing on Klutch.sh using Docker, configuring locations and floor plans, and setting up desk booking for your organization.

Why Deploy Seatsurfing on Klutch.sh

Deploying Seatsurfing on Klutch.sh provides several advantages:

Simplified Deployment: Klutch.sh automatically detects your Dockerfile and builds Seatsurfing without complex infrastructure setup.

Persistent Storage: Attach persistent volumes for database and floor plan images that survive container restarts.

HTTPS by Default: Klutch.sh provides automatic SSL certificates for secure booking access.

Custom Domains: Use your company domain for a professional booking experience.

Always-On Availability: Your booking system remains accessible 24/7 for employees across time zones.

Prerequisites

Before deploying Seatsurfing on Klutch.sh, ensure you have:

  • A Klutch.sh account
  • A GitHub account with a repository for your Seatsurfing configuration
  • Basic familiarity with Docker and containerization concepts
  • Floor plan images for your office spaces
  • (Optional) SSO provider details for authentication

Preparing Your Repository

Create a GitHub repository with your Seatsurfing configuration.

Repository Structure

seatsurfing-deploy/
├── Dockerfile
└── .dockerignore

Creating the Dockerfile

Create a Dockerfile in the root of your repository:

FROM seatsurfing/backend:latest
# Environment variables
ENV PUBLIC_URL=${PUBLIC_URL}
ENV FRONTEND_URL=${FRONTEND_URL}
ENV POSTGRES_URL=${POSTGRES_URL}
ENV JWT_SIGNING_KEY=${JWT_SIGNING_KEY}
ENV SMTP_HOST=${SMTP_HOST:-}
ENV SMTP_PORT=${SMTP_PORT:-587}
ENV SMTP_SENDER_ADDRESS=${SMTP_SENDER_ADDRESS:-}
# Expose the web interface port
EXPOSE 8080

Environment Variables Reference

VariableRequiredDefaultDescription
PUBLIC_URLYes-Public URL of your Seatsurfing instance
FRONTEND_URLYes-Frontend URL (usually same as PUBLIC_URL)
POSTGRES_URLYes-PostgreSQL connection string
JWT_SIGNING_KEYYes-Secret key for JWT tokens
SMTP_HOSTNo-SMTP server for email notifications
SMTP_PORTNo587SMTP server port
SMTP_SENDER_ADDRESSNo-Email sender address
INIT_ORG_NAMENo-Initial organization name
INIT_ORG_DOMAINNo-Initial organization domain
INIT_ORG_USERNo-Initial admin username
INIT_ORG_PASSNo-Initial admin password

Deploying Seatsurfing on Klutch.sh

    Set Up Database

    Seatsurfing requires a PostgreSQL database. Deploy a PostgreSQL instance first or use a managed database service.

    Generate JWT Signing Key

    Generate a secure signing key:

    Terminal window
    openssl rand -hex 32

    Push Your Repository to GitHub

    Initialize and push your repository:

    Terminal window
    git init
    git add Dockerfile .dockerignore
    git commit -m "Initial Seatsurfing deployment configuration"
    git remote add origin https://github.com/yourusername/seatsurfing-deploy.git
    git push -u origin main

    Create a New Project on Klutch.sh

    Navigate to the Klutch.sh dashboard and create a new project with a descriptive name like “seatsurfing” or “desk-booking”.

    Create a New App

    Within your project, create a new app. Connect your GitHub account and select your Seatsurfing repository.

    Configure HTTP Traffic

    In the deployment settings:

    • Select HTTP as the traffic type
    • Set the internal port to 8080

    Set Environment Variables

    Add the following environment variables:

    VariableValue
    PUBLIC_URLhttps://your-app-name.klutch.sh
    FRONTEND_URLhttps://your-app-name.klutch.sh
    POSTGRES_URLYour PostgreSQL connection string
    JWT_SIGNING_KEYYour generated secret key

    Deploy Your Application

    Click Deploy to start the build process.

    Access Seatsurfing

    Once deployment completes, access your Seatsurfing instance at https://your-app-name.klutch.sh.

Initial Configuration

Setting Up Your Organization

  1. Log in with the admin credentials
  2. Navigate to Settings > Organization
  3. Configure organization details
  4. Add locations for each office

Creating Floor Plans

  1. Go to Settings > Locations
  2. Select a location and click Add Floor
  3. Upload a floor plan image
  4. Use the editor to place bookable spaces on the map

Adding Bookable Spaces

  1. Open a floor plan
  2. Click to add a space
  3. Configure space properties:
    • Name/number
    • Type (desk, meeting room, etc.)
    • Capacity
    • Amenities

User Management

Authentication Options

Seatsurfing supports multiple authentication methods:

  • Local accounts: Built-in user management
  • OIDC/OAuth2: Integrate with identity providers like Keycloak, Azure AD, or Google

Configuring SSO

Add OIDC environment variables for SSO integration:

VariableDescription
OIDC_PROVIDER_URLOIDC provider discovery URL
OIDC_CLIENT_IDOAuth client ID
OIDC_CLIENT_SECRETOAuth client secret
OIDC_REDIRECT_URLCallback URL for your instance

Troubleshooting

Floor Plan Not Loading

Symptoms: Floor plan images don’t display.

Solutions:

  • Check image file format (PNG, JPG recommended)
  • Verify file size is reasonable
  • Check browser console for errors

Bookings Not Saving

Symptoms: Booking attempts fail silently.

Solutions:

  • Verify database connectivity
  • Check that the space is available for the selected time
  • Review server logs for errors

Additional Resources

Conclusion

Deploying Seatsurfing on Klutch.sh provides your organization with a modern desk booking solution that supports hybrid work arrangements. With interactive floor plans, capacity management, and SSO integration, Seatsurfing makes it easy for employees to find and book the workspace they need.