Skip to content

v2026.1

Choose a tag to compare

@applewebbo applewebbo released this 22 Aug 05:40
· 87 commits to main since this release

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_dump installed: 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.
  • .env comments kept off the value line.

🛠️ Maintenance

  • CI compiles the translation catalogs (#31): .mo files are gitignored, so
    the runner only ever had the .po sources 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 main calls 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