10BitWorks uses RFID cards for member access to the building. The system has three parts: card provisioning, door controllers, and the member database.
New or replacement cards are written on the Cardmaker Pi. The Pi runs a Flask application that reads a member’s email via the Squarespace API, encodes it onto an RFID card, and writes the card.
Two Raspberry Pis read cards at the front door:
When a card is presented, the controller reads the obfuscated email, contacts the Door Admin Panel at 10.7.1.244:8000, and unlocks the door if the member is active.
The Door Admin Panel runs in LXC 204 (door1) on Zelda. It hosts the Django database that maps cards to members and decides whether access is granted.
Stored card data is obfuscated with ROT13. The payload written to the card is:
<encoded-uid><rot13(normalized-email)>
where the normalized email is the member’s email with all non-alphanumeric characters removed and lowercased (re.sub(r'\W+', '', email).lower()).
The controller decodes the email and sends it to the panel as the lookup key.
The Door Admin Panel endpoint returns:
{"AccessStatus": "", "DateOfLastPayment": "YYYY-MM-DD", "MemberStatus": ""}
The controller applies these rules in order:
MemberStatus = TempBan or PermaBan → denyMemberStatus = Sponsored → grantDateOfLastPayment is within the last 35 daysThe panel’s member cache is populated from Squarespace orders. If a member pays outside Squarespace, the panel must be updated manually or the reader will reject the card even if the member is current.
See Front Door Pi Controllers for log locations, one-liner commands, and how to check a specific member’s status directly.