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└── .dockerignoreCreating the Dockerfile
Create a Dockerfile in the root of your repository:
FROM seatsurfing/backend:latest
# Environment variablesENV 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 portEXPOSE 8080Environment Variables Reference
| Variable | Required | Default | Description |
|---|---|---|---|
PUBLIC_URL | Yes | - | Public URL of your Seatsurfing instance |
FRONTEND_URL | Yes | - | Frontend URL (usually same as PUBLIC_URL) |
POSTGRES_URL | Yes | - | PostgreSQL connection string |
JWT_SIGNING_KEY | Yes | - | Secret key for JWT tokens |
SMTP_HOST | No | - | SMTP server for email notifications |
SMTP_PORT | No | 587 | SMTP server port |
SMTP_SENDER_ADDRESS | No | - | Email sender address |
INIT_ORG_NAME | No | - | Initial organization name |
INIT_ORG_DOMAIN | No | - | Initial organization domain |
INIT_ORG_USER | No | - | Initial admin username |
INIT_ORG_PASS | No | - | Initial admin password |
Deploying Seatsurfing on Klutch.sh
- Select HTTP as the traffic type
- Set the internal port to 8080
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:
openssl rand -hex 32Push Your Repository to GitHub
Initialize and push your repository:
git initgit add Dockerfile .dockerignoregit commit -m "Initial Seatsurfing deployment configuration"git remote add origin https://github.com/yourusername/seatsurfing-deploy.gitgit push -u origin mainCreate 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:
Set Environment Variables
Add the following environment variables:
| Variable | Value |
|---|---|
PUBLIC_URL | https://your-app-name.klutch.sh |
FRONTEND_URL | https://your-app-name.klutch.sh |
POSTGRES_URL | Your PostgreSQL connection string |
JWT_SIGNING_KEY | Your 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
- Log in with the admin credentials
- Navigate to Settings > Organization
- Configure organization details
- Add locations for each office
Creating Floor Plans
- Go to Settings > Locations
- Select a location and click Add Floor
- Upload a floor plan image
- Use the editor to place bookable spaces on the map
Adding Bookable Spaces
- Open a floor plan
- Click to add a space
- 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:
| Variable | Description |
|---|---|
OIDC_PROVIDER_URL | OIDC provider discovery URL |
OIDC_CLIENT_ID | OAuth client ID |
OIDC_CLIENT_SECRET | OAuth client secret |
OIDC_REDIRECT_URL | Callback 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.