/hackhub2

Next-generation HackHub. Now with more bugs.

Primary LanguageRust

hackhub2

Warning about the database schema: during early development no attempt will be made to provide smooth migrations. Don't even think about using this in a production environment.

hackhub2 is a candidate successor to the original HackHub used by 57North Hacklab as a membership management system since 2014. The original was a Python Flask application coupled with an SQLite3 database and has had features added over time. This project is a redesign and rewrite of that application using the Rust programming language and aims to build on the experience acquired during almost a decade of use of its predecessor.

Features

  • User management 🚧
  • Statutory registers
    • Register of members 🚧
    • Register of directors ❌
    • Register of director's residential addresses ❌
  • Membership fee management
    • Invoice generation ❌
    • Receipt generation ❌
    • Standing order form generation ❌
    • Import of bank statement to help recording payments ❌
    • Generate management reports on overdue payments ❌
  • Membership application workflow ❌
  • Send door unlock instructions via MQTT ❌
  • SpaceAPI
    • Public API endpoint ❌
    • Open/close the space ❌
    • Record events from authorised users ❌
    • Update sensors from authorised users ❌
    • Automatically close space if left open ❌

Architecture

Unlike the original HackHub, this incarnation will separate the frontend and backend code using an HTTP API to communicate between them. No longer will presentation be mixed up with business logic and multiple code paths exist to achieve the same goal (some of which may not have quite as much data validation as the other).

The web framework in use for the backend is Actix Web: "a powerful, pragmatic, and extremely fast web framework for Rust".

We have not yet outgrown SQLite and will continue to use SQLite in the architecture. It's great for having just a single file to backup and there are enough people in the hackerspace familiar with its SQL dialect that manual fixes can be effected if necessary.

A future goal may be to integrate OAuth2 authentication, however initially the authentication will be self-contained within the HackHub application. This reduces the number of services that must be maintained by the hackerspace. To implement sessions, we use the Actix Web middleware actix-session using the CookieSessionStore to avoid adding the additional Redis dependency.

The frontend (yet to begin development) will likely be written using the Yew framework, which compiles to WebAssembly. This will use only documented APIs on the backend, which means that anything that the "official" web frontend can do, hackerspace members would be able to do too in their own projects.

Legal Compliance

As this software is intended to be used to fulfil statutory obligations as they apply to Private Companies Limited by Guaranteee in Scotland, it may or may not be useful for your hackerspace. In particular, the software aims to comply with:

  • Companies Act 2006 - maintaining the statutory registers of the company and providing a means to distribute statutory notices and accounts to members
  • Data Protection Act 2018 - transparency about the data that is handled, ensuring that any data handled is necessary, and providing a means to facilitate subject data access requests and data deletion requests (while maintaining records of any data that must be retained for compliance with the Companies Act)
  • Gender Recognition Act 2004 - providing a means to remove former names where there is no statutory duty to retain them according to the Companies Act
  • The Company, Limited Liability Partnership and Business (Names and Trading Disclosures) Regulations 2015 - ensuring the required particulars appear on all notices, reports, receipts, and other documents generated by the application