Repository navigation
v2026.1
What's New in v2026.1
First release of OpenSeat: a self-hosted booking manager for non-profit
associations, covering the whole path from a public membership application to the
booking list that reaches the association the night before an event.
✨ Features
Membership intake
- Public application form: a six-step wizard that collects the applicant, the
statute and fee acceptance, the privacy notice and the image consents, ending in
a signed application sent to the board. - Applications on behalf of others: apply for oneself, for a minor child, or
for a person under guardianship, with the parental declaration recorded when it
applies. - Resumable drafts: answers are saved as they are given, a link brings the
applicant back, and a reminder goes out before a draft expires.
Events and bookings
- Member register and event bookings: the register with CSV export, and
bookings tied to the events that produced them. - Booking an event is applying to join (#15): the statute makes attendance a
members-only matter, so booking opens the application form, tied to the event
with a foreign key. - Confirm by mail, cancel from the same link: the booking is confirmed by mail
and can be called off from the link it arrived on; one mail for one act. - A booking stays a booking until confirmed into a member: the board decides
when an application becomes a register entry. - Recover a booking with the address alone: enter the address used to book and
a link comes back by mail, without ever revealing whether that address booked. - Event pages that lead with Book: pictures on events, breadcrumbs home, and
past events dropped from the home page.
Public site
- Home page carrying the association's own content and its open dates.
- Two-column footer signed with vendor and version.
Administration
- The admin themed from the association row: name, logo and palette come from
the database and reach every page, the login included. - Editor role: staff access limited to events, for whoever runs the calendar
without touching the register.
Operations
- Media on a volume, backups to object storage: nightly dump of database and
media, retention purge, and removal of media nothing references.
🐛 Bug Fixes
- Production settings behind Coolify: the app now boots correctly behind the
reverse proxy. pg_dumpinstalled: the nightly backup was failing silently while the media
backup kept succeeding.- Tailwind binary bundled: the container no longer downloads ~120 MB on first
boot, which was risking a health check timeout. - Migrated the association Meta options the migration state had drifted from.
.envcomments kept off the value line.
🛠️ Maintenance
- CI compiles the translation catalogs (#31):
.mofiles are gitignored, so
the runner only ever had the.posources and every test asserting an Italian
string saw English. Seven tests had been failing on every push. - Deploy gated on the suite (#32): a green run on
maincalls Coolify's deploy
webhook, instead of Coolify building whatever lands on the branch. - Flaky booking-link test fixed (#33): it compared a timestamped signed token
against one regenerated at assert time, and failed whenever the clock ticked
over a second between the two.
📦 Dependencies
- Alpine.js 3.15.12 → 3.16.2
- ruff 0.16.2 → 0.16.4, pytest-django 4.13.0 → 4.14.0, time-machine 3.3.1 → 3.4.0,
sqlparse 0.5.5 → 0.6.0, and the pre-commit hooks alongside them