- Python 46.2%
- HTML 31%
- JavaScript 22.1%
- CSS 0.7%
| .github/workflows | ||
| .vscode | ||
| alembic | ||
| blueprints | ||
| helpers | ||
| migrations | ||
| providers | ||
| scripts | ||
| slack_blocks | ||
| static | ||
| tasks | ||
| templates | ||
| util | ||
| .gitignore | ||
| .gitmodules | ||
| .pre-commit-config.yaml | ||
| .python-version | ||
| alembic.ini | ||
| api_test_client.py | ||
| app.py | ||
| auth.py | ||
| celery_app.py | ||
| celeryconfig.py | ||
| CHANGELOG.md | ||
| config.py | ||
| docker-compose.yml | ||
| generate_pwa_icons.py | ||
| gunicorn.conf.py | ||
| log_config.py | ||
| maintenance_tasks.py | ||
| models.py | ||
| nav.py | ||
| openapi.yaml | ||
| pyproject.toml | ||
| README.md | ||
| reverse_announcement_whoopsie.py | ||
| run_server.py | ||
| shared_cache.py | ||
| sonar-project.properties | ||
| test_endpoints_load.py | ||
| uv.lock | ||
Member Portal
💡Warning This code is actively changing and is not ready for use outside of the Artifactory
An application that bundles together useful tools for running a makerspace/community shed.
Features
Training & Inductions
Safety inductions are essential to managing a shared community workspace. Tracking them typically involves a bunch of coloured stickers on name badges or a whole load of markdown tables on a wiki.
- Inductions are split into "levels". These levels are defined at an organisational level and can help members understand the risk associated with particular tools along with how the training process may differ based on the induction level. As an example the Artifactory uses a three tiered "traffic light" system.
- Users can view their own inductions, a timeline of when they were completed, potential inductions they can achieve in the future, and associated documentation for tools they're already trained on.
- Trainers can manage inductions, track training statistics across the workshop to identify popular areas, and view a log of training completed by others to keep everyone abreast of what's going on.
Volunteer Hours & Tokens
Community organisations require an amazing amount of volunteer time to function. Encouraging attendees and members to contribute with a carrot approach seems to work better than a stick.
- Volunteer time is split into "buckets" like "cleaning" and "donation sorting"
- Members can submit volunteer hours, track their personal contribution statistics, view rewards, and manage time debt. (Time debt is a concept the Artifactory introduced to ensure occasional/new attendees got into the swing of volunteering. "If we spend one hour training you we ask that you spend one hour contributing around the space")
- Volunteers can submit hours for others and with greater granularity/less guard rails.
- Committee members can approve volunteer hour submissions from non volunteers, view overall analytics including top volunteers and badge streaks, and manage token buckets. This allows committee members to get a deeper understanding of how volunteer time is being spent.
Events
Managing events is pretty easy when the features you're looking for are supported by Google Calendar. Once you're looking for things like permissions/RSVPs it all kinda just collapses into a pile of different calendars etc.
- Members can browse upcoming events, RSVP to events, bookmark events for their calendar, and subscribe to personalised ICS calendar feeds.
- Event managers can create events with support for recurring series, varying RSVP deadlines/types/prices, day pass requirements, and visibility restrictions.
- Event calendars can be embedded in external sites with theming controls that let them match the host site rather than looking like an iframe from 2015. (Looking at you Google)
Announcements
Managing updates across various categories and interest levels is an interesting challenge. How do you strike the balance between showing everyone everything and notification fatigue?
- Members can view announcements, subscribe to announcement categories, and acknowledge announcements when required.
- Committee members can create announcements with support for markdown, image attachments, and tools that tie in to the training system specifically. (Acknowledging training changes). Announcements can be limited to specific user groups and inductions.
- Announcements can also be treated as "incidents" with basic status updates. This allows affected users to track things like workshop closures as they progress (power outages, pandemic related shutdowns, major tool outages etc)
Membership & Invoices
Coming soon!
Donations/Pledges
Fundraising for new improvements is vital to organisations that rely primarily on donations. The portal includes a fundraising/crowdfunding platform that allows attendees to put their money where their mouth is. This means that changes to the workshop are made based on what the community wants.
- Members can browse approved donation projects, track funding progress, view their donation history, and make or update donations.
- Committee members can approve or deny proposed projects, generate invoices for pledges, view project statistics and audit logs, and manage project details.
Documents & Agreements
Signed documents are the only way agreements stay true to their intent when the people following them change year to year.
- Documents are split into two categories. General documents are things like workshop waivers where many people need to sign their own copy over time. Specific documents are for things like tool loans where only one copy of the document should exist.
- Members can view and sign documents and agreements available to them.
- Committee members can manage document availability, track who has signed which documents, and create documents with a reasonable level of granularity. Signing as specific roles can be gated to specific groups ("Member of X subcommittee") or specific users ("John Doe as tool owner")
Concessions
Supporting disadvantaged members of our communities is a core goal of many organisations. Tracking and managing concession eligibility can be a time consuming undertaking. Doing so while respecting the privacy of attendees and minimising data security issues makes the whole thing more complex.
- Members can apply for concession recognition under a variety of categories and with various levels of proof. These include uploading documents, having committee members sight documents in person, and providing details so the organisation can verify statuses directly.
- Committee members can verify concession statuses, view documents (with specific audit logs), and send verification requests to Services Australia. Uploaded documents are only kept for the minimum amount of time required to verify concession eligibility.
Lockers
- Members can apply for storage lockers and view their existing assignments.
- Volunteers can view assigned lockers with a customisable layout that reflects varying physical locker configurations.
- Committee members can manage allocations and applications.
Camera Feeds
There's nothing quite like looking at a workshop before coming in to get you in the mood for making.
- Attendees/Members/Volunteers can view camera feeds with a granular permissions system
- Committee members can manage permissions, and register any camera supported by go2rtc
Workflows
Organisation processes are second nature once you've been around for a while but can be difficult for newcomers to understand.
- Members can track their progress through specific workflows/processes
- Committee members can manage workflows. This includes a granular system that ties into every other aspect of the portal. You can create an onboarding workflow that holds an attendees hand through the entire portal.
Notifications
- Members can control how they receive notifications with support for Slack, email, and in app notifications from the portal itself. Other systems within the portal (like training and announcements) will seamlessly deliver styled notifications as required.
- Committee members view existing notifications and send once off notifications/communication as required. There's a robust mail merge/templating engine to make repeated notifications a breeze.
Profile and Contact Management
- Users can manage their own information (name, gender, pronouns, age, address, contact information, emergency contact information etc) as well as link a variety of 3rd party accounts for easy authentication.
- Committee members can manage contacts, view membership history, add contact notes, view contact timelines with support for external applications and global events, and access demographic reports including age and gender statistics.
Food orders
Group food orders are a common late night occurrence but juggling order DMs from multiple people is needlessly frustrating when you're standing at the kebab shop counter at 1am.
- Users can save their preferred order for registered businesses and submit choices for food orders they're invited to. (directly, via url, or QR code)
- Volunteers can initiate new food orders, invite users, and submit orders for others
- Management Committee can administer food businesses
Training booking
System in flux, docs once settled
Material management
System in flux, docs once settled
Technical Features
- Authentication: Sign up with 3rd party OAuth providers with additional authentication options for existing users (Passkey, QR code, Slack app)
- SEO: Public pages have rich open graph, schema.org, and twitter card support
- External applications APIs to allow external tools to interact with portal data. eg.
- Authentication provider: Acts as an OAuth2 and OIDC provider to authenticate users in external systems. (SAML coming soon)
- Mobile app: Installable as a mobile app that allows for deeper integration (app notifications etc) than can be provided from a website.
- Slack integration: Event RSVPs, announcements, fundraising etc hook directly into Slack for ease of use. Unlike most "Slack integrations" that basically just send some markdown via a webhook we actually make use of the rich interaction set available natively within Slack.