• 1.4.0 31d06e5b0e

    1.4.0
    All checks were successful
    continuous-integration/drone/push Build is passing
    continuous-integration/drone/tag Build is passing
    Stable

    simon released this 2026-10-05 13:56:33 +02:00 | 31 commits to main since this release

    [1.4.0]

    Added

    • Members overview – view settings – A new "View" dropdown switches the table between compact and comfortable density and controls how the Member and Address fields are shown: as combined composite cells or split into their underlying columns (Vorname/Nachname/E-Mail resp. Straße/PLZ/Ort). Every choice is remembered per browser.
    • Members overview – reset columns to default – The column-visibility menu gained a reset button that restores the curated default column set.
    • Members overview – add-filter builder – A searchable, grouped field picker adds filters as editable chips instead of a fixed panel; the active filters are encoded in the URL, so a filtered view is bookmarkable and survives a reload. The picker and the chips are fully keyboard-navigable: the field search behaves like the application's other comboboxes, focus follows the add-and-edit flow, and the number of matching fields is announced.
    • Members overview – more filters – New filters for members active on a chosen date (point-in-time), matching any of several selected groups (OR), a range on the number of open payment cycles, and a three-way payment status: all paid, open, or suspended.
    • Members overview – payment aging column – The fees column shows how many billing cycles each member has left unpaid in the selected period (cycles are member-relative), is sortable by that count, carries a short indicator on its header whenever the view is filtered (the tooltip spells out how), and lists the open cycles — unpaid and suspended in one chronological list — in a hover tooltip from which a click opens the member's fees.
    • Members overview – contribution period by calendar unit – The contribution period is picked as a calendar unit — current or last month, quarter, half-year or year — so its bounds fall on the same boundaries as the billing cycles. Day-precise presets (last 7 / 30 days …) remain available for the date fields such as join and exit date, where they answer a meaningful question.
    • Members overview – current and previous cycle – The contribution period can be set to each member's current or previous billing cycle instead of a calendar range. The column then shows the status of that one cycle (including a suspension), and the status filter offers paid / unpaid / suspended. Members whose cycle cannot be determined — a gap, or no fee type — keep an empty cell and stay in the list.

    Changed

    • Members overview – loads on demand – The overview no longer reads every member into memory. Filtering, sorting and pagination now run in the database, and rows stream in via infinite scroll as you reach the bottom of the list, so large member lists open quickly. The exact number of matching members is announced (for example "250 Members").
    • Members overview – condensed name and address – By default a member shows as a composite name cell and a two-line address cell (street / postal code + city); both columns are sortable and city and postal code stay findable via search. A clear (×) button was added to the search field.
    • Members overview – bulk actions span the full result set – Select-all, copy e-mail addresses, and export now act on the complete filtered set rather than only the rows currently loaded, and the count reflects the full filtered total.
    • Members overview – sticky header, pinned column and sortable headers – The table keeps a sticky header and pinned identifier column, sort headers that expose the active sort direction, boolean columns rendered as ✓/✗ icons, larger touch targets in both densities, and result-count and loading changes announced through a polite live region — meeting WCAG 2.2 AA for accessibility.
    • Members overview – filter panel replaced – The vertical filter panel is replaced by the add-filter builder, and date ranges now use native date inputs with relative presets, with a quick year jump and manual entry.

    Fixed

    • Upgrade could abort while filling in membership fee cycle ends – The migration that adds the cycle end date to membership fee cycles could fail with an error naming a fee interval (for example "yearly"), which aborted the upgrade and left the application unable to start. The interval is now resolved without relying on other parts of the application already being loaded, and an interval the migration cannot interpret stops it with an explicit message instead of storing a guessed cycle end.
    • Members overview – keyboard-operable filter toggles – The filter builder's Yes/No and status toggles can now be reached and switched with the keyboard and show a visible focus indicator (WCAG 2.1.1 Keyboard, 2.4.7 Focus Visible).
    • Members overview – sort menu text size – The Member column's sort menu no longer shrinks and grows with the table density; it keeps the size of the toolbar menus.
    • Members overview – why bulk mail is unavailable – Hovering the disabled "Open in email program" entry now shows the explanation that there are too many recipients, in the application's own tooltip style, instead of staying silent.
    • Members overview – cycle list after a filter change – The fees cell's cycle list opens on hover and keyboard focus even when a changed filter turned the cell from "all paid" into open cycles without reloading the page.
    • Members overview – explanation of the fees column scope – The hint explaining which period and status the fees column currently reflects is shown in the application's own tooltip style, so it appears reliably instead of depending on the browser's native tooltip.
    Downloads
  • 1.3.0 18639e8c67

    1.3.0
    All checks were successful
    continuous-integration/drone/push Build is passing
    continuous-integration/drone/tag Build is passing
    continuous-integration/drone/promote/production Build is passing
    Stable

    simon released this 2026-06-16 10:03:31 +02:00 | 104 commits to main since this release

    Signed by simon
    GPG key ID: 40E7A58C4AA1EDB2

    [1.3.0] - 2026-06-16

    Added

    • GDPR/DSGVO join-form description – Custom fields can carry a "join form description" that is shown as the field's label on the public join form, with clickable external links (whole URLs and Markdown [text](url)). Useful for presenting a GDPR confirmation with a link to an externally hosted privacy declaration before sign-up.
    • Join-form description tooltip in member details – Custom fields that have a join-form description show an info tooltip (prefixed "Beitrittsformular:") on their label in the member detail view.
    • Editable join-form description – Admins can set a field's join-form description in the custom-field settings, with an inline hint about the supported link syntax.
    • CSV import – groups column – Members can be assigned to groups during CSV import via a Groups/Gruppen column; group names that do not exist yet are created automatically, and re-importing the same file does not create duplicate groups.
    • CSV import – membership fee type column – A Fee Type/Beitragsart column assigns each member's membership fee type; an unknown name falls back to the default fee type and is flagged in the preview with a link to create it.
    • CSV import – mapping preview – After uploading a file, a preview shows how every column maps (with sample rows and warnings for ignored or unknown columns) and the import only starts once you confirm.
    • Dynamic CSV import templates – The EN and DE import-template downloads now include the association's current custom fields instead of a fixed column set.
    • Deactivate and reactivate members – Members can be deactivated directly from the member page: a dialog picks the exit date (prefilled to today, future dates allowed); deactivated members can be reactivated, which clears the exit date.
    • Tooltips and OIDC explanation – Icon-only action buttons (including the Vereinfacht sync control) now carry tooltips and accessible labels, and the OIDC settings section explains that it enables single sign-on.

    Changed

    • Member bulk actions in one menu – The actions above the member overview (open in email program, copy email addresses, export to CSV, export to PDF) are now collected in a single "Aktionen" dropdown instead of separate buttons. Without a selection they apply to all members, or to the currently filtered members; the trigger shows the active scope. Opening the email program is disabled when too many recipients are selected, with a hint to copy the addresses or use the export instead.
    • Dropdown buttons – Dropdown buttons (actions, filter, column visibility) now show a chevron so they are recognizable as menus.
    • Default GDPR custom field – The seeded GDPR field was shortened from "Datenschutzerklärung akzeptiert" to "DSGVO" and now ships with a default join-form description (with a placeholder link to replace).

    Fixed

    • CSV date round-trip – Date custom-field values are now exported as ISO-8601 (YYYY-MM-DD), so an exported CSV can be re-imported without date-parsing errors.
    • CSV import – fee-status columns ignored – Columns such as Bezahlstatus / Membership Fee Status are always ignored on import and never stored as a custom-field value, even when a custom field of the same name exists.
    • Column-header tooltips clipped – Tooltips on the members-overview column headers are no longer clipped by the sticky table header.
    • Text selection opens member – Dragging to select text in a members-overview row (for example to copy an email) no longer opens the member details; a plain click still opens them.
    • Sort by custom date – Sorting the member list or member export by a custom date field now orders rows chronologically instead of like text, so e.g. 29.01.1981 correctly comes before 01.03.1982.
    Downloads
  • 1.2.0 d549e6878c

    1.2.0
    All checks were successful
    continuous-integration/drone/tag Build is passing
    continuous-integration/drone/promote/production Build is passing
    continuous-integration/drone/push Build is passing
    Stable

    simon released this 2026-05-08 15:23:17 +02:00 | 216 commits to main since this release

    [1.2.0] - 2026-05-08

    Changed

    • Clickable table row highlights – The new hover/focus-visible row highlight behavior is now the CoreComponents default across clickable tables. Sticky-first-column tables keep zebra striping and show selection through the sticky-column accent stripe (checkboxes keep their default style).
    • Members overview scrolling – The members table scrollbar now scrolls inside the table container instead of moving with the full page.
    • Join request display and settings workflow – Improved join request rendering and related settings behavior in one cohesive update:
      • Join request fields now respect their configured field types in the details view.
      • Custom field labels in join request views were standardized.
      • Join request field formatting was corrected for more consistent output.
      • Join link settings now include a direct "Open" action in addition to copy/share workflows.

    Fixed

    • Runtime ENV handling – Empty or invalid environment variables (e.g. SMTP_PORT=, PORT=, POOL_SIZE=, DATABASE_PORT=) no longer cause ArgumentError at boot. Instead raises clear errors for required vars set but empty (e.g. DATABASE_HOST, PHX_HOST/DOMAIN, SECRET_KEY_BASE).
    • PostgreSQL 18 Docker volume path – Corrected the database volume path to match PostgreSQL 18 expectations.
    • Association name ENV handling – ASSOCIATION_NAME is now treated as source of truth; the field is read-only in Global Settings when managed via ENV.
    • Association name consistency after updates – Layout now prefers explicitly assigned club_name values to avoid stale cached values right after settings changes.
    • SMTP ENV/UI source selection – SMTP now follows a strict single-source policy: ENV-only when SMTP_HOST is set, otherwise Settings-only.
    • SMTP settings UI in ENV mode – SMTP fields are read-only, save action is hidden, and missing required ENV keys are shown as a warning.

    Dependency updates

    • Mix dependencies were updated.
    • Renovate Docker image was updated to v43.165.
    • Rauthy Docker image was updated to v0.35.1.
    • just was updated to v1.50.0.
    Downloads
  • 1.1.1 f8a3cc4c47

    1.1.1
    All checks were successful
    continuous-integration/drone/push Build is passing
    continuous-integration/drone/promote/production Build is passing
    continuous-integration/drone/tag Build is passing
    Stable

    simon released this 2026-03-16 20:59:59 +01:00 | 249 commits to main since this release

    1.1.1 - 2026-03-16

    Added

    • FORCE_SEEDS – Environment variable. When set to "true", bootstrap (and optionally dev) seeds are run even when the admin user already exists, so you can re-apply changed seed data (e.g. new roles or custom fields) without deleting the admin user.
    • Improved OIDC-only mode – Admin can enable “Only OIDC sign-in” in settings; when enabled, direct registration is disabled and sign-in page redirects to OIDC when configured.
    • Success toast auto-dismiss – Success flash messages (e.g. “Settings saved”) hide automatically after 5 seconds instead of requiring the user to close them.

    Changed

    • Seeds run only when needed – Bootstrap and dev seeds are skipped on application start when the admin user already exists (Mv.Release.bootstrap_seeds_applied?/0). This avoids duplicate data and speeds up startup in dev and production after the first run. Set FORCE_SEEDS=true to override and re-run.
    • Unauthenticated access – Users who are not logged in are redirected to sign-in without showing a “no permission” message; the message is only shown to logged-in users who lack access.

    Fixed

    • SMTP configuration – Repaired so that both port 587 (TLS/STARTTLS) and 465 (SSL) work correctly.
    Downloads
  • 1.1.0 837f5fd5bf

    1.1.0
    All checks were successful
    continuous-integration/drone/push Build is passing
    continuous-integration/drone/tag Build is passing
    Stable

    simon released this 2026-03-13 21:12:24 +01:00 | 255 commits to main since this release

    1.1.0 - 2026-03-13

    Added

    • Browser timezone for datetime display – Date/time values (e.g. join request submitted at, approved at, rejected at) are shown in the user’s local timezone.
    • Registration toggle – New global setting to disable direct registration (/register). When disabled, visitors are redirected to sign-in and the register link is hidden; join form remains available.
    • Configurable SMTP in global settings – SMTP host, port, user, password, and TLS options configurable via Admin → Global Settings. Test-email action to verify delivery. Join confirmation and other transactional emails use this configuration.
    • Theme and language selector on unauthenticated pages – Sign-in and join pages now offer theme (light/dark) and locale (e.g. German/English) controls in the header.
    • Duplicate-email handling for join form – If an applicant’s email is already a member or already has a pending join request, the system sends a clarifying email (already-member or already-pending) and shows the same success message (anti-enumeration).
    • Reviewed-by display for join requests – Approval UI shows who reviewed a request via a dedicated display field, without loading the User record.
    • Improved field order and seeds for join request approval – Approval screen field order improved; seed data updated for join-form and approval flows.
    • Tests for SMTP mailer configuration – Tests for SMTP config and for join confirmation email delivery failure (domain and LiveView).

    Changed

    • SMTP settings layout – SMTP options reordered and grouped in global settings for clearer configuration.
    • Join confirmation mail – Uses configurable SMTP from settings; on delivery failure the join form shows an error and no success message.
    • i18n – Gettext catalogs updated for new and changed strings.

    Fixed

    • Login page translation – Corrected translation/locale handling on the sign-in page.
    Downloads
  • 1.0.0 160c35c0ba

    1.0.0
    All checks were successful
    continuous-integration/drone/tag Build is passing
    continuous-integration/drone/push Build is passing
    Stable

    moritz released this 2026-03-11 12:18:55 +01:00 | 280 commits to main since this release

    First production ready release. Expect breaking changes.

    Downloads