<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://sudoroom.org/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Indoorjetpacks</id>
	<title>Sudo Room - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://sudoroom.org/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Indoorjetpacks"/>
	<link rel="alternate" type="text/html" href="https://sudoroom.org/wiki/Special:Contributions/Indoorjetpacks"/>
	<updated>2026-08-04T16:20:32Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.2</generator>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Hack_Cowork_Nite&amp;diff=13310</id>
		<title>Hack Cowork Nite</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Hack_Cowork_Nite&amp;diff=13310"/>
		<updated>2026-07-26T20:56:36Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
 '''Every first and third Thursday'''&lt;br /&gt;
 '''19:00 (7 PM) — 21:00 (9 PM)'''&lt;br /&gt;
&lt;br /&gt;
== Overview == &lt;br /&gt;
Every first and third Thursday, we meet up to do some additional co-hacking, similar to Tuesday's [[HardwareHackNight]]! Bring a project, work on it, we'll try to keep the area with enough space to work, albeit some [[hacker dust]]!&lt;br /&gt;
&lt;br /&gt;
Current hosts are: [[User: Indoorjetpacks]] and [[User: Julios]]&lt;br /&gt;
&lt;br /&gt;
5th Thursdays happen on a &amp;quot;TBD, ping one of the hosts sometime the week before/week of&amp;quot; basis.&lt;br /&gt;
&lt;br /&gt;
Luma: TBD&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Hack_Cowork_Nite&amp;diff=13309</id>
		<title>Hack Cowork Nite</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Hack_Cowork_Nite&amp;diff=13309"/>
		<updated>2026-07-26T20:53:26Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: clarifying first and third thursdays bc sometimes there's a fifth and that would wonk things w other thursday events&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
 '''Every first and third Thursday'''&lt;br /&gt;
 '''19:00 (7 PM) — 21:00 (9 PM)'''&lt;br /&gt;
&lt;br /&gt;
== Overview == &lt;br /&gt;
Every first and third Thursday, we meet up to do some additional co-hacking, similar to Tuesday's [[HardwareHackNight]]! Bring a project, work on it, we'll try to keep the area with enough space to work, albeit some [[hacker dust]]!&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13290</id>
		<title>Membermatters</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13290"/>
		<updated>2026-06-05T03:05:19Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* TODO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is the notes for the membermatters installation&lt;br /&gt;
&lt;br /&gt;
https://backers.sudoroom.org&lt;br /&gt;
&lt;br /&gt;
= to create a new user =&lt;br /&gt;
* https://backers.sudoroom.org/register&lt;br /&gt;
&lt;br /&gt;
= to check the logs from the docker instance =&lt;br /&gt;
* https://backers.sudoroom.org/logs/django.log&lt;br /&gt;
&lt;br /&gt;
= github =&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/db0724495a09731ec18db2ebe353931a08c256e2..d6ce52564e8ae64975690107efbc2f1907ac1fb8 the changes juul made to add sendmail as an option]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/d6ce52564e8ae64975690107efbc2f1907ac1fb8..00918eda47d88d090c29c976410ae8036579d7ea the changes rechner and jake made to build our docker for postgres]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/tree/sudoroom we are using the sudoroom branch in our docker]&lt;br /&gt;
* we also need to edit frontend/src/i18n/en-AU/index.ts to change &amp;quot;mobile number&amp;quot; to &amp;quot;Phone Number (or X)&amp;quot; (it builds to /usr/src/app/frontend/dist/spa/assets/index.*.js )&lt;br /&gt;
* we are working on mounting the docker image with git on the server, so we can make changes to production and try them&lt;br /&gt;
* RechnerFox setup a staging instance for us!&lt;br /&gt;
* we should set up a schedule for rebasing in changes from upstream, then shoving our changes back on top. then we can deploy to docker directly from our github fork&lt;br /&gt;
&lt;br /&gt;
= we are not spam =&lt;br /&gt;
* emails sent by this system for people to validate their account, or reset their password, are important&lt;br /&gt;
* emails are being accepted by gmail (for now) but not by some other platforms, and maybe not for some gmail users?&lt;br /&gt;
* we should look for ways to find out why the emails are rejected by some servers&lt;br /&gt;
* we probably need to format the emails with plaintext and MIME to make them look normal to spam checkers&lt;br /&gt;
* Our server is postfix based, but yeah, postfix has very good logging on exactly what happens to each message.  Though you as the sender can't know if it went into spam, only if it got outright rejected.&lt;br /&gt;
* emails to an MIT address were rejected by Microsoft: &amp;quot;Access denied, banned sending IP [198.199.116.180]. To request removal from this list please visit https://sender.office.com/ and follow the directions&amp;quot; and then Sean followed the directions and asked them to unblock our IP address&lt;br /&gt;
* we need to setup monitoring of emails that were outright rejected, and take action each time.  Dealing with emails marked as spam will be more challenging unless people have access to the spam filter information on their receiving end.&lt;br /&gt;
* we need to encourage more and people to sign up to the new system as we make progress, AFTER setting up rejection monitoring&lt;br /&gt;
&lt;br /&gt;
= certbot =&lt;br /&gt;
* juul used pipx to install, and then had to manually make a systemd job to check it twice a day&lt;br /&gt;
&lt;br /&gt;
= Help us build and test =&lt;br /&gt;
* prioritized bugs: https://github.com/orgs/sudoroom/projects/1/views/1&lt;br /&gt;
* submit a bug: https://github.com/sudoroom/MemberMatters/issues&lt;br /&gt;
== Making a dev environment ==&lt;br /&gt;
(this assumes you already have git installed and docker setup!)&lt;br /&gt;
# `cd` to a directory you want to put the repo&lt;br /&gt;
# `git clone https://github.com/sudoroom/MemberMatters.git`&lt;br /&gt;
# `git checkout -b branch-name` to make a new branch based of the default (sudoroom)&lt;br /&gt;
# `touch /usr/app/django.log` (this is where the logs will go, and not creating it as a file seemed to create it as a dir which docker hated)&lt;br /&gt;
# 'echo &amp;quot;MM_ENV=Development&amp;quot; &amp;gt; ./docker/.env`  - I am not sure if this needs to go into the docker directory, or just exist? .env files are .gitignored anyway, but it looks like this is used by docker to set some environment vars in the docker-compose.yml&lt;br /&gt;
# `cd ./docker`&lt;br /&gt;
# `docker compose pull` (this make take a while)&lt;br /&gt;
# `docker compose up -d` to start your docker image&lt;br /&gt;
# `docker ps` will list your running containers processes that are created by the docker yaml file&lt;br /&gt;
# `docker stop $(docker ps -q)` will stop all the containers by doing `docker stop` on all of the running containers (the -q flag lists by ID)&lt;br /&gt;
&lt;br /&gt;
== Some in-progress notetaking ==&lt;br /&gt;
# doing all that, and then going to localhost:8000 takes me to the BMS login page instead of sudoroom's. possibly, since on my setup i ran `docker pull membermatters/membermatters` initially before following the rest of those setups, that is what broke it - i would think that the config files (the database?) would supercede that&lt;br /&gt;
# there is also a dev.env file at the top of the repo that might be worth checking out. possible you could `docker run --env_file /path/to/dev.env` and it would use that env instead of the one in the [https://github.com/sudoroom/MemberMatters/blob/481e4bc8f4a3f614e05fcc98af74c9380c7a05a2/docker/docker-compose.yml#L33 docker-compose.yml] ? I don't know if there is a `docker compose` equivalent, need to keep poking at that&lt;br /&gt;
&lt;br /&gt;
some updates:&lt;br /&gt;
RechnerFox made a github action to update prod from a staging instance after that was [https://github.com/sudoroom/MemberMatters/commit/88529eec2418afd56302e7deaa4ccf2b3471aa88 added by jake]&lt;br /&gt;
2026-01-28: Martin and Nicholas did some work hacking on the vps to backup, delete, and recreate the database so we could start from scratch. This required doing a pg_dump of the existing db, and then entering the postgres docker container with exec, using pgsl -U membermatters. Then we renamed the existing database, and then went back to the [https://membermatters.org/en/latest/GETTING_STARTED.html getting started page of the mm docs and picking up after the &amp;quot;docker start&amp;quot; commands to load the initial data to the database.&lt;br /&gt;
&lt;br /&gt;
Then Martin added himself and Judy, both times it threw errors because the email wasn't setup. MM says you need postmark, but in our fork we have code to get around that, but requires the postmark api key to be blank and the email default to be changed.&lt;br /&gt;
2026-01-30: Jake did those two fixes and confirmed he got a password reset email!&lt;br /&gt;
2026-02-05: Martin double confirmed email setup by sending a welcome email to himself and started trying to configure the logos, which he got from looking at the old mm email when it was setup and seeing what url was embedded in that email.&lt;br /&gt;
&lt;br /&gt;
Django logs are doing a bunch of Warnings about not finding various /api stuff?&lt;br /&gt;
Logo changes aren't loading to the page :( Looks like it is attempting to load but no dice. Confirmed a matching format (png) and square size within favicon specs when linking to one from the wiki's logo page, and then linked to the old one but neither seem to be taking. --- Possible this is still due to all the Not Found /api stuff?&lt;br /&gt;
&lt;br /&gt;
Nicholas suggested that was just some scrapers or bots hitting the page, tested with him trying to load /api/nicksun and that also showed in the logs the same warning.&lt;br /&gt;
&lt;br /&gt;
Site Logo worked! Martin and Nicholas poked around more with it, and the favicon doesn't seem to be used anywhere except emails? But doing a rectangular image for the logo works! It's one of the logos from the wiki - possible we should switch it to a WP upload for speed, not sure how much that matters.&lt;br /&gt;
&lt;br /&gt;
== Currently ( 2026-06-04 ) ==&lt;br /&gt;
Martin added two payment plans and tested one and put in his card and it worked! Got an email and got to next steps&lt;br /&gt;
&lt;br /&gt;
Ivan signed up, paid, and got to the post-signup page&lt;br /&gt;
&lt;br /&gt;
Julio signed up, paid, and go to the post-signup page&lt;br /&gt;
&lt;br /&gt;
= Membership Plan Setup =&lt;br /&gt;
== Adding a Membership Payment Plan ==&lt;br /&gt;
Left Side Bar &amp;gt; Admin Tools &amp;gt; Membership Plan &amp;gt; Plus Icon, make sure you click the checkbox for 'visible to members'&lt;br /&gt;
&lt;br /&gt;
== Adding a new tier to the existing payment plans ==&lt;br /&gt;
Click the plan you made, click ''that'' plus icon.&lt;br /&gt;
The popup window shows up, Name your plan, CHANGE THE CURRENCY TO USD, and then add the amount&lt;br /&gt;
Notes:  Make sure you also click the checkbox for 'visible to members' - if you don't do this, you have to go to the django page to set it (ie its not changeable by in the front end)&lt;br /&gt;
&lt;br /&gt;
= MEMBERSHIP PROCESS- DISCUSSION =&lt;br /&gt;
ivan &amp;amp; anca working on this&lt;br /&gt;
&lt;br /&gt;
martin and ivan talked a bit about this 2026-01-06:&lt;br /&gt;
* subscription statuses can be: active (currently paying) / inactive (not paying)&lt;br /&gt;
* member status can be: active (currently a member) / inactive (not a member, but possibly still paying as a dono or something) / new (unsure, maybe we use this as 'signed up, but still pending endorsements/waiting period? what's the order of operations?) / or account only (signed up but not paying/no payment info in MM)&lt;br /&gt;
&lt;br /&gt;
* 2026-02-10&lt;br /&gt;
ivan and martin and nick did a truth table to figure out statuses:&lt;br /&gt;
&lt;br /&gt;
Membership Status / Subscription status&lt;br /&gt;
* Active / Active -&amp;gt; Member&lt;br /&gt;
* Active / Inactive -&amp;gt; Email to talk about payment (card error, payment lapse etc)&lt;br /&gt;
* Noob / Active -&amp;gt; Induction&lt;br /&gt;
* Noob / Inactive -&amp;gt; Induction&lt;br /&gt;
* Inactive / Active -&amp;gt; Supporter&lt;br /&gt;
* Inactive / Inactive -&amp;gt; Former Member&lt;br /&gt;
&lt;br /&gt;
=== Membermatters-related workflow ===&lt;br /&gt;
# User submits Intent to join form&lt;br /&gt;
# User creates an account / signs up on member matters. They land on a 'Contact Us' page for next steps - Membership Status: noob. Subscription Status: inactive&lt;br /&gt;
# User adds payment info to member matters and selects a payment plan - Membership Status: noob. Subscription Status: active&lt;br /&gt;
# User gets 3 endorsements achieved. Membership Status: noob. Subscription Status: active&lt;br /&gt;
# Current members have next member meeting, check for new forms, review Taiga. For any members that meet all reqs, add them to members mailing list, reply to their request form email, move them in Taiga as needed, and on MM, change user's Membership Status. Membership Status: active. Subscription Status: active&lt;br /&gt;
# User is a member!&lt;br /&gt;
&lt;br /&gt;
=== I want to become a member!! Onboarding Steps ===&lt;br /&gt;
# Hang Out, attend an event, join lists, discord&lt;br /&gt;
# I Like this! - Fill out the Intent to Join Form!!!&lt;br /&gt;
# Attend the next meeting, and get endorsements&lt;br /&gt;
# Get a mentor!!&lt;br /&gt;
&lt;br /&gt;
=== Setup payment on Member Matters ===&lt;br /&gt;
# Create an account, verify via email&lt;br /&gt;
# I'm on Sudo Humans, what do I do?&lt;br /&gt;
# I use PayPal, or checks, or Bitcoin. What do I do?&lt;br /&gt;
&lt;br /&gt;
=== Get door access ===&lt;br /&gt;
# Get an email?&lt;br /&gt;
# How many door access systems will we have?&lt;br /&gt;
&lt;br /&gt;
=== Need to Setup, Immediate Actions ===&lt;br /&gt;
# Set up membership tiers - done? we only have one&lt;br /&gt;
# Set up payment plans - also done, mirroring the ones on sudohumans&lt;br /&gt;
&lt;br /&gt;
=== Pain points: We need to fix these issues ... later ===&lt;br /&gt;
# ''need to check for verification email from member matters''&lt;br /&gt;
# ''get access card process needs work''&lt;br /&gt;
# ''members can see each others activities on member matters''&lt;br /&gt;
# ''update welcome and alert emails''&lt;br /&gt;
# ''updating the amount someone is paying requires an admin to change it in django, there's no way for a user to do that, and also no corresponding vue card in the frontend''&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
# '' Contact Info (Constance Config) - some of that is still membermatters / defaults (notably the email!)&lt;br /&gt;
# '' Seems like some timedate setting is still configured to be DD/MM/YYYY somehow?&lt;br /&gt;
# '' UX: The ending page takes someone to Contact Us page, kinda unclear what the actual steps are&lt;br /&gt;
# '' UX: Welcome email sent from MM says &amp;quot;here are some next steps&amp;quot; but it's empty, ha.&lt;br /&gt;
# '' see also maybe [https://github.com/sudoroom/MemberMatters/issues the github issues page]&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13289</id>
		<title>Membermatters</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13289"/>
		<updated>2026-06-05T03:03:45Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* TODO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is the notes for the membermatters installation&lt;br /&gt;
&lt;br /&gt;
https://backers.sudoroom.org&lt;br /&gt;
&lt;br /&gt;
= to create a new user =&lt;br /&gt;
* https://backers.sudoroom.org/register&lt;br /&gt;
&lt;br /&gt;
= to check the logs from the docker instance =&lt;br /&gt;
* https://backers.sudoroom.org/logs/django.log&lt;br /&gt;
&lt;br /&gt;
= github =&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/db0724495a09731ec18db2ebe353931a08c256e2..d6ce52564e8ae64975690107efbc2f1907ac1fb8 the changes juul made to add sendmail as an option]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/d6ce52564e8ae64975690107efbc2f1907ac1fb8..00918eda47d88d090c29c976410ae8036579d7ea the changes rechner and jake made to build our docker for postgres]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/tree/sudoroom we are using the sudoroom branch in our docker]&lt;br /&gt;
* we also need to edit frontend/src/i18n/en-AU/index.ts to change &amp;quot;mobile number&amp;quot; to &amp;quot;Phone Number (or X)&amp;quot; (it builds to /usr/src/app/frontend/dist/spa/assets/index.*.js )&lt;br /&gt;
* we are working on mounting the docker image with git on the server, so we can make changes to production and try them&lt;br /&gt;
* RechnerFox setup a staging instance for us!&lt;br /&gt;
* we should set up a schedule for rebasing in changes from upstream, then shoving our changes back on top. then we can deploy to docker directly from our github fork&lt;br /&gt;
&lt;br /&gt;
= we are not spam =&lt;br /&gt;
* emails sent by this system for people to validate their account, or reset their password, are important&lt;br /&gt;
* emails are being accepted by gmail (for now) but not by some other platforms, and maybe not for some gmail users?&lt;br /&gt;
* we should look for ways to find out why the emails are rejected by some servers&lt;br /&gt;
* we probably need to format the emails with plaintext and MIME to make them look normal to spam checkers&lt;br /&gt;
* Our server is postfix based, but yeah, postfix has very good logging on exactly what happens to each message.  Though you as the sender can't know if it went into spam, only if it got outright rejected.&lt;br /&gt;
* emails to an MIT address were rejected by Microsoft: &amp;quot;Access denied, banned sending IP [198.199.116.180]. To request removal from this list please visit https://sender.office.com/ and follow the directions&amp;quot; and then Sean followed the directions and asked them to unblock our IP address&lt;br /&gt;
* we need to setup monitoring of emails that were outright rejected, and take action each time.  Dealing with emails marked as spam will be more challenging unless people have access to the spam filter information on their receiving end.&lt;br /&gt;
* we need to encourage more and people to sign up to the new system as we make progress, AFTER setting up rejection monitoring&lt;br /&gt;
&lt;br /&gt;
= certbot =&lt;br /&gt;
* juul used pipx to install, and then had to manually make a systemd job to check it twice a day&lt;br /&gt;
&lt;br /&gt;
= Help us build and test =&lt;br /&gt;
* prioritized bugs: https://github.com/orgs/sudoroom/projects/1/views/1&lt;br /&gt;
* submit a bug: https://github.com/sudoroom/MemberMatters/issues&lt;br /&gt;
== Making a dev environment ==&lt;br /&gt;
(this assumes you already have git installed and docker setup!)&lt;br /&gt;
# `cd` to a directory you want to put the repo&lt;br /&gt;
# `git clone https://github.com/sudoroom/MemberMatters.git`&lt;br /&gt;
# `git checkout -b branch-name` to make a new branch based of the default (sudoroom)&lt;br /&gt;
# `touch /usr/app/django.log` (this is where the logs will go, and not creating it as a file seemed to create it as a dir which docker hated)&lt;br /&gt;
# 'echo &amp;quot;MM_ENV=Development&amp;quot; &amp;gt; ./docker/.env`  - I am not sure if this needs to go into the docker directory, or just exist? .env files are .gitignored anyway, but it looks like this is used by docker to set some environment vars in the docker-compose.yml&lt;br /&gt;
# `cd ./docker`&lt;br /&gt;
# `docker compose pull` (this make take a while)&lt;br /&gt;
# `docker compose up -d` to start your docker image&lt;br /&gt;
# `docker ps` will list your running containers processes that are created by the docker yaml file&lt;br /&gt;
# `docker stop $(docker ps -q)` will stop all the containers by doing `docker stop` on all of the running containers (the -q flag lists by ID)&lt;br /&gt;
&lt;br /&gt;
== Some in-progress notetaking ==&lt;br /&gt;
# doing all that, and then going to localhost:8000 takes me to the BMS login page instead of sudoroom's. possibly, since on my setup i ran `docker pull membermatters/membermatters` initially before following the rest of those setups, that is what broke it - i would think that the config files (the database?) would supercede that&lt;br /&gt;
# there is also a dev.env file at the top of the repo that might be worth checking out. possible you could `docker run --env_file /path/to/dev.env` and it would use that env instead of the one in the [https://github.com/sudoroom/MemberMatters/blob/481e4bc8f4a3f614e05fcc98af74c9380c7a05a2/docker/docker-compose.yml#L33 docker-compose.yml] ? I don't know if there is a `docker compose` equivalent, need to keep poking at that&lt;br /&gt;
&lt;br /&gt;
some updates:&lt;br /&gt;
RechnerFox made a github action to update prod from a staging instance after that was [https://github.com/sudoroom/MemberMatters/commit/88529eec2418afd56302e7deaa4ccf2b3471aa88 added by jake]&lt;br /&gt;
2026-01-28: Martin and Nicholas did some work hacking on the vps to backup, delete, and recreate the database so we could start from scratch. This required doing a pg_dump of the existing db, and then entering the postgres docker container with exec, using pgsl -U membermatters. Then we renamed the existing database, and then went back to the [https://membermatters.org/en/latest/GETTING_STARTED.html getting started page of the mm docs and picking up after the &amp;quot;docker start&amp;quot; commands to load the initial data to the database.&lt;br /&gt;
&lt;br /&gt;
Then Martin added himself and Judy, both times it threw errors because the email wasn't setup. MM says you need postmark, but in our fork we have code to get around that, but requires the postmark api key to be blank and the email default to be changed.&lt;br /&gt;
2026-01-30: Jake did those two fixes and confirmed he got a password reset email!&lt;br /&gt;
2026-02-05: Martin double confirmed email setup by sending a welcome email to himself and started trying to configure the logos, which he got from looking at the old mm email when it was setup and seeing what url was embedded in that email.&lt;br /&gt;
&lt;br /&gt;
Django logs are doing a bunch of Warnings about not finding various /api stuff?&lt;br /&gt;
Logo changes aren't loading to the page :( Looks like it is attempting to load but no dice. Confirmed a matching format (png) and square size within favicon specs when linking to one from the wiki's logo page, and then linked to the old one but neither seem to be taking. --- Possible this is still due to all the Not Found /api stuff?&lt;br /&gt;
&lt;br /&gt;
Nicholas suggested that was just some scrapers or bots hitting the page, tested with him trying to load /api/nicksun and that also showed in the logs the same warning.&lt;br /&gt;
&lt;br /&gt;
Site Logo worked! Martin and Nicholas poked around more with it, and the favicon doesn't seem to be used anywhere except emails? But doing a rectangular image for the logo works! It's one of the logos from the wiki - possible we should switch it to a WP upload for speed, not sure how much that matters.&lt;br /&gt;
&lt;br /&gt;
== Currently ( 2026-06-04 ) ==&lt;br /&gt;
Martin added two payment plans and tested one and put in his card and it worked! Got an email and got to next steps&lt;br /&gt;
&lt;br /&gt;
Ivan signed up, paid, and got to the post-signup page&lt;br /&gt;
&lt;br /&gt;
Julio signed up, paid, and go to the post-signup page&lt;br /&gt;
&lt;br /&gt;
= Membership Plan Setup =&lt;br /&gt;
== Adding a Membership Payment Plan ==&lt;br /&gt;
Left Side Bar &amp;gt; Admin Tools &amp;gt; Membership Plan &amp;gt; Plus Icon, make sure you click the checkbox for 'visible to members'&lt;br /&gt;
&lt;br /&gt;
== Adding a new tier to the existing payment plans ==&lt;br /&gt;
Click the plan you made, click ''that'' plus icon.&lt;br /&gt;
The popup window shows up, Name your plan, CHANGE THE CURRENCY TO USD, and then add the amount&lt;br /&gt;
Notes:  Make sure you also click the checkbox for 'visible to members' - if you don't do this, you have to go to the django page to set it (ie its not changeable by in the front end)&lt;br /&gt;
&lt;br /&gt;
= MEMBERSHIP PROCESS- DISCUSSION =&lt;br /&gt;
ivan &amp;amp; anca working on this&lt;br /&gt;
&lt;br /&gt;
martin and ivan talked a bit about this 2026-01-06:&lt;br /&gt;
* subscription statuses can be: active (currently paying) / inactive (not paying)&lt;br /&gt;
* member status can be: active (currently a member) / inactive (not a member, but possibly still paying as a dono or something) / new (unsure, maybe we use this as 'signed up, but still pending endorsements/waiting period? what's the order of operations?) / or account only (signed up but not paying/no payment info in MM)&lt;br /&gt;
&lt;br /&gt;
* 2026-02-10&lt;br /&gt;
ivan and martin and nick did a truth table to figure out statuses:&lt;br /&gt;
&lt;br /&gt;
Membership Status / Subscription status&lt;br /&gt;
* Active / Active -&amp;gt; Member&lt;br /&gt;
* Active / Inactive -&amp;gt; Email to talk about payment (card error, payment lapse etc)&lt;br /&gt;
* Noob / Active -&amp;gt; Induction&lt;br /&gt;
* Noob / Inactive -&amp;gt; Induction&lt;br /&gt;
* Inactive / Active -&amp;gt; Supporter&lt;br /&gt;
* Inactive / Inactive -&amp;gt; Former Member&lt;br /&gt;
&lt;br /&gt;
=== Membermatters-related workflow ===&lt;br /&gt;
# User submits Intent to join form&lt;br /&gt;
# User creates an account / signs up on member matters. They land on a 'Contact Us' page for next steps - Membership Status: noob. Subscription Status: inactive&lt;br /&gt;
# User adds payment info to member matters and selects a payment plan - Membership Status: noob. Subscription Status: active&lt;br /&gt;
# User gets 3 endorsements achieved. Membership Status: noob. Subscription Status: active&lt;br /&gt;
# Current members have next member meeting, check for new forms, review Taiga. For any members that meet all reqs, add them to members mailing list, reply to their request form email, move them in Taiga as needed, and on MM, change user's Membership Status. Membership Status: active. Subscription Status: active&lt;br /&gt;
# User is a member!&lt;br /&gt;
&lt;br /&gt;
=== I want to become a member!! Onboarding Steps ===&lt;br /&gt;
# Hang Out, attend an event, join lists, discord&lt;br /&gt;
# I Like this! - Fill out the Intent to Join Form!!!&lt;br /&gt;
# Attend the next meeting, and get endorsements&lt;br /&gt;
# Get a mentor!!&lt;br /&gt;
&lt;br /&gt;
=== Setup payment on Member Matters ===&lt;br /&gt;
# Create an account, verify via email&lt;br /&gt;
# I'm on Sudo Humans, what do I do?&lt;br /&gt;
# I use PayPal, or checks, or Bitcoin. What do I do?&lt;br /&gt;
&lt;br /&gt;
=== Get door access ===&lt;br /&gt;
# Get an email?&lt;br /&gt;
# How many door access systems will we have?&lt;br /&gt;
&lt;br /&gt;
=== Need to Setup, Immediate Actions ===&lt;br /&gt;
# Set up membership tiers - done? we only have one&lt;br /&gt;
# Set up payment plans - also done, mirroring the ones on sudohumans&lt;br /&gt;
&lt;br /&gt;
=== Pain points: We need to fix these issues ... later ===&lt;br /&gt;
# ''need to check for verification email from member matters''&lt;br /&gt;
# ''get access card process needs work''&lt;br /&gt;
# ''members can see each others activities on member matters''&lt;br /&gt;
# ''update welcome and alert emails''&lt;br /&gt;
# ''updating the amount someone is paying requires an admin to change it in django, there's no way for a user to do that, and also no corresponding vue card in the frontend''&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
# '' Contact Info (Constance Config) - some of that is still membermatters / defaults (notably the email!)&lt;br /&gt;
# '' Seems like some timedate setting is still configured to be DD/MM/YYYY somehow?&lt;br /&gt;
# '' UX: The ending page takes someone to Contact Us page, kinda unclear what the actual steps are&lt;br /&gt;
# '' UX: Welcome email sent from MM says &amp;quot;here are some next steps&amp;quot; but it's empty, ha.&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13288</id>
		<title>Membermatters</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13288"/>
		<updated>2026-06-05T02:59:30Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* Membermatters-related workflow */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is the notes for the membermatters installation&lt;br /&gt;
&lt;br /&gt;
https://backers.sudoroom.org&lt;br /&gt;
&lt;br /&gt;
= to create a new user =&lt;br /&gt;
* https://backers.sudoroom.org/register&lt;br /&gt;
&lt;br /&gt;
= to check the logs from the docker instance =&lt;br /&gt;
* https://backers.sudoroom.org/logs/django.log&lt;br /&gt;
&lt;br /&gt;
= github =&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/db0724495a09731ec18db2ebe353931a08c256e2..d6ce52564e8ae64975690107efbc2f1907ac1fb8 the changes juul made to add sendmail as an option]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/d6ce52564e8ae64975690107efbc2f1907ac1fb8..00918eda47d88d090c29c976410ae8036579d7ea the changes rechner and jake made to build our docker for postgres]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/tree/sudoroom we are using the sudoroom branch in our docker]&lt;br /&gt;
* we also need to edit frontend/src/i18n/en-AU/index.ts to change &amp;quot;mobile number&amp;quot; to &amp;quot;Phone Number (or X)&amp;quot; (it builds to /usr/src/app/frontend/dist/spa/assets/index.*.js )&lt;br /&gt;
* we are working on mounting the docker image with git on the server, so we can make changes to production and try them&lt;br /&gt;
* RechnerFox setup a staging instance for us!&lt;br /&gt;
* we should set up a schedule for rebasing in changes from upstream, then shoving our changes back on top. then we can deploy to docker directly from our github fork&lt;br /&gt;
&lt;br /&gt;
= we are not spam =&lt;br /&gt;
* emails sent by this system for people to validate their account, or reset their password, are important&lt;br /&gt;
* emails are being accepted by gmail (for now) but not by some other platforms, and maybe not for some gmail users?&lt;br /&gt;
* we should look for ways to find out why the emails are rejected by some servers&lt;br /&gt;
* we probably need to format the emails with plaintext and MIME to make them look normal to spam checkers&lt;br /&gt;
* Our server is postfix based, but yeah, postfix has very good logging on exactly what happens to each message.  Though you as the sender can't know if it went into spam, only if it got outright rejected.&lt;br /&gt;
* emails to an MIT address were rejected by Microsoft: &amp;quot;Access denied, banned sending IP [198.199.116.180]. To request removal from this list please visit https://sender.office.com/ and follow the directions&amp;quot; and then Sean followed the directions and asked them to unblock our IP address&lt;br /&gt;
* we need to setup monitoring of emails that were outright rejected, and take action each time.  Dealing with emails marked as spam will be more challenging unless people have access to the spam filter information on their receiving end.&lt;br /&gt;
* we need to encourage more and people to sign up to the new system as we make progress, AFTER setting up rejection monitoring&lt;br /&gt;
&lt;br /&gt;
= certbot =&lt;br /&gt;
* juul used pipx to install, and then had to manually make a systemd job to check it twice a day&lt;br /&gt;
&lt;br /&gt;
= Help us build and test =&lt;br /&gt;
* prioritized bugs: https://github.com/orgs/sudoroom/projects/1/views/1&lt;br /&gt;
* submit a bug: https://github.com/sudoroom/MemberMatters/issues&lt;br /&gt;
== Making a dev environment ==&lt;br /&gt;
(this assumes you already have git installed and docker setup!)&lt;br /&gt;
# `cd` to a directory you want to put the repo&lt;br /&gt;
# `git clone https://github.com/sudoroom/MemberMatters.git`&lt;br /&gt;
# `git checkout -b branch-name` to make a new branch based of the default (sudoroom)&lt;br /&gt;
# `touch /usr/app/django.log` (this is where the logs will go, and not creating it as a file seemed to create it as a dir which docker hated)&lt;br /&gt;
# 'echo &amp;quot;MM_ENV=Development&amp;quot; &amp;gt; ./docker/.env`  - I am not sure if this needs to go into the docker directory, or just exist? .env files are .gitignored anyway, but it looks like this is used by docker to set some environment vars in the docker-compose.yml&lt;br /&gt;
# `cd ./docker`&lt;br /&gt;
# `docker compose pull` (this make take a while)&lt;br /&gt;
# `docker compose up -d` to start your docker image&lt;br /&gt;
# `docker ps` will list your running containers processes that are created by the docker yaml file&lt;br /&gt;
# `docker stop $(docker ps -q)` will stop all the containers by doing `docker stop` on all of the running containers (the -q flag lists by ID)&lt;br /&gt;
&lt;br /&gt;
== Some in-progress notetaking ==&lt;br /&gt;
# doing all that, and then going to localhost:8000 takes me to the BMS login page instead of sudoroom's. possibly, since on my setup i ran `docker pull membermatters/membermatters` initially before following the rest of those setups, that is what broke it - i would think that the config files (the database?) would supercede that&lt;br /&gt;
# there is also a dev.env file at the top of the repo that might be worth checking out. possible you could `docker run --env_file /path/to/dev.env` and it would use that env instead of the one in the [https://github.com/sudoroom/MemberMatters/blob/481e4bc8f4a3f614e05fcc98af74c9380c7a05a2/docker/docker-compose.yml#L33 docker-compose.yml] ? I don't know if there is a `docker compose` equivalent, need to keep poking at that&lt;br /&gt;
&lt;br /&gt;
some updates:&lt;br /&gt;
RechnerFox made a github action to update prod from a staging instance after that was [https://github.com/sudoroom/MemberMatters/commit/88529eec2418afd56302e7deaa4ccf2b3471aa88 added by jake]&lt;br /&gt;
2026-01-28: Martin and Nicholas did some work hacking on the vps to backup, delete, and recreate the database so we could start from scratch. This required doing a pg_dump of the existing db, and then entering the postgres docker container with exec, using pgsl -U membermatters. Then we renamed the existing database, and then went back to the [https://membermatters.org/en/latest/GETTING_STARTED.html getting started page of the mm docs and picking up after the &amp;quot;docker start&amp;quot; commands to load the initial data to the database.&lt;br /&gt;
&lt;br /&gt;
Then Martin added himself and Judy, both times it threw errors because the email wasn't setup. MM says you need postmark, but in our fork we have code to get around that, but requires the postmark api key to be blank and the email default to be changed.&lt;br /&gt;
2026-01-30: Jake did those two fixes and confirmed he got a password reset email!&lt;br /&gt;
2026-02-05: Martin double confirmed email setup by sending a welcome email to himself and started trying to configure the logos, which he got from looking at the old mm email when it was setup and seeing what url was embedded in that email.&lt;br /&gt;
&lt;br /&gt;
Django logs are doing a bunch of Warnings about not finding various /api stuff?&lt;br /&gt;
Logo changes aren't loading to the page :( Looks like it is attempting to load but no dice. Confirmed a matching format (png) and square size within favicon specs when linking to one from the wiki's logo page, and then linked to the old one but neither seem to be taking. --- Possible this is still due to all the Not Found /api stuff?&lt;br /&gt;
&lt;br /&gt;
Nicholas suggested that was just some scrapers or bots hitting the page, tested with him trying to load /api/nicksun and that also showed in the logs the same warning.&lt;br /&gt;
&lt;br /&gt;
Site Logo worked! Martin and Nicholas poked around more with it, and the favicon doesn't seem to be used anywhere except emails? But doing a rectangular image for the logo works! It's one of the logos from the wiki - possible we should switch it to a WP upload for speed, not sure how much that matters.&lt;br /&gt;
&lt;br /&gt;
== Currently ( 2026-06-04 ) ==&lt;br /&gt;
Martin added two payment plans and tested one and put in his card and it worked! Got an email and got to next steps&lt;br /&gt;
&lt;br /&gt;
Ivan signed up, paid, and got to the post-signup page&lt;br /&gt;
&lt;br /&gt;
Julio signed up, paid, and go to the post-signup page&lt;br /&gt;
&lt;br /&gt;
= Membership Plan Setup =&lt;br /&gt;
== Adding a Membership Payment Plan ==&lt;br /&gt;
Left Side Bar &amp;gt; Admin Tools &amp;gt; Membership Plan &amp;gt; Plus Icon, make sure you click the checkbox for 'visible to members'&lt;br /&gt;
&lt;br /&gt;
== Adding a new tier to the existing payment plans ==&lt;br /&gt;
Click the plan you made, click ''that'' plus icon.&lt;br /&gt;
The popup window shows up, Name your plan, CHANGE THE CURRENCY TO USD, and then add the amount&lt;br /&gt;
Notes:  Make sure you also click the checkbox for 'visible to members' - if you don't do this, you have to go to the django page to set it (ie its not changeable by in the front end)&lt;br /&gt;
&lt;br /&gt;
= MEMBERSHIP PROCESS- DISCUSSION =&lt;br /&gt;
ivan &amp;amp; anca working on this&lt;br /&gt;
&lt;br /&gt;
martin and ivan talked a bit about this 2026-01-06:&lt;br /&gt;
* subscription statuses can be: active (currently paying) / inactive (not paying)&lt;br /&gt;
* member status can be: active (currently a member) / inactive (not a member, but possibly still paying as a dono or something) / new (unsure, maybe we use this as 'signed up, but still pending endorsements/waiting period? what's the order of operations?) / or account only (signed up but not paying/no payment info in MM)&lt;br /&gt;
&lt;br /&gt;
* 2026-02-10&lt;br /&gt;
ivan and martin and nick did a truth table to figure out statuses:&lt;br /&gt;
&lt;br /&gt;
Membership Status / Subscription status&lt;br /&gt;
* Active / Active -&amp;gt; Member&lt;br /&gt;
* Active / Inactive -&amp;gt; Email to talk about payment (card error, payment lapse etc)&lt;br /&gt;
* Noob / Active -&amp;gt; Induction&lt;br /&gt;
* Noob / Inactive -&amp;gt; Induction&lt;br /&gt;
* Inactive / Active -&amp;gt; Supporter&lt;br /&gt;
* Inactive / Inactive -&amp;gt; Former Member&lt;br /&gt;
&lt;br /&gt;
=== Membermatters-related workflow ===&lt;br /&gt;
# User submits Intent to join form&lt;br /&gt;
# User creates an account / signs up on member matters. They land on a 'Contact Us' page for next steps - Membership Status: noob. Subscription Status: inactive&lt;br /&gt;
# User adds payment info to member matters and selects a payment plan - Membership Status: noob. Subscription Status: active&lt;br /&gt;
# User gets 3 endorsements achieved. Membership Status: noob. Subscription Status: active&lt;br /&gt;
# Current members have next member meeting, check for new forms, review Taiga. For any members that meet all reqs, add them to members mailing list, reply to their request form email, move them in Taiga as needed, and on MM, change user's Membership Status. Membership Status: active. Subscription Status: active&lt;br /&gt;
# User is a member!&lt;br /&gt;
&lt;br /&gt;
=== I want to become a member!! Onboarding Steps ===&lt;br /&gt;
# Hang Out, attend an event, join lists, discord&lt;br /&gt;
# I Like this! - Fill out the Intent to Join Form!!!&lt;br /&gt;
# Attend the next meeting, and get endorsements&lt;br /&gt;
# Get a mentor!!&lt;br /&gt;
&lt;br /&gt;
=== Setup payment on Member Matters ===&lt;br /&gt;
# Create an account, verify via email&lt;br /&gt;
# I'm on Sudo Humans, what do I do?&lt;br /&gt;
# I use PayPal, or checks, or Bitcoin. What do I do?&lt;br /&gt;
&lt;br /&gt;
=== Get door access ===&lt;br /&gt;
# Get an email?&lt;br /&gt;
# How many door access systems will we have?&lt;br /&gt;
&lt;br /&gt;
=== Need to Setup, Immediate Actions ===&lt;br /&gt;
# Set up membership tiers - done? we only have one&lt;br /&gt;
# Set up payment plans - also done, mirroring the ones on sudohumans&lt;br /&gt;
&lt;br /&gt;
=== Pain points: We need to fix these issues ... later ===&lt;br /&gt;
# ''need to check for verification email from member matters''&lt;br /&gt;
# ''get access card process needs work''&lt;br /&gt;
# ''members can see each others activities on member matters''&lt;br /&gt;
# ''update welcome and alert emails''&lt;br /&gt;
# ''updating the amount someone is paying requires an admin to change it in django, there's no way for a user to do that, and also no corresponding vue card in the frontend''&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
# '' Contact Info (Constance Config) - some of that is still membermatters / defaults (notably the email!)&lt;br /&gt;
# '' Seems like some timedate setting is still configured to be DD/MM/YYYY somehow?&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13287</id>
		<title>Membermatters</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13287"/>
		<updated>2026-06-05T02:39:36Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* MEMBERSHIP PROCESS- DISCUSSION */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is the notes for the membermatters installation&lt;br /&gt;
&lt;br /&gt;
https://backers.sudoroom.org&lt;br /&gt;
&lt;br /&gt;
= to create a new user =&lt;br /&gt;
* https://backers.sudoroom.org/register&lt;br /&gt;
&lt;br /&gt;
= to check the logs from the docker instance =&lt;br /&gt;
* https://backers.sudoroom.org/logs/django.log&lt;br /&gt;
&lt;br /&gt;
= github =&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/db0724495a09731ec18db2ebe353931a08c256e2..d6ce52564e8ae64975690107efbc2f1907ac1fb8 the changes juul made to add sendmail as an option]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/d6ce52564e8ae64975690107efbc2f1907ac1fb8..00918eda47d88d090c29c976410ae8036579d7ea the changes rechner and jake made to build our docker for postgres]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/tree/sudoroom we are using the sudoroom branch in our docker]&lt;br /&gt;
* we also need to edit frontend/src/i18n/en-AU/index.ts to change &amp;quot;mobile number&amp;quot; to &amp;quot;Phone Number (or X)&amp;quot; (it builds to /usr/src/app/frontend/dist/spa/assets/index.*.js )&lt;br /&gt;
* we are working on mounting the docker image with git on the server, so we can make changes to production and try them&lt;br /&gt;
* RechnerFox setup a staging instance for us!&lt;br /&gt;
* we should set up a schedule for rebasing in changes from upstream, then shoving our changes back on top. then we can deploy to docker directly from our github fork&lt;br /&gt;
&lt;br /&gt;
= we are not spam =&lt;br /&gt;
* emails sent by this system for people to validate their account, or reset their password, are important&lt;br /&gt;
* emails are being accepted by gmail (for now) but not by some other platforms, and maybe not for some gmail users?&lt;br /&gt;
* we should look for ways to find out why the emails are rejected by some servers&lt;br /&gt;
* we probably need to format the emails with plaintext and MIME to make them look normal to spam checkers&lt;br /&gt;
* Our server is postfix based, but yeah, postfix has very good logging on exactly what happens to each message.  Though you as the sender can't know if it went into spam, only if it got outright rejected.&lt;br /&gt;
* emails to an MIT address were rejected by Microsoft: &amp;quot;Access denied, banned sending IP [198.199.116.180]. To request removal from this list please visit https://sender.office.com/ and follow the directions&amp;quot; and then Sean followed the directions and asked them to unblock our IP address&lt;br /&gt;
* we need to setup monitoring of emails that were outright rejected, and take action each time.  Dealing with emails marked as spam will be more challenging unless people have access to the spam filter information on their receiving end.&lt;br /&gt;
* we need to encourage more and people to sign up to the new system as we make progress, AFTER setting up rejection monitoring&lt;br /&gt;
&lt;br /&gt;
= certbot =&lt;br /&gt;
* juul used pipx to install, and then had to manually make a systemd job to check it twice a day&lt;br /&gt;
&lt;br /&gt;
= Help us build and test =&lt;br /&gt;
* prioritized bugs: https://github.com/orgs/sudoroom/projects/1/views/1&lt;br /&gt;
* submit a bug: https://github.com/sudoroom/MemberMatters/issues&lt;br /&gt;
== Making a dev environment ==&lt;br /&gt;
(this assumes you already have git installed and docker setup!)&lt;br /&gt;
# `cd` to a directory you want to put the repo&lt;br /&gt;
# `git clone https://github.com/sudoroom/MemberMatters.git`&lt;br /&gt;
# `git checkout -b branch-name` to make a new branch based of the default (sudoroom)&lt;br /&gt;
# `touch /usr/app/django.log` (this is where the logs will go, and not creating it as a file seemed to create it as a dir which docker hated)&lt;br /&gt;
# 'echo &amp;quot;MM_ENV=Development&amp;quot; &amp;gt; ./docker/.env`  - I am not sure if this needs to go into the docker directory, or just exist? .env files are .gitignored anyway, but it looks like this is used by docker to set some environment vars in the docker-compose.yml&lt;br /&gt;
# `cd ./docker`&lt;br /&gt;
# `docker compose pull` (this make take a while)&lt;br /&gt;
# `docker compose up -d` to start your docker image&lt;br /&gt;
# `docker ps` will list your running containers processes that are created by the docker yaml file&lt;br /&gt;
# `docker stop $(docker ps -q)` will stop all the containers by doing `docker stop` on all of the running containers (the -q flag lists by ID)&lt;br /&gt;
&lt;br /&gt;
== Some in-progress notetaking ==&lt;br /&gt;
# doing all that, and then going to localhost:8000 takes me to the BMS login page instead of sudoroom's. possibly, since on my setup i ran `docker pull membermatters/membermatters` initially before following the rest of those setups, that is what broke it - i would think that the config files (the database?) would supercede that&lt;br /&gt;
# there is also a dev.env file at the top of the repo that might be worth checking out. possible you could `docker run --env_file /path/to/dev.env` and it would use that env instead of the one in the [https://github.com/sudoroom/MemberMatters/blob/481e4bc8f4a3f614e05fcc98af74c9380c7a05a2/docker/docker-compose.yml#L33 docker-compose.yml] ? I don't know if there is a `docker compose` equivalent, need to keep poking at that&lt;br /&gt;
&lt;br /&gt;
some updates:&lt;br /&gt;
RechnerFox made a github action to update prod from a staging instance after that was [https://github.com/sudoroom/MemberMatters/commit/88529eec2418afd56302e7deaa4ccf2b3471aa88 added by jake]&lt;br /&gt;
2026-01-28: Martin and Nicholas did some work hacking on the vps to backup, delete, and recreate the database so we could start from scratch. This required doing a pg_dump of the existing db, and then entering the postgres docker container with exec, using pgsl -U membermatters. Then we renamed the existing database, and then went back to the [https://membermatters.org/en/latest/GETTING_STARTED.html getting started page of the mm docs and picking up after the &amp;quot;docker start&amp;quot; commands to load the initial data to the database.&lt;br /&gt;
&lt;br /&gt;
Then Martin added himself and Judy, both times it threw errors because the email wasn't setup. MM says you need postmark, but in our fork we have code to get around that, but requires the postmark api key to be blank and the email default to be changed.&lt;br /&gt;
2026-01-30: Jake did those two fixes and confirmed he got a password reset email!&lt;br /&gt;
2026-02-05: Martin double confirmed email setup by sending a welcome email to himself and started trying to configure the logos, which he got from looking at the old mm email when it was setup and seeing what url was embedded in that email.&lt;br /&gt;
&lt;br /&gt;
Django logs are doing a bunch of Warnings about not finding various /api stuff?&lt;br /&gt;
Logo changes aren't loading to the page :( Looks like it is attempting to load but no dice. Confirmed a matching format (png) and square size within favicon specs when linking to one from the wiki's logo page, and then linked to the old one but neither seem to be taking. --- Possible this is still due to all the Not Found /api stuff?&lt;br /&gt;
&lt;br /&gt;
Nicholas suggested that was just some scrapers or bots hitting the page, tested with him trying to load /api/nicksun and that also showed in the logs the same warning.&lt;br /&gt;
&lt;br /&gt;
Site Logo worked! Martin and Nicholas poked around more with it, and the favicon doesn't seem to be used anywhere except emails? But doing a rectangular image for the logo works! It's one of the logos from the wiki - possible we should switch it to a WP upload for speed, not sure how much that matters.&lt;br /&gt;
&lt;br /&gt;
== Currently ( 2026-06-04 ) ==&lt;br /&gt;
Martin added two payment plans and tested one and put in his card and it worked! Got an email and got to next steps&lt;br /&gt;
&lt;br /&gt;
Ivan signed up, paid, and got to the post-signup page&lt;br /&gt;
&lt;br /&gt;
Julio signed up, paid, and go to the post-signup page&lt;br /&gt;
&lt;br /&gt;
= Membership Plan Setup =&lt;br /&gt;
== Adding a Membership Payment Plan ==&lt;br /&gt;
Left Side Bar &amp;gt; Admin Tools &amp;gt; Membership Plan &amp;gt; Plus Icon, make sure you click the checkbox for 'visible to members'&lt;br /&gt;
&lt;br /&gt;
== Adding a new tier to the existing payment plans ==&lt;br /&gt;
Click the plan you made, click ''that'' plus icon.&lt;br /&gt;
The popup window shows up, Name your plan, CHANGE THE CURRENCY TO USD, and then add the amount&lt;br /&gt;
Notes:  Make sure you also click the checkbox for 'visible to members' - if you don't do this, you have to go to the django page to set it (ie its not changeable by in the front end)&lt;br /&gt;
&lt;br /&gt;
= MEMBERSHIP PROCESS- DISCUSSION =&lt;br /&gt;
ivan &amp;amp; anca working on this&lt;br /&gt;
&lt;br /&gt;
martin and ivan talked a bit about this 2026-01-06:&lt;br /&gt;
* subscription statuses can be: active (currently paying) / inactive (not paying)&lt;br /&gt;
* member status can be: active (currently a member) / inactive (not a member, but possibly still paying as a dono or something) / new (unsure, maybe we use this as 'signed up, but still pending endorsements/waiting period? what's the order of operations?) / or account only (signed up but not paying/no payment info in MM)&lt;br /&gt;
&lt;br /&gt;
* 2026-02-10&lt;br /&gt;
ivan and martin and nick did a truth table to figure out statuses:&lt;br /&gt;
&lt;br /&gt;
Membership Status / Subscription status&lt;br /&gt;
* Active / Active -&amp;gt; Member&lt;br /&gt;
* Active / Inactive -&amp;gt; Email to talk about payment (card error, payment lapse etc)&lt;br /&gt;
* Noob / Active -&amp;gt; Induction&lt;br /&gt;
* Noob / Inactive -&amp;gt; Induction&lt;br /&gt;
* Inactive / Active -&amp;gt; Supporter&lt;br /&gt;
* Inactive / Inactive -&amp;gt; Former Member&lt;br /&gt;
&lt;br /&gt;
=== Membermatters-related workflow ===&lt;br /&gt;
# User submits Intent to join form&lt;br /&gt;
# User creates an account / signs up on member matters. They land on a 'Contact Us' page for next steps - Membership Status: noob. Subscription Status: inactive&lt;br /&gt;
# User adds payment info to member matters and selects a payment plan - Membership Status: noob. Subscription Status: active&lt;br /&gt;
# User gets 3 endorsements achieved. Membership Status: noob. Subscription Status: active&lt;br /&gt;
# Current members have next member meeting, review Taiga and email list. For any members that meet all reqs, on MM, change user's Membership Status. Membership Status: active. Subscription Status: active&lt;br /&gt;
# User is a member!&lt;br /&gt;
&lt;br /&gt;
=== I want to become a member!! Onboarding Steps ===&lt;br /&gt;
# Hang Out, attend an event, join lists, discord&lt;br /&gt;
# I Like this! - Fill out the Intent to Join Form!!!&lt;br /&gt;
# Attend the next meeting, and get endorsements&lt;br /&gt;
# Get a mentor!!&lt;br /&gt;
&lt;br /&gt;
=== Setup payment on Member Matters ===&lt;br /&gt;
# Create an account, verify via email&lt;br /&gt;
# I'm on Sudo Humans, what do I do?&lt;br /&gt;
# I use PayPal, or checks, or Bitcoin. What do I do?&lt;br /&gt;
&lt;br /&gt;
=== Get door access ===&lt;br /&gt;
# Get an email?&lt;br /&gt;
# How many door access systems will we have?&lt;br /&gt;
&lt;br /&gt;
=== Need to Setup, Immediate Actions ===&lt;br /&gt;
# Set up membership tiers - done? we only have one&lt;br /&gt;
# Set up payment plans - also done, mirroring the ones on sudohumans&lt;br /&gt;
&lt;br /&gt;
=== Pain points: We need to fix these issues ... later ===&lt;br /&gt;
# ''need to check for verification email from member matters''&lt;br /&gt;
# ''get access card process needs work''&lt;br /&gt;
# ''members can see each others activities on member matters''&lt;br /&gt;
# ''update welcome and alert emails''&lt;br /&gt;
# ''updating the amount someone is paying requires an admin to change it in django, there's no way for a user to do that, and also no corresponding vue card in the frontend''&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
# '' Contact Info (Constance Config) - some of that is still membermatters / defaults (notably the email!)&lt;br /&gt;
# '' Seems like some timedate setting is still configured to be DD/MM/YYYY somehow?&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13286</id>
		<title>Membermatters</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13286"/>
		<updated>2026-06-05T02:14:54Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* github */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is the notes for the membermatters installation&lt;br /&gt;
&lt;br /&gt;
https://backers.sudoroom.org&lt;br /&gt;
&lt;br /&gt;
= to create a new user =&lt;br /&gt;
* https://backers.sudoroom.org/register&lt;br /&gt;
&lt;br /&gt;
= to check the logs from the docker instance =&lt;br /&gt;
* https://backers.sudoroom.org/logs/django.log&lt;br /&gt;
&lt;br /&gt;
= github =&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/db0724495a09731ec18db2ebe353931a08c256e2..d6ce52564e8ae64975690107efbc2f1907ac1fb8 the changes juul made to add sendmail as an option]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/d6ce52564e8ae64975690107efbc2f1907ac1fb8..00918eda47d88d090c29c976410ae8036579d7ea the changes rechner and jake made to build our docker for postgres]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/tree/sudoroom we are using the sudoroom branch in our docker]&lt;br /&gt;
* we also need to edit frontend/src/i18n/en-AU/index.ts to change &amp;quot;mobile number&amp;quot; to &amp;quot;Phone Number (or X)&amp;quot; (it builds to /usr/src/app/frontend/dist/spa/assets/index.*.js )&lt;br /&gt;
* we are working on mounting the docker image with git on the server, so we can make changes to production and try them&lt;br /&gt;
* RechnerFox setup a staging instance for us!&lt;br /&gt;
* we should set up a schedule for rebasing in changes from upstream, then shoving our changes back on top. then we can deploy to docker directly from our github fork&lt;br /&gt;
&lt;br /&gt;
= we are not spam =&lt;br /&gt;
* emails sent by this system for people to validate their account, or reset their password, are important&lt;br /&gt;
* emails are being accepted by gmail (for now) but not by some other platforms, and maybe not for some gmail users?&lt;br /&gt;
* we should look for ways to find out why the emails are rejected by some servers&lt;br /&gt;
* we probably need to format the emails with plaintext and MIME to make them look normal to spam checkers&lt;br /&gt;
* Our server is postfix based, but yeah, postfix has very good logging on exactly what happens to each message.  Though you as the sender can't know if it went into spam, only if it got outright rejected.&lt;br /&gt;
* emails to an MIT address were rejected by Microsoft: &amp;quot;Access denied, banned sending IP [198.199.116.180]. To request removal from this list please visit https://sender.office.com/ and follow the directions&amp;quot; and then Sean followed the directions and asked them to unblock our IP address&lt;br /&gt;
* we need to setup monitoring of emails that were outright rejected, and take action each time.  Dealing with emails marked as spam will be more challenging unless people have access to the spam filter information on their receiving end.&lt;br /&gt;
* we need to encourage more and people to sign up to the new system as we make progress, AFTER setting up rejection monitoring&lt;br /&gt;
&lt;br /&gt;
= certbot =&lt;br /&gt;
* juul used pipx to install, and then had to manually make a systemd job to check it twice a day&lt;br /&gt;
&lt;br /&gt;
= Help us build and test =&lt;br /&gt;
* prioritized bugs: https://github.com/orgs/sudoroom/projects/1/views/1&lt;br /&gt;
* submit a bug: https://github.com/sudoroom/MemberMatters/issues&lt;br /&gt;
== Making a dev environment ==&lt;br /&gt;
(this assumes you already have git installed and docker setup!)&lt;br /&gt;
# `cd` to a directory you want to put the repo&lt;br /&gt;
# `git clone https://github.com/sudoroom/MemberMatters.git`&lt;br /&gt;
# `git checkout -b branch-name` to make a new branch based of the default (sudoroom)&lt;br /&gt;
# `touch /usr/app/django.log` (this is where the logs will go, and not creating it as a file seemed to create it as a dir which docker hated)&lt;br /&gt;
# 'echo &amp;quot;MM_ENV=Development&amp;quot; &amp;gt; ./docker/.env`  - I am not sure if this needs to go into the docker directory, or just exist? .env files are .gitignored anyway, but it looks like this is used by docker to set some environment vars in the docker-compose.yml&lt;br /&gt;
# `cd ./docker`&lt;br /&gt;
# `docker compose pull` (this make take a while)&lt;br /&gt;
# `docker compose up -d` to start your docker image&lt;br /&gt;
# `docker ps` will list your running containers processes that are created by the docker yaml file&lt;br /&gt;
# `docker stop $(docker ps -q)` will stop all the containers by doing `docker stop` on all of the running containers (the -q flag lists by ID)&lt;br /&gt;
&lt;br /&gt;
== Some in-progress notetaking ==&lt;br /&gt;
# doing all that, and then going to localhost:8000 takes me to the BMS login page instead of sudoroom's. possibly, since on my setup i ran `docker pull membermatters/membermatters` initially before following the rest of those setups, that is what broke it - i would think that the config files (the database?) would supercede that&lt;br /&gt;
# there is also a dev.env file at the top of the repo that might be worth checking out. possible you could `docker run --env_file /path/to/dev.env` and it would use that env instead of the one in the [https://github.com/sudoroom/MemberMatters/blob/481e4bc8f4a3f614e05fcc98af74c9380c7a05a2/docker/docker-compose.yml#L33 docker-compose.yml] ? I don't know if there is a `docker compose` equivalent, need to keep poking at that&lt;br /&gt;
&lt;br /&gt;
some updates:&lt;br /&gt;
RechnerFox made a github action to update prod from a staging instance after that was [https://github.com/sudoroom/MemberMatters/commit/88529eec2418afd56302e7deaa4ccf2b3471aa88 added by jake]&lt;br /&gt;
2026-01-28: Martin and Nicholas did some work hacking on the vps to backup, delete, and recreate the database so we could start from scratch. This required doing a pg_dump of the existing db, and then entering the postgres docker container with exec, using pgsl -U membermatters. Then we renamed the existing database, and then went back to the [https://membermatters.org/en/latest/GETTING_STARTED.html getting started page of the mm docs and picking up after the &amp;quot;docker start&amp;quot; commands to load the initial data to the database.&lt;br /&gt;
&lt;br /&gt;
Then Martin added himself and Judy, both times it threw errors because the email wasn't setup. MM says you need postmark, but in our fork we have code to get around that, but requires the postmark api key to be blank and the email default to be changed.&lt;br /&gt;
2026-01-30: Jake did those two fixes and confirmed he got a password reset email!&lt;br /&gt;
2026-02-05: Martin double confirmed email setup by sending a welcome email to himself and started trying to configure the logos, which he got from looking at the old mm email when it was setup and seeing what url was embedded in that email.&lt;br /&gt;
&lt;br /&gt;
Django logs are doing a bunch of Warnings about not finding various /api stuff?&lt;br /&gt;
Logo changes aren't loading to the page :( Looks like it is attempting to load but no dice. Confirmed a matching format (png) and square size within favicon specs when linking to one from the wiki's logo page, and then linked to the old one but neither seem to be taking. --- Possible this is still due to all the Not Found /api stuff?&lt;br /&gt;
&lt;br /&gt;
Nicholas suggested that was just some scrapers or bots hitting the page, tested with him trying to load /api/nicksun and that also showed in the logs the same warning.&lt;br /&gt;
&lt;br /&gt;
Site Logo worked! Martin and Nicholas poked around more with it, and the favicon doesn't seem to be used anywhere except emails? But doing a rectangular image for the logo works! It's one of the logos from the wiki - possible we should switch it to a WP upload for speed, not sure how much that matters.&lt;br /&gt;
&lt;br /&gt;
== Currently ( 2026-06-04 ) ==&lt;br /&gt;
Martin added two payment plans and tested one and put in his card and it worked! Got an email and got to next steps&lt;br /&gt;
&lt;br /&gt;
Ivan signed up, paid, and got to the post-signup page&lt;br /&gt;
&lt;br /&gt;
Julio signed up, paid, and go to the post-signup page&lt;br /&gt;
&lt;br /&gt;
= Membership Plan Setup =&lt;br /&gt;
== Adding a Membership Payment Plan ==&lt;br /&gt;
Left Side Bar &amp;gt; Admin Tools &amp;gt; Membership Plan &amp;gt; Plus Icon, make sure you click the checkbox for 'visible to members'&lt;br /&gt;
&lt;br /&gt;
== Adding a new tier to the existing payment plans ==&lt;br /&gt;
Click the plan you made, click ''that'' plus icon.&lt;br /&gt;
The popup window shows up, Name your plan, CHANGE THE CURRENCY TO USD, and then add the amount&lt;br /&gt;
Notes:  Make sure you also click the checkbox for 'visible to members' - if you don't do this, you have to go to the django page to set it (ie its not changeable by in the front end)&lt;br /&gt;
&lt;br /&gt;
= MEMBERSHIP PROCESS- DISCUSSION =&lt;br /&gt;
ivan &amp;amp; anca working on this&lt;br /&gt;
&lt;br /&gt;
martin and ivan talked a bit about this 2026-01-06:&lt;br /&gt;
* subscription statuses can be: active (currently paying) / inactive (not paying)&lt;br /&gt;
* member status can be: active (currently a member) / inactive (not a member, but possibly still paying as a dono or something) / new (unsure, maybe we use this as 'signed up, but still pending endorsements/waiting period? what's the order of operations?) / or account only (signed up but not paying/no payment info in MM)&lt;br /&gt;
&lt;br /&gt;
* 2026-02-10&lt;br /&gt;
ivan and martin and nick did a truth table to figure out statuses:&lt;br /&gt;
&lt;br /&gt;
Membership Status / Subscription status&lt;br /&gt;
* Active / Active -&amp;gt; Member&lt;br /&gt;
* Active / Inactive -&amp;gt; Email to talk about payment (card error, payment lapse etc)&lt;br /&gt;
* Noob / Active -&amp;gt; Induction&lt;br /&gt;
* Noob / Inactive -&amp;gt; Induction&lt;br /&gt;
* Inactive / Active -&amp;gt; Supporter&lt;br /&gt;
* Inactive / Inactive -&amp;gt; Former Member&lt;br /&gt;
&lt;br /&gt;
=== I want to become a member!! Onboarding Steps ===&lt;br /&gt;
# Hang Out, attend an event, join lists, discord&lt;br /&gt;
# I Like this! - Fill out the Intent to Join Form!!!&lt;br /&gt;
# Attend the next meeting, and get endorsements&lt;br /&gt;
# Get a mentor!!&lt;br /&gt;
&lt;br /&gt;
=== Setup payment on Member Matters ===&lt;br /&gt;
# Create an account, verify via email&lt;br /&gt;
# I'm on Sudo Humans, what do I do?&lt;br /&gt;
# I use PayPal, or checks, or Bitcoin. What do I do?&lt;br /&gt;
&lt;br /&gt;
=== Get door access ===&lt;br /&gt;
# Get an email?&lt;br /&gt;
# How many door access systems will we have?&lt;br /&gt;
&lt;br /&gt;
=== Need to Setup, Immediate Actions ===&lt;br /&gt;
# Set up membership tiers - done? we only have one&lt;br /&gt;
# Set up payment plans - also done, mirroring the ones on sudohumans&lt;br /&gt;
&lt;br /&gt;
=== Pain points: We need to fix these issues ... later ===&lt;br /&gt;
# ''need to check for verification email from member matters''&lt;br /&gt;
# ''get access card process needs work''&lt;br /&gt;
# ''members can see each others activities on member matters''&lt;br /&gt;
# ''update welcome and alert emails''&lt;br /&gt;
# ''updating the amount someone is paying requires an admin to change it in django, there's no way for a user to do that, and also no corresponding vue card in the frontend''&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
# '' Contact Info (Constance Config) - some of that is still membermatters / defaults (notably the email!)&lt;br /&gt;
# '' Seems like some timedate setting is still configured to be DD/MM/YYYY somehow?&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13285</id>
		<title>Membermatters</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13285"/>
		<updated>2026-06-05T02:12:58Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* Currently ( 2026-06-04 ) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is the notes for the membermatters installation&lt;br /&gt;
&lt;br /&gt;
https://backers.sudoroom.org&lt;br /&gt;
&lt;br /&gt;
= to create a new user =&lt;br /&gt;
* https://backers.sudoroom.org/register&lt;br /&gt;
&lt;br /&gt;
= to check the logs from the docker instance =&lt;br /&gt;
* https://backers.sudoroom.org/logs/django.log&lt;br /&gt;
&lt;br /&gt;
= github =&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/db0724495a09731ec18db2ebe353931a08c256e2..d6ce52564e8ae64975690107efbc2f1907ac1fb8 the changes juul made to add sendmail as an option]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/d6ce52564e8ae64975690107efbc2f1907ac1fb8..00918eda47d88d090c29c976410ae8036579d7ea the changes rechner and jake made to build our docker for postgres]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/tree/sudoroom we are using the sudoroom branch in our docker]&lt;br /&gt;
* we also need to edit frontend/src/i18n/en-AU/index.ts to change &amp;quot;mobile number&amp;quot; to &amp;quot;Phone Number (or X)&amp;quot; (it builds to /usr/src/app/frontend/dist/spa/assets/index.*.js )&lt;br /&gt;
* we are working on mounting the docker image with git on the server, so we can make changes to production and try them&lt;br /&gt;
* we should set up a schedule for rebasing in changes from upstream, then shoving our changes back on top. then we can deploy to docker directly from our github fork&lt;br /&gt;
&lt;br /&gt;
= we are not spam =&lt;br /&gt;
* emails sent by this system for people to validate their account, or reset their password, are important&lt;br /&gt;
* emails are being accepted by gmail (for now) but not by some other platforms, and maybe not for some gmail users?&lt;br /&gt;
* we should look for ways to find out why the emails are rejected by some servers&lt;br /&gt;
* we probably need to format the emails with plaintext and MIME to make them look normal to spam checkers&lt;br /&gt;
* Our server is postfix based, but yeah, postfix has very good logging on exactly what happens to each message.  Though you as the sender can't know if it went into spam, only if it got outright rejected.&lt;br /&gt;
* emails to an MIT address were rejected by Microsoft: &amp;quot;Access denied, banned sending IP [198.199.116.180]. To request removal from this list please visit https://sender.office.com/ and follow the directions&amp;quot; and then Sean followed the directions and asked them to unblock our IP address&lt;br /&gt;
* we need to setup monitoring of emails that were outright rejected, and take action each time.  Dealing with emails marked as spam will be more challenging unless people have access to the spam filter information on their receiving end.&lt;br /&gt;
* we need to encourage more and people to sign up to the new system as we make progress, AFTER setting up rejection monitoring&lt;br /&gt;
&lt;br /&gt;
= certbot =&lt;br /&gt;
* juul used pipx to install, and then had to manually make a systemd job to check it twice a day&lt;br /&gt;
&lt;br /&gt;
= Help us build and test =&lt;br /&gt;
* prioritized bugs: https://github.com/orgs/sudoroom/projects/1/views/1&lt;br /&gt;
* submit a bug: https://github.com/sudoroom/MemberMatters/issues&lt;br /&gt;
== Making a dev environment ==&lt;br /&gt;
(this assumes you already have git installed and docker setup!)&lt;br /&gt;
# `cd` to a directory you want to put the repo&lt;br /&gt;
# `git clone https://github.com/sudoroom/MemberMatters.git`&lt;br /&gt;
# `git checkout -b branch-name` to make a new branch based of the default (sudoroom)&lt;br /&gt;
# `touch /usr/app/django.log` (this is where the logs will go, and not creating it as a file seemed to create it as a dir which docker hated)&lt;br /&gt;
# 'echo &amp;quot;MM_ENV=Development&amp;quot; &amp;gt; ./docker/.env`  - I am not sure if this needs to go into the docker directory, or just exist? .env files are .gitignored anyway, but it looks like this is used by docker to set some environment vars in the docker-compose.yml&lt;br /&gt;
# `cd ./docker`&lt;br /&gt;
# `docker compose pull` (this make take a while)&lt;br /&gt;
# `docker compose up -d` to start your docker image&lt;br /&gt;
# `docker ps` will list your running containers processes that are created by the docker yaml file&lt;br /&gt;
# `docker stop $(docker ps -q)` will stop all the containers by doing `docker stop` on all of the running containers (the -q flag lists by ID)&lt;br /&gt;
&lt;br /&gt;
== Some in-progress notetaking ==&lt;br /&gt;
# doing all that, and then going to localhost:8000 takes me to the BMS login page instead of sudoroom's. possibly, since on my setup i ran `docker pull membermatters/membermatters` initially before following the rest of those setups, that is what broke it - i would think that the config files (the database?) would supercede that&lt;br /&gt;
# there is also a dev.env file at the top of the repo that might be worth checking out. possible you could `docker run --env_file /path/to/dev.env` and it would use that env instead of the one in the [https://github.com/sudoroom/MemberMatters/blob/481e4bc8f4a3f614e05fcc98af74c9380c7a05a2/docker/docker-compose.yml#L33 docker-compose.yml] ? I don't know if there is a `docker compose` equivalent, need to keep poking at that&lt;br /&gt;
&lt;br /&gt;
some updates:&lt;br /&gt;
RechnerFox made a github action to update prod from a staging instance after that was [https://github.com/sudoroom/MemberMatters/commit/88529eec2418afd56302e7deaa4ccf2b3471aa88 added by jake]&lt;br /&gt;
2026-01-28: Martin and Nicholas did some work hacking on the vps to backup, delete, and recreate the database so we could start from scratch. This required doing a pg_dump of the existing db, and then entering the postgres docker container with exec, using pgsl -U membermatters. Then we renamed the existing database, and then went back to the [https://membermatters.org/en/latest/GETTING_STARTED.html getting started page of the mm docs and picking up after the &amp;quot;docker start&amp;quot; commands to load the initial data to the database.&lt;br /&gt;
&lt;br /&gt;
Then Martin added himself and Judy, both times it threw errors because the email wasn't setup. MM says you need postmark, but in our fork we have code to get around that, but requires the postmark api key to be blank and the email default to be changed.&lt;br /&gt;
2026-01-30: Jake did those two fixes and confirmed he got a password reset email!&lt;br /&gt;
2026-02-05: Martin double confirmed email setup by sending a welcome email to himself and started trying to configure the logos, which he got from looking at the old mm email when it was setup and seeing what url was embedded in that email.&lt;br /&gt;
&lt;br /&gt;
Django logs are doing a bunch of Warnings about not finding various /api stuff?&lt;br /&gt;
Logo changes aren't loading to the page :( Looks like it is attempting to load but no dice. Confirmed a matching format (png) and square size within favicon specs when linking to one from the wiki's logo page, and then linked to the old one but neither seem to be taking. --- Possible this is still due to all the Not Found /api stuff?&lt;br /&gt;
&lt;br /&gt;
Nicholas suggested that was just some scrapers or bots hitting the page, tested with him trying to load /api/nicksun and that also showed in the logs the same warning.&lt;br /&gt;
&lt;br /&gt;
Site Logo worked! Martin and Nicholas poked around more with it, and the favicon doesn't seem to be used anywhere except emails? But doing a rectangular image for the logo works! It's one of the logos from the wiki - possible we should switch it to a WP upload for speed, not sure how much that matters.&lt;br /&gt;
&lt;br /&gt;
== Currently ( 2026-06-04 ) ==&lt;br /&gt;
Martin added two payment plans and tested one and put in his card and it worked! Got an email and got to next steps&lt;br /&gt;
&lt;br /&gt;
Ivan signed up, paid, and got to the post-signup page&lt;br /&gt;
&lt;br /&gt;
Julio signed up, paid, and go to the post-signup page&lt;br /&gt;
&lt;br /&gt;
= Membership Plan Setup =&lt;br /&gt;
== Adding a Membership Payment Plan ==&lt;br /&gt;
Left Side Bar &amp;gt; Admin Tools &amp;gt; Membership Plan &amp;gt; Plus Icon, make sure you click the checkbox for 'visible to members'&lt;br /&gt;
&lt;br /&gt;
== Adding a new tier to the existing payment plans ==&lt;br /&gt;
Click the plan you made, click ''that'' plus icon.&lt;br /&gt;
The popup window shows up, Name your plan, CHANGE THE CURRENCY TO USD, and then add the amount&lt;br /&gt;
Notes:  Make sure you also click the checkbox for 'visible to members' - if you don't do this, you have to go to the django page to set it (ie its not changeable by in the front end)&lt;br /&gt;
&lt;br /&gt;
= MEMBERSHIP PROCESS- DISCUSSION =&lt;br /&gt;
ivan &amp;amp; anca working on this&lt;br /&gt;
&lt;br /&gt;
martin and ivan talked a bit about this 2026-01-06:&lt;br /&gt;
* subscription statuses can be: active (currently paying) / inactive (not paying)&lt;br /&gt;
* member status can be: active (currently a member) / inactive (not a member, but possibly still paying as a dono or something) / new (unsure, maybe we use this as 'signed up, but still pending endorsements/waiting period? what's the order of operations?) / or account only (signed up but not paying/no payment info in MM)&lt;br /&gt;
&lt;br /&gt;
* 2026-02-10&lt;br /&gt;
ivan and martin and nick did a truth table to figure out statuses:&lt;br /&gt;
&lt;br /&gt;
Membership Status / Subscription status&lt;br /&gt;
* Active / Active -&amp;gt; Member&lt;br /&gt;
* Active / Inactive -&amp;gt; Email to talk about payment (card error, payment lapse etc)&lt;br /&gt;
* Noob / Active -&amp;gt; Induction&lt;br /&gt;
* Noob / Inactive -&amp;gt; Induction&lt;br /&gt;
* Inactive / Active -&amp;gt; Supporter&lt;br /&gt;
* Inactive / Inactive -&amp;gt; Former Member&lt;br /&gt;
&lt;br /&gt;
=== I want to become a member!! Onboarding Steps ===&lt;br /&gt;
# Hang Out, attend an event, join lists, discord&lt;br /&gt;
# I Like this! - Fill out the Intent to Join Form!!!&lt;br /&gt;
# Attend the next meeting, and get endorsements&lt;br /&gt;
# Get a mentor!!&lt;br /&gt;
&lt;br /&gt;
=== Setup payment on Member Matters ===&lt;br /&gt;
# Create an account, verify via email&lt;br /&gt;
# I'm on Sudo Humans, what do I do?&lt;br /&gt;
# I use PayPal, or checks, or Bitcoin. What do I do?&lt;br /&gt;
&lt;br /&gt;
=== Get door access ===&lt;br /&gt;
# Get an email?&lt;br /&gt;
# How many door access systems will we have?&lt;br /&gt;
&lt;br /&gt;
=== Need to Setup, Immediate Actions ===&lt;br /&gt;
# Set up membership tiers - done? we only have one&lt;br /&gt;
# Set up payment plans - also done, mirroring the ones on sudohumans&lt;br /&gt;
&lt;br /&gt;
=== Pain points: We need to fix these issues ... later ===&lt;br /&gt;
# ''need to check for verification email from member matters''&lt;br /&gt;
# ''get access card process needs work''&lt;br /&gt;
# ''members can see each others activities on member matters''&lt;br /&gt;
# ''update welcome and alert emails''&lt;br /&gt;
# ''updating the amount someone is paying requires an admin to change it in django, there's no way for a user to do that, and also no corresponding vue card in the frontend''&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
# '' Contact Info (Constance Config) - some of that is still membermatters / defaults (notably the email!)&lt;br /&gt;
# '' Seems like some timedate setting is still configured to be DD/MM/YYYY somehow?&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13284</id>
		<title>Membermatters</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13284"/>
		<updated>2026-06-05T02:12:11Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* Currently ( 2026-02-07 ) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is the notes for the membermatters installation&lt;br /&gt;
&lt;br /&gt;
https://backers.sudoroom.org&lt;br /&gt;
&lt;br /&gt;
= to create a new user =&lt;br /&gt;
* https://backers.sudoroom.org/register&lt;br /&gt;
&lt;br /&gt;
= to check the logs from the docker instance =&lt;br /&gt;
* https://backers.sudoroom.org/logs/django.log&lt;br /&gt;
&lt;br /&gt;
= github =&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/db0724495a09731ec18db2ebe353931a08c256e2..d6ce52564e8ae64975690107efbc2f1907ac1fb8 the changes juul made to add sendmail as an option]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/d6ce52564e8ae64975690107efbc2f1907ac1fb8..00918eda47d88d090c29c976410ae8036579d7ea the changes rechner and jake made to build our docker for postgres]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/tree/sudoroom we are using the sudoroom branch in our docker]&lt;br /&gt;
* we also need to edit frontend/src/i18n/en-AU/index.ts to change &amp;quot;mobile number&amp;quot; to &amp;quot;Phone Number (or X)&amp;quot; (it builds to /usr/src/app/frontend/dist/spa/assets/index.*.js )&lt;br /&gt;
* we are working on mounting the docker image with git on the server, so we can make changes to production and try them&lt;br /&gt;
* we should set up a schedule for rebasing in changes from upstream, then shoving our changes back on top. then we can deploy to docker directly from our github fork&lt;br /&gt;
&lt;br /&gt;
= we are not spam =&lt;br /&gt;
* emails sent by this system for people to validate their account, or reset their password, are important&lt;br /&gt;
* emails are being accepted by gmail (for now) but not by some other platforms, and maybe not for some gmail users?&lt;br /&gt;
* we should look for ways to find out why the emails are rejected by some servers&lt;br /&gt;
* we probably need to format the emails with plaintext and MIME to make them look normal to spam checkers&lt;br /&gt;
* Our server is postfix based, but yeah, postfix has very good logging on exactly what happens to each message.  Though you as the sender can't know if it went into spam, only if it got outright rejected.&lt;br /&gt;
* emails to an MIT address were rejected by Microsoft: &amp;quot;Access denied, banned sending IP [198.199.116.180]. To request removal from this list please visit https://sender.office.com/ and follow the directions&amp;quot; and then Sean followed the directions and asked them to unblock our IP address&lt;br /&gt;
* we need to setup monitoring of emails that were outright rejected, and take action each time.  Dealing with emails marked as spam will be more challenging unless people have access to the spam filter information on their receiving end.&lt;br /&gt;
* we need to encourage more and people to sign up to the new system as we make progress, AFTER setting up rejection monitoring&lt;br /&gt;
&lt;br /&gt;
= certbot =&lt;br /&gt;
* juul used pipx to install, and then had to manually make a systemd job to check it twice a day&lt;br /&gt;
&lt;br /&gt;
= Help us build and test =&lt;br /&gt;
* prioritized bugs: https://github.com/orgs/sudoroom/projects/1/views/1&lt;br /&gt;
* submit a bug: https://github.com/sudoroom/MemberMatters/issues&lt;br /&gt;
== Making a dev environment ==&lt;br /&gt;
(this assumes you already have git installed and docker setup!)&lt;br /&gt;
# `cd` to a directory you want to put the repo&lt;br /&gt;
# `git clone https://github.com/sudoroom/MemberMatters.git`&lt;br /&gt;
# `git checkout -b branch-name` to make a new branch based of the default (sudoroom)&lt;br /&gt;
# `touch /usr/app/django.log` (this is where the logs will go, and not creating it as a file seemed to create it as a dir which docker hated)&lt;br /&gt;
# 'echo &amp;quot;MM_ENV=Development&amp;quot; &amp;gt; ./docker/.env`  - I am not sure if this needs to go into the docker directory, or just exist? .env files are .gitignored anyway, but it looks like this is used by docker to set some environment vars in the docker-compose.yml&lt;br /&gt;
# `cd ./docker`&lt;br /&gt;
# `docker compose pull` (this make take a while)&lt;br /&gt;
# `docker compose up -d` to start your docker image&lt;br /&gt;
# `docker ps` will list your running containers processes that are created by the docker yaml file&lt;br /&gt;
# `docker stop $(docker ps -q)` will stop all the containers by doing `docker stop` on all of the running containers (the -q flag lists by ID)&lt;br /&gt;
&lt;br /&gt;
== Some in-progress notetaking ==&lt;br /&gt;
# doing all that, and then going to localhost:8000 takes me to the BMS login page instead of sudoroom's. possibly, since on my setup i ran `docker pull membermatters/membermatters` initially before following the rest of those setups, that is what broke it - i would think that the config files (the database?) would supercede that&lt;br /&gt;
# there is also a dev.env file at the top of the repo that might be worth checking out. possible you could `docker run --env_file /path/to/dev.env` and it would use that env instead of the one in the [https://github.com/sudoroom/MemberMatters/blob/481e4bc8f4a3f614e05fcc98af74c9380c7a05a2/docker/docker-compose.yml#L33 docker-compose.yml] ? I don't know if there is a `docker compose` equivalent, need to keep poking at that&lt;br /&gt;
&lt;br /&gt;
some updates:&lt;br /&gt;
RechnerFox made a github action to update prod from a staging instance after that was [https://github.com/sudoroom/MemberMatters/commit/88529eec2418afd56302e7deaa4ccf2b3471aa88 added by jake]&lt;br /&gt;
2026-01-28: Martin and Nicholas did some work hacking on the vps to backup, delete, and recreate the database so we could start from scratch. This required doing a pg_dump of the existing db, and then entering the postgres docker container with exec, using pgsl -U membermatters. Then we renamed the existing database, and then went back to the [https://membermatters.org/en/latest/GETTING_STARTED.html getting started page of the mm docs and picking up after the &amp;quot;docker start&amp;quot; commands to load the initial data to the database.&lt;br /&gt;
&lt;br /&gt;
Then Martin added himself and Judy, both times it threw errors because the email wasn't setup. MM says you need postmark, but in our fork we have code to get around that, but requires the postmark api key to be blank and the email default to be changed.&lt;br /&gt;
2026-01-30: Jake did those two fixes and confirmed he got a password reset email!&lt;br /&gt;
2026-02-05: Martin double confirmed email setup by sending a welcome email to himself and started trying to configure the logos, which he got from looking at the old mm email when it was setup and seeing what url was embedded in that email.&lt;br /&gt;
&lt;br /&gt;
Django logs are doing a bunch of Warnings about not finding various /api stuff?&lt;br /&gt;
Logo changes aren't loading to the page :( Looks like it is attempting to load but no dice. Confirmed a matching format (png) and square size within favicon specs when linking to one from the wiki's logo page, and then linked to the old one but neither seem to be taking. --- Possible this is still due to all the Not Found /api stuff?&lt;br /&gt;
&lt;br /&gt;
Nicholas suggested that was just some scrapers or bots hitting the page, tested with him trying to load /api/nicksun and that also showed in the logs the same warning.&lt;br /&gt;
&lt;br /&gt;
Site Logo worked! Martin and Nicholas poked around more with it, and the favicon doesn't seem to be used anywhere except emails? But doing a rectangular image for the logo works! It's one of the logos from the wiki - possible we should switch it to a WP upload for speed, not sure how much that matters.&lt;br /&gt;
&lt;br /&gt;
== Currently ( 2026-06-04 ) ==&lt;br /&gt;
Martin added two payment plans and tested one and put in his card and it worked! Got an email and got to next steps&lt;br /&gt;
Ivan signed up, paid, and got to the post-signup page&lt;br /&gt;
Julio signed up, paid, and go to the post-signup page&lt;br /&gt;
&lt;br /&gt;
= Membership Plan Setup =&lt;br /&gt;
== Adding a Membership Payment Plan ==&lt;br /&gt;
Left Side Bar &amp;gt; Admin Tools &amp;gt; Membership Plan &amp;gt; Plus Icon, make sure you click the checkbox for 'visible to members'&lt;br /&gt;
&lt;br /&gt;
== Adding a new tier to the existing payment plans ==&lt;br /&gt;
Click the plan you made, click ''that'' plus icon.&lt;br /&gt;
The popup window shows up, Name your plan, CHANGE THE CURRENCY TO USD, and then add the amount&lt;br /&gt;
Notes:  Make sure you also click the checkbox for 'visible to members' - if you don't do this, you have to go to the django page to set it (ie its not changeable by in the front end)&lt;br /&gt;
&lt;br /&gt;
= MEMBERSHIP PROCESS- DISCUSSION =&lt;br /&gt;
ivan &amp;amp; anca working on this&lt;br /&gt;
&lt;br /&gt;
martin and ivan talked a bit about this 2026-01-06:&lt;br /&gt;
* subscription statuses can be: active (currently paying) / inactive (not paying)&lt;br /&gt;
* member status can be: active (currently a member) / inactive (not a member, but possibly still paying as a dono or something) / new (unsure, maybe we use this as 'signed up, but still pending endorsements/waiting period? what's the order of operations?) / or account only (signed up but not paying/no payment info in MM)&lt;br /&gt;
&lt;br /&gt;
* 2026-02-10&lt;br /&gt;
ivan and martin and nick did a truth table to figure out statuses:&lt;br /&gt;
&lt;br /&gt;
Membership Status / Subscription status&lt;br /&gt;
* Active / Active -&amp;gt; Member&lt;br /&gt;
* Active / Inactive -&amp;gt; Email to talk about payment (card error, payment lapse etc)&lt;br /&gt;
* Noob / Active -&amp;gt; Induction&lt;br /&gt;
* Noob / Inactive -&amp;gt; Induction&lt;br /&gt;
* Inactive / Active -&amp;gt; Supporter&lt;br /&gt;
* Inactive / Inactive -&amp;gt; Former Member&lt;br /&gt;
&lt;br /&gt;
=== I want to become a member!! Onboarding Steps ===&lt;br /&gt;
# Hang Out, attend an event, join lists, discord&lt;br /&gt;
# I Like this! - Fill out the Intent to Join Form!!!&lt;br /&gt;
# Attend the next meeting, and get endorsements&lt;br /&gt;
# Get a mentor!!&lt;br /&gt;
&lt;br /&gt;
=== Setup payment on Member Matters ===&lt;br /&gt;
# Create an account, verify via email&lt;br /&gt;
# I'm on Sudo Humans, what do I do?&lt;br /&gt;
# I use PayPal, or checks, or Bitcoin. What do I do?&lt;br /&gt;
&lt;br /&gt;
=== Get door access ===&lt;br /&gt;
# Get an email?&lt;br /&gt;
# How many door access systems will we have?&lt;br /&gt;
&lt;br /&gt;
=== Need to Setup, Immediate Actions ===&lt;br /&gt;
# Set up membership tiers - done? we only have one&lt;br /&gt;
# Set up payment plans - also done, mirroring the ones on sudohumans&lt;br /&gt;
&lt;br /&gt;
=== Pain points: We need to fix these issues ... later ===&lt;br /&gt;
# ''need to check for verification email from member matters''&lt;br /&gt;
# ''get access card process needs work''&lt;br /&gt;
# ''members can see each others activities on member matters''&lt;br /&gt;
# ''update welcome and alert emails''&lt;br /&gt;
# ''updating the amount someone is paying requires an admin to change it in django, there's no way for a user to do that, and also no corresponding vue card in the frontend''&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
# '' Contact Info (Constance Config) - some of that is still membermatters / defaults (notably the email!)&lt;br /&gt;
# '' Seems like some timedate setting is still configured to be DD/MM/YYYY somehow?&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Hack_Cowork_Nite&amp;diff=13260</id>
		<title>Hack Cowork Nite</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Hack_Cowork_Nite&amp;diff=13260"/>
		<updated>2026-05-31T21:20:42Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: Created page with &amp;quot;__NOTOC__  '''Every other Thursday'''  '''21:00 (7 PM) — 23:00 (9 PM)'''  == Overview ==  Every other Thursday, we meet up to do some additional co-hacking, similar to Tuesday's HardwareHackNight! Bring a project, work on it, we'll try to keep the area with enough space to work, albeit some hacker dust!&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
 '''Every other Thursday'''&lt;br /&gt;
 '''21:00 (7 PM) — 23:00 (9 PM)'''&lt;br /&gt;
&lt;br /&gt;
== Overview == &lt;br /&gt;
Every other Thursday, we meet up to do some additional co-hacking, similar to Tuesday's [[HardwareHackNight]]! Bring a project, work on it, we'll try to keep the area with enough space to work, albeit some [[hacker dust]]!&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Recurring_Meetings&amp;diff=13259</id>
		<title>Recurring Meetings</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Recurring_Meetings&amp;diff=13259"/>
		<updated>2026-05-31T21:10:28Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* Once or Twice a Month */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''For the most recently-updated list of upcoming events, see: [https://sudoroom.org/calendar/ Sudo Room Calendar] and [https://omnicommons.org/calendar/ Omni Commons Global Calendar]''&lt;br /&gt;
&lt;br /&gt;
== Weekly Events ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''[[WomenNonBinaryCoding|Women / NonBinary Coding nights]]'''&lt;br /&gt;
'''Mondays''' (7pm - 9pm or even later)&lt;br /&gt;
|&lt;br /&gt;
The Sudo Room, a creative community and hackerspace at Omni Commons, invites all Women/NB people for “Coding Owls – A WNB Coding Night”: bring your computer and a coding project and have fun! We can help each other if you have coding related questions/bugs or just keep company while hacking!&lt;br /&gt;
and if you can't make it there physically, we have an [https://meet.waag.org/turtlesturtlesturtles ONLINE JITSI PORTAL]&lt;br /&gt;
|-&lt;br /&gt;
| '''[[HardwareHackNight | Hardware and SoftWEAR Project Night]] &amp;amp; [[FixitClinic | Fixit Clinic]]'''&lt;br /&gt;
'''Tuesdays''' (8pm - 11pm or even later)&lt;br /&gt;
| &amp;lt;noinclude&amp;gt;[[image:SudoRoom_hardware_hacknight.jpg|thumb|120px|A large animal will lead you through real life stuff, you digital wimps ;)]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
Tinker and toil, fiddle and play, hack away at hardware and electronics, affect flair or repairs on textiles and fabric. The Hardware and SoftWEAR Project Night runs alongside the Fixit Clinic, come join a plethora of creative, kind, smart, and knowledgeable nerds as we fix and make things!&lt;br /&gt;
&lt;br /&gt;
If you can't make it physically, you can join us virtually in our [https://meet.waag.org/turtlesturtlesturtles online Jitsi video conference]&lt;br /&gt;
|-&lt;br /&gt;
| '''[[Radio_Wednesdays|Radio Wednesdays]]'''&lt;br /&gt;
'''Wednesdays''' (7pm - 9pm)&lt;br /&gt;
|&lt;br /&gt;
Wednesdays are for p2p decentralized communications for emergency preparedness and anti-surveillance! We talk ham and Meshtastic and other protocols. See also: https://leftyrad.io &amp;amp; https://bayme.sh&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Once or Twice a Month ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''''&amp;lt;ON HIATUS&amp;gt;'' [[Darkmode]]'''&lt;br /&gt;
'''Last Sunday of each month''' (6pm - 8pm)&lt;br /&gt;
|&lt;br /&gt;
Enter the world of audio visuals, light projections and TouchDesigner workshops.&lt;br /&gt;
|-&lt;br /&gt;
| '''[[Hack Cowork Nite]] (formerly [[Smorgasbord]] )'''&lt;br /&gt;
'''1&amp;lt;sup&amp;gt;st&amp;lt;/sup&amp;gt; and 3&amp;lt;sup&amp;gt;rd&amp;lt;/sup&amp;gt; Thursdays''' (7pm - 9pm)&lt;br /&gt;
|&lt;br /&gt;
Every other Thursday, we meet up to do some co-hacking! Bring a project, work on it, we'll try to keep the area with enough space to work, albeit some [[hacker dust]]!&lt;br /&gt;
 &lt;br /&gt;
Software, Hardware, LLM hacking (see [[CommunityInfra]]), wiki editing (for any and all wiki!), and stitch 'n bitch (fabric arts and chat).&lt;br /&gt;
|-&lt;br /&gt;
| '''[[Meetings]]'''&lt;br /&gt;
'''2&amp;lt;sup&amp;gt;nd&amp;lt;/sup&amp;gt; Thursday''' (7pm) '''and last Sunday''' (4pm)&lt;br /&gt;
|&lt;br /&gt;
Sudo Room's official meetings are twice a month (second Thursday at 7pm, and last Sunday at 4pm). We meet in a hybrid format, in-person at Sudo Room and remote using our [https://meet.waag.org/turtlesturtlesturtles online Jitsi video conference]&lt;br /&gt;
&lt;br /&gt;
We keep our agenda on an [https://pad.riseup.net/ etherpad] and then [[Meetings#Meeting_Notes_Archive|archive the meeting minutes]]. We're a California non-profit. See our [[Articles of Association]].&lt;br /&gt;
|-&lt;br /&gt;
| '''[[SudoParty]]'''&lt;br /&gt;
'''4&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; Thursdays''' (7pm - midnight)&lt;br /&gt;
|&lt;br /&gt;
$ sudo party --hard&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Recurring_Meetings&amp;diff=13258</id>
		<title>Recurring Meetings</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Recurring_Meetings&amp;diff=13258"/>
		<updated>2026-05-31T21:09:29Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* Once or Twice a Month */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''For the most recently-updated list of upcoming events, see: [https://sudoroom.org/calendar/ Sudo Room Calendar] and [https://omnicommons.org/calendar/ Omni Commons Global Calendar]''&lt;br /&gt;
&lt;br /&gt;
== Weekly Events ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''[[WomenNonBinaryCoding|Women / NonBinary Coding nights]]'''&lt;br /&gt;
'''Mondays''' (7pm - 9pm or even later)&lt;br /&gt;
|&lt;br /&gt;
The Sudo Room, a creative community and hackerspace at Omni Commons, invites all Women/NB people for “Coding Owls – A WNB Coding Night”: bring your computer and a coding project and have fun! We can help each other if you have coding related questions/bugs or just keep company while hacking!&lt;br /&gt;
and if you can't make it there physically, we have an [https://meet.waag.org/turtlesturtlesturtles ONLINE JITSI PORTAL]&lt;br /&gt;
|-&lt;br /&gt;
| '''[[HardwareHackNight | Hardware and SoftWEAR Project Night]] &amp;amp; [[FixitClinic | Fixit Clinic]]'''&lt;br /&gt;
'''Tuesdays''' (8pm - 11pm or even later)&lt;br /&gt;
| &amp;lt;noinclude&amp;gt;[[image:SudoRoom_hardware_hacknight.jpg|thumb|120px|A large animal will lead you through real life stuff, you digital wimps ;)]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
Tinker and toil, fiddle and play, hack away at hardware and electronics, affect flair or repairs on textiles and fabric. The Hardware and SoftWEAR Project Night runs alongside the Fixit Clinic, come join a plethora of creative, kind, smart, and knowledgeable nerds as we fix and make things!&lt;br /&gt;
&lt;br /&gt;
If you can't make it physically, you can join us virtually in our [https://meet.waag.org/turtlesturtlesturtles online Jitsi video conference]&lt;br /&gt;
|-&lt;br /&gt;
| '''[[Radio_Wednesdays|Radio Wednesdays]]'''&lt;br /&gt;
'''Wednesdays''' (7pm - 9pm)&lt;br /&gt;
|&lt;br /&gt;
Wednesdays are for p2p decentralized communications for emergency preparedness and anti-surveillance! We talk ham and Meshtastic and other protocols. See also: https://leftyrad.io &amp;amp; https://bayme.sh&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Once or Twice a Month ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''''&amp;lt;ON HIATUS&amp;gt;'' [[Darkmode]]'''&lt;br /&gt;
'''Last Sunday of each month''' (6pm - 8pm)&lt;br /&gt;
|&lt;br /&gt;
Enter the world of audio visuals, light projections and TouchDesigner workshops.&lt;br /&gt;
|-&lt;br /&gt;
| '''[[Hack Cowork Nite]] (formerly [[Smorgasbord]] )'''&lt;br /&gt;
'''1&amp;lt;sup&amp;gt;st&amp;lt;/sup&amp;gt; and 3&amp;lt;sup&amp;gt;rd&amp;lt;/sup&amp;gt; Thursdays''' (7pm - 9pm)&lt;br /&gt;
|&lt;br /&gt;
Every other Thursday, we meet up to do some co-hacking! Bring a project, work on it, we'll try to keep the area mostly free of [[hacker dust]], but no guarantees!&lt;br /&gt;
 &lt;br /&gt;
Software, Hardware, LLM hacking (see [[CommunityInfra]]), wiki editing (for any and all wiki!), and stitch 'n bitch (fabric arts and chat).&lt;br /&gt;
|-&lt;br /&gt;
| '''[[Meetings]]'''&lt;br /&gt;
'''2&amp;lt;sup&amp;gt;nd&amp;lt;/sup&amp;gt; Thursday''' (7pm) '''and last Sunday''' (4pm)&lt;br /&gt;
|&lt;br /&gt;
Sudo Room's official meetings are twice a month (second Thursday at 7pm, and last Sunday at 4pm). We meet in a hybrid format, in-person at Sudo Room and remote using our [https://meet.waag.org/turtlesturtlesturtles online Jitsi video conference]&lt;br /&gt;
&lt;br /&gt;
We keep our agenda on an [https://pad.riseup.net/ etherpad] and then [[Meetings#Meeting_Notes_Archive|archive the meeting minutes]]. We're a California non-profit. See our [[Articles of Association]].&lt;br /&gt;
|-&lt;br /&gt;
| '''[[SudoParty]]'''&lt;br /&gt;
'''4&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; Thursdays''' (7pm - midnight)&lt;br /&gt;
|&lt;br /&gt;
$ sudo party --hard&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Breaker&amp;diff=13138</id>
		<title>Breaker</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Breaker&amp;diff=13138"/>
		<updated>2026-03-26T04:40:25Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How to reset the breaker for the big red laser cutter, and hardware corner, and the rest of the south outlets. Flashlight recommended!!&lt;br /&gt;
&lt;br /&gt;
The breaker is up the stairs:&lt;br /&gt;
[[File:Go upstairs.jpg|thumb|The breaker is up the stairs]]&lt;br /&gt;
&lt;br /&gt;
Through the left door:&lt;br /&gt;
[[File:Through left door.jpg|thumb|Through the left door]]&lt;br /&gt;
&lt;br /&gt;
Go to the left, to the top of the stage:&lt;br /&gt;
[[File:Top of the stage.jpg|thumb|turn left and go to the top of the stage]]&lt;br /&gt;
&lt;br /&gt;
climb the ladder:&lt;br /&gt;
[[File:Ladder_top_of_stage.jpg|thumb|climb the ladder]]&lt;br /&gt;
&lt;br /&gt;
and look for the breaker panel:&lt;br /&gt;
[[File:Breaker box exterior.jpg|thumb|look for the breaker panel]]&lt;br /&gt;
&lt;br /&gt;
The circuits should be labeled:&lt;br /&gt;
[[File:Breaker panel labels.jpg|thumb|Circuits should be labeled]]&lt;br /&gt;
&lt;br /&gt;
And those correspond to the actual breakers.&lt;br /&gt;
[[File:Panel actual breakers.jpg|thumb|The actual breakers the labels correspond to]]&lt;br /&gt;
&lt;br /&gt;
Alternately you can look at the panel to see which is flipped (look for what is out of place vs the others). Flip it back toward the other direction (sometimes it will require some force) and you should be good!&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Breaker&amp;diff=13137</id>
		<title>Breaker</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Breaker&amp;diff=13137"/>
		<updated>2026-03-26T04:40:07Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How to reset the breaker for the big red laser cutter, and hardware corner, and the rest of the south outlets. Flashlight recommended!!&lt;br /&gt;
&lt;br /&gt;
The breaker is up the stairs:&lt;br /&gt;
[[File:Go upstairs.jpg|thumbThe breaker is up the stairs]]&lt;br /&gt;
&lt;br /&gt;
Through the left door:&lt;br /&gt;
[[File:Through left door.jpg|thumb|Through the left door]]&lt;br /&gt;
&lt;br /&gt;
Go to the left, to the top of the stage:&lt;br /&gt;
[[File:Top of the stage.jpg|thumb|turn left and go to the top of the stage]]&lt;br /&gt;
&lt;br /&gt;
climb the ladder:&lt;br /&gt;
[[File:Ladder_top_of_stage.jpg|thumb|climb the ladder]]&lt;br /&gt;
&lt;br /&gt;
and look for the breaker panel:&lt;br /&gt;
[[File:Breaker box exterior.jpg|thumb|look for the breaker panel]]&lt;br /&gt;
&lt;br /&gt;
The circuits should be labeled:&lt;br /&gt;
[[File:Breaker panel labels.jpg|thumb|Circuits should be labeled]]&lt;br /&gt;
&lt;br /&gt;
And those correspond to the actual breakers.&lt;br /&gt;
[[File:Panel actual breakers.jpg|thumb|The actual breakers the labels correspond to]]&lt;br /&gt;
&lt;br /&gt;
Alternately you can look at the panel to see which is flipped (look for what is out of place vs the others). Flip it back toward the other direction (sometimes it will require some force) and you should be good!&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=File:Panel_actual_breakers.jpg&amp;diff=13136</id>
		<title>File:Panel actual breakers.jpg</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=File:Panel_actual_breakers.jpg&amp;diff=13136"/>
		<updated>2026-03-26T04:37:27Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: Indoorjetpacks uploaded a new version of File:Panel actual breakers.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;picture of thee inside of a breaker panel&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=File:Breaker_panel_labels.jpg&amp;diff=13135</id>
		<title>File:Breaker panel labels.jpg</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=File:Breaker_panel_labels.jpg&amp;diff=13135"/>
		<updated>2026-03-26T04:35:20Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: Indoorjetpacks uploaded a new version of File:Breaker panel labels.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;inside of a breaker panel with labels on it&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=File:Breaker_panel_labels.jpg&amp;diff=13134</id>
		<title>File:Breaker panel labels.jpg</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=File:Breaker_panel_labels.jpg&amp;diff=13134"/>
		<updated>2026-03-26T04:16:17Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: Indoorjetpacks reverted File:Breaker panel labels.jpg to an old version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;inside of a breaker panel with labels on it&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=File:Breaker_panel_labels.jpg&amp;diff=13133</id>
		<title>File:Breaker panel labels.jpg</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=File:Breaker_panel_labels.jpg&amp;diff=13133"/>
		<updated>2026-03-26T04:15:53Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: Indoorjetpacks uploaded a new version of File:Breaker panel labels.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;inside of a breaker panel with labels on it&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=File:Breaker_panel_labels.jpg&amp;diff=13132</id>
		<title>File:Breaker panel labels.jpg</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=File:Breaker_panel_labels.jpg&amp;diff=13132"/>
		<updated>2026-03-26T04:07:36Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: Indoorjetpacks uploaded a new version of File:Breaker panel labels.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;inside of a breaker panel with labels on it&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=File:Breaker_panel_labels.jpg&amp;diff=13131</id>
		<title>File:Breaker panel labels.jpg</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=File:Breaker_panel_labels.jpg&amp;diff=13131"/>
		<updated>2026-03-26T04:01:47Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: Indoorjetpacks uploaded a new version of File:Breaker panel labels.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;inside of a breaker panel with labels on it&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=File:Breaker_panel_labels.jpg&amp;diff=13130</id>
		<title>File:Breaker panel labels.jpg</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=File:Breaker_panel_labels.jpg&amp;diff=13130"/>
		<updated>2026-03-26T03:49:04Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: Indoorjetpacks uploaded a new version of File:Breaker panel labels.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;inside of a breaker panel with labels on it&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Breaker&amp;diff=13129</id>
		<title>Breaker</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Breaker&amp;diff=13129"/>
		<updated>2026-03-26T03:37:36Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How to reset the breaker for the big red laser cutter, and hardware corner, and the rest of the south outlets&lt;br /&gt;
&lt;br /&gt;
The breaker is up the stairs:&lt;br /&gt;
[[File:Go upstairs.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
Through the left door:&lt;br /&gt;
[[File:Through left door.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
Go to the left, to the top of the stage:&lt;br /&gt;
[[File:Top of the stage.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
climb the ladder:&lt;br /&gt;
[[File:Ladder_top_of_stage.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
and look for the breaker panel:&lt;br /&gt;
[[File:Breaker box exterior.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
The circuits should be labeled:&lt;br /&gt;
[[File:Breaker panel labels.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
And those correspond to the actual breakers.&lt;br /&gt;
[[File:Panel actual breakers.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
Alternately you can look at the panel to see which is flipped (look for what is out of place vs the others). Flip it back toward the other direction (sometimes it will require some force) and you should be good!&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Breaker&amp;diff=13128</id>
		<title>Breaker</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Breaker&amp;diff=13128"/>
		<updated>2026-03-26T03:37:12Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: resetting the breaker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# How to reset the breaker for the big red laser cutter, and hardware corner, and the rest of the south outlets&lt;br /&gt;
&lt;br /&gt;
The breaker is up the stairs:&lt;br /&gt;
[[File:Go upstairs.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
Through the left door:&lt;br /&gt;
[[File:Through left door.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
Go to the left, to the top of the stage:&lt;br /&gt;
[[File:Top of the stage.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
climb the ladder:&lt;br /&gt;
[[File:Ladder_top_of_stage.jpg]]&lt;br /&gt;
&lt;br /&gt;
and look for the breaker panel:&lt;br /&gt;
[[File:Breaker box exterior.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
The circuits should be labeled:&lt;br /&gt;
[[File:Breaker panel labels.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
And those correspond to the actual breakers.&lt;br /&gt;
[[File:Panel actual breakers.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
Alternately you can look at the panel to see which is flipped (look for what is out of place vs the others). Flip it back toward the other direction (sometimes it will require some force) and you should be good!&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=File:Breaker_panel_labels.jpg&amp;diff=13127</id>
		<title>File:Breaker panel labels.jpg</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=File:Breaker_panel_labels.jpg&amp;diff=13127"/>
		<updated>2026-03-26T03:35:36Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;inside of a breaker panel with labels on it&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=File:Panel_actual_breakers.jpg&amp;diff=13126</id>
		<title>File:Panel actual breakers.jpg</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=File:Panel_actual_breakers.jpg&amp;diff=13126"/>
		<updated>2026-03-26T03:34:13Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;picture of thee inside of a breaker panel&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=File:Breaker_box_exterior.jpg&amp;diff=13125</id>
		<title>File:Breaker box exterior.jpg</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=File:Breaker_box_exterior.jpg&amp;diff=13125"/>
		<updated>2026-03-26T03:24:37Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;exterior view of breaker box&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=File:Ladder_top_of_stage.jpg&amp;diff=13124</id>
		<title>File:Ladder top of stage.jpg</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=File:Ladder_top_of_stage.jpg&amp;diff=13124"/>
		<updated>2026-03-26T03:22:38Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;image of the ladder at the top of the stage&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=File:Top_of_the_stage.jpg&amp;diff=13123</id>
		<title>File:Top of the stage.jpg</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=File:Top_of_the_stage.jpg&amp;diff=13123"/>
		<updated>2026-03-26T03:21:29Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;top of the stage&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=File:Through_left_door.jpg&amp;diff=13122</id>
		<title>File:Through left door.jpg</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=File:Through_left_door.jpg&amp;diff=13122"/>
		<updated>2026-03-26T03:20:20Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;door on the left&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=File:Go_upstairs.jpg&amp;diff=13121</id>
		<title>File:Go upstairs.jpg</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=File:Go_upstairs.jpg&amp;diff=13121"/>
		<updated>2026-03-26T03:19:25Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;image of the stairs in sudoroom&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Big_red_laser_cutter&amp;diff=13120</id>
		<title>Big red laser cutter</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Big_red_laser_cutter&amp;diff=13120"/>
		<updated>2026-03-26T03:14:45Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* General Info */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General Info ==&lt;br /&gt;
&lt;br /&gt;
The big red laser cutter is a no-name model using a Ruida 644XG control board. Its bed dimensions are about 730mm wide by 500mm deep. It looks like a 100 W CO2 laser.&lt;br /&gt;
&lt;br /&gt;
The Melbourne Makerspace has the same laser and have a [https://wiki.melbournemakerspace.org/Laser%20Cutter nicely written wiki page on it].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Caution-danger-sign.jpg|thumb]]&lt;br /&gt;
''Be aware:'' lasers are very dangerous! Review these [https://ehs.mit.edu/workplace-safety-program/laser-cutter-safety/ safety guidelines], and carry an appropriate level of fear of the laser at all times. Hazards include:&lt;br /&gt;
&lt;br /&gt;
'''Fire hazard'''&lt;br /&gt;
&lt;br /&gt;
Lasers create high heat, and can cause materials to catch on fire. Certain materials and types of designs (i.e very dense/small objects) are more prone to fire.&lt;br /&gt;
&lt;br /&gt;
To minimize fire risk, remember to...&lt;br /&gt;
# Never leave laser unattended. Be prepared to respond promptly in case of fire. Familiarize yourself with where the fire extinguisher and water spray bottle are before using. You should never see a prolonged flame while using the laser cutter. &lt;br /&gt;
# If you see a candle sized flame for more than 3 seconds while cutting, stop the laser, check/adjust bed height, power/speed settings, or use a different material. &lt;br /&gt;
&lt;br /&gt;
'''Respiratory Hazard'''&lt;br /&gt;
&lt;br /&gt;
Laser cutters create fumes and small particulates. &lt;br /&gt;
&lt;br /&gt;
To minimize respiratory hazards, remember to...&lt;br /&gt;
# Only cut and engrave [[LASER SAFE material]]. Some materials can emit toxic fumes when laser cut, and should never be used in the laser cutter!&lt;br /&gt;
# Always have the ventilation fan on while using the laser cutter, and for a few minutes after you are done. Even laser safe materials aren't good to breathe in. There is also an air purifier next to the laser cutter that is nice to have on.&lt;br /&gt;
# Check in with other people in the room before using the laser cutter to see if they are sensitive to fumes. Be accommodating!&lt;br /&gt;
&lt;br /&gt;
'''Laser Hazard'''&lt;br /&gt;
&lt;br /&gt;
To minimize laser exposure hazards, remember to..&lt;br /&gt;
# Never look directly at the laser beam. While wearing eye protection, you may look at the point that the laser is cutting your material. However, you should NEVER look directly into a laser beam, even if wearing safety goggles.&lt;br /&gt;
# Never run the laser cutter while the lid is open.&lt;br /&gt;
&lt;br /&gt;
'''Help I tripped the breaker'''&lt;br /&gt;
&lt;br /&gt;
This is how to reset the [[breaker]] that the laser (and sewing/3dprinting/hardware corner) is on&lt;br /&gt;
&lt;br /&gt;
== Operation Instructions ==&lt;br /&gt;
# First turn on the laser cutter control switch, located on the right side of the machine.&lt;br /&gt;
[[File:Laser_control_switch.jpg|showing laser control switch on|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Preparing Material ===&lt;br /&gt;
# Put [[LASER SAFE material]] on the bed&lt;br /&gt;
# Use the control pad arrow keys to move the laser head above your material. We want it above the material to properly set the bed height&lt;br /&gt;
# Once laser head above material, use the knob inside the laser cutter to move the bed up and down. The correct height is about 3/4&amp;quot; above your material. You can use the &amp;quot;laser focus height&amp;quot; tool as reference.&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_bed_z_adjust.jpg|showing where Z adjust height is for laser|frameless]]&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_bed_correct_bed_height.jpg|showing correct bed height for laser|frameless]]&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_bed_correct_bed_height_with_tool.jpg|showing correct bed height for laser with tool|frameless]]&lt;br /&gt;
&lt;br /&gt;
=== Turning on the laser and exhaust ===&lt;br /&gt;
# Turn on the exhaust fan by switching on the power strip on top of the laser cutter. You should hear the exhaust fan turn on. Also, switch on the air purifier on the desk.&lt;br /&gt;
[[File:Laser_exhaust_fan.jpg|exhaust fan for laser cutter|thumb]]&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_air_purifier.jpg|air purifier near the laser cutter|thumb]]&lt;br /&gt;
&lt;br /&gt;
# Enable the laser by turning on the laser switch on the left side of the machine, and turning the key on the front of the machine.&lt;br /&gt;
[[File:Laser_switch.jpg|showing laser switch on|thumb]]&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_key_switch.jpg|showing laser key switch on|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Preparing the file ===&lt;br /&gt;
The following steps should be done on the computer near the laser cutter, which has LightBurn installed on it.&lt;br /&gt;
&lt;br /&gt;
# Open LightBurn on computer next to the laser cutter&lt;br /&gt;
# Import a vector file (dxf, pdf, etc) or image (rastering), or use LightBurn to create a design.&lt;br /&gt;
# Set the color of items to define how you want them cut or engraved, then double click the colors in the pane on the right to set the laser speed, power, and other features associated with that color. Black can be used to cut and red to etch, for instance. Use this chart to get a ballpark reference for speed and power settings: [[Big red laser cutter settings]]. It is recommended to do a &amp;quot;test cut&amp;quot; before cutting out a large file to be sure your speed and power settings are good.&lt;br /&gt;
&lt;br /&gt;
[[File:Lightburn layer tips.png|frameless|LightBurn layer settings]]&lt;br /&gt;
&lt;br /&gt;
# Select &amp;quot;absolute coordinates&amp;quot; to define the placement relative to the bed. Select &amp;quot;user origin&amp;quot; to set the placement on the bed manually. The device should be set to ttyUSB0, Ruida664GX.&lt;br /&gt;
# Once happy with design, click “Send”&lt;br /&gt;
# Enter a name (or just use default to override) and press enter. &lt;br /&gt;
# Wait for the file to send.&lt;br /&gt;
&lt;br /&gt;
=== Running the laser ===&lt;br /&gt;
The following steps should be done using the control panel on the laser cutter itself.&lt;br /&gt;
&lt;br /&gt;
# On the laser cutter control panel, press &amp;quot;File&amp;quot; to see available files.&lt;br /&gt;
# Scroll and press “Enter” to select a file.&lt;br /&gt;
# Set the origin if necessary.&lt;br /&gt;
# Press “Frame&amp;quot; to confirm placement. When you press this, the laser cutter head will trace around the max coordinates, to show you where your design will be cut. &lt;br /&gt;
# If the frame is correct press “Start”, and the laser will run.&lt;br /&gt;
&lt;br /&gt;
=== Having Trouble Setting the Origin? ===&lt;br /&gt;
If you are using LightBurn to compose your project, be sure to use the setting &amp;quot;Current Position&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Otherwise, LightBurn may override any origin you set at the laser cutter.&lt;br /&gt;
&lt;br /&gt;
Setting the origin on the laser cutter is easy.&amp;lt;br&amp;gt;&lt;br /&gt;
On the front panel there are 4 arrow keys.  You can use these to move the &amp;quot;head&amp;quot; around.&lt;br /&gt;
Pressing the &amp;quot;Origin&amp;quot; button sets that spot to be the origin of where cutting starts. Typically, this is the upper left&lt;br /&gt;
of the bounding rectangle around your artwork.&lt;br /&gt;
You may find that moving the &amp;quot;head&amp;quot; is much easier than moving the material placed on the bed!&lt;br /&gt;
&lt;br /&gt;
== Other software ==&lt;br /&gt;
&lt;br /&gt;
As mentioned, RDWorks can also be used. We haven't tried it yet but it seems it's a free download [https://www.thunderlaser.com/laser-download from here].&lt;br /&gt;
&lt;br /&gt;
Some of the software (downloaded from the above link) is on the hard drive of wasp.local which is a desktop computer under the 3D printer desk, in a folder called ~/laser-backup/&lt;br /&gt;
&lt;br /&gt;
[https://spaz.org/~jake/sudoroom/Big_red_laser_cutter/ &amp;lt;u&amp;gt;The above software has also been downloaded and stored here&amp;lt;/u&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
it was setup with an IP address of 100.64.64.69 (by pressing buttons through the menu) but it had no ports open and then we just switched over to USB to the computer and it was working fine.  The same software might work over ethernet but we didn't try.&lt;br /&gt;
&lt;br /&gt;
== Trying other things ==&lt;br /&gt;
Andy is trying to find software to control the laser cutter. I can generate gcode instructions in Inkscape, but I don't know how to send them to the printer over USB.&lt;br /&gt;
&lt;br /&gt;
I'm trying to install [https://laserweb.yurl.ch/|LaserWeb].&lt;br /&gt;
&lt;br /&gt;
I ran the commands here : https://laserweb.yurl.ch/documentation/installation/36-install-raspberry-pi. But the server gave an error when started: &lt;br /&gt;
&lt;br /&gt;
Server binding to all local IP addresses on port: 8000&lt;br /&gt;
internal/modules/cjs/loader.js:818&lt;br /&gt;
  throw err;&lt;br /&gt;
  ^&lt;br /&gt;
&lt;br /&gt;
Error: Cannot find module 'node-hid'&lt;br /&gt;
Require stack:&lt;br /&gt;
- /home/laser/Programs/lw.comm-server/server.js&lt;br /&gt;
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:815:15)&lt;br /&gt;
    at Function.Module._load (internal/modules/cjs/loader.js:667:27)&lt;br /&gt;
    at Module.require (internal/modules/cjs/loader.js:887:19)&lt;br /&gt;
    at require (internal/modules/cjs/helpers.js:74:18)&lt;br /&gt;
    at Object.exports.LWCommServer (/home/laser/Programs/lw.comm-server/server.js:168:13)&lt;br /&gt;
    at Object.&amp;lt;anonymous&amp;gt; (/home/laser/Programs/lw.comm-server/server.js:4141:13)&lt;br /&gt;
    at Module._compile (internal/modules/cjs/loader.js:999:30)&lt;br /&gt;
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)&lt;br /&gt;
    at Module.load (internal/modules/cjs/loader.js:863:32)&lt;br /&gt;
    at Function.Module._load (internal/modules/cjs/loader.js:708:14) {&lt;br /&gt;
  code: 'MODULE_NOT_FOUND',&lt;br /&gt;
  requireStack: [ '/home/laser/Programs/lw.comm-server/server.js' ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Stuff made on the big red laser cutter ==&lt;br /&gt;
&lt;br /&gt;
* I cut some 1/4 clear plastic suspected to be acrylic. Used .5mm/sec 100%/40% power. It cut all the way through but the edge was rough.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stuff seen around the space ==&lt;br /&gt;
&lt;br /&gt;
== ventilation ducting ==&lt;br /&gt;
&lt;br /&gt;
=== Cleaning ===&lt;br /&gt;
&lt;br /&gt;
Clean the lens monthly&lt;br /&gt;
&lt;br /&gt;
If the exhaust fan is not working well, it might need to be cleaned.&lt;br /&gt;
&lt;br /&gt;
To clean, detach the fan and base from the laser cutter. The area circled in the below picture is where you need to get access.&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_fan_detach.jpg|showing where to detach laser exhaust fan|frameless]]&lt;br /&gt;
&lt;br /&gt;
This is what the fan looks like detached&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_fan_detached.png|detached laser exhaust fan|frameless]]&lt;br /&gt;
&lt;br /&gt;
This is dirty and needs to be cleaned&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_fan_dirty.jpg|dirty laser exhaust fan|frameless]]&lt;br /&gt;
&lt;br /&gt;
Use a vacuum and toothbrush/wire brush to clean. A n95 mask is recommended too.&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_fan_clean.jpg|clean laser exhaust fan|frameless]]&lt;br /&gt;
&lt;br /&gt;
=== history ===&lt;br /&gt;
a plastic adaptor was 3D printed to connect the 6&amp;quot; outlet of the exhaust fan to the 8&amp;quot; flexible duct leading to the roof hole:&lt;br /&gt;
&amp;lt;code&amp;gt;laserduct.scad&lt;br /&gt;
THICKNESS=1.5*25.4;&lt;br /&gt;
ID=5.75*25.4;&lt;br /&gt;
ID_LIP=ID-(0.25*25.4);&lt;br /&gt;
ID_LIP_THICK=0.2*25.4;&lt;br /&gt;
OD=7.75*25.4;&lt;br /&gt;
OD_LIP=OD+0.2*25.4;&lt;br /&gt;
OD_LIP_THICK=0.2*25.4;&lt;br /&gt;
difference() {&lt;br /&gt;
  color(&amp;quot;BLUE&amp;quot;) cylinder(d1=OD_LIP, d2=OD, h=THICKNESS, $fn=100);&lt;br /&gt;
  {&lt;br /&gt;
    translate([0,0,ID_LIP_THICK]) cylinder(d=ID, h=THICKNESS, $fn=100);&lt;br /&gt;
    translate([0,0,-0.5]) cylinder(d=ID_LIP, h=THICKNESS, $fn=100);&lt;br /&gt;
  }                                &lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
[[File:Laserduct.png|3D printing exhaust duct adaptor|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Also the duct/roof interface was improved and a new stand was made for the extractor fan. Yay for milkcrates!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Fan-holder.jpg|thumb]]&lt;br /&gt;
[[File:new-vent-top.jpg|thumb]]&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Big_red_laser_cutter&amp;diff=13119</id>
		<title>Big red laser cutter</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Big_red_laser_cutter&amp;diff=13119"/>
		<updated>2026-03-26T03:14:04Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* General Info */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General Info ==&lt;br /&gt;
&lt;br /&gt;
The big red laser cutter is a no-name model using a Ruida 644XG control board. Its bed dimensions are about 730mm wide by 500mm deep. It looks like a 100 W CO2 laser.&lt;br /&gt;
&lt;br /&gt;
The Melbourne Makerspace has the same laser and have a [https://wiki.melbournemakerspace.org/Laser%20Cutter nicely written wiki page on it].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Caution-danger-sign.jpg|thumb]]&lt;br /&gt;
''Be aware:'' lasers are very dangerous! Review these [https://ehs.mit.edu/workplace-safety-program/laser-cutter-safety/ safety guidelines], and carry an appropriate level of fear of the laser at all times. Hazards include:&lt;br /&gt;
&lt;br /&gt;
'''Fire hazard'''&lt;br /&gt;
&lt;br /&gt;
Lasers create high heat, and can cause materials to catch on fire. Certain materials and types of designs (i.e very dense/small objects) are more prone to fire.&lt;br /&gt;
&lt;br /&gt;
To minimize fire risk, remember to...&lt;br /&gt;
# Never leave laser unattended. Be prepared to respond promptly in case of fire. Familiarize yourself with where the fire extinguisher and water spray bottle are before using. You should never see a prolonged flame while using the laser cutter. &lt;br /&gt;
# If you see a candle sized flame for more than 3 seconds while cutting, stop the laser, check/adjust bed height, power/speed settings, or use a different material. &lt;br /&gt;
&lt;br /&gt;
'''Respiratory Hazard'''&lt;br /&gt;
&lt;br /&gt;
Laser cutters create fumes and small particulates. &lt;br /&gt;
&lt;br /&gt;
To minimize respiratory hazards, remember to...&lt;br /&gt;
# Only cut and engrave [[LASER SAFE material]]. Some materials can emit toxic fumes when laser cut, and should never be used in the laser cutter!&lt;br /&gt;
# Always have the ventilation fan on while using the laser cutter, and for a few minutes after you are done. Even laser safe materials aren't good to breathe in. There is also an air purifier next to the laser cutter that is nice to have on.&lt;br /&gt;
# Check in with other people in the room before using the laser cutter to see if they are sensitive to fumes. Be accommodating!&lt;br /&gt;
&lt;br /&gt;
'''Laser Hazard'''&lt;br /&gt;
&lt;br /&gt;
To minimize laser exposure hazards, remember to..&lt;br /&gt;
# Never look directly at the laser beam. While wearing eye protection, you may look at the point that the laser is cutting your material. However, you should NEVER look directly into a laser beam, even if wearing safety goggles.&lt;br /&gt;
# Never run the laser cutter while the lid is open.&lt;br /&gt;
&lt;br /&gt;
'''Help I tripped the breaker''&lt;br /&gt;
This is how to reset the [[breaker]] that the laser (and sewing/3dprinting/hardware corner) is on&lt;br /&gt;
&lt;br /&gt;
== Operation Instructions ==&lt;br /&gt;
# First turn on the laser cutter control switch, located on the right side of the machine.&lt;br /&gt;
[[File:Laser_control_switch.jpg|showing laser control switch on|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Preparing Material ===&lt;br /&gt;
# Put [[LASER SAFE material]] on the bed&lt;br /&gt;
# Use the control pad arrow keys to move the laser head above your material. We want it above the material to properly set the bed height&lt;br /&gt;
# Once laser head above material, use the knob inside the laser cutter to move the bed up and down. The correct height is about 3/4&amp;quot; above your material. You can use the &amp;quot;laser focus height&amp;quot; tool as reference.&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_bed_z_adjust.jpg|showing where Z adjust height is for laser|frameless]]&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_bed_correct_bed_height.jpg|showing correct bed height for laser|frameless]]&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_bed_correct_bed_height_with_tool.jpg|showing correct bed height for laser with tool|frameless]]&lt;br /&gt;
&lt;br /&gt;
=== Turning on the laser and exhaust ===&lt;br /&gt;
# Turn on the exhaust fan by switching on the power strip on top of the laser cutter. You should hear the exhaust fan turn on. Also, switch on the air purifier on the desk.&lt;br /&gt;
[[File:Laser_exhaust_fan.jpg|exhaust fan for laser cutter|thumb]]&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_air_purifier.jpg|air purifier near the laser cutter|thumb]]&lt;br /&gt;
&lt;br /&gt;
# Enable the laser by turning on the laser switch on the left side of the machine, and turning the key on the front of the machine.&lt;br /&gt;
[[File:Laser_switch.jpg|showing laser switch on|thumb]]&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_key_switch.jpg|showing laser key switch on|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Preparing the file ===&lt;br /&gt;
The following steps should be done on the computer near the laser cutter, which has LightBurn installed on it.&lt;br /&gt;
&lt;br /&gt;
# Open LightBurn on computer next to the laser cutter&lt;br /&gt;
# Import a vector file (dxf, pdf, etc) or image (rastering), or use LightBurn to create a design.&lt;br /&gt;
# Set the color of items to define how you want them cut or engraved, then double click the colors in the pane on the right to set the laser speed, power, and other features associated with that color. Black can be used to cut and red to etch, for instance. Use this chart to get a ballpark reference for speed and power settings: [[Big red laser cutter settings]]. It is recommended to do a &amp;quot;test cut&amp;quot; before cutting out a large file to be sure your speed and power settings are good.&lt;br /&gt;
&lt;br /&gt;
[[File:Lightburn layer tips.png|frameless|LightBurn layer settings]]&lt;br /&gt;
&lt;br /&gt;
# Select &amp;quot;absolute coordinates&amp;quot; to define the placement relative to the bed. Select &amp;quot;user origin&amp;quot; to set the placement on the bed manually. The device should be set to ttyUSB0, Ruida664GX.&lt;br /&gt;
# Once happy with design, click “Send”&lt;br /&gt;
# Enter a name (or just use default to override) and press enter. &lt;br /&gt;
# Wait for the file to send.&lt;br /&gt;
&lt;br /&gt;
=== Running the laser ===&lt;br /&gt;
The following steps should be done using the control panel on the laser cutter itself.&lt;br /&gt;
&lt;br /&gt;
# On the laser cutter control panel, press &amp;quot;File&amp;quot; to see available files.&lt;br /&gt;
# Scroll and press “Enter” to select a file.&lt;br /&gt;
# Set the origin if necessary.&lt;br /&gt;
# Press “Frame&amp;quot; to confirm placement. When you press this, the laser cutter head will trace around the max coordinates, to show you where your design will be cut. &lt;br /&gt;
# If the frame is correct press “Start”, and the laser will run.&lt;br /&gt;
&lt;br /&gt;
=== Having Trouble Setting the Origin? ===&lt;br /&gt;
If you are using LightBurn to compose your project, be sure to use the setting &amp;quot;Current Position&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Otherwise, LightBurn may override any origin you set at the laser cutter.&lt;br /&gt;
&lt;br /&gt;
Setting the origin on the laser cutter is easy.&amp;lt;br&amp;gt;&lt;br /&gt;
On the front panel there are 4 arrow keys.  You can use these to move the &amp;quot;head&amp;quot; around.&lt;br /&gt;
Pressing the &amp;quot;Origin&amp;quot; button sets that spot to be the origin of where cutting starts. Typically, this is the upper left&lt;br /&gt;
of the bounding rectangle around your artwork.&lt;br /&gt;
You may find that moving the &amp;quot;head&amp;quot; is much easier than moving the material placed on the bed!&lt;br /&gt;
&lt;br /&gt;
== Other software ==&lt;br /&gt;
&lt;br /&gt;
As mentioned, RDWorks can also be used. We haven't tried it yet but it seems it's a free download [https://www.thunderlaser.com/laser-download from here].&lt;br /&gt;
&lt;br /&gt;
Some of the software (downloaded from the above link) is on the hard drive of wasp.local which is a desktop computer under the 3D printer desk, in a folder called ~/laser-backup/&lt;br /&gt;
&lt;br /&gt;
[https://spaz.org/~jake/sudoroom/Big_red_laser_cutter/ &amp;lt;u&amp;gt;The above software has also been downloaded and stored here&amp;lt;/u&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
it was setup with an IP address of 100.64.64.69 (by pressing buttons through the menu) but it had no ports open and then we just switched over to USB to the computer and it was working fine.  The same software might work over ethernet but we didn't try.&lt;br /&gt;
&lt;br /&gt;
== Trying other things ==&lt;br /&gt;
Andy is trying to find software to control the laser cutter. I can generate gcode instructions in Inkscape, but I don't know how to send them to the printer over USB.&lt;br /&gt;
&lt;br /&gt;
I'm trying to install [https://laserweb.yurl.ch/|LaserWeb].&lt;br /&gt;
&lt;br /&gt;
I ran the commands here : https://laserweb.yurl.ch/documentation/installation/36-install-raspberry-pi. But the server gave an error when started: &lt;br /&gt;
&lt;br /&gt;
Server binding to all local IP addresses on port: 8000&lt;br /&gt;
internal/modules/cjs/loader.js:818&lt;br /&gt;
  throw err;&lt;br /&gt;
  ^&lt;br /&gt;
&lt;br /&gt;
Error: Cannot find module 'node-hid'&lt;br /&gt;
Require stack:&lt;br /&gt;
- /home/laser/Programs/lw.comm-server/server.js&lt;br /&gt;
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:815:15)&lt;br /&gt;
    at Function.Module._load (internal/modules/cjs/loader.js:667:27)&lt;br /&gt;
    at Module.require (internal/modules/cjs/loader.js:887:19)&lt;br /&gt;
    at require (internal/modules/cjs/helpers.js:74:18)&lt;br /&gt;
    at Object.exports.LWCommServer (/home/laser/Programs/lw.comm-server/server.js:168:13)&lt;br /&gt;
    at Object.&amp;lt;anonymous&amp;gt; (/home/laser/Programs/lw.comm-server/server.js:4141:13)&lt;br /&gt;
    at Module._compile (internal/modules/cjs/loader.js:999:30)&lt;br /&gt;
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)&lt;br /&gt;
    at Module.load (internal/modules/cjs/loader.js:863:32)&lt;br /&gt;
    at Function.Module._load (internal/modules/cjs/loader.js:708:14) {&lt;br /&gt;
  code: 'MODULE_NOT_FOUND',&lt;br /&gt;
  requireStack: [ '/home/laser/Programs/lw.comm-server/server.js' ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Stuff made on the big red laser cutter ==&lt;br /&gt;
&lt;br /&gt;
* I cut some 1/4 clear plastic suspected to be acrylic. Used .5mm/sec 100%/40% power. It cut all the way through but the edge was rough.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stuff seen around the space ==&lt;br /&gt;
&lt;br /&gt;
== ventilation ducting ==&lt;br /&gt;
&lt;br /&gt;
=== Cleaning ===&lt;br /&gt;
&lt;br /&gt;
Clean the lens monthly&lt;br /&gt;
&lt;br /&gt;
If the exhaust fan is not working well, it might need to be cleaned.&lt;br /&gt;
&lt;br /&gt;
To clean, detach the fan and base from the laser cutter. The area circled in the below picture is where you need to get access.&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_fan_detach.jpg|showing where to detach laser exhaust fan|frameless]]&lt;br /&gt;
&lt;br /&gt;
This is what the fan looks like detached&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_fan_detached.png|detached laser exhaust fan|frameless]]&lt;br /&gt;
&lt;br /&gt;
This is dirty and needs to be cleaned&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_fan_dirty.jpg|dirty laser exhaust fan|frameless]]&lt;br /&gt;
&lt;br /&gt;
Use a vacuum and toothbrush/wire brush to clean. A n95 mask is recommended too.&lt;br /&gt;
&lt;br /&gt;
[[File:Laser_fan_clean.jpg|clean laser exhaust fan|frameless]]&lt;br /&gt;
&lt;br /&gt;
=== history ===&lt;br /&gt;
a plastic adaptor was 3D printed to connect the 6&amp;quot; outlet of the exhaust fan to the 8&amp;quot; flexible duct leading to the roof hole:&lt;br /&gt;
&amp;lt;code&amp;gt;laserduct.scad&lt;br /&gt;
THICKNESS=1.5*25.4;&lt;br /&gt;
ID=5.75*25.4;&lt;br /&gt;
ID_LIP=ID-(0.25*25.4);&lt;br /&gt;
ID_LIP_THICK=0.2*25.4;&lt;br /&gt;
OD=7.75*25.4;&lt;br /&gt;
OD_LIP=OD+0.2*25.4;&lt;br /&gt;
OD_LIP_THICK=0.2*25.4;&lt;br /&gt;
difference() {&lt;br /&gt;
  color(&amp;quot;BLUE&amp;quot;) cylinder(d1=OD_LIP, d2=OD, h=THICKNESS, $fn=100);&lt;br /&gt;
  {&lt;br /&gt;
    translate([0,0,ID_LIP_THICK]) cylinder(d=ID, h=THICKNESS, $fn=100);&lt;br /&gt;
    translate([0,0,-0.5]) cylinder(d=ID_LIP, h=THICKNESS, $fn=100);&lt;br /&gt;
  }                                &lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
[[File:Laserduct.png|3D printing exhaust duct adaptor|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Also the duct/roof interface was improved and a new stand was made for the extractor fan. Yay for milkcrates!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Fan-holder.jpg|thumb]]&lt;br /&gt;
[[File:new-vent-top.jpg|thumb]]&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13081</id>
		<title>Membermatters</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13081"/>
		<updated>2026-03-13T03:17:00Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* Need to Setup, Immediate Actions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is the notes for the membermatters installation&lt;br /&gt;
&lt;br /&gt;
https://backers.sudoroom.org&lt;br /&gt;
&lt;br /&gt;
= to create a new user =&lt;br /&gt;
* https://backers.sudoroom.org/register&lt;br /&gt;
&lt;br /&gt;
= to check the logs from the docker instance =&lt;br /&gt;
* https://backers.sudoroom.org/logs/django.log&lt;br /&gt;
&lt;br /&gt;
= github =&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/db0724495a09731ec18db2ebe353931a08c256e2..d6ce52564e8ae64975690107efbc2f1907ac1fb8 the changes juul made to add sendmail as an option]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/d6ce52564e8ae64975690107efbc2f1907ac1fb8..00918eda47d88d090c29c976410ae8036579d7ea the changes rechner and jake made to build our docker for postgres]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/tree/sudoroom we are using the sudoroom branch in our docker]&lt;br /&gt;
* we also need to edit frontend/src/i18n/en-AU/index.ts to change &amp;quot;mobile number&amp;quot; to &amp;quot;Phone Number (or X)&amp;quot; (it builds to /usr/src/app/frontend/dist/spa/assets/index.*.js )&lt;br /&gt;
* we are working on mounting the docker image with git on the server, so we can make changes to production and try them&lt;br /&gt;
* we should set up a schedule for rebasing in changes from upstream, then shoving our changes back on top. then we can deploy to docker directly from our github fork&lt;br /&gt;
&lt;br /&gt;
= we are not spam =&lt;br /&gt;
* emails sent by this system for people to validate their account, or reset their password, are important&lt;br /&gt;
* emails are being accepted by gmail (for now) but not by some other platforms, and maybe not for some gmail users?&lt;br /&gt;
* we should look for ways to find out why the emails are rejected by some servers&lt;br /&gt;
* we probably need to format the emails with plaintext and MIME to make them look normal to spam checkers&lt;br /&gt;
* Our server is postfix based, but yeah, postfix has very good logging on exactly what happens to each message.  Though you as the sender can't know if it went into spam, only if it got outright rejected.&lt;br /&gt;
* emails to an MIT address were rejected by Microsoft: &amp;quot;Access denied, banned sending IP [198.199.116.180]. To request removal from this list please visit https://sender.office.com/ and follow the directions&amp;quot; and then Sean followed the directions and asked them to unblock our IP address&lt;br /&gt;
* we need to setup monitoring of emails that were outright rejected, and take action each time.  Dealing with emails marked as spam will be more challenging unless people have access to the spam filter information on their receiving end.&lt;br /&gt;
* we need to encourage more and people to sign up to the new system as we make progress, AFTER setting up rejection monitoring&lt;br /&gt;
&lt;br /&gt;
= certbot =&lt;br /&gt;
* juul used pipx to install, and then had to manually make a systemd job to check it twice a day&lt;br /&gt;
&lt;br /&gt;
= Help us build and test =&lt;br /&gt;
* prioritized bugs: https://github.com/orgs/sudoroom/projects/1/views/1&lt;br /&gt;
* submit a bug: https://github.com/sudoroom/MemberMatters/issues&lt;br /&gt;
== Making a dev environment ==&lt;br /&gt;
(this assumes you already have git installed and docker setup!)&lt;br /&gt;
# `cd` to a directory you want to put the repo&lt;br /&gt;
# `git clone https://github.com/sudoroom/MemberMatters.git`&lt;br /&gt;
# `git checkout -b branch-name` to make a new branch based of the default (sudoroom)&lt;br /&gt;
# `touch /usr/app/django.log` (this is where the logs will go, and not creating it as a file seemed to create it as a dir which docker hated)&lt;br /&gt;
# 'echo &amp;quot;MM_ENV=Development&amp;quot; &amp;gt; ./docker/.env`  - I am not sure if this needs to go into the docker directory, or just exist? .env files are .gitignored anyway, but it looks like this is used by docker to set some environment vars in the docker-compose.yml&lt;br /&gt;
# `cd ./docker`&lt;br /&gt;
# `docker compose pull` (this make take a while)&lt;br /&gt;
# `docker compose up -d` to start your docker image&lt;br /&gt;
# `docker ps` will list your running containers processes that are created by the docker yaml file&lt;br /&gt;
# `docker stop $(docker ps -q)` will stop all the containers by doing `docker stop` on all of the running containers (the -q flag lists by ID)&lt;br /&gt;
&lt;br /&gt;
== Some in-progress notetaking ==&lt;br /&gt;
# doing all that, and then going to localhost:8000 takes me to the BMS login page instead of sudoroom's. possibly, since on my setup i ran `docker pull membermatters/membermatters` initially before following the rest of those setups, that is what broke it - i would think that the config files (the database?) would supercede that&lt;br /&gt;
# there is also a dev.env file at the top of the repo that might be worth checking out. possible you could `docker run --env_file /path/to/dev.env` and it would use that env instead of the one in the [https://github.com/sudoroom/MemberMatters/blob/481e4bc8f4a3f614e05fcc98af74c9380c7a05a2/docker/docker-compose.yml#L33 docker-compose.yml] ? I don't know if there is a `docker compose` equivalent, need to keep poking at that&lt;br /&gt;
&lt;br /&gt;
some updates:&lt;br /&gt;
RechnerFox made a github action to update prod from a staging instance after that was [https://github.com/sudoroom/MemberMatters/commit/88529eec2418afd56302e7deaa4ccf2b3471aa88 added by jake]&lt;br /&gt;
2026-01-28: Martin and Nicholas did some work hacking on the vps to backup, delete, and recreate the database so we could start from scratch. This required doing a pg_dump of the existing db, and then entering the postgres docker container with exec, using pgsl -U membermatters. Then we renamed the existing database, and then went back to the [https://membermatters.org/en/latest/GETTING_STARTED.html getting started page of the mm docs and picking up after the &amp;quot;docker start&amp;quot; commands to load the initial data to the database.&lt;br /&gt;
&lt;br /&gt;
Then Martin added himself and Judy, both times it threw errors because the email wasn't setup. MM says you need postmark, but in our fork we have code to get around that, but requires the postmark api key to be blank and the email default to be changed.&lt;br /&gt;
2026-01-30: Jake did those two fixes and confirmed he got a password reset email!&lt;br /&gt;
2026-02-05: Martin double confirmed email setup by sending a welcome email to himself and started trying to configure the logos, which he got from looking at the old mm email when it was setup and seeing what url was embedded in that email.&lt;br /&gt;
&lt;br /&gt;
Django logs are doing a bunch of Warnings about not finding various /api stuff?&lt;br /&gt;
Logo changes aren't loading to the page :( Looks like it is attempting to load but no dice. Confirmed a matching format (png) and square size within favicon specs when linking to one from the wiki's logo page, and then linked to the old one but neither seem to be taking. --- Possible this is still due to all the Not Found /api stuff?&lt;br /&gt;
&lt;br /&gt;
Nicholas suggested that was just some scrapers or bots hitting the page, tested with him trying to load /api/nicksun and that also showed in the logs the same warning.&lt;br /&gt;
&lt;br /&gt;
Site Logo worked! Martin and Nicholas poked around more with it, and the favicon doesn't seem to be used anywhere except emails? But doing a rectangular image for the logo works! It's one of the logos from the wiki - possible we should switch it to a WP upload for speed, not sure how much that matters.&lt;br /&gt;
&lt;br /&gt;
== Currently ( 2026-02-07 ) ==&lt;br /&gt;
Martin added two payment plans and tested one and put in his card and it worked! Got an email and got to next steps&lt;br /&gt;
= Membership Plan Setup =&lt;br /&gt;
== Adding a Membership Payment Plan ==&lt;br /&gt;
Left Side Bar &amp;gt; Admin Tools &amp;gt; Membership Plan &amp;gt; Plus Icon, make sure you click the checkbox for 'visible to members'&lt;br /&gt;
&lt;br /&gt;
== Adding a new tier to the existing payment plans ==&lt;br /&gt;
Click the plan you made, click ''that'' plus icon.&lt;br /&gt;
The popup window shows up, Name your plan, CHANGE THE CURRENCY TO USD, and then add the amount&lt;br /&gt;
Notes:  Make sure you also click the checkbox for 'visible to members' - if you don't do this, you have to go to the django page to set it (ie its not changeable by in the front end)&lt;br /&gt;
&lt;br /&gt;
= MEMBERSHIP PROCESS- DISCUSSION =&lt;br /&gt;
ivan &amp;amp; anca working on this&lt;br /&gt;
&lt;br /&gt;
martin and ivan talked a bit about this 2026-01-06:&lt;br /&gt;
* subscription statuses can be: active (currently paying) / inactive (not paying)&lt;br /&gt;
* member status can be: active (currently a member) / inactive (not a member, but possibly still paying as a dono or something) / new (unsure, maybe we use this as 'signed up, but still pending endorsements/waiting period? what's the order of operations?) / or account only (signed up but not paying/no payment info in MM)&lt;br /&gt;
&lt;br /&gt;
* 2026-02-10&lt;br /&gt;
ivan and martin and nick did a truth table to figure out statuses:&lt;br /&gt;
&lt;br /&gt;
Membership Status / Subscription status&lt;br /&gt;
* Active / Active -&amp;gt; Member&lt;br /&gt;
* Active / Inactive -&amp;gt; Email to talk about payment (card error, payment lapse etc)&lt;br /&gt;
* Noob / Active -&amp;gt; Induction&lt;br /&gt;
* Noob / Inactive -&amp;gt; Induction&lt;br /&gt;
* Inactive / Active -&amp;gt; Supporter&lt;br /&gt;
* Inactive / Inactive -&amp;gt; Former Member&lt;br /&gt;
&lt;br /&gt;
=== I want to become a member!! Onboarding Steps ===&lt;br /&gt;
# Hang Out, attend an event, join lists, discord&lt;br /&gt;
# I Like this! - Fill out the Intent to Join Form!!!&lt;br /&gt;
# Attend the next meeting, and get endorsements&lt;br /&gt;
# Get a mentor!!&lt;br /&gt;
&lt;br /&gt;
=== Setup payment on Member Matters ===&lt;br /&gt;
# Create an account, verify via email&lt;br /&gt;
# I'm on Sudo Humans, what do I do?&lt;br /&gt;
# I use PayPal, or checks, or Bitcoin. What do I do?&lt;br /&gt;
&lt;br /&gt;
=== Get door access ===&lt;br /&gt;
# Get an email?&lt;br /&gt;
# How many door access systems will we have?&lt;br /&gt;
&lt;br /&gt;
=== Need to Setup, Immediate Actions ===&lt;br /&gt;
# Set up membership tiers - done? we only have one&lt;br /&gt;
# Set up payment plans - also done, mirroring the ones on sudohumans&lt;br /&gt;
&lt;br /&gt;
=== Pain points: We need to fix these issues ... later ===&lt;br /&gt;
# ''need to check for verification email from member matters''&lt;br /&gt;
# ''get access card process needs work''&lt;br /&gt;
# ''members can see each others activities on member matters''&lt;br /&gt;
# ''update welcome and alert emails''&lt;br /&gt;
# ''updating the amount someone is paying requires an admin to change it in django, there's no way for a user to do that, and also no corresponding vue card in the frontend''&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
# '' Contact Info (Constance Config) - some of that is still membermatters / defaults (notably the email!)&lt;br /&gt;
# '' Seems like some timedate setting is still configured to be DD/MM/YYYY somehow?&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13080</id>
		<title>Membermatters</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13080"/>
		<updated>2026-03-13T03:16:31Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* TODO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is the notes for the membermatters installation&lt;br /&gt;
&lt;br /&gt;
https://backers.sudoroom.org&lt;br /&gt;
&lt;br /&gt;
= to create a new user =&lt;br /&gt;
* https://backers.sudoroom.org/register&lt;br /&gt;
&lt;br /&gt;
= to check the logs from the docker instance =&lt;br /&gt;
* https://backers.sudoroom.org/logs/django.log&lt;br /&gt;
&lt;br /&gt;
= github =&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/db0724495a09731ec18db2ebe353931a08c256e2..d6ce52564e8ae64975690107efbc2f1907ac1fb8 the changes juul made to add sendmail as an option]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/d6ce52564e8ae64975690107efbc2f1907ac1fb8..00918eda47d88d090c29c976410ae8036579d7ea the changes rechner and jake made to build our docker for postgres]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/tree/sudoroom we are using the sudoroom branch in our docker]&lt;br /&gt;
* we also need to edit frontend/src/i18n/en-AU/index.ts to change &amp;quot;mobile number&amp;quot; to &amp;quot;Phone Number (or X)&amp;quot; (it builds to /usr/src/app/frontend/dist/spa/assets/index.*.js )&lt;br /&gt;
* we are working on mounting the docker image with git on the server, so we can make changes to production and try them&lt;br /&gt;
* we should set up a schedule for rebasing in changes from upstream, then shoving our changes back on top. then we can deploy to docker directly from our github fork&lt;br /&gt;
&lt;br /&gt;
= we are not spam =&lt;br /&gt;
* emails sent by this system for people to validate their account, or reset their password, are important&lt;br /&gt;
* emails are being accepted by gmail (for now) but not by some other platforms, and maybe not for some gmail users?&lt;br /&gt;
* we should look for ways to find out why the emails are rejected by some servers&lt;br /&gt;
* we probably need to format the emails with plaintext and MIME to make them look normal to spam checkers&lt;br /&gt;
* Our server is postfix based, but yeah, postfix has very good logging on exactly what happens to each message.  Though you as the sender can't know if it went into spam, only if it got outright rejected.&lt;br /&gt;
* emails to an MIT address were rejected by Microsoft: &amp;quot;Access denied, banned sending IP [198.199.116.180]. To request removal from this list please visit https://sender.office.com/ and follow the directions&amp;quot; and then Sean followed the directions and asked them to unblock our IP address&lt;br /&gt;
* we need to setup monitoring of emails that were outright rejected, and take action each time.  Dealing with emails marked as spam will be more challenging unless people have access to the spam filter information on their receiving end.&lt;br /&gt;
* we need to encourage more and people to sign up to the new system as we make progress, AFTER setting up rejection monitoring&lt;br /&gt;
&lt;br /&gt;
= certbot =&lt;br /&gt;
* juul used pipx to install, and then had to manually make a systemd job to check it twice a day&lt;br /&gt;
&lt;br /&gt;
= Help us build and test =&lt;br /&gt;
* prioritized bugs: https://github.com/orgs/sudoroom/projects/1/views/1&lt;br /&gt;
* submit a bug: https://github.com/sudoroom/MemberMatters/issues&lt;br /&gt;
== Making a dev environment ==&lt;br /&gt;
(this assumes you already have git installed and docker setup!)&lt;br /&gt;
# `cd` to a directory you want to put the repo&lt;br /&gt;
# `git clone https://github.com/sudoroom/MemberMatters.git`&lt;br /&gt;
# `git checkout -b branch-name` to make a new branch based of the default (sudoroom)&lt;br /&gt;
# `touch /usr/app/django.log` (this is where the logs will go, and not creating it as a file seemed to create it as a dir which docker hated)&lt;br /&gt;
# 'echo &amp;quot;MM_ENV=Development&amp;quot; &amp;gt; ./docker/.env`  - I am not sure if this needs to go into the docker directory, or just exist? .env files are .gitignored anyway, but it looks like this is used by docker to set some environment vars in the docker-compose.yml&lt;br /&gt;
# `cd ./docker`&lt;br /&gt;
# `docker compose pull` (this make take a while)&lt;br /&gt;
# `docker compose up -d` to start your docker image&lt;br /&gt;
# `docker ps` will list your running containers processes that are created by the docker yaml file&lt;br /&gt;
# `docker stop $(docker ps -q)` will stop all the containers by doing `docker stop` on all of the running containers (the -q flag lists by ID)&lt;br /&gt;
&lt;br /&gt;
== Some in-progress notetaking ==&lt;br /&gt;
# doing all that, and then going to localhost:8000 takes me to the BMS login page instead of sudoroom's. possibly, since on my setup i ran `docker pull membermatters/membermatters` initially before following the rest of those setups, that is what broke it - i would think that the config files (the database?) would supercede that&lt;br /&gt;
# there is also a dev.env file at the top of the repo that might be worth checking out. possible you could `docker run --env_file /path/to/dev.env` and it would use that env instead of the one in the [https://github.com/sudoroom/MemberMatters/blob/481e4bc8f4a3f614e05fcc98af74c9380c7a05a2/docker/docker-compose.yml#L33 docker-compose.yml] ? I don't know if there is a `docker compose` equivalent, need to keep poking at that&lt;br /&gt;
&lt;br /&gt;
some updates:&lt;br /&gt;
RechnerFox made a github action to update prod from a staging instance after that was [https://github.com/sudoroom/MemberMatters/commit/88529eec2418afd56302e7deaa4ccf2b3471aa88 added by jake]&lt;br /&gt;
2026-01-28: Martin and Nicholas did some work hacking on the vps to backup, delete, and recreate the database so we could start from scratch. This required doing a pg_dump of the existing db, and then entering the postgres docker container with exec, using pgsl -U membermatters. Then we renamed the existing database, and then went back to the [https://membermatters.org/en/latest/GETTING_STARTED.html getting started page of the mm docs and picking up after the &amp;quot;docker start&amp;quot; commands to load the initial data to the database.&lt;br /&gt;
&lt;br /&gt;
Then Martin added himself and Judy, both times it threw errors because the email wasn't setup. MM says you need postmark, but in our fork we have code to get around that, but requires the postmark api key to be blank and the email default to be changed.&lt;br /&gt;
2026-01-30: Jake did those two fixes and confirmed he got a password reset email!&lt;br /&gt;
2026-02-05: Martin double confirmed email setup by sending a welcome email to himself and started trying to configure the logos, which he got from looking at the old mm email when it was setup and seeing what url was embedded in that email.&lt;br /&gt;
&lt;br /&gt;
Django logs are doing a bunch of Warnings about not finding various /api stuff?&lt;br /&gt;
Logo changes aren't loading to the page :( Looks like it is attempting to load but no dice. Confirmed a matching format (png) and square size within favicon specs when linking to one from the wiki's logo page, and then linked to the old one but neither seem to be taking. --- Possible this is still due to all the Not Found /api stuff?&lt;br /&gt;
&lt;br /&gt;
Nicholas suggested that was just some scrapers or bots hitting the page, tested with him trying to load /api/nicksun and that also showed in the logs the same warning.&lt;br /&gt;
&lt;br /&gt;
Site Logo worked! Martin and Nicholas poked around more with it, and the favicon doesn't seem to be used anywhere except emails? But doing a rectangular image for the logo works! It's one of the logos from the wiki - possible we should switch it to a WP upload for speed, not sure how much that matters.&lt;br /&gt;
&lt;br /&gt;
== Currently ( 2026-02-07 ) ==&lt;br /&gt;
Martin added two payment plans and tested one and put in his card and it worked! Got an email and got to next steps&lt;br /&gt;
= Membership Plan Setup =&lt;br /&gt;
== Adding a Membership Payment Plan ==&lt;br /&gt;
Left Side Bar &amp;gt; Admin Tools &amp;gt; Membership Plan &amp;gt; Plus Icon, make sure you click the checkbox for 'visible to members'&lt;br /&gt;
&lt;br /&gt;
== Adding a new tier to the existing payment plans ==&lt;br /&gt;
Click the plan you made, click ''that'' plus icon.&lt;br /&gt;
The popup window shows up, Name your plan, CHANGE THE CURRENCY TO USD, and then add the amount&lt;br /&gt;
Notes:  Make sure you also click the checkbox for 'visible to members' - if you don't do this, you have to go to the django page to set it (ie its not changeable by in the front end)&lt;br /&gt;
&lt;br /&gt;
= MEMBERSHIP PROCESS- DISCUSSION =&lt;br /&gt;
ivan &amp;amp; anca working on this&lt;br /&gt;
&lt;br /&gt;
martin and ivan talked a bit about this 2026-01-06:&lt;br /&gt;
* subscription statuses can be: active (currently paying) / inactive (not paying)&lt;br /&gt;
* member status can be: active (currently a member) / inactive (not a member, but possibly still paying as a dono or something) / new (unsure, maybe we use this as 'signed up, but still pending endorsements/waiting period? what's the order of operations?) / or account only (signed up but not paying/no payment info in MM)&lt;br /&gt;
&lt;br /&gt;
* 2026-02-10&lt;br /&gt;
ivan and martin and nick did a truth table to figure out statuses:&lt;br /&gt;
&lt;br /&gt;
Membership Status / Subscription status&lt;br /&gt;
* Active / Active -&amp;gt; Member&lt;br /&gt;
* Active / Inactive -&amp;gt; Email to talk about payment (card error, payment lapse etc)&lt;br /&gt;
* Noob / Active -&amp;gt; Induction&lt;br /&gt;
* Noob / Inactive -&amp;gt; Induction&lt;br /&gt;
* Inactive / Active -&amp;gt; Supporter&lt;br /&gt;
* Inactive / Inactive -&amp;gt; Former Member&lt;br /&gt;
&lt;br /&gt;
=== I want to become a member!! Onboarding Steps ===&lt;br /&gt;
# Hang Out, attend an event, join lists, discord&lt;br /&gt;
# I Like this! - Fill out the Intent to Join Form!!!&lt;br /&gt;
# Attend the next meeting, and get endorsements&lt;br /&gt;
# Get a mentor!!&lt;br /&gt;
&lt;br /&gt;
=== Setup payment on Member Matters ===&lt;br /&gt;
# Create an account, verify via email&lt;br /&gt;
# I'm on Sudo Humans, what do I do?&lt;br /&gt;
# I use PayPal, or checks, or Bitcoin. What do I do?&lt;br /&gt;
&lt;br /&gt;
=== Get door access ===&lt;br /&gt;
# Get an email?&lt;br /&gt;
# How many door access systems will we have?&lt;br /&gt;
&lt;br /&gt;
=== Need to Setup, Immediate Actions ===&lt;br /&gt;
# Set up membership tiers&lt;br /&gt;
# Set up payment plans&lt;br /&gt;
&lt;br /&gt;
=== Pain points: We need to fix these issues ... later ===&lt;br /&gt;
# ''need to check for verification email from member matters''&lt;br /&gt;
# ''get access card process needs work''&lt;br /&gt;
# ''members can see each others activities on member matters''&lt;br /&gt;
# ''update welcome and alert emails''&lt;br /&gt;
# ''updating the amount someone is paying requires an admin to change it in django, there's no way for a user to do that, and also no corresponding vue card in the frontend''&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
# '' Contact Info (Constance Config) - some of that is still membermatters / defaults (notably the email!)&lt;br /&gt;
# '' Seems like some timedate setting is still configured to be DD/MM/YYYY somehow?&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13079</id>
		<title>Membermatters</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13079"/>
		<updated>2026-03-13T03:16:15Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* Pain points: We need to fix these issues ... later */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is the notes for the membermatters installation&lt;br /&gt;
&lt;br /&gt;
https://backers.sudoroom.org&lt;br /&gt;
&lt;br /&gt;
= to create a new user =&lt;br /&gt;
* https://backers.sudoroom.org/register&lt;br /&gt;
&lt;br /&gt;
= to check the logs from the docker instance =&lt;br /&gt;
* https://backers.sudoroom.org/logs/django.log&lt;br /&gt;
&lt;br /&gt;
= github =&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/db0724495a09731ec18db2ebe353931a08c256e2..d6ce52564e8ae64975690107efbc2f1907ac1fb8 the changes juul made to add sendmail as an option]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/d6ce52564e8ae64975690107efbc2f1907ac1fb8..00918eda47d88d090c29c976410ae8036579d7ea the changes rechner and jake made to build our docker for postgres]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/tree/sudoroom we are using the sudoroom branch in our docker]&lt;br /&gt;
* we also need to edit frontend/src/i18n/en-AU/index.ts to change &amp;quot;mobile number&amp;quot; to &amp;quot;Phone Number (or X)&amp;quot; (it builds to /usr/src/app/frontend/dist/spa/assets/index.*.js )&lt;br /&gt;
* we are working on mounting the docker image with git on the server, so we can make changes to production and try them&lt;br /&gt;
* we should set up a schedule for rebasing in changes from upstream, then shoving our changes back on top. then we can deploy to docker directly from our github fork&lt;br /&gt;
&lt;br /&gt;
= we are not spam =&lt;br /&gt;
* emails sent by this system for people to validate their account, or reset their password, are important&lt;br /&gt;
* emails are being accepted by gmail (for now) but not by some other platforms, and maybe not for some gmail users?&lt;br /&gt;
* we should look for ways to find out why the emails are rejected by some servers&lt;br /&gt;
* we probably need to format the emails with plaintext and MIME to make them look normal to spam checkers&lt;br /&gt;
* Our server is postfix based, but yeah, postfix has very good logging on exactly what happens to each message.  Though you as the sender can't know if it went into spam, only if it got outright rejected.&lt;br /&gt;
* emails to an MIT address were rejected by Microsoft: &amp;quot;Access denied, banned sending IP [198.199.116.180]. To request removal from this list please visit https://sender.office.com/ and follow the directions&amp;quot; and then Sean followed the directions and asked them to unblock our IP address&lt;br /&gt;
* we need to setup monitoring of emails that were outright rejected, and take action each time.  Dealing with emails marked as spam will be more challenging unless people have access to the spam filter information on their receiving end.&lt;br /&gt;
* we need to encourage more and people to sign up to the new system as we make progress, AFTER setting up rejection monitoring&lt;br /&gt;
&lt;br /&gt;
= certbot =&lt;br /&gt;
* juul used pipx to install, and then had to manually make a systemd job to check it twice a day&lt;br /&gt;
&lt;br /&gt;
= Help us build and test =&lt;br /&gt;
* prioritized bugs: https://github.com/orgs/sudoroom/projects/1/views/1&lt;br /&gt;
* submit a bug: https://github.com/sudoroom/MemberMatters/issues&lt;br /&gt;
== Making a dev environment ==&lt;br /&gt;
(this assumes you already have git installed and docker setup!)&lt;br /&gt;
# `cd` to a directory you want to put the repo&lt;br /&gt;
# `git clone https://github.com/sudoroom/MemberMatters.git`&lt;br /&gt;
# `git checkout -b branch-name` to make a new branch based of the default (sudoroom)&lt;br /&gt;
# `touch /usr/app/django.log` (this is where the logs will go, and not creating it as a file seemed to create it as a dir which docker hated)&lt;br /&gt;
# 'echo &amp;quot;MM_ENV=Development&amp;quot; &amp;gt; ./docker/.env`  - I am not sure if this needs to go into the docker directory, or just exist? .env files are .gitignored anyway, but it looks like this is used by docker to set some environment vars in the docker-compose.yml&lt;br /&gt;
# `cd ./docker`&lt;br /&gt;
# `docker compose pull` (this make take a while)&lt;br /&gt;
# `docker compose up -d` to start your docker image&lt;br /&gt;
# `docker ps` will list your running containers processes that are created by the docker yaml file&lt;br /&gt;
# `docker stop $(docker ps -q)` will stop all the containers by doing `docker stop` on all of the running containers (the -q flag lists by ID)&lt;br /&gt;
&lt;br /&gt;
== Some in-progress notetaking ==&lt;br /&gt;
# doing all that, and then going to localhost:8000 takes me to the BMS login page instead of sudoroom's. possibly, since on my setup i ran `docker pull membermatters/membermatters` initially before following the rest of those setups, that is what broke it - i would think that the config files (the database?) would supercede that&lt;br /&gt;
# there is also a dev.env file at the top of the repo that might be worth checking out. possible you could `docker run --env_file /path/to/dev.env` and it would use that env instead of the one in the [https://github.com/sudoroom/MemberMatters/blob/481e4bc8f4a3f614e05fcc98af74c9380c7a05a2/docker/docker-compose.yml#L33 docker-compose.yml] ? I don't know if there is a `docker compose` equivalent, need to keep poking at that&lt;br /&gt;
&lt;br /&gt;
some updates:&lt;br /&gt;
RechnerFox made a github action to update prod from a staging instance after that was [https://github.com/sudoroom/MemberMatters/commit/88529eec2418afd56302e7deaa4ccf2b3471aa88 added by jake]&lt;br /&gt;
2026-01-28: Martin and Nicholas did some work hacking on the vps to backup, delete, and recreate the database so we could start from scratch. This required doing a pg_dump of the existing db, and then entering the postgres docker container with exec, using pgsl -U membermatters. Then we renamed the existing database, and then went back to the [https://membermatters.org/en/latest/GETTING_STARTED.html getting started page of the mm docs and picking up after the &amp;quot;docker start&amp;quot; commands to load the initial data to the database.&lt;br /&gt;
&lt;br /&gt;
Then Martin added himself and Judy, both times it threw errors because the email wasn't setup. MM says you need postmark, but in our fork we have code to get around that, but requires the postmark api key to be blank and the email default to be changed.&lt;br /&gt;
2026-01-30: Jake did those two fixes and confirmed he got a password reset email!&lt;br /&gt;
2026-02-05: Martin double confirmed email setup by sending a welcome email to himself and started trying to configure the logos, which he got from looking at the old mm email when it was setup and seeing what url was embedded in that email.&lt;br /&gt;
&lt;br /&gt;
Django logs are doing a bunch of Warnings about not finding various /api stuff?&lt;br /&gt;
Logo changes aren't loading to the page :( Looks like it is attempting to load but no dice. Confirmed a matching format (png) and square size within favicon specs when linking to one from the wiki's logo page, and then linked to the old one but neither seem to be taking. --- Possible this is still due to all the Not Found /api stuff?&lt;br /&gt;
&lt;br /&gt;
Nicholas suggested that was just some scrapers or bots hitting the page, tested with him trying to load /api/nicksun and that also showed in the logs the same warning.&lt;br /&gt;
&lt;br /&gt;
Site Logo worked! Martin and Nicholas poked around more with it, and the favicon doesn't seem to be used anywhere except emails? But doing a rectangular image for the logo works! It's one of the logos from the wiki - possible we should switch it to a WP upload for speed, not sure how much that matters.&lt;br /&gt;
&lt;br /&gt;
== Currently ( 2026-02-07 ) ==&lt;br /&gt;
Martin added two payment plans and tested one and put in his card and it worked! Got an email and got to next steps&lt;br /&gt;
= Membership Plan Setup =&lt;br /&gt;
== Adding a Membership Payment Plan ==&lt;br /&gt;
Left Side Bar &amp;gt; Admin Tools &amp;gt; Membership Plan &amp;gt; Plus Icon, make sure you click the checkbox for 'visible to members'&lt;br /&gt;
&lt;br /&gt;
== Adding a new tier to the existing payment plans ==&lt;br /&gt;
Click the plan you made, click ''that'' plus icon.&lt;br /&gt;
The popup window shows up, Name your plan, CHANGE THE CURRENCY TO USD, and then add the amount&lt;br /&gt;
Notes:  Make sure you also click the checkbox for 'visible to members' - if you don't do this, you have to go to the django page to set it (ie its not changeable by in the front end)&lt;br /&gt;
&lt;br /&gt;
= MEMBERSHIP PROCESS- DISCUSSION =&lt;br /&gt;
ivan &amp;amp; anca working on this&lt;br /&gt;
&lt;br /&gt;
martin and ivan talked a bit about this 2026-01-06:&lt;br /&gt;
* subscription statuses can be: active (currently paying) / inactive (not paying)&lt;br /&gt;
* member status can be: active (currently a member) / inactive (not a member, but possibly still paying as a dono or something) / new (unsure, maybe we use this as 'signed up, but still pending endorsements/waiting period? what's the order of operations?) / or account only (signed up but not paying/no payment info in MM)&lt;br /&gt;
&lt;br /&gt;
* 2026-02-10&lt;br /&gt;
ivan and martin and nick did a truth table to figure out statuses:&lt;br /&gt;
&lt;br /&gt;
Membership Status / Subscription status&lt;br /&gt;
* Active / Active -&amp;gt; Member&lt;br /&gt;
* Active / Inactive -&amp;gt; Email to talk about payment (card error, payment lapse etc)&lt;br /&gt;
* Noob / Active -&amp;gt; Induction&lt;br /&gt;
* Noob / Inactive -&amp;gt; Induction&lt;br /&gt;
* Inactive / Active -&amp;gt; Supporter&lt;br /&gt;
* Inactive / Inactive -&amp;gt; Former Member&lt;br /&gt;
&lt;br /&gt;
=== I want to become a member!! Onboarding Steps ===&lt;br /&gt;
# Hang Out, attend an event, join lists, discord&lt;br /&gt;
# I Like this! - Fill out the Intent to Join Form!!!&lt;br /&gt;
# Attend the next meeting, and get endorsements&lt;br /&gt;
# Get a mentor!!&lt;br /&gt;
&lt;br /&gt;
=== Setup payment on Member Matters ===&lt;br /&gt;
# Create an account, verify via email&lt;br /&gt;
# I'm on Sudo Humans, what do I do?&lt;br /&gt;
# I use PayPal, or checks, or Bitcoin. What do I do?&lt;br /&gt;
&lt;br /&gt;
=== Get door access ===&lt;br /&gt;
# Get an email?&lt;br /&gt;
# How many door access systems will we have?&lt;br /&gt;
&lt;br /&gt;
=== Need to Setup, Immediate Actions ===&lt;br /&gt;
# Set up membership tiers&lt;br /&gt;
# Set up payment plans&lt;br /&gt;
&lt;br /&gt;
=== Pain points: We need to fix these issues ... later ===&lt;br /&gt;
# ''need to check for verification email from member matters''&lt;br /&gt;
# ''get access card process needs work''&lt;br /&gt;
# ''members can see each others activities on member matters''&lt;br /&gt;
# ''update welcome and alert emails''&lt;br /&gt;
# ''updating the amount someone is paying requires an admin to change it in django, there's no way for a user to do that, and also no corresponding vue card in the frontend''&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
# '' Contact Info (Constance Config) - some of that is still membermatters / defaults (notably the email!)&lt;br /&gt;
# '' Where's the place to change the Membership Plan Tier? Martin tried to do this and didn't find an easy way to do it&lt;br /&gt;
# '' Seems like some timedate setting is still configured to be DD/MM/YYY somehow?&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13078</id>
		<title>Membermatters</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13078"/>
		<updated>2026-03-11T07:06:52Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* Making a dev environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is the notes for the membermatters installation&lt;br /&gt;
&lt;br /&gt;
https://backers.sudoroom.org&lt;br /&gt;
&lt;br /&gt;
= to create a new user =&lt;br /&gt;
* https://backers.sudoroom.org/register&lt;br /&gt;
&lt;br /&gt;
= to check the logs from the docker instance =&lt;br /&gt;
* https://backers.sudoroom.org/logs/django.log&lt;br /&gt;
&lt;br /&gt;
= github =&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/db0724495a09731ec18db2ebe353931a08c256e2..d6ce52564e8ae64975690107efbc2f1907ac1fb8 the changes juul made to add sendmail as an option]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/d6ce52564e8ae64975690107efbc2f1907ac1fb8..00918eda47d88d090c29c976410ae8036579d7ea the changes rechner and jake made to build our docker for postgres]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/tree/sudoroom we are using the sudoroom branch in our docker]&lt;br /&gt;
* we also need to edit frontend/src/i18n/en-AU/index.ts to change &amp;quot;mobile number&amp;quot; to &amp;quot;Phone Number (or X)&amp;quot; (it builds to /usr/src/app/frontend/dist/spa/assets/index.*.js )&lt;br /&gt;
* we are working on mounting the docker image with git on the server, so we can make changes to production and try them&lt;br /&gt;
* we should set up a schedule for rebasing in changes from upstream, then shoving our changes back on top. then we can deploy to docker directly from our github fork&lt;br /&gt;
&lt;br /&gt;
= we are not spam =&lt;br /&gt;
* emails sent by this system for people to validate their account, or reset their password, are important&lt;br /&gt;
* emails are being accepted by gmail (for now) but not by some other platforms, and maybe not for some gmail users?&lt;br /&gt;
* we should look for ways to find out why the emails are rejected by some servers&lt;br /&gt;
* we probably need to format the emails with plaintext and MIME to make them look normal to spam checkers&lt;br /&gt;
* Our server is postfix based, but yeah, postfix has very good logging on exactly what happens to each message.  Though you as the sender can't know if it went into spam, only if it got outright rejected.&lt;br /&gt;
* emails to an MIT address were rejected by Microsoft: &amp;quot;Access denied, banned sending IP [198.199.116.180]. To request removal from this list please visit https://sender.office.com/ and follow the directions&amp;quot; and then Sean followed the directions and asked them to unblock our IP address&lt;br /&gt;
* we need to setup monitoring of emails that were outright rejected, and take action each time.  Dealing with emails marked as spam will be more challenging unless people have access to the spam filter information on their receiving end.&lt;br /&gt;
* we need to encourage more and people to sign up to the new system as we make progress, AFTER setting up rejection monitoring&lt;br /&gt;
&lt;br /&gt;
= certbot =&lt;br /&gt;
* juul used pipx to install, and then had to manually make a systemd job to check it twice a day&lt;br /&gt;
&lt;br /&gt;
= Help us build and test =&lt;br /&gt;
* prioritized bugs: https://github.com/orgs/sudoroom/projects/1/views/1&lt;br /&gt;
* submit a bug: https://github.com/sudoroom/MemberMatters/issues&lt;br /&gt;
== Making a dev environment ==&lt;br /&gt;
(this assumes you already have git installed and docker setup!)&lt;br /&gt;
# `cd` to a directory you want to put the repo&lt;br /&gt;
# `git clone https://github.com/sudoroom/MemberMatters.git`&lt;br /&gt;
# `git checkout -b branch-name` to make a new branch based of the default (sudoroom)&lt;br /&gt;
# `touch /usr/app/django.log` (this is where the logs will go, and not creating it as a file seemed to create it as a dir which docker hated)&lt;br /&gt;
# 'echo &amp;quot;MM_ENV=Development&amp;quot; &amp;gt; ./docker/.env`  - I am not sure if this needs to go into the docker directory, or just exist? .env files are .gitignored anyway, but it looks like this is used by docker to set some environment vars in the docker-compose.yml&lt;br /&gt;
# `cd ./docker`&lt;br /&gt;
# `docker compose pull` (this make take a while)&lt;br /&gt;
# `docker compose up -d` to start your docker image&lt;br /&gt;
# `docker ps` will list your running containers processes that are created by the docker yaml file&lt;br /&gt;
# `docker stop $(docker ps -q)` will stop all the containers by doing `docker stop` on all of the running containers (the -q flag lists by ID)&lt;br /&gt;
&lt;br /&gt;
== Some in-progress notetaking ==&lt;br /&gt;
# doing all that, and then going to localhost:8000 takes me to the BMS login page instead of sudoroom's. possibly, since on my setup i ran `docker pull membermatters/membermatters` initially before following the rest of those setups, that is what broke it - i would think that the config files (the database?) would supercede that&lt;br /&gt;
# there is also a dev.env file at the top of the repo that might be worth checking out. possible you could `docker run --env_file /path/to/dev.env` and it would use that env instead of the one in the [https://github.com/sudoroom/MemberMatters/blob/481e4bc8f4a3f614e05fcc98af74c9380c7a05a2/docker/docker-compose.yml#L33 docker-compose.yml] ? I don't know if there is a `docker compose` equivalent, need to keep poking at that&lt;br /&gt;
&lt;br /&gt;
some updates:&lt;br /&gt;
RechnerFox made a github action to update prod from a staging instance after that was [https://github.com/sudoroom/MemberMatters/commit/88529eec2418afd56302e7deaa4ccf2b3471aa88 added by jake]&lt;br /&gt;
2026-01-28: Martin and Nicholas did some work hacking on the vps to backup, delete, and recreate the database so we could start from scratch. This required doing a pg_dump of the existing db, and then entering the postgres docker container with exec, using pgsl -U membermatters. Then we renamed the existing database, and then went back to the [https://membermatters.org/en/latest/GETTING_STARTED.html getting started page of the mm docs and picking up after the &amp;quot;docker start&amp;quot; commands to load the initial data to the database.&lt;br /&gt;
&lt;br /&gt;
Then Martin added himself and Judy, both times it threw errors because the email wasn't setup. MM says you need postmark, but in our fork we have code to get around that, but requires the postmark api key to be blank and the email default to be changed.&lt;br /&gt;
2026-01-30: Jake did those two fixes and confirmed he got a password reset email!&lt;br /&gt;
2026-02-05: Martin double confirmed email setup by sending a welcome email to himself and started trying to configure the logos, which he got from looking at the old mm email when it was setup and seeing what url was embedded in that email.&lt;br /&gt;
&lt;br /&gt;
Django logs are doing a bunch of Warnings about not finding various /api stuff?&lt;br /&gt;
Logo changes aren't loading to the page :( Looks like it is attempting to load but no dice. Confirmed a matching format (png) and square size within favicon specs when linking to one from the wiki's logo page, and then linked to the old one but neither seem to be taking. --- Possible this is still due to all the Not Found /api stuff?&lt;br /&gt;
&lt;br /&gt;
Nicholas suggested that was just some scrapers or bots hitting the page, tested with him trying to load /api/nicksun and that also showed in the logs the same warning.&lt;br /&gt;
&lt;br /&gt;
Site Logo worked! Martin and Nicholas poked around more with it, and the favicon doesn't seem to be used anywhere except emails? But doing a rectangular image for the logo works! It's one of the logos from the wiki - possible we should switch it to a WP upload for speed, not sure how much that matters.&lt;br /&gt;
&lt;br /&gt;
== Currently ( 2026-02-07 ) ==&lt;br /&gt;
Martin added two payment plans and tested one and put in his card and it worked! Got an email and got to next steps&lt;br /&gt;
= Membership Plan Setup =&lt;br /&gt;
== Adding a Membership Payment Plan ==&lt;br /&gt;
Left Side Bar &amp;gt; Admin Tools &amp;gt; Membership Plan &amp;gt; Plus Icon, make sure you click the checkbox for 'visible to members'&lt;br /&gt;
&lt;br /&gt;
== Adding a new tier to the existing payment plans ==&lt;br /&gt;
Click the plan you made, click ''that'' plus icon.&lt;br /&gt;
The popup window shows up, Name your plan, CHANGE THE CURRENCY TO USD, and then add the amount&lt;br /&gt;
Notes:  Make sure you also click the checkbox for 'visible to members' - if you don't do this, you have to go to the django page to set it (ie its not changeable by in the front end)&lt;br /&gt;
&lt;br /&gt;
= MEMBERSHIP PROCESS- DISCUSSION =&lt;br /&gt;
ivan &amp;amp; anca working on this&lt;br /&gt;
&lt;br /&gt;
martin and ivan talked a bit about this 2026-01-06:&lt;br /&gt;
* subscription statuses can be: active (currently paying) / inactive (not paying)&lt;br /&gt;
* member status can be: active (currently a member) / inactive (not a member, but possibly still paying as a dono or something) / new (unsure, maybe we use this as 'signed up, but still pending endorsements/waiting period? what's the order of operations?) / or account only (signed up but not paying/no payment info in MM)&lt;br /&gt;
&lt;br /&gt;
* 2026-02-10&lt;br /&gt;
ivan and martin and nick did a truth table to figure out statuses:&lt;br /&gt;
&lt;br /&gt;
Membership Status / Subscription status&lt;br /&gt;
* Active / Active -&amp;gt; Member&lt;br /&gt;
* Active / Inactive -&amp;gt; Email to talk about payment (card error, payment lapse etc)&lt;br /&gt;
* Noob / Active -&amp;gt; Induction&lt;br /&gt;
* Noob / Inactive -&amp;gt; Induction&lt;br /&gt;
* Inactive / Active -&amp;gt; Supporter&lt;br /&gt;
* Inactive / Inactive -&amp;gt; Former Member&lt;br /&gt;
&lt;br /&gt;
=== I want to become a member!! Onboarding Steps ===&lt;br /&gt;
# Hang Out, attend an event, join lists, discord&lt;br /&gt;
# I Like this! - Fill out the Intent to Join Form!!!&lt;br /&gt;
# Attend the next meeting, and get endorsements&lt;br /&gt;
# Get a mentor!!&lt;br /&gt;
&lt;br /&gt;
=== Setup payment on Member Matters ===&lt;br /&gt;
# Create an account, verify via email&lt;br /&gt;
# I'm on Sudo Humans, what do I do?&lt;br /&gt;
# I use PayPal, or checks, or Bitcoin. What do I do?&lt;br /&gt;
&lt;br /&gt;
=== Get door access ===&lt;br /&gt;
# Get an email?&lt;br /&gt;
# How many door access systems will we have?&lt;br /&gt;
&lt;br /&gt;
=== Need to Setup, Immediate Actions ===&lt;br /&gt;
# Set up membership tiers&lt;br /&gt;
# Set up payment plans&lt;br /&gt;
&lt;br /&gt;
=== Pain points: We need to fix these issues ... later ===&lt;br /&gt;
# ''need to check for verification email from member matters''&lt;br /&gt;
# ''get access card process needs work''&lt;br /&gt;
# ''members can see each others activities on member matters''&lt;br /&gt;
# ''update welcome and alert emails''&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
# '' Contact Info (Constance Config) - some of that is still membermatters / defaults (notably the email!)&lt;br /&gt;
# '' Where's the place to change the Membership Plan Tier? Martin tried to do this and didn't find an easy way to do it&lt;br /&gt;
# '' Seems like some timedate setting is still configured to be DD/MM/YYY somehow?&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=3D_Modeling&amp;diff=13075</id>
		<title>3D Modeling</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=3D_Modeling&amp;diff=13075"/>
		<updated>2026-03-02T17:33:28Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* Slicing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 3D Models =&lt;br /&gt;
&lt;br /&gt;
We love open-source and use open-source 3D modelling software (mostly Blender) to create everything from spare parts to be 3D printed to virtual reality utopias featuring walkable streets in Oakland to cool museum exhibits on science targeting adults.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 3D Models for 3D-Printing =&lt;br /&gt;
&lt;br /&gt;
This page is about creating models for 3D-printing.  At Sudoroom we have a [[Type_A_Machine|Type-A Machine]] 3D printer, and a [[TAZ_4|TAZ 4]] 3D printer, but models can be made by anyone anywhere, just like word documents don't have to be made on a machine attached to a 2D printer.&lt;br /&gt;
[[File:Taz4-3d-printer.jpg|thumb|left|link=TAZ_4]]&lt;br /&gt;
[[File:Type-A-Machines-series-1-3d-printer.png|thumb|link=Type_A_Machine]]&lt;br /&gt;
== STL Models ==&lt;br /&gt;
&lt;br /&gt;
STL files are wireframe/polygonal representations of a 3D model. There's a number of ways to get them:&lt;br /&gt;
&lt;br /&gt;
=== Write OpenSCAD (recommended) ===&lt;br /&gt;
&lt;br /&gt;
[http://www.openscad.org/ OpenSCAD] is a programming language for describing 3D shapes. You write code on the left, and it renders your model on the right. Then you can export an STL file. It has many benefits:&lt;br /&gt;
* free, open source, cross-platform&lt;br /&gt;
* keyboard-centric, less mouse dragging&lt;br /&gt;
* your models are deterministic&lt;br /&gt;
* you can easily track your changes with git&lt;br /&gt;
* the [https://en.wikibooks.org/wiki/OpenSCAD_User_Manual manual] is pretty straightforward&lt;br /&gt;
* there's even a [http://openjscad.org/ browser javascript version]!&lt;br /&gt;
&lt;br /&gt;
But the software still has a long way to go. Some annoying things about OpenSCAD:&lt;br /&gt;
* single-threaded rendering, so complex models take a long time&lt;br /&gt;
* no persistent cache, so if you close it, you must render all over again&lt;br /&gt;
* GUI blocks on rendering, so if your render takes too long you must kill it (save often)&lt;br /&gt;
* volatile syntax - for example, child() is deprecated in git master, but the alternative children() is not even supported by latest stable (2013.06)&lt;br /&gt;
&lt;br /&gt;
=== Use other modeling software ===&lt;br /&gt;
&lt;br /&gt;
* [http://blender.org Blender] is open-source and popular, and Sudoroom members have been offering workshops on how to use it!&lt;br /&gt;
* Google Sketchup is exceptionally easy to use because they profit when you map buildings for them.&lt;br /&gt;
* [http://tinkercad.com Tinkercad] (in Google Chrome)&lt;br /&gt;
&lt;br /&gt;
=== Download them ===&lt;br /&gt;
&lt;br /&gt;
You can find premade STL files:&lt;br /&gt;
* On [http://thingiverse.com/ Thingiverse]&lt;br /&gt;
* On the [smb://space/sudoroom%20public%20data/Projects/3DPrinting local file server]&lt;br /&gt;
* On sudoroom's [https://github.com/sudoroom github] ([https://github.com/sudoroom/magnets magnets], [https://github.com/sudoroom/sudo-blocks blocks], etc)&lt;br /&gt;
* [https://grabcad.com/ GrabCAD] is requires a login but has interesting stuff&lt;br /&gt;
&lt;br /&gt;
== Slicing ==&lt;br /&gt;
&lt;br /&gt;
3D Printers don't understand OpenSCAD or STL. They understand an extension of gcode, which is a decades-old language which sends direct instructions such as &amp;quot;heat to 100 degrees, move here, do this, move there, do that, cool down&amp;quot;. In order to print a model you have to turn it into a series of 2D layers or &amp;quot;slices&amp;quot;, using a program called a &amp;quot;slicer&amp;quot;. Slicers output gcode. They need to be configured for a particular printer, with settings such as melting tempurature, bed size, fill style, overhang compensation, etc. Examples of slicing software:&lt;br /&gt;
* [[OrcaSlicer|Orca Slicer]] (installed on the [[Wasp.local|Sudoroom 3d printing desktop computer]]&lt;br /&gt;
* Ultimaker Cura (installed on the [[Wasp.local|Sudoroom 3d printing desktop computer]]&lt;br /&gt;
* Slic3r&lt;br /&gt;
* KISSlicer&lt;br /&gt;
* Skeinforge&lt;br /&gt;
&lt;br /&gt;
Slicing for a particular machine such as our [[Type_A_Machine|Type-A]] should be documented at its own page.&lt;br /&gt;
&lt;br /&gt;
[[Category:3DPrinting]]&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Creality_Ender-3_S1&amp;diff=13074</id>
		<title>Creality Ender-3 S1</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Creality_Ender-3_S1&amp;diff=13074"/>
		<updated>2026-03-02T17:33:11Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
'''Printer Name:''' Creality Ender-3 S1&lt;br /&gt;
&lt;br /&gt;
'''Preferred Slicer:''' [[OrcaSlicer|Orca Slicer]]&lt;br /&gt;
&lt;br /&gt;
'''Nozzle:''' 0.4mm&lt;br /&gt;
&lt;br /&gt;
'''Bed Type:''' Textured PEI Plate&lt;br /&gt;
&lt;br /&gt;
'''Filament:''' PLA&lt;br /&gt;
&lt;br /&gt;
'''Octoprint:''' http://100.64.64.197/ (this will only work if you're on the local network / wifi)&lt;br /&gt;
&lt;br /&gt;
==Status==&lt;br /&gt;
Working as of 11/19/2025&lt;br /&gt;
&lt;br /&gt;
==Printing Tips==&lt;br /&gt;
Use 0.20 Standard slice profile&lt;br /&gt;
&lt;br /&gt;
==Documentation==&lt;br /&gt;
* [https://wiki.creality.com/en/ender-series Creality Wiki]&lt;br /&gt;
&lt;br /&gt;
==Maintenance Log==&lt;br /&gt;
Levelled bed on 11/19/2025&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=3D_Modeling&amp;diff=13073</id>
		<title>3D Modeling</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=3D_Modeling&amp;diff=13073"/>
		<updated>2026-03-02T17:32:36Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* Slicing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 3D Models =&lt;br /&gt;
&lt;br /&gt;
We love open-source and use open-source 3D modelling software (mostly Blender) to create everything from spare parts to be 3D printed to virtual reality utopias featuring walkable streets in Oakland to cool museum exhibits on science targeting adults.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 3D Models for 3D-Printing =&lt;br /&gt;
&lt;br /&gt;
This page is about creating models for 3D-printing.  At Sudoroom we have a [[Type_A_Machine|Type-A Machine]] 3D printer, and a [[TAZ_4|TAZ 4]] 3D printer, but models can be made by anyone anywhere, just like word documents don't have to be made on a machine attached to a 2D printer.&lt;br /&gt;
[[File:Taz4-3d-printer.jpg|thumb|left|link=TAZ_4]]&lt;br /&gt;
[[File:Type-A-Machines-series-1-3d-printer.png|thumb|link=Type_A_Machine]]&lt;br /&gt;
== STL Models ==&lt;br /&gt;
&lt;br /&gt;
STL files are wireframe/polygonal representations of a 3D model. There's a number of ways to get them:&lt;br /&gt;
&lt;br /&gt;
=== Write OpenSCAD (recommended) ===&lt;br /&gt;
&lt;br /&gt;
[http://www.openscad.org/ OpenSCAD] is a programming language for describing 3D shapes. You write code on the left, and it renders your model on the right. Then you can export an STL file. It has many benefits:&lt;br /&gt;
* free, open source, cross-platform&lt;br /&gt;
* keyboard-centric, less mouse dragging&lt;br /&gt;
* your models are deterministic&lt;br /&gt;
* you can easily track your changes with git&lt;br /&gt;
* the [https://en.wikibooks.org/wiki/OpenSCAD_User_Manual manual] is pretty straightforward&lt;br /&gt;
* there's even a [http://openjscad.org/ browser javascript version]!&lt;br /&gt;
&lt;br /&gt;
But the software still has a long way to go. Some annoying things about OpenSCAD:&lt;br /&gt;
* single-threaded rendering, so complex models take a long time&lt;br /&gt;
* no persistent cache, so if you close it, you must render all over again&lt;br /&gt;
* GUI blocks on rendering, so if your render takes too long you must kill it (save often)&lt;br /&gt;
* volatile syntax - for example, child() is deprecated in git master, but the alternative children() is not even supported by latest stable (2013.06)&lt;br /&gt;
&lt;br /&gt;
=== Use other modeling software ===&lt;br /&gt;
&lt;br /&gt;
* [http://blender.org Blender] is open-source and popular, and Sudoroom members have been offering workshops on how to use it!&lt;br /&gt;
* Google Sketchup is exceptionally easy to use because they profit when you map buildings for them.&lt;br /&gt;
* [http://tinkercad.com Tinkercad] (in Google Chrome)&lt;br /&gt;
&lt;br /&gt;
=== Download them ===&lt;br /&gt;
&lt;br /&gt;
You can find premade STL files:&lt;br /&gt;
* On [http://thingiverse.com/ Thingiverse]&lt;br /&gt;
* On the [smb://space/sudoroom%20public%20data/Projects/3DPrinting local file server]&lt;br /&gt;
* On sudoroom's [https://github.com/sudoroom github] ([https://github.com/sudoroom/magnets magnets], [https://github.com/sudoroom/sudo-blocks blocks], etc)&lt;br /&gt;
* [https://grabcad.com/ GrabCAD] is requires a login but has interesting stuff&lt;br /&gt;
&lt;br /&gt;
== Slicing ==&lt;br /&gt;
&lt;br /&gt;
3D Printers don't understand OpenSCAD or STL. They understand an extension of gcode, which is a decades-old language which sends direct instructions such as &amp;quot;heat to 100 degrees, move here, do this, move there, do that, cool down&amp;quot;. In order to print a model you have to turn it into a series of 2D layers or &amp;quot;slices&amp;quot;, using a program called a &amp;quot;slicer&amp;quot;. Slicers output gcode. They need to be configured for a particular printer, with settings such as melting tempurature, bed size, fill style, overhang compensation, etc. Examples of slicing software:&lt;br /&gt;
* [[OrcaSlicer|OrcaSlicer]] (installed on the [[Wasp.local|Sudoroom 3d printing desktop computer]]&lt;br /&gt;
* Ultimaker Cura (installed on the [[Wasp.local|Sudoroom 3d printing desktop computer]]&lt;br /&gt;
* Slic3r&lt;br /&gt;
* KISSlicer&lt;br /&gt;
* Skeinforge&lt;br /&gt;
&lt;br /&gt;
Slicing for a particular machine such as our [[Type_A_Machine|Type-A]] should be documented at its own page.&lt;br /&gt;
&lt;br /&gt;
[[Category:3DPrinting]]&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13072</id>
		<title>Membermatters</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13072"/>
		<updated>2026-03-02T02:35:49Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* Pain points: We need to fix these issues ... later */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is the notes for the membermatters installation&lt;br /&gt;
&lt;br /&gt;
https://backers.sudoroom.org&lt;br /&gt;
&lt;br /&gt;
= to create a new user =&lt;br /&gt;
* https://backers.sudoroom.org/register&lt;br /&gt;
&lt;br /&gt;
= to check the logs from the docker instance =&lt;br /&gt;
* https://backers.sudoroom.org/logs/django.log&lt;br /&gt;
&lt;br /&gt;
= github =&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/db0724495a09731ec18db2ebe353931a08c256e2..d6ce52564e8ae64975690107efbc2f1907ac1fb8 the changes juul made to add sendmail as an option]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/d6ce52564e8ae64975690107efbc2f1907ac1fb8..00918eda47d88d090c29c976410ae8036579d7ea the changes rechner and jake made to build our docker for postgres]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/tree/sudoroom we are using the sudoroom branch in our docker]&lt;br /&gt;
* we also need to edit frontend/src/i18n/en-AU/index.ts to change &amp;quot;mobile number&amp;quot; to &amp;quot;Phone Number (or X)&amp;quot; (it builds to /usr/src/app/frontend/dist/spa/assets/index.*.js )&lt;br /&gt;
* we are working on mounting the docker image with git on the server, so we can make changes to production and try them&lt;br /&gt;
* we should set up a schedule for rebasing in changes from upstream, then shoving our changes back on top. then we can deploy to docker directly from our github fork&lt;br /&gt;
&lt;br /&gt;
= we are not spam =&lt;br /&gt;
* emails sent by this system for people to validate their account, or reset their password, are important&lt;br /&gt;
* emails are being accepted by gmail (for now) but not by some other platforms, and maybe not for some gmail users?&lt;br /&gt;
* we should look for ways to find out why the emails are rejected by some servers&lt;br /&gt;
* we probably need to format the emails with plaintext and MIME to make them look normal to spam checkers&lt;br /&gt;
* Our server is postfix based, but yeah, postfix has very good logging on exactly what happens to each message.  Though you as the sender can't know if it went into spam, only if it got outright rejected.&lt;br /&gt;
* emails to an MIT address were rejected by Microsoft: &amp;quot;Access denied, banned sending IP [198.199.116.180]. To request removal from this list please visit https://sender.office.com/ and follow the directions&amp;quot; and then Sean followed the directions and asked them to unblock our IP address&lt;br /&gt;
* we need to setup monitoring of emails that were outright rejected, and take action each time.  Dealing with emails marked as spam will be more challenging unless people have access to the spam filter information on their receiving end.&lt;br /&gt;
* we need to encourage more and people to sign up to the new system as we make progress, AFTER setting up rejection monitoring&lt;br /&gt;
&lt;br /&gt;
= certbot =&lt;br /&gt;
* juul used pipx to install, and then had to manually make a systemd job to check it twice a day&lt;br /&gt;
&lt;br /&gt;
= Help us build and test =&lt;br /&gt;
* prioritized bugs: https://github.com/orgs/sudoroom/projects/1/views/1&lt;br /&gt;
* submit a bug: https://github.com/sudoroom/MemberMatters/issues&lt;br /&gt;
== Making a dev environment ==&lt;br /&gt;
(this assumes you already have git installed and docker setup!)&lt;br /&gt;
# `cd` to a directory you want to put the repo&lt;br /&gt;
# `git clone https://github.com/sudoroom/MemberMatters.git`&lt;br /&gt;
# `git checkout -b branch-name` to make a new branch based of the default (sudoroom)&lt;br /&gt;
# `touch /usr/app/django.log` (this is where the logs will go, and not creating it as a file seemed to create it as a dir which docker hated)&lt;br /&gt;
# 'echo &amp;quot;MM_ENV=Development&amp;quot; &amp;gt; ./docker/.env`  - I am not sure if this needs to go into the docker directory, or just exist? .env files are .gitignored anyway, but it looks like this is used by docker to set some environment vars in the docker-compose.yml&lt;br /&gt;
# `cd ./docker`&lt;br /&gt;
# `docker pull` (this make take a while)&lt;br /&gt;
# `docker compose up -d` to start your docker image&lt;br /&gt;
# `docker ps` will list your running containers processes that are created by the docker yaml file&lt;br /&gt;
# `docker stop $(docker ps -q)` will stop all the containers by doing `docker stop` on all of the running containers (the -q flag lists by ID)&lt;br /&gt;
&lt;br /&gt;
== Some in-progress notetaking ==&lt;br /&gt;
# doing all that, and then going to localhost:8000 takes me to the BMS login page instead of sudoroom's. possibly, since on my setup i ran `docker pull membermatters/membermatters` initially before following the rest of those setups, that is what broke it - i would think that the config files (the database?) would supercede that&lt;br /&gt;
# there is also a dev.env file at the top of the repo that might be worth checking out. possible you could `docker run --env_file /path/to/dev.env` and it would use that env instead of the one in the [https://github.com/sudoroom/MemberMatters/blob/481e4bc8f4a3f614e05fcc98af74c9380c7a05a2/docker/docker-compose.yml#L33 docker-compose.yml] ? I don't know if there is a `docker compose` equivalent, need to keep poking at that&lt;br /&gt;
&lt;br /&gt;
some updates:&lt;br /&gt;
RechnerFox made a github action to update prod from a staging instance after that was [https://github.com/sudoroom/MemberMatters/commit/88529eec2418afd56302e7deaa4ccf2b3471aa88 added by jake]&lt;br /&gt;
2026-01-28: Martin and Nicholas did some work hacking on the vps to backup, delete, and recreate the database so we could start from scratch. This required doing a pg_dump of the existing db, and then entering the postgres docker container with exec, using pgsl -U membermatters. Then we renamed the existing database, and then went back to the [https://membermatters.org/en/latest/GETTING_STARTED.html getting started page of the mm docs and picking up after the &amp;quot;docker start&amp;quot; commands to load the initial data to the database.&lt;br /&gt;
&lt;br /&gt;
Then Martin added himself and Judy, both times it threw errors because the email wasn't setup. MM says you need postmark, but in our fork we have code to get around that, but requires the postmark api key to be blank and the email default to be changed.&lt;br /&gt;
2026-01-30: Jake did those two fixes and confirmed he got a password reset email!&lt;br /&gt;
2026-02-05: Martin double confirmed email setup by sending a welcome email to himself and started trying to configure the logos, which he got from looking at the old mm email when it was setup and seeing what url was embedded in that email.&lt;br /&gt;
&lt;br /&gt;
Django logs are doing a bunch of Warnings about not finding various /api stuff?&lt;br /&gt;
Logo changes aren't loading to the page :( Looks like it is attempting to load but no dice. Confirmed a matching format (png) and square size within favicon specs when linking to one from the wiki's logo page, and then linked to the old one but neither seem to be taking. --- Possible this is still due to all the Not Found /api stuff?&lt;br /&gt;
&lt;br /&gt;
Nicholas suggested that was just some scrapers or bots hitting the page, tested with him trying to load /api/nicksun and that also showed in the logs the same warning.&lt;br /&gt;
&lt;br /&gt;
Site Logo worked! Martin and Nicholas poked around more with it, and the favicon doesn't seem to be used anywhere except emails? But doing a rectangular image for the logo works! It's one of the logos from the wiki - possible we should switch it to a WP upload for speed, not sure how much that matters.&lt;br /&gt;
&lt;br /&gt;
== Currently ( 2026-02-07 ) ==&lt;br /&gt;
Martin added two payment plans and tested one and put in his card and it worked! Got an email and got to next steps&lt;br /&gt;
= Membership Plan Setup =&lt;br /&gt;
== Adding a Membership Payment Plan ==&lt;br /&gt;
Left Side Bar &amp;gt; Admin Tools &amp;gt; Membership Plan &amp;gt; Plus Icon, make sure you click the checkbox for 'visible to members'&lt;br /&gt;
&lt;br /&gt;
== Adding a new tier to the existing payment plans ==&lt;br /&gt;
Click the plan you made, click ''that'' plus icon.&lt;br /&gt;
The popup window shows up, Name your plan, CHANGE THE CURRENCY TO USD, and then add the amount&lt;br /&gt;
Notes:  Make sure you also click the checkbox for 'visible to members' - if you don't do this, you have to go to the django page to set it (ie its not changeable by in the front end)&lt;br /&gt;
&lt;br /&gt;
= MEMBERSHIP PROCESS- DISCUSSION =&lt;br /&gt;
ivan &amp;amp; anca working on this&lt;br /&gt;
&lt;br /&gt;
martin and ivan talked a bit about this 2026-01-06:&lt;br /&gt;
* subscription statuses can be: active (currently paying) / inactive (not paying)&lt;br /&gt;
* member status can be: active (currently a member) / inactive (not a member, but possibly still paying as a dono or something) / new (unsure, maybe we use this as 'signed up, but still pending endorsements/waiting period? what's the order of operations?) / or account only (signed up but not paying/no payment info in MM)&lt;br /&gt;
&lt;br /&gt;
* 2026-02-10&lt;br /&gt;
ivan and martin and nick did a truth table to figure out statuses:&lt;br /&gt;
&lt;br /&gt;
Membership Status / Subscription status&lt;br /&gt;
* Active / Active -&amp;gt; Member&lt;br /&gt;
* Active / Inactive -&amp;gt; Email to talk about payment (card error, payment lapse etc)&lt;br /&gt;
* Noob / Active -&amp;gt; Induction&lt;br /&gt;
* Noob / Inactive -&amp;gt; Induction&lt;br /&gt;
* Inactive / Active -&amp;gt; Supporter&lt;br /&gt;
* Inactive / Inactive -&amp;gt; Former Member&lt;br /&gt;
&lt;br /&gt;
=== I want to become a member!! Onboarding Steps ===&lt;br /&gt;
# Hang Out, attend an event, join lists, discord&lt;br /&gt;
# I Like this! - Fill out the Intent to Join Form!!!&lt;br /&gt;
# Attend the next meeting, and get endorsements&lt;br /&gt;
# Get a mentor!!&lt;br /&gt;
&lt;br /&gt;
=== Setup payment on Member Matters ===&lt;br /&gt;
# Create an account, verify via email&lt;br /&gt;
# I'm on Sudo Humans, what do I do?&lt;br /&gt;
# I use PayPal, or checks, or Bitcoin. What do I do?&lt;br /&gt;
&lt;br /&gt;
=== Get door access ===&lt;br /&gt;
# Get an email?&lt;br /&gt;
# How many door access systems will we have?&lt;br /&gt;
&lt;br /&gt;
=== Need to Setup, Immediate Actions ===&lt;br /&gt;
# Set up membership tiers&lt;br /&gt;
# Set up payment plans&lt;br /&gt;
&lt;br /&gt;
=== Pain points: We need to fix these issues ... later ===&lt;br /&gt;
# ''need to check for verification email from member matters''&lt;br /&gt;
# ''get access card process needs work''&lt;br /&gt;
# ''members can see each others activities on member matters''&lt;br /&gt;
# ''update welcome and alert emails''&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
# '' Contact Info (Constance Config) - some of that is still membermatters / defaults (notably the email!)&lt;br /&gt;
# '' Where's the place to change the Membership Plan Tier? Martin tried to do this and didn't find an easy way to do it&lt;br /&gt;
# '' Seems like some timedate setting is still configured to be DD/MM/YYY somehow?&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13071</id>
		<title>Membermatters</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Membermatters&amp;diff=13071"/>
		<updated>2026-03-02T02:34:46Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: /* TODO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is the notes for the membermatters installation&lt;br /&gt;
&lt;br /&gt;
https://backers.sudoroom.org&lt;br /&gt;
&lt;br /&gt;
= to create a new user =&lt;br /&gt;
* https://backers.sudoroom.org/register&lt;br /&gt;
&lt;br /&gt;
= to check the logs from the docker instance =&lt;br /&gt;
* https://backers.sudoroom.org/logs/django.log&lt;br /&gt;
&lt;br /&gt;
= github =&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/db0724495a09731ec18db2ebe353931a08c256e2..d6ce52564e8ae64975690107efbc2f1907ac1fb8 the changes juul made to add sendmail as an option]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/compare/d6ce52564e8ae64975690107efbc2f1907ac1fb8..00918eda47d88d090c29c976410ae8036579d7ea the changes rechner and jake made to build our docker for postgres]&lt;br /&gt;
* [https://github.com/sudoroom/MemberMatters/tree/sudoroom we are using the sudoroom branch in our docker]&lt;br /&gt;
* we also need to edit frontend/src/i18n/en-AU/index.ts to change &amp;quot;mobile number&amp;quot; to &amp;quot;Phone Number (or X)&amp;quot; (it builds to /usr/src/app/frontend/dist/spa/assets/index.*.js )&lt;br /&gt;
* we are working on mounting the docker image with git on the server, so we can make changes to production and try them&lt;br /&gt;
* we should set up a schedule for rebasing in changes from upstream, then shoving our changes back on top. then we can deploy to docker directly from our github fork&lt;br /&gt;
&lt;br /&gt;
= we are not spam =&lt;br /&gt;
* emails sent by this system for people to validate their account, or reset their password, are important&lt;br /&gt;
* emails are being accepted by gmail (for now) but not by some other platforms, and maybe not for some gmail users?&lt;br /&gt;
* we should look for ways to find out why the emails are rejected by some servers&lt;br /&gt;
* we probably need to format the emails with plaintext and MIME to make them look normal to spam checkers&lt;br /&gt;
* Our server is postfix based, but yeah, postfix has very good logging on exactly what happens to each message.  Though you as the sender can't know if it went into spam, only if it got outright rejected.&lt;br /&gt;
* emails to an MIT address were rejected by Microsoft: &amp;quot;Access denied, banned sending IP [198.199.116.180]. To request removal from this list please visit https://sender.office.com/ and follow the directions&amp;quot; and then Sean followed the directions and asked them to unblock our IP address&lt;br /&gt;
* we need to setup monitoring of emails that were outright rejected, and take action each time.  Dealing with emails marked as spam will be more challenging unless people have access to the spam filter information on their receiving end.&lt;br /&gt;
* we need to encourage more and people to sign up to the new system as we make progress, AFTER setting up rejection monitoring&lt;br /&gt;
&lt;br /&gt;
= certbot =&lt;br /&gt;
* juul used pipx to install, and then had to manually make a systemd job to check it twice a day&lt;br /&gt;
&lt;br /&gt;
= Help us build and test =&lt;br /&gt;
* prioritized bugs: https://github.com/orgs/sudoroom/projects/1/views/1&lt;br /&gt;
* submit a bug: https://github.com/sudoroom/MemberMatters/issues&lt;br /&gt;
== Making a dev environment ==&lt;br /&gt;
(this assumes you already have git installed and docker setup!)&lt;br /&gt;
# `cd` to a directory you want to put the repo&lt;br /&gt;
# `git clone https://github.com/sudoroom/MemberMatters.git`&lt;br /&gt;
# `git checkout -b branch-name` to make a new branch based of the default (sudoroom)&lt;br /&gt;
# `touch /usr/app/django.log` (this is where the logs will go, and not creating it as a file seemed to create it as a dir which docker hated)&lt;br /&gt;
# 'echo &amp;quot;MM_ENV=Development&amp;quot; &amp;gt; ./docker/.env`  - I am not sure if this needs to go into the docker directory, or just exist? .env files are .gitignored anyway, but it looks like this is used by docker to set some environment vars in the docker-compose.yml&lt;br /&gt;
# `cd ./docker`&lt;br /&gt;
# `docker pull` (this make take a while)&lt;br /&gt;
# `docker compose up -d` to start your docker image&lt;br /&gt;
# `docker ps` will list your running containers processes that are created by the docker yaml file&lt;br /&gt;
# `docker stop $(docker ps -q)` will stop all the containers by doing `docker stop` on all of the running containers (the -q flag lists by ID)&lt;br /&gt;
&lt;br /&gt;
== Some in-progress notetaking ==&lt;br /&gt;
# doing all that, and then going to localhost:8000 takes me to the BMS login page instead of sudoroom's. possibly, since on my setup i ran `docker pull membermatters/membermatters` initially before following the rest of those setups, that is what broke it - i would think that the config files (the database?) would supercede that&lt;br /&gt;
# there is also a dev.env file at the top of the repo that might be worth checking out. possible you could `docker run --env_file /path/to/dev.env` and it would use that env instead of the one in the [https://github.com/sudoroom/MemberMatters/blob/481e4bc8f4a3f614e05fcc98af74c9380c7a05a2/docker/docker-compose.yml#L33 docker-compose.yml] ? I don't know if there is a `docker compose` equivalent, need to keep poking at that&lt;br /&gt;
&lt;br /&gt;
some updates:&lt;br /&gt;
RechnerFox made a github action to update prod from a staging instance after that was [https://github.com/sudoroom/MemberMatters/commit/88529eec2418afd56302e7deaa4ccf2b3471aa88 added by jake]&lt;br /&gt;
2026-01-28: Martin and Nicholas did some work hacking on the vps to backup, delete, and recreate the database so we could start from scratch. This required doing a pg_dump of the existing db, and then entering the postgres docker container with exec, using pgsl -U membermatters. Then we renamed the existing database, and then went back to the [https://membermatters.org/en/latest/GETTING_STARTED.html getting started page of the mm docs and picking up after the &amp;quot;docker start&amp;quot; commands to load the initial data to the database.&lt;br /&gt;
&lt;br /&gt;
Then Martin added himself and Judy, both times it threw errors because the email wasn't setup. MM says you need postmark, but in our fork we have code to get around that, but requires the postmark api key to be blank and the email default to be changed.&lt;br /&gt;
2026-01-30: Jake did those two fixes and confirmed he got a password reset email!&lt;br /&gt;
2026-02-05: Martin double confirmed email setup by sending a welcome email to himself and started trying to configure the logos, which he got from looking at the old mm email when it was setup and seeing what url was embedded in that email.&lt;br /&gt;
&lt;br /&gt;
Django logs are doing a bunch of Warnings about not finding various /api stuff?&lt;br /&gt;
Logo changes aren't loading to the page :( Looks like it is attempting to load but no dice. Confirmed a matching format (png) and square size within favicon specs when linking to one from the wiki's logo page, and then linked to the old one but neither seem to be taking. --- Possible this is still due to all the Not Found /api stuff?&lt;br /&gt;
&lt;br /&gt;
Nicholas suggested that was just some scrapers or bots hitting the page, tested with him trying to load /api/nicksun and that also showed in the logs the same warning.&lt;br /&gt;
&lt;br /&gt;
Site Logo worked! Martin and Nicholas poked around more with it, and the favicon doesn't seem to be used anywhere except emails? But doing a rectangular image for the logo works! It's one of the logos from the wiki - possible we should switch it to a WP upload for speed, not sure how much that matters.&lt;br /&gt;
&lt;br /&gt;
== Currently ( 2026-02-07 ) ==&lt;br /&gt;
Martin added two payment plans and tested one and put in his card and it worked! Got an email and got to next steps&lt;br /&gt;
= Membership Plan Setup =&lt;br /&gt;
== Adding a Membership Payment Plan ==&lt;br /&gt;
Left Side Bar &amp;gt; Admin Tools &amp;gt; Membership Plan &amp;gt; Plus Icon, make sure you click the checkbox for 'visible to members'&lt;br /&gt;
&lt;br /&gt;
== Adding a new tier to the existing payment plans ==&lt;br /&gt;
Click the plan you made, click ''that'' plus icon.&lt;br /&gt;
The popup window shows up, Name your plan, CHANGE THE CURRENCY TO USD, and then add the amount&lt;br /&gt;
Notes:  Make sure you also click the checkbox for 'visible to members' - if you don't do this, you have to go to the django page to set it (ie its not changeable by in the front end)&lt;br /&gt;
&lt;br /&gt;
= MEMBERSHIP PROCESS- DISCUSSION =&lt;br /&gt;
ivan &amp;amp; anca working on this&lt;br /&gt;
&lt;br /&gt;
martin and ivan talked a bit about this 2026-01-06:&lt;br /&gt;
* subscription statuses can be: active (currently paying) / inactive (not paying)&lt;br /&gt;
* member status can be: active (currently a member) / inactive (not a member, but possibly still paying as a dono or something) / new (unsure, maybe we use this as 'signed up, but still pending endorsements/waiting period? what's the order of operations?) / or account only (signed up but not paying/no payment info in MM)&lt;br /&gt;
&lt;br /&gt;
* 2026-02-10&lt;br /&gt;
ivan and martin and nick did a truth table to figure out statuses:&lt;br /&gt;
&lt;br /&gt;
Membership Status / Subscription status&lt;br /&gt;
* Active / Active -&amp;gt; Member&lt;br /&gt;
* Active / Inactive -&amp;gt; Email to talk about payment (card error, payment lapse etc)&lt;br /&gt;
* Noob / Active -&amp;gt; Induction&lt;br /&gt;
* Noob / Inactive -&amp;gt; Induction&lt;br /&gt;
* Inactive / Active -&amp;gt; Supporter&lt;br /&gt;
* Inactive / Inactive -&amp;gt; Former Member&lt;br /&gt;
&lt;br /&gt;
=== I want to become a member!! Onboarding Steps ===&lt;br /&gt;
# Hang Out, attend an event, join lists, discord&lt;br /&gt;
# I Like this! - Fill out the Intent to Join Form!!!&lt;br /&gt;
# Attend the next meeting, and get endorsements&lt;br /&gt;
# Get a mentor!!&lt;br /&gt;
&lt;br /&gt;
=== Setup payment on Member Matters ===&lt;br /&gt;
# Create an account, verify via email&lt;br /&gt;
# I'm on Sudo Humans, what do I do?&lt;br /&gt;
# I use PayPal, or checks, or Bitcoin. What do I do?&lt;br /&gt;
&lt;br /&gt;
=== Get door access ===&lt;br /&gt;
# Get an email?&lt;br /&gt;
# How many door access systems will we have?&lt;br /&gt;
&lt;br /&gt;
=== Need to Setup, Immediate Actions ===&lt;br /&gt;
# Set up membership tiers&lt;br /&gt;
# Set up payment plans&lt;br /&gt;
&lt;br /&gt;
=== Pain points: We need to fix these issues ... later ===&lt;br /&gt;
# ''need to check for verification email from member matters''&lt;br /&gt;
# ''free accounts need billing info''&lt;br /&gt;
# ''get access card process needs work''&lt;br /&gt;
# ''members can see each others activities on member matters''&lt;br /&gt;
# ''need to edit dashboard, landing page'' - Where do we want the post signup page to go to?&lt;br /&gt;
# ''update welcome and alert emails''&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
# '' Contact Info (Constance Config) - some of that is still membermatters / defaults (notably the email!)&lt;br /&gt;
# '' Where's the place to change the Membership Plan Tier? Martin tried to do this and didn't find an easy way to do it&lt;br /&gt;
# '' Seems like some timedate setting is still configured to be DD/MM/YYY somehow?&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=OrcaSlicer&amp;diff=13070</id>
		<title>OrcaSlicer</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=OrcaSlicer&amp;diff=13070"/>
		<updated>2026-03-02T01:56:26Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: Info about the OrcaSlicer program&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview == &lt;br /&gt;
The recommended slicing program for the Creality 3d printers. It is loaded on the PC next to the laser cutter.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
[https://www.orcaslicer.com/ official site]&lt;br /&gt;
&lt;br /&gt;
== General How To ==&lt;br /&gt;
* Create a new project.&lt;br /&gt;
* Select which printer to use (the ones we have should be configured already as presets)&lt;br /&gt;
* Import your .stl files (File &amp;gt; Import)&lt;br /&gt;
* Manipulate your objects so they fit on the bed and aren't overlapping or hanging off. Orca should yell at you if this is the case.&lt;br /&gt;
* At the top, click Preview, it should start slicing (the process of splitting your model into layers to print)&lt;br /&gt;
* You may need to enable supports for some objects if there are overhangs.&lt;br /&gt;
* It should show you a preview, with a list at the right showing how long each type of print will take. Notably, if you're printing multiple objects at once and there is a high amount of 'travel time,' sometimes this can be reduced by moving pieces closer together.&lt;br /&gt;
* Click export gcode and save it to the computer.&lt;br /&gt;
* Transfer it to the micro sdcard (the reader is the blue cable+dongle taped to the top of the screen) and take it to your printer to print.&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Creality_Ender-3_Pro&amp;diff=13069</id>
		<title>Creality Ender-3 Pro</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Creality_Ender-3_Pro&amp;diff=13069"/>
		<updated>2026-03-02T01:47:13Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
[[File:Ender 3 pro.jpg|thumb|Ender 3 Pro|link=Creality Ender-3 Pro]]&lt;br /&gt;
&lt;br /&gt;
'''Printer Name:''' Creality Ender-3 Pro&lt;br /&gt;
&lt;br /&gt;
'''Preferred Slicer:''' [https://sudoroom.org/wiki/OrcaSlicer Orca Slicer] &lt;br /&gt;
&lt;br /&gt;
'''Nozzle:''' 0.4mm&lt;br /&gt;
&lt;br /&gt;
'''Bed Type:''' Smooth Plate&lt;br /&gt;
&lt;br /&gt;
'''Filament:''' PLA&lt;br /&gt;
&lt;br /&gt;
==Status==&lt;br /&gt;
Working as of 02/11/2025&lt;br /&gt;
&lt;br /&gt;
==Printing Tips==&lt;br /&gt;
* If prints are not sticking to the printer plate, try cleaning the bed with alcohol before making any adjustments to the printer or your file.&lt;br /&gt;
* Recommend to use 0.20mm layer height in print profile.&lt;br /&gt;
* This printer is not networked for direct printing from a computer. Bring a micro SD card to transfer your print files from computer to printer.&lt;br /&gt;
&lt;br /&gt;
==Documentation==&lt;br /&gt;
* You can use Creality's Ender series [https://wiki.creality.com/en/ender-series  wiki] for basic troubleshooting. However, Creality does not offer a specific wiki for the 3 pro model.&lt;br /&gt;
* Creality's [https://www.creality.com/products/ender-3-pro-3d-printer product page] for Ender 3 Pro.&lt;br /&gt;
&lt;br /&gt;
==Maintenance Log==&lt;br /&gt;
Leveled bed on 11/19/2025&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Matrix&amp;diff=13066</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Matrix&amp;diff=13066"/>
		<updated>2026-02-25T06:55:32Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;where?&lt;br /&gt;
matrix.sudoroom.org&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
todo matrix synapse&lt;br /&gt;
&lt;br /&gt;
install the synapse admin web ui (so we don't have to manually make admin api calls to administer the server lol)&lt;br /&gt;
&lt;br /&gt;
get federation working (test at: https://federationtester.matrix.org/#matrix.sudoroom.org )&lt;br /&gt;
&lt;br /&gt;
for video calls: Please ask the administrator of your homeserver (matrix.sudoroom.org) to configure a TURN server in order for calls to work reliably.&lt;br /&gt;
&lt;br /&gt;
email lol???????&lt;br /&gt;
&lt;br /&gt;
allow people to create their own accounts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(some options)&lt;br /&gt;
* (lxc) https://github.com/bashclub/zamba-lxc-toolbox/tree/main/src/matrix&lt;br /&gt;
* (debian packages) https://packages.matrix.org/debian/ --- we did this one!!&lt;br /&gt;
** https://element-hq.github.io/synapse/latest/setup/installation.html&lt;br /&gt;
** https://willlewis.co.uk/blog/posts/run-your-own-matrix-server-guide/&lt;br /&gt;
* (docker) https://hub.docker.com/r/matrixdotorg/synapse/ &lt;br /&gt;
** https://linuxhandbook.com/install-matrix-synapse-docker/&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Matrix&amp;diff=13065</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Matrix&amp;diff=13065"/>
		<updated>2026-02-25T06:54:56Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# where?&lt;br /&gt;
matrix.sudoroom.org&lt;br /&gt;
&lt;br /&gt;
# todo matrix synapse&lt;br /&gt;
&lt;br /&gt;
install the synapse admin web ui (so we don't have to manually make admin api calls to administer the server lol)&lt;br /&gt;
&lt;br /&gt;
get federation working (test at: https://federationtester.matrix.org/#matrix.sudoroom.org )&lt;br /&gt;
&lt;br /&gt;
for video calls: Please ask the administrator of your homeserver (matrix.sudoroom.org) to configure a TURN server in order for calls to work reliably.&lt;br /&gt;
&lt;br /&gt;
email lol???????&lt;br /&gt;
&lt;br /&gt;
allow people to create their own accounts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(some options)&lt;br /&gt;
* (lxc) https://github.com/bashclub/zamba-lxc-toolbox/tree/main/src/matrix&lt;br /&gt;
* (debian packages) https://packages.matrix.org/debian/ --- we did this one!!&lt;br /&gt;
** https://element-hq.github.io/synapse/latest/setup/installation.html&lt;br /&gt;
** https://willlewis.co.uk/blog/posts/run-your-own-matrix-server-guide/&lt;br /&gt;
* (docker) https://hub.docker.com/r/matrixdotorg/synapse/ &lt;br /&gt;
** https://linuxhandbook.com/install-matrix-synapse-docker/&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Matrix&amp;diff=13064</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Matrix&amp;diff=13064"/>
		<updated>2026-02-25T06:51:53Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;todo matrix synapse&lt;br /&gt;
&lt;br /&gt;
install the synapse admin web ui (so we don't have to manually make admin api calls to administer the server lol)&lt;br /&gt;
&lt;br /&gt;
get federation working (test at: https://federationtester.matrix.org/#matrix.sudoroom.org )&lt;br /&gt;
&lt;br /&gt;
for video calls: Please ask the administrator of your homeserver (matrix.sudoroom.org) to configure a TURN server in order for calls to work reliably.&lt;br /&gt;
&lt;br /&gt;
email lol???????&lt;br /&gt;
&lt;br /&gt;
allow people to create their own accounts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(some options)&lt;br /&gt;
* (lxc) https://github.com/bashclub/zamba-lxc-toolbox/tree/main/src/matrix&lt;br /&gt;
* (debian packages) https://packages.matrix.org/debian/ --- we did this one!!&lt;br /&gt;
** https://element-hq.github.io/synapse/latest/setup/installation.html&lt;br /&gt;
** https://willlewis.co.uk/blog/posts/run-your-own-matrix-server-guide/&lt;br /&gt;
* (docker) https://hub.docker.com/r/matrixdotorg/synapse/ &lt;br /&gt;
** https://linuxhandbook.com/install-matrix-synapse-docker/&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Matrix&amp;diff=13063</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Matrix&amp;diff=13063"/>
		<updated>2026-02-25T06:51:37Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;todo matrix synapse&lt;br /&gt;
&lt;br /&gt;
install the synapse admin web ui (so we don't have to manually make admin api calls to administer the server lol)&lt;br /&gt;
get federation working (test at: https://federationtester.matrix.org/#matrix.sudoroom.org )&lt;br /&gt;
for video calls: Please ask the administrator of your homeserver (matrix.sudoroom.org) to configure a TURN server in order for calls to work reliably.&lt;br /&gt;
email lol???????&lt;br /&gt;
allow people to create their own accounts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(some options)&lt;br /&gt;
* (lxc) https://github.com/bashclub/zamba-lxc-toolbox/tree/main/src/matrix&lt;br /&gt;
* (debian packages) https://packages.matrix.org/debian/ --- we did this one!!&lt;br /&gt;
** https://element-hq.github.io/synapse/latest/setup/installation.html&lt;br /&gt;
** https://willlewis.co.uk/blog/posts/run-your-own-matrix-server-guide/&lt;br /&gt;
* (docker) https://hub.docker.com/r/matrixdotorg/synapse/ &lt;br /&gt;
** https://linuxhandbook.com/install-matrix-synapse-docker/&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Matrix&amp;diff=13017</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Matrix&amp;diff=13017"/>
		<updated>2026-02-13T15:25:35Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(some options)&lt;br /&gt;
* (lxc) https://github.com/bashclub/zamba-lxc-toolbox/tree/main/src/matrix&lt;br /&gt;
* (debian packages) https://packages.matrix.org/debian/&lt;br /&gt;
** https://element-hq.github.io/synapse/latest/setup/installation.html&lt;br /&gt;
** https://willlewis.co.uk/blog/posts/run-your-own-matrix-server-guide/&lt;br /&gt;
* (docker) https://hub.docker.com/r/matrixdotorg/synapse/ &lt;br /&gt;
** https://linuxhandbook.com/install-matrix-synapse-docker/&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Sharks&amp;diff=13016</id>
		<title>Sharks</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Sharks&amp;diff=13016"/>
		<updated>2026-02-13T15:23:16Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Proxmox host machine for outward-facing web services such as Matrix. Called sharks because sharks like [https://www.youtube.com/watch?v=1ex7uTQf4bQ eating cables] for the internet (among other things)&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
== Proxmox 8 ==&lt;br /&gt;
&lt;br /&gt;
First, install Debian 13 Trixie. Then install Proxmox 8. https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_13_Trixie&lt;br /&gt;
&lt;br /&gt;
static ip: 100.64.64.74&lt;br /&gt;
&lt;br /&gt;
== List of Containers ==&lt;br /&gt;
&lt;br /&gt;
[[Matrix]]&lt;br /&gt;
&lt;br /&gt;
== List of VMs ==&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
	<entry>
		<id>https://sudoroom.org/mediawiki/index.php?title=Sharks&amp;diff=13015</id>
		<title>Sharks</title>
		<link rel="alternate" type="text/html" href="https://sudoroom.org/mediawiki/index.php?title=Sharks&amp;diff=13015"/>
		<updated>2026-02-13T15:22:17Z</updated>

		<summary type="html">&lt;p&gt;Indoorjetpacks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Proxmox host machine for outward-facing web services such as Matrix. Called sharks because sharks like [https://www.youtube.com/watch?v=1ex7uTQf4bQ eating internet cables]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
== Proxmox 8 ==&lt;br /&gt;
&lt;br /&gt;
First, install Debian 13 Trixie. Then install Proxmox 8. https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_13_Trixie&lt;br /&gt;
&lt;br /&gt;
static ip: 100.64.64.74&lt;br /&gt;
&lt;br /&gt;
== List of Containers ==&lt;br /&gt;
&lt;br /&gt;
[[Matrix]]&lt;br /&gt;
&lt;br /&gt;
== List of VMs ==&lt;/div&gt;</summary>
		<author><name>Indoorjetpacks</name></author>
	</entry>
</feed>