Feature spec / design discussion

Makerspace Management Platform — Feature Spec v0.1

Overview

A web application to replace Nexudus as the management platform for a makerspace

with 500 members, growing toward 1,000. Nexudus is designed for co-working and

handles makerspace workflows poorly — specifically tool/equipment booking visibility,

certification management, and reporting flexibility.

Goals

  • Self-service member portal with clear booking availability

  • Membership and billing management via Stripe

  • Equipment certification tracking (trust-enforced, not hardware-gated)

  • Lightweight day-pass flow with automated building access

  • Flexible reporting

  • Maintainable by minimal technical staff after initial build

Non-Goals (Phase 2 — Classes Module)

  • Eventbrite integration for class listings

  • Auto-certification from class attendance

  • Class scheduling and management


Technology Stack

| Layer | Choice |

|—|—|

| Framework | Next.js 14+ (App Router, TypeScript) |

| Database | PostgreSQL |

| ORM | Prisma |

| Auth | Auth0 (free — non-profit rate) |

| Billing | Stripe |

| Hosting | Railway or Render (~$80–100/month) |


Budget

| Item | Cost |

|—|—|

| Initial development | $8,000 |

| Hosting | ~$1,000/year |

| Brivo → Auth0 integration | ~$1,500/year |

| Buffer (maintenance, surprises) | ~$1,500/year |

| Total annual operating | ~$4,000/year |

Programmer: 6 months dedicated, gifted to the organisation.


External Integrations

Auth0

  • Identity provider for all members and staff

  • SSO across the app and Brivo

  • Day-pass members provisioned as time-limited Auth0 accounts

  • Non-profit rate: free

Brivo (building access)

  • Integrated directly with Auth0 (no custom API code required)

  • Enforces building access and operating hours for all members

  • Day-pass members receive time-limited Brivo keys via Auth0 role

  • Keys auto-expire at end of day

  • Not used for shop or tool access — that is trust-enforced

Stripe

  • Recurring subscriptions for membership tiers

  • Monthly add-ons for studio and storage rentals

  • One-time payments for day passes

  • Non-profit pricing applies


Membership

Tiers

Five membership tiers (names TBD). Tier properties:

| Property | Tiers 1–2 | Tiers 3–5 |

|—|—|—|

| Studio rental eligible | No | Yes |

| Storage rental eligible | Yes | Yes |

| Tool booking | Yes (with certification) | Yes (with certification) |

| Building access | Yes | Yes |

Day-Pass Members

  • Purchase a day pass online (Stripe one-time payment)

  • Auth0 account auto-provisioned with day-pass role

  • Brivo building access granted automatically for the day

  • Access expires automatically — zero staff involvement required

  • Not counted as recurring members; minimal overhead is a hard requirement


Billing (Stripe)

Subscription Structure

Each active member has a Stripe subscription consisting of:

  • Base product: membership tier (monthly recurring)

  • Studio add-on: monthly, if a studio is assigned (tiers 3–5 only)

  • Storage add-on: monthly, if a storage unit is assigned (any tier)

Day Passes

  • One-time Stripe payment

  • Triggers automated Auth0/Brivo provisioning

Billing Rules

  • Studio and storage charges are added/removed when assignments are

created or ended by an admin

  • Proration handled by Stripe

Studio Management

Studios are rented monthly by members on tiers 3–5. Average tenancy is 1+ year.

Data Model

  • Studio inventory (name, description, size, monthly rate)

  • Assignment: studio → member, start date, end date (nullable)

Admin Workflows

  • Assign studio to eligible member → Stripe add-on created automatically

  • End assignment → Stripe add-on removed automatically

  • View all studios: occupied / vacant

Member Portal

  • Member can see their assigned studio and current monthly charge

Storage Management

Storage units are rented monthly by any active member. Average tenancy is 9+ months.

Data Model

  • Storage unit inventory (identifier, monthly rate)

  • Assignment: unit → member, start date, end date (nullable)

Admin Workflows

  • Assign unit to member → Stripe add-on created automatically

  • End assignment → Stripe add-on removed automatically

  • View all units: occupied / vacant

Member Portal

  • Member can see their assigned unit(s) and current monthly charge

Certification Management

Most tools require certification before a member may book them. Certification is

trust-enforced within the app — there is no hardware access gate on shop doors.

Data Model

  • Equipment classes (e.g. Laser, CNC, Woodshop, Metal Shop)

  • Member certifications: member → equipment class → certified_on date

Admin Workflows

  • Grant certification to a member for an equipment class

  • Revoke certification

  • View all certifications for a member

  • View all certified members for an equipment class

Member Portal

  • Member can view their certifications

Booking Calendar

Members can book tools, meeting rooms, and whole shops. The core UX requirement

is that members can clearly see what is available before attempting to book.

Resource Types

Tools

  • Belong to a shop

  • Require a specific equipment class certification to book

  • A shop may have 1–20 tools

Meeting Rooms

  • No certification requirement

  • Available to all active members

Shops (whole-space)

  • Bookable as a unit (e.g. for an event or dedicated session)

  • No certification requirement to book the whole shop

Booking Rules

  • Member must hold the required certification to book a tool

  • Day-pass members: booking policy TBD (likely meeting rooms only)

  • Double-booking prevented by the system

  • Bookings are visible to all members (availability view)

Member Workflows

  • Browse availability calendar across all resource types

  • Create a booking (with certification check)

  • Cancel a booking

  • View upcoming bookings

Admin Workflows

  • View all bookings

  • Cancel any booking

  • Manage resource inventory (add/edit tools, rooms, shops)

  • Assign tools to shops and equipment classes


Member Portal

Self-service portal for authenticated members.

Sections

  • Dashboard: membership status, upcoming bookings, quick links

  • Membership: tier, billing summary, payment history

  • Bookings: calendar view, create/cancel bookings

  • Certifications: list of held certifications

  • Studio / Storage: current assignments and monthly charges

  • Profile: contact details, password (via Auth0)


Admin Dashboard

Internal tool for staff.

Sections

  • Members: list, search, view/edit member details, change tier

  • Studios: inventory, current assignments, assign/end

  • Storage: inventory, current assignments, assign/end

  • Certifications: grant/revoke per member

  • Resources: manage tools, rooms, shops; assign tools to shops/classes

  • Bookings: view all, cancel

  • Day Passes: view issued passes, active now

  • Reporting: see Reporting section


Reporting

Flexible reporting was a primary Nexudus pain point. Core reports:

  • Membership by tier: current count per tier, trend over time

  • Revenue summary: recurring MRR, add-ons, day pass income

  • Studio occupancy: occupied vs. vacant, revenue per studio

  • Storage occupancy: occupied vs. vacant, revenue

  • Booking utilisation: bookings per resource, peak times

  • Certifications: members certified per equipment class

  • Day pass volume: passes sold per day/week/month

Reports exportable as CSV.


Data Migration (Nexudus)

A one-time migration at cutover:

  • Members (profiles, tier assignments)

  • Active studio and storage assignments

  • Certifications

  • Bookable resource inventory (tools, rooms, shops)

Historical billing data remains in Nexudus for reference; not migrated.


Out of Scope — Phase 2: Classes Module

Classes are the second revenue arm. Billing is handled entirely by Eventbrite and

will not be replaced. The Classes Module is a separate, independent module that

integrates with the core system via the certifications table.

Planned Phase 2 Features

  • Display upcoming classes from Eventbrite API in the member portal

  • Eventbrite webhook → auto-grant certification on class completion

  • (Later) create and manage Eventbrite events from within the app


Open Questions

  • Confirm day-pass booking policy (can day-pass members book tools? rooms only?)

  • Confirm Brivo Auth0 integration supports time-limited role expiry for day passes

  • Membership tier names and exact monthly rates

  • Studio and storage unit inventory counts

  • Equipment class list and which tools require which class

  • Proration policy for mid-month studio/storage assignments

  • Data export format available from Nexudus for migration

Makerspace Platform — Design Discussion Log

Date: 2026-02-22

Status: Initial scoping session


Problem Statement

The organisation currently uses Nexudus to manage its makerspace. Nexudus is designed

for co-working spaces and handles makerspace workflows poorly. The two primary pain

points identified:

  1. Reporting is inflexible and not useful — leading to a separate Python reporting

project being built against the Nexudus API as a workaround.

  1. Reservation visibility — members cannot easily see what is already booked when

trying to reserve tools, rooms, or shops.

A secondary but significant issue: day-pass members are unprofitable under Nexudus

pricing. The per-member cost of Nexudus exceeds revenue from some day-pass sales,

creating ongoing financial bleed.


Constraints Established

Scale

  • Current: ~500 members

  • Target: ~1,000 members

Budget

  • Initial development: $8,000

  • Annual operating: $4,000/year

  • ~$1,000/year hosting

  • ~$1,500/year Brivo → Auth0 integration

  • ~$1,500/year buffer for maintenance and surprises

Technical Capacity

  • One programmer gifting 6 months of full-time work to the organisation

  • Minimal technical staff for ongoing maintenance after handoff

  • No in-house full development team

Non-profit Status

  • Auth0: free at non-profit rate

  • Stripe: transaction fees only, no monthly cost; non-profit pricing available


Architecture Decisions

Decision: Auth0 as Identity Plane

Auth0 will serve as the single identity provider across all systems. Both Brivo

and the new application authenticate against Auth0. This means:

  • No auth to build from scratch

  • SSO across all tools

  • Member provisioning/deprovisioning in one place

Decision: Brivo stays, integrated via Auth0 (not custom API)

Brivo handles physical building access and is not being replaced. Initially a

custom Brivo API integration was considered, but Brivo offers a direct Auth0

integration for ~$1,500/year (an upgrade from current plan).

Rationale for paying for the integration rather than building it:

Custom API integrations carry ongoing maintenance cost — API versioning, auth token

rotation, error handling. With minimal maintenance staff, eliminating this surface

entirely is worth $1,500/year. The $8,000 initial budget is freed of ~$2,000 in

Brivo integration work as a result.

What Brivo is used for:

  • Building access for all active members

  • Enforcing operating hours

  • Time-limited day-pass keys (via Auth0 role, auto-expires)

What Brivo is NOT used for:

  • Shop or tool access control — this is trust-enforced within the app only

Decision: Shops and tools are trust-enforced, not hardware-gated

Shop and tool access is controlled by the booking system (certification check)

but not enforced by physical hardware. Members are trusted to only use equipment

they are certified for. This is the current model and will be carried forward.

Implication: Certification/team management is entirely an app-level concern.

Auth0 groups are not needed for equipment access — only for building access and

day-pass expiry.

Decision: TypeScript / Next.js stack

The gifted programmer’s preferred stack is TypeScript. Next.js (App Router) was

selected as the framework:

  • Full-stack TypeScript reduces context switching

  • Large ecosystem and community — important for long-term maintainability

  • Well-documented — critical for minimal-staff maintenance after handoff

Full stack:

  • Next.js 14+ (App Router)

  • PostgreSQL

  • Prisma ORM

  • Auth0

  • Stripe

  • Railway or Render hosting

Decision: Stripe for all membership billing

Stripe handles:

  • Recurring subscriptions (membership tiers)

  • Monthly add-ons (studio and storage rentals)

  • One-time payments (day passes)

Eventbrite handles class billing and will not be replaced or replicated in Stripe.

Decision: Eventbrite integration is Phase 2 (separate module)

Classes are the second revenue arm of the organisation. Billing is handled entirely

by Eventbrite. Rather than include this in the core 6-month build, it was scoped

as an independent module that slots into the core system later via the certifications

table. The natural seam:

  • Core system owns certifications (admin grants manually)

  • Classes module (Phase 2) adds Eventbrite webhook → auto-grant on class completion

  • Classes module also adds class listings to the member portal

  • Core system works fully without the module

This decision keeps the 6-month scope viable.


Domain Model — Key Decisions

Membership Tiers

Five tiers with the following access rules:

  • Tiers 1–2: storage rental eligible; tool booking (with certification); building access

  • Tiers 3–5: all of the above + studio rental eligible

  • Day-pass: building access for one day; booking policy TBD

Studios and Storage — monthly assignment, not short-term booking

Initially assumed to require a booking/calendar system. Clarified as long-term

monthly rentals:

  • Studio average tenancy: 1+ year

  • Storage average tenancy: 9+ months

Implication: No booking calendar needed for studios or storage. The system

manages assignments (admin assigns unit → member) and Stripe add-ons, not

availability calendars. This significantly reduces scope.

Booking Calendar — tools, rooms, and whole shops

The short-term booking calendar covers three resource types:

  • Tools: belong to a shop; require certification for the tool’s equipment class

  • Meeting rooms: no certification requirement; available to all active members

  • Shops (whole-space): bookable as a unit for events or dedicated sessions

A shop may contain 1–20 individual bookable tools.

Certification System

The organisation uses a concept of “team membership” in Nexudus to control which

members may book which classes of equipment. This maps to a certifications table

in the new system:


member_certifications

member_id

equipment_class (e.g. "laser", "cnc", "woodshop")

certified_on

Admin grants certification → member can book tools in that equipment class.

Trust-enforced only.

Day-Pass Flow — fully automated

Day passes are important revenue but currently loss-making under Nexudus pricing

because of per-member cost. The new system eliminates this overhead entirely:

  1. Member purchases day pass online (Stripe one-time)

  2. Auth0 account auto-provisioned with day-pass role

  3. Brivo access granted automatically (via Auth0 → Brivo integration) for the day

  4. Access expires automatically at end of day

  5. Zero staff involvement required

This turns a loss-making member type into a low-overhead revenue line.


Scope Assessment

Fits in 6 months (core build)

  1. Member management — 5 tiers + day pass

  2. Stripe billing — subscriptions, studio/storage add-ons, one-time day passes

  3. Studio & storage assignment management

  4. Booking calendar — tools, rooms, shops with certification gates

  5. Certification management — admin grants, member views

  6. Day-pass self-service flow — buy → Auth0 provision → Brivo access → auto-expire

  7. Member portal

  8. Admin dashboard

  9. Nexudus data migration

  10. Reporting

Phase 2 — Classes Module (separate, later)

  • Display upcoming classes from Eventbrite API in member portal

  • Eventbrite webhook → auto-grant certification on class completion

  • (Later) create and manage Eventbrite events from within the app


Risks

| Risk | Severity | Mitigation |

|—|—|—|

| Brivo Auth0 integration does not support time-limited role expiry | High | Validate with Brivo before build starts — this is the day-pass mechanism |

| Stripe subscription add-on complexity (mid-month assignments, proration) | Medium | Spike Stripe add-on model early in development |

| Nexudus data export quality | Medium | Request data export early; assess cleaning effort before cutover |

| Scope creep over 6 months | High | Hold spec firmly; defer anything not in core list to Phase 2 |

| Programmer departure before handoff documentation complete | Medium | Documentation and deployment runbook are in-scope deliverables |


Open Questions

  • Confirm Brivo Auth0 integration supports time-limited role expiry for day passes

  • Confirm day-pass booking policy (can day-pass members book tools? rooms only?)

  • Membership tier names and exact monthly rates

  • Studio and storage unit inventory counts

  • Equipment class list and which tools require which class

  • Proration policy for mid-month studio/storage assignments

  • Data export format available from Nexudus for migration


Next Steps

  1. Resolve open questions above — especially Brivo time-limited access

  2. Set up GitHub remote for this repository

  3. Programmer reviews spec and produces a 6-month work plan

  4. Spike: Brivo Auth0 integration (week 1)

  5. Spike: Stripe subscription add-on model (week 1–2)

Looks Good…. A couple of random thoughts…

  1. Will 20 tools / shop be enough? If it turns out not to be, can more be added easily?
  2. Some tools exist in more than one shop (i.e. Drill presses exist in at least the Metal, Machine, and Wood shops) will a cert for one shop carry over to similar tools in other shops?

ART

by existing policy .. which we could change..

e.g. a bandsaw in x shop needs to be tested independently from a bandsaw in y shop.

And I put this just because it’s a convenient place to format a file written in markdown for printing