Skip to content

Releases: applewebbo/openseat

v2026.3

Choose a tag to compare

@applewebbo applewebbo released this 19 Sep 14:33

What's New in v2026.3

✨ Features

  • Association logo in HTML mail (#73): Booking and application confirmation emails now embed the association's logo inline, and the intake mails (receipt, resume link, second-parent request) get a proper HTML alternative alongside their plain-text body.
  • Plain-language "What's new" page (#75): The footer's version number now links to a public, non-technical changelog instead of the raw GitHub commit list.
  • Typeable date fields (#69): Birth-date and event-date fields across the site's own forms now use a typeable dd/mm/yyyy mask instead of the native mobile date picker, with a calendar button kept as a fallback.
  • Minor's address autofill in check-in (#74): Adding a minor's booking by hand at check-in now copies the address from whoever signs the request, the same way the public application form already does.
  • Privacy notice read-to-the-end gate: The application wizard now holds the "Continue" button until the privacy notice has actually been scrolled to its end.
  • Reworded check-in and application choices (for #70): Subject-type choices in the check-in add-booking modal and the application wizard's opening step now read in third/first person consistently.
  • Disaster-recovery restore drill (for #1): A new ENVIRONMENT=restore management command restores the latest backup into a disposable local database, to prove backups are actually restorable.

🐛 Bug Fixes

  • Booking inline delete crash (#77): Deleting a booking from an event's inline formset in the admin no longer crashes with AttributeError — deleted_objects is now read after the formset is saved, not before.
  • Editor-added bookings lost contact info (#72): A booking added by hand from the event's admin page now keeps its contact name/email/phone, sends the same confirmation mail as a public booking, and refreshes a re-booked member's contact details instead of keeping a stale address.
  • Association logo in dark mode (#71): The logo now sits on a white backing so it stays visible against a dark background, and a demo logo is seeded for fresh installs.
  • Dark-mode contrast on wizard summary pages: Several intake templates used a fixed light background color that washed out in dark mode; they now use theme-aware surface tokens.

🚨 Tests

  • Silenced two django-import-export deprecation warnings coming from its own internals (#76).
  • Stopped pinning the "recent backup" fixture to a fixed calendar date.
  • Added the regression test that restores 100% coverage on the age-resolution branch introduced by #72.

🛠️ Maintenance

  • Updated Python dependencies, pre-commit hooks and Alpine.js to their latest versions.
  • Named backup files after the project and aligned dbbackup's own cleanup count with BACKUP_RETENTION_DAYS (for #1).
  • Generated the migration for the reworded choice labels (for #70).
  • Aligned the Dockerfile's Tailwind CLI version with what django-tailwind-cli expects, avoiding a ~120MB download at container boot.

📖 Full Changelog

v2026.2...v2026.3

v2026.2

Choose a tag to compare

@applewebbo applewebbo released this 30 Aug 11:40

What's New in 2026.2

✨ Features

  • Event creation from the frontend (#62): editors can now create an event without going through /admin/, and the event page grew a manage/view toggle with a tightened mobile layout.
  • Default event location and membership form (#65): new events prefill the location and the open membership form from the association's defaults, and rich-text help text now shows an Italian-aware word count.
  • Auto-generated, hidden slugs (#64): Association.slug and Event.slug are generated automatically on save and no longer editable or shown anywhere.
  • Estimated event duration (#66): the unused Event.ends_at timestamp is replaced by an optional duration_hours field, giving attendees a rough sense of length instead of an exact end time.
  • Collapsible navbar menu on mobile (#67): the "+ Evento" / "Account" / "Esci" links collapse behind a hamburger menu on narrow viewports and stay inline on wider screens.
  • Named sender and reply-to on outbound mail (for #68): every outbound email now carries the association's name in the From header and a real reply-to address, reducing the odds of landing in spam.

🐛 Bug Fixes

  • Fixed just issue-create passing the release-notes/issue body's file path as literal text instead of its content.

🚨 Tests

  • Added coverage for a senior editor's access to check-in management (for #62).

🛠️ Maintenance

  • Wired up django-devbar in dev and fixed N+1/duplicate queries on association, event and submission lookups (#61).
  • Fixed stale English fuzzy strings and dropped obsolete translations (#64).
  • Bumped dependencies and added coverage regression tests.

📚 Documentation

  • Documented the Coolify health check command and start period.

📖 Full Changelog

v2026.1.4...v2026.2

v2026.1.4

Choose a tag to compare

@applewebbo applewebbo released this 28 Aug 11:12

What's New in 2026.1.4

✨ Features

  • Coolify health check (#59): Added a /health/ endpoint (django-health-check) that checks only the database — the one dependency the web process needs to serve a request — so a broken migration or a crashed process fails the probe without also failing it on an unrelated Redis or mail hiccup. Always answers JSON, since Coolify's health check path field takes a bare path with no room for a ?format=json query string.
  • Device-driven dark theme and a shared navbar: The site now follows the visitor's OS light/dark preference. The association's brand colours get a dedicated dark-mode formula (lightened toward white instead of darkened toward black, so text stays legible on a dark background), and the logo/name/account header is now a single shared component reused across the home page, the booking/membership flow, and the account pages — so it looks and behaves the same everywhere instead of existing only on the home page.
  • Pastel label colours: just label-create now picks a colour at random from a fixed pastel palette instead of always reusing the same default, so release labels are easier to tell apart at a glance.

🐛 Bug Fixes

  • Coolify deploy webhook returning 405 (#58): The CI deploy job called Coolify's manual deploy webhook with a plain GET request; the endpoint only accepts POST, so the push to main on 2026-08-28 never triggered a deploy. Fixed by sending an explicit POST.
  • Missing/wrong Italian admin translations (#57): django-import-export's own Italian catalog left some admin strings untranslated ("Select all", the selection-count message) or copied from the wrong template ("will be imported" instead of "will be exported"). Overridden in this project's own catalog.
  • Missing thumbnails on past events: A missing closing > on two event card links in the home page was silently dropping their thumbnail <img> from the DOM, found while auditing the page for the dark-theme work.

📖 Full Changelog

v2026.1.3...v2026.1.4

v2026.1.3

Choose a tag to compare

@applewebbo applewebbo released this 28 Aug 06:43

What's New in v2026.1.3

✨ Features

  • Editor manual booking entry page (#47): Editors can now add a booking by hand from the check-in page, straight from a signed paper form — even while public bookings are closed past the automatic cutoff or once check-in is already in progress.
  • Reword the already-a-member link (#50): The public event page now asks "Have you already taken part in one of our events?" instead of "Already a member?" — matching how visitors actually think about their relationship with the association.
  • Import and export the member register from Django admin (#52): The register can now be imported and exported straight from the admin, in the 22-column external tracciato the association's other register-management app expects (CSV or XLSX). Import supports overwriting an existing member matched by tax code, or always appending as new.
  • Show past events to logged-in editors on the home page (#53): An "Archived events" section on the home page lets editors reach a past event to manage its bookings or export its members — public visitors keep seeing only upcoming events.
  • Export newly acquired members for a single event (#54): An "Esporta" button on the check-in page downloads, in CSV or XLSX, only the members who joined the register through that specific event — gated behind a new dedicated Editor+ group so export access stays separate from check-in duties.
  • Province and cascading comune selection on the application form (#55): The address sections of the public application form now offer a province dropdown and a comune dropdown scoped to it (via htmx), replacing free-text city entry, backed by a self-hosted, vendored ISTAT comuni dataset.
  • Autofill the minor's address from the applicant's (#56): When applying for a minor, the member's address fields are prefilled from the applicant's own address as soon as it is on file — still fully editable, with a green border marking what was copied until it is edited by hand.
  • Seed demo data with more register members (#51): seed_demo now creates around 50 standalone register members with varied join dates, plus ready-made editor and senior-editor test accounts, so exports can be exercised against a realistic register.

🐛 Bug Fixes

  • Seed a tax code for members acquired through an event (#54): Demo members created through an event booking now carry a tax code and address, matching what a real submission would produce.
  • Fill in missing/wrong Italian admin translations (#57): Several admin strings — the import/export summary, the register import's overwrite-or-append choice, and the admin filter sidebar — were showing up untranslated or with a copy-pasted wrong translation. The project's own locale catalog now overrides them with the correct Italian text.

🛠️ Maintenance

  • Updated Python dependencies and pre-commit hooks, and fixed the justfile's update_all recipe for prek's renamed auto-update → update subcommand.
  • Closed remaining branch-coverage gaps in events/views.py, restoring the release's 100% coverage gate.

📖 Full Changelog

v2026.1.2...v2026.1.3

v2026.1.2

Choose a tag to compare

@applewebbo applewebbo released this 26 Aug 07:13

What's New in v2026.1.2

✨ Features

  • Editor check-in toggle (#42): editors can now open check-in on an event straight from the event page, closing public bookings manually at the door instead of only through the admin.
  • Check-in roster (#43): opening check-in turns the event page into a live, htmx-searchable roster where editors confirm or undo a booking with one tap. There is no online payment yet, so confirming always records the cash membership fee.
  • Suggested cost field (#45): events can now record a suggested cost, editor-only for now — a first step toward showing it on the public booking page.
  • Configurable booking cutoff (#46): associations choose how public bookings close — manually at check-in, automatically at midnight before the event (the new default), or at the event's start time. Editors always see the bookings list for an event, with check-in actions appearing only once bookings are closed.
  • Bookings summary card (#48): the editor's event page gains a summary card — total bookings, confirmed count, and a breakdown by age bracket, configurable per association from the admin with no deploy needed. The card refreshes live via htmx whenever a booking is confirmed or undone.

🐛 Bug Fixes

  • createsuperuser needs no approval (#49): a superuser created via manage.py createsuperuser is now active and email-verified immediately, instead of being stuck behind the same email-verification and approval gate regular sign-ups go through.

🚨 Tests

  • Flaky CI test stabilized (#41): cleared the cache before allauth signup/login/reset tests so rate-limit state no longer leaks across parallel test workers.

🛠️ Maintenance

  • Seeded demo data now mirrors real bookings: mostly parent-and-child applications with a snapshot birth date, a realistic mix of confirmed and pending bookings, and default age brackets (#44, #48).
  • Updated Python dependencies and vendored Alpine.js 3.16.3.
  • Aligned the Dockerfile's bundled Tailwind CLI version with django-tailwind-cli.

📖 Full Changelog

v2026.1.1...v2026.1.2

v2026.1.1

Choose a tag to compare

@applewebbo applewebbo released this 23 Aug 10:50

What's New in v2026.1.1

✨ Features

  • Branded allauth account pages (#36): login, signup, password, and email screens now carry the association's name, logo, and colours instead of allauth's generic templates, plus a new "Account" hub reachable from the home navbar for managing email and password.
  • Sign-up approval gate (#37): new accounts, whether from email/password or Google, stay inactive until a superadmin approves them from the Django admin. Superadmins get an email when someone signs up; the new user gets one when they're approved.
  • Toast notifications (#38): Django messages now surface as auto-dismissing toasts instead of waiting for the next page load.
  • HTML allauth emails (#39): allauth's own transactional emails (confirmation, password reset/changed, email changed/removed, and the enumeration-safe "no account found" / "account already exists" mails) now ship a styled HTML alternative alongside the plain text.

🐛 Bug Fixes

  • Mobile layout of the open-dates card (#40): on small screens the card now stacks image/title, date, and a full-width Book button instead of cramming them onto one row; the Book badge also switched from a plain white/dark-border outline to the association's primary colour.

🛠️ Maintenance

  • Excluded allauth's account/email/ templates from the djlint inline-style check, matching the existing exemption for mail templates (for #40).
  • Documented that just check needs a .env in step with .env.example, and that a bare $ in .env gets expanded by just (#34).
  • Added the GitHub and housekeeping just recipes the release workflow expects (#35).

🚨 Tests

  • Covered approval-flow edge cases (missing user, no active superusers, already-inactive user) and the account hub view, closing a coverage gap left after #37 (for #37).

📖 Full Changelog

v2026.1...v2026.1.1

v2026.1

Choose a tag to compare

@applewebbo applewebbo released this 22 Aug 05:40

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