Skip to content

jumper149/mensam

Repository files navigation

Mensam

A desk-booking web application.

Public instance

mens.am

OpenAPI specification

Rendered or JSON

Are you hosting a coworking space, a hot-desk office or a community space like a hacker space?

Desks are a limited resource. Your members will be disappointed when they arrive at your location and realize there aren’t any desks available. Sometimes there are desks available, but a user has some special requirement like a power outlet or the user just wants to sit close to a window.

In these cases you probably want to set up a desk-booking solution like Mensam.

Usage

Setup

As the operator you simply visit an instance of Mensam, such as mens.am.

First you will have to create a User account for yourself. Now you create a new Space for your location. Within this Space you can now add Desks.

Join a Space

After creating a User account you can simply join a Space with a single click. Depending on the setup of the Space, it is listed publically or only accessible with a specific link.

Book a desk

After joining a Space you can create a Reservation for a Desk. You will be able to see other Reservations, so you can plan around them. Mensam will deny overlapping reservations.

Development

Mensam is built with Nix. You can use regular flake commands such as nix build, nix develop or nix flake check.

Subflakes

The source code is split up into subflakes, which also have their own development environments and checks. These are just regular nix files, but follow the naming conventions of flakes.

Setup

Nix overlay

Server

HTTP API, Server executable, CLI-client executable

Frontend

Single page web application

Static

Static files served by the server

Final

Configuration, wrapper and NixOS module

Subflake dependency graph
  ┌──────────────────┐
  │                  │
  │           ┌──▶server
  │           │
  │     ┌── final
  │     │     │
  │     │     └──▶static──▶frontend
  │     ▼           │         │
  └──▶setup◀────────┘         │
        ▲                     │
        └─────────────────────┘

GitHub Codespaces

You can use a GitHub Codespace to quickly spin up a development environment in your browser.

A prebuilt devcontainer image is available for the main branch. This devcontainer includes a cached nix-shell. You can use the VSCode direnv extension to reload the nix-shell.

  • The direnv extension might require a restart to actually work.

  • The Haskell and Elm extensions might ask for a compiler or language server executable. Stick to the defaults. If anything seems to be missing in the environment, just reload the direnv extension.

  • The Haskell language server in particular takes quite a bit of time to start.

Binary Cache

GitHub Actions pushes Nix results to Cachix. Use this binary cache to speed up your local builds.

Configure your NixOS configuration to trust the binary cache.

{
  nix.settings = {
    substituters = [
      "https://jumper149-mensam.cachix.org"
    ];
    trusted-public-keys = [
      "jumper149-mensam.cachix.org-1:9502wAOm00GdLxZM8uTE4goaBGCpHb+d1jUt3dhR8ZM="
    ];
  };
}

Versioning

Any version number EPOCH.MAJOR.MINOR.PATCH already tells the operator of a deployment some basic information.

EPOCH

Enormous changes. Read the changelog!

MAJOR

Major changes. These changes break backwards compatibility, often including database migrations.

MINOR

Minor changes. These changes are backwards compatible. API changes are also considered minor as the frontend is contained within the application.

PATCH

Bugfixes. These changes should always be applied as soon as possible.