CRM for managing members and RFID cards at the Makerspace Leiden https://mijn.makerspaceleiden.nl
Find a file
Luke-Watts a2ddc594cc
All checks were successful
Test and Release / tests (push) Successful in 2m4s
Test and Release / deploy (push) Successful in 1s
Merge pull request 'Django 5.x+ no longer allows GET to /logout' (#185) from Michiel-Beijen/intranet:django-post-modern-logout into main
Reviewed-on: #185
Reviewed-by: Luke-Watts <luke-watts@noreply.localhost>
2026-09-21 20:38:17 +02:00
.dist-info/sboms chore(deps): update SBOM (#306) 2025-11-12 19:19:27 +00:00
.forgejo/workflows chore(ci): run pre-commit checks earlier 2026-05-06 08:47:55 +02:00
acl fix: null out entitlement timestamps for records with no history 2026-08-09 15:23:15 +02:00
agenda fix: small UI improvements bundle 2026-08-13 19:45:44 +02:00
api fix: remove Telegram and Signal integrations 2026-07-29 20:04:27 +02:00
avatar feat(api): support signed urls for media (#293) 2025-10-17 13:09:18 +00:00
chatlinks fix: reword group chat links description 2026-08-29 21:45:29 +02:00
chores feat: MQTT publishing infrastructure — publishers, browser, naming overhaul 2026-06-27 14:00:38 +02:00
demo chore: fix line ending 2025-07-09 11:20:26 +02:00
deploy chore: apply formatting 2025-07-02 21:11:41 +02:00
docs Diagram of DB schema. 2019-01-17 23:04:40 +01:00
eventfeed fix: only list machines requiring instruction in eventfeed 2026-08-18 20:29:25 +02:00
grafana fix: pause idle Grafana dashboard iframe 2026-07-31 20:20:13 +02:00
intro feat: promotional website (work in progress) 2026-08-29 21:57:08 +02:00
kwh fix: remove duplicate sentence on kwh page 2026-07-10 22:24:05 +02:00
mailinglists chore: apply pre-commit tools 2026-05-06 08:49:53 +02:00
makerspaceleiden Django 5.x+ no longer allows GET to /logout 2026-09-21 20:15:21 +02:00
memberbox chore(deps): swap out deprecated stdimages for django-pictures, upgrade django 2026-09-19 14:11:56 +02:00
memberlist refactor: adopt .active() method 2026-01-13 13:35:59 +01:00
members chore(deps): swap out deprecated stdimages for django-pictures, upgrade django 2026-09-19 14:11:56 +02:00
motd feat: MQTT publishing infrastructure — publishers, browser, naming overhaul 2026-06-27 14:00:38 +02:00
mqtt fix: small upkeep changes 2026-08-05 19:28:05 +02:00
navigation feat: add Grafana dashboard proxy app 2026-06-30 19:27:24 +02:00
nodered feat: remove regular-user NodeRed dashboard pages and nav links 2026-07-13 20:37:10 +02:00
pettycash fix: handle PictureFieldFile 2026-09-19 14:22:30 +02:00
pettycredit test: create users within transaction boundaries 2026-01-27 16:03:52 +01:00
scripts fix: prevent overlapping cron-5minutely runs 2026-08-02 12:30:18 +02:00
selfservice fix: update waiver 2026-08-18 20:40:55 +02:00
servicelog chore(deps): swap out deprecated stdimages for django-pictures, upgrade django 2026-09-19 14:11:56 +02:00
spaceapi feat: drop aggregator dependency for spaceapi 2026-07-29 19:52:29 +02:00
status Simplify URL, remove unneeded cruft 2026-02-26 22:26:50 +01:00
storage chore(deps): swap out deprecated stdimages for django-pictures, upgrade django 2026-09-19 14:11:56 +02:00
sumup_connector Add test cases for shorter/v2 form. 2026-02-23 15:55:02 +01:00
terminal feat(terminal): adds a no-op endpoint 2026-02-26 06:33:03 +01:00
ufo chore(deps): swap out deprecated stdimages for django-pictures, upgrade django 2026-09-19 14:11:56 +02:00
ultimaker minor navigation tweaks 2025-06-22 15:03:54 +02:00
unknowntags Simplify URL, remove unneeded cruft 2026-02-26 22:26:50 +01:00
upkeep feat: eventfeed from six sources 2026-08-09 12:51:44 +02:00
.gitignore Merge .gitignore changes 2026-02-25 22:04:06 +01:00
.pre-commit-config.yaml chore(deps): swap out deprecated stdimages for django-pictures, upgrade django 2026-09-19 14:10:44 +02:00
.python-version chore(deps): upgrade python 3.13 2025-06-15 13:53:24 +02:00
conftest.py test: use cheaper password hasher 2026-01-23 23:20:20 +01:00
CONTRIBUTING.md docs: align contributing guide with current release process 2026-04-15 21:32:44 +02:00
cron-midnight.sh fix: temporarily disable automatic chore generation cron job 2026-07-16 20:10:12 +02:00
cron-monthly.sh chore: suppress uv output 2025-06-30 23:01:38 +02:00
cron-pre-monthly.sh chore: suppress uv output 2025-06-30 23:01:38 +02:00
cron-weekly.sh fix: prepare for new eventfeed architecture 2026-08-09 12:25:38 +02:00
example.env docs: switch to uv 2025-06-02 13:13:59 +02:00
INSTALL.md Document change to none id 2024-08-02 12:08:12 +02:00
LICENSE Initial commit 2018-12-06 16:38:20 +01:00
loaddemo.ps1 chore: migrate loaddemo powershell 2025-06-02 13:37:39 +02:00
loaddemo.sh chore: apply formatting 2025-06-02 13:14:00 +02:00
manage.py fixup! AutoFormat Python code with psf/black push 2021-10-26 15:32:37 +00:00
pyproject.toml chore(deps): swap out deprecated stdimages for django-pictures, upgrade django 2026-09-19 14:11:56 +02:00
README.md fix: rename member to participant 2026-06-12 10:39:42 +02:00
rollout-prod.sh fix: manage permissions .venv 2026-01-10 21:27:21 +01:00
rundemo.sh feat: adds support for generating events 2025-08-25 11:47:33 +02:00
uv.lock chore(deps): swap out deprecated stdimages for django-pictures, upgrade django 2026-09-19 14:11:56 +02:00

Makerspace Leiden CRM

Welcome to our Makerspace Management System. This software helps our community manage participant access, equipment permissions, storage, and more.

Table of Contents

Quick Start Guide

System Requirements

Installation Options

  1. Create environment file: cp example.env .env
  2. Run the demo script: sh loaddemo.sh

Accessing the System

After installation, visit:

http://localhost:8000/

You can log in using the test accounts created during installation. The loaddemo script will output these login details.

Testing the API

You can test the API with commands like:

curl -H "X-Bearer: Foo" -F tag=1-2-4 http://localhost:8000/acl/api/v1/getok4node/foonode

(This assumes your local settings contain the "Foo" password - see debug.py)

For Developers

Please see CONTRIBUTING.md for detailed information on how to contribute to this project, including code style, pre-commit setup, and submission guidelines.

Deployment Process

The deployment process is automated. When code is pushed to the main branch:

  1. Tests run automatically - The system checks:

    • Code quality (pre-commit checks)
    • Database migrations are correct
    • All tests pass
  2. If tests pass - The system automatically deploys to the live server

  3. If tests fail - Deployment is blocked. Fix the issues and try again.

Pull requests are also tested automatically, so you can verify your changes work before merging.

Functional Requirements

For Trustees (Administrators)

  • Manage participant progression (from new participants to full access with 24/7 key)
  • Track participant status (forms completed, standing in community)
  • Manage instruction groups (who can teach others)
  • Create and manage equipment/machines
  • Manage RFID cards
  • Generate reports on storage and permits

API Features

  • Check permissions based on RFID tags
  • Verify basic membership
  • Verify equipment training status
  • Verify specific permits

Self-Service Features

  • New membership requests (no login required)
  • Password reset
  • Manage RFID cards (activate new cards, deactivate old ones)
  • Record when you've given instruction to another member

Self-Service Bonus

  • Report accidents
  • Report equipment problems or activate lockouts
  • Find participant storage bins
  • Request storage permits for larger items
  • Track spare parts ordering

Email Notifications

The system automatically sends emails in these situations:

  1. User Detail Changes

    • When users update their personal information
    • Email sent to: Trustees
  2. Training Records

    • When someone adds instruction/training records
    • Email sent to: Trustees and possibly members ("deelnemers")
  3. Storage Space Changes

    • When any changes are made to storage space
    • Email sent to: All members ("deelnemers")
    • Separate email to owner if the change was made by someone else
    • Email to trustees if duration > 30 days or if extending an auto-approved 30-day permit
  4. Storage Box Changes

    • When any changes are made to storage boxes
    • Email sent to: Trustees
    • Separate email to owner if the change was made by someone else

Operational

In addition to the above, the system is designed to be easy to maintain and scale.

  • Standard Django setup for easy maintenance
  • Supports dozens of machines/equipment
  • Handles hundreds of users

System Design

Outline of the current system design.

User Structure

  • Standard Django user system
  • Additional member-specific information (forms on file, emergency contacts)
  • Possible to add more information

Key Components

  1. Machines

    • Equipment and access points (like doors)
    • May require specific training
    • May require signed waivers
    • May require special permits
  2. Permits

    • Access categories (like door access)
    • May build on other permits
  3. Entitlements

    • Specific permissions assigned to users
    • Assigned by authorized members
    • Issuers must have the entitlement themselves
    • Instructors need appropriate permits to grant entitlements