This release includes 1 security fix for security teams reviewing exposed deployments.
Published 19d
Productivity & Wikis
✓ No known CVEs patched
This release patches 1 known CVE
Topics
club-management
community
complex-group-hierarchies
event-management
hitobito
membership-management
+3 more
ruby
user-management
wagons
Affected surfaces
auth
breaking_upgrade
Summary
AI summaryUpdates Bugfixes, Features :tada, and OIDC across a mixed release.
Full changelog
:warning: BREAKING :warning:
Der Rechnungsexport beinhaltet neu zusätzlich die Spalten Vor- und Nachname einzeln. Dies kann allenfalls zu Änderungen beim Import in Umsystemen führen. (#4164)
Features :tada:
- Neu können pro Layer Eventfragen-Vorlagen definiert werden. In Umgebungen, in welchen es bereits Standardfragen auf Events gab, wurden diese mutiert. Eventfragen können neu nicht mehr "nicht angezeigt" werden. Bereits bestehende Fragen welche zum Releasezeitpunkt nicht angezeigt werden, werden gelöscht. (hitobito/hitobito_sac_cas#2345)
- Links unten in der Navigation, sowie rechts oben neben dem eigenen Namen findet neu jede Person die persönliche Jobübersicht. Hier sind Hintergrundjobs (Exporte), welche die Person anstösst, ersichtlich. Es kann der Status des Exports eingesehen werden und Files können auch nach Abschluss erneut heruntergeladen werden, ohne den Export ein weiteres Mal anstossen zu müssen. Jobs in der Jobübersicht werden Täglich gelöscht. (#4020)
- Neu gibt es eine Übersicht über Zahlungseingänge, in der sämtliche Zahlungen eines Rechnungslayers ersichtlich sind sowie gefiltert und exportiert werden können. Zudem ist bei Zahlungen neu ersichtlich, woher diese kommen. (hitobito/hitobito_sww#390)
- Auf Events und Teilnahmen gibt es nun ein Eventlog, welches sämtliche Änderungen am Event oder der Teilnahme beinhalten, analog dem Personenlog. (#2320)
- Neu können Mitgliederausweise definiert, dargestellt, ausgedruckt und in Mobile Wallets gespeichert werden. Dieses Feature ist standardmässig auf allen Umgebungen deaktiviert und muss einzeln aktiviert werden. (#3911)
- Eventbenachrichtigungen an die Kontaktperson unterscheiden neu, ob die Person vorläufig oder definitiv angemeldet ist, oder sich auf der Warteliste befindet. Die entsprechenden Mailtexte können in den Einstellungen gepflegt werden. (#289)
- Neu kann eine PP-Zeile auf Rechnungen aufgedruckt werden. (hitobito/hitobito_sww#246)
Changes
- Neu können Eventteilnahmen via API abgerufen werden. (#3789)
- Neu können Qualifikationen via API abgerufen werden. (hitobito/hitobito_bdp#12)
- Zahlungen können nun auch auf Rechnungen mit dem Status "Bezahlt" und "Überbezahlt" erfasst werden. (#4240)
- Das Sammelrechnungs-Feature wurde weiter ausgebaut.
- Anlass-Verwalter können neu auch Gäste zu einem Anlass anmelden. (#3811)
- Zusätzliche EBICS Schnittstelle zur Banque Cantonale du Valais und Banque Cantonale Vaudoise. (#4265)
- Das Adresslabel für "Adresse" wurde in "Strasse" und "Nr." aufgeteilt. (hitobito/hitobito_sww#287)
- Verbesserung des Postadressenabgleichs zur Schweizerischen Post (#4109)
- OAuth Tokens werden nun refresh Tokens mitgegeben, welche die Gültigkeit automatisch verlängern. (hitobito/hitobito_pbs#463)
- Rechnungsexporte können neu auch als Exceldatei .xml gemacht werden. (hitobito/hitobito_sww#288)
- Im Rahmen der Accessability von Hitobito wurden diverse Verbesserungen für die Tastaturbedienung vorgenommen.
Bugfixes
- Auf kleinen Bildschirmen kann nach dem Einloggen auf der Personenübersicht nun korrekt navigiert werden. (#4291)
- In seltenen Fällen wurden Rechnungsläufe mehrmals erstellt. Die ist nun nicht mehr möglich. (#4224)
- In einigen Umgebungen konnte via Logo nicht mehr zur Startansicht navigiert werden. Dies wurde wieder ermöglicht. (#4157)
- In seltenen Fällen wurden Rechnungsnummern doppelt vergeben. Dies ist nun nicht mehr möglich. (#4005)
- In seltenen Fällen haben Fragen und Antworten bei Events ihren Status geändert. Dies kommt nun nicht mehr vor. (#4096)
- Zahlenformate funktionieren nun korrekt bei einem Sprachwechsel zu Englisch oder von Englisch weg. (#3173)
- Verbesserung des Bounce-Handlings bei Emails. (#4206)
- Diverse Server Errors (500er Fehler) behoben.
Alle Core-Änderungen
- Persist calculated count in the DB by @carlobeltrame in https://github.com/hitobito/hitobito/pull/4073
- Override method_missing for globalized models to prevent issues with STI models by @njaeggi in https://github.com/hitobito/hitobito/pull/4060
- Merge people even if associations are invalid (hitobito/hitobito_pbs#436) by @amaierhofer in https://github.com/hitobito/hitobito/pull/4097
- Order participations by name on qualification index (hitobito/hitobito_sac_cas#2352) by @njaeggi in https://github.com/hitobito/hitobito/pull/4083
- Add github refs to wagon-ci-setup by @njaeggi in https://github.com/hitobito/hitobito/pull/4112
- Fix nested forms nested in nested forms (fixes #4096, refs f0db205cc) by @daniel-illi in https://github.com/hitobito/hitobito/pull/4106
- Fix and refactor api authorization by @carlobeltrame in https://github.com/hitobito/hitobito/pull/4104
- Revert "Remove PDF button on messages show view, fixes #4016" by @daniel-illi in https://github.com/hitobito/hitobito/pull/4114
- Introduce paper trails and logs to event related models (hitobito/hitobito_sac_cas#2315) by @njaeggi in https://github.com/hitobito/hitobito/pull/4002
- Use URL object in field remote update controller (hitobito/hitobito_sac_cas#2387) by @njaeggi in https://github.com/hitobito/hitobito/pull/4108
- Fix invoice run form (#4115) by @daniel-illi in https://github.com/hitobito/hitobito/pull/4116
- Set To header to 'Undisclosed recipients:' when empty (#3953) by @daniel-illi in https://github.com/hitobito/hitobito/pull/4118
- Preserve event answers on failed form validation (#3833) by @daniel-illi in https://github.com/hitobito/hitobito/pull/4119
- Fix styling of globalized invoice item name field by @njaeggi in https://github.com/hitobito/hitobito/pull/4122
- Do not include groups without invoice_config in invoice new dropdown by @njaeggi in https://github.com/hitobito/hitobito/pull/4123
- Use optional_field to set mail header to undisclosed recipients by @njaeggi in https://github.com/hitobito/hitobito/pull/4121
- Refactor event filters (hitobito/hitobito_sac_cas#2366) by @codez in https://github.com/hitobito/hitobito/pull/4056
- Adapt to standard eireen process address sync (hitobito/hitobito_glp#69) by @amaierhofer in https://github.com/hitobito/hitobito/pull/4127
- Extract oauth logo into partial (hitobito/hitobito_sac_cas#2377) by @njaeggi in https://github.com/hitobito/hitobito/pull/4128
- Migrate legacy role paper trail versions to new role dates by @njaeggi in https://github.com/hitobito/hitobito/pull/4133
- Allow more wagon customization of role form by @carlobeltrame in https://github.com/hitobito/hitobito/pull/4098
- Add a check for person to layer_group label column by @njaeggi in https://github.com/hitobito/hitobito/pull/4130
- Do not filter by daterange for single invoices by @njaeggi in https://github.com/hitobito/hitobito/pull/4132
- Prepare our usage of bundler for the upgrade to bundler 4.0 by @kronn in https://github.com/hitobito/hitobito/pull/4107
- Support more ways to retrieve the relevant event participations by @carlobeltrame in https://github.com/hitobito/hitobito/pull/4135
- Move service_tokens and calendars into group edit dropdown (hitobito/hitobito_sac_cas#2314) by @njaeggi in https://github.com/hitobito/hitobito/pull/4111
- Do not display logo in browser print function by @nilsrauch in https://github.com/hitobito/hitobito/pull/4141
- multiitem item templates by @kronn in https://github.com/hitobito/hitobito/pull/4120
- Implement fluent spec db queries matcher by @daniel-illi in https://github.com/hitobito/hitobito/pull/4129
- Add qualifications to json:api (hitobito/hitobito_bdp#12) by @amaierhofer in https://github.com/hitobito/hitobito/pull/4134
- Move register_people special case to the correct location by @carlobeltrame in https://github.com/hitobito/hitobito/pull/4143
- feature/sww 287 adjust address form fields by @amaierhofer in https://github.com/hitobito/hitobito/pull/4099
- Add start_at and finish_at methods to event by @njaeggi in https://github.com/hitobito/hitobito/pull/4081
- Pass default filter_params to invoce filter in invoice runs controller by @njaeggi in https://github.com/hitobito/hitobito/pull/4148
- Fix reported paper trail log bugs by @njaeggi in https://github.com/hitobito/hitobito/pull/4144
- Fix mailing lists api with read-only service token by @carlobeltrame in https://github.com/hitobito/hitobito/pull/4150
- Period invoice template with person recipients by @carlobeltrame in https://github.com/hitobito/hitobito/pull/4139
- Add Excel exports to invoices (hitobito/hitobito_sww#288) by @amaierhofer in https://github.com/hitobito/hitobito/pull/4124
- Füge SECRET_KEY_BASE bei den Deployment Umgebungsvariablen hinzu by @rnestler in https://github.com/hitobito/hitobito/pull/4095
- Bump yard from 0.9.37 to 0.9.42 by @dependabot[bot] in https://github.com/hitobito/hitobito/pull/4151
- Make sure new_wago_dir exists in bin/wagon create by @rnestler in https://github.com/hitobito/hitobito/pull/4155
- feature/sww 246 add shipping attrs to invoices and invoice runs by @amaierhofer in https://github.com/hitobito/hitobito/pull/4145
- Participation state specific notification mails (hitobito/hitobito_sww#289) by @amaierhofer in https://github.com/hitobito/hitobito/pull/4137
- Generate a filename, even if no invoices are exported by @kronn in https://github.com/hitobito/hitobito/pull/4156
- Fix invoice state alignment by @amaierhofer in https://github.com/hitobito/hitobito/pull/4153
- Allow wagons not to be git submodules by @rnestler in https://github.com/hitobito/hitobito/pull/4163
- Do not crash bin/wagon gemfile if BUNDLE_GEMFILE is not set by @rnestler in https://github.com/hitobito/hitobito/pull/4160
- Improve extensibility in wagons by @carlobeltrame in https://github.com/hitobito/hitobito/pull/4159
- Bump rack-session from 2.1.1 to 2.1.2 by @dependabot[bot] in https://github.com/hitobito/hitobito/pull/4125
- Apply filter to invoice export and actions by @kronn in https://github.com/hitobito/hitobito/pull/4162
- Extract period fields from form (hitobito/hitobito_pfadi_de#58) by @amaierhofer in https://github.com/hitobito/hitobito/pull/4166
- Support reminding and sending emails for invoices only issued (not sent) by @amaierhofer in https://github.com/hitobito/hitobito/pull/4175
- Add date range to standard event filter (hitobito/hitobito_sac_cas#2367) by @codez in https://github.com/hitobito/hitobito/pull/4142
- Ignore validity when updating effectively cached values by @kronn in https://github.com/hitobito/hitobito/pull/4176
- Save invoice recipient first and last name separately (#4164) by @daniel-illi in https://github.com/hitobito/hitobito/pull/4167
- Fix create-datbase typo in bin/wagon script by @rnestler in https://github.com/hitobito/hitobito/pull/4178
- Add hierarchical checkboxes stimulus controller for sac (hitobito/hitobito_sac_cas#2326) by @codez in https://github.com/hitobito/hitobito/pull/4146
- Copy placeholders to custom contents in context to simplify code (hitobito/hitobito_sac_cas#2396) by @codez in https://github.com/hitobito/hitobito/pull/4158
- Fix event filter full text subquery by @codez in https://github.com/hitobito/hitobito/pull/4182
- Revert "Override method_missing for globalized models to prevent issues with STI models (#4060)" by @codez in https://github.com/hitobito/hitobito/pull/4188
- task/3793 adjust generated artefacts by @amaierhofer in https://github.com/hitobito/hitobito/pull/3839
- Provide extension point roles aside by @amaierhofer in https://github.com/hitobito/hitobito/pull/4180
- Save item_label to paper_trail version (hitobito/hitobito_sac_cas#2320) by @njaeggi in https://github.com/hitobito/hitobito/pull/4181
- Improve handling of event filter navigation name (hitobito/hitobito_sac_cas#2369) by @codez in https://github.com/hitobito/hitobito/pull/4149
- Fix failing CI case because of missing dependency wagon ref by @njaeggi in https://github.com/hitobito/hitobito/pull/4177
- Improve payments duplicate detection to recognize legacy ids (#4199) by @daniel-illi in https://github.com/hitobito/hitobito/pull/4200
- Allow webpacker to see wagon packs when compiling into manifest by @njaeggi in https://github.com/hitobito/hitobito/pull/4179
- Search for identifiers in full text search (hitobito/hitobito_sac_cas#2331) by @codez in https://github.com/hitobito/hitobito/pull/4195
- Load lograge sql correctly by @codez in https://github.com/hitobito/hitobito/pull/4207
- Feature/3503 Improve toggle button screen reader focus styling by @RandomTannenbaum in https://github.com/hitobito/hitobito/pull/4082
- Bug/Fix setting capybara driver inconsistently by @RandomTannenbaum in https://github.com/hitobito/hitobito/pull/4215
- Bump net-imap from 0.5.12 to 0.5.14 by @dependabot[bot] in https://github.com/hitobito/hitobito/pull/4202
- Fix rendering version for non existent role type (hitobito/hitobito_sac_cas#2461) by @nilsrauch in https://github.com/hitobito/hitobito/pull/4213
- Add rake task to cleanup deleted people in one go (hitobito/hitobito_dsj#50) by @njaeggi in https://github.com/hitobito/hitobito/pull/4221
- Update rails' patchlevel for upstream security fixes by @kronn in https://github.com/hitobito/hitobito/pull/4170
- Move age calculation to model concern and use for guests aswell by @njaeggi in https://github.com/hitobito/hitobito/pull/4226
- Support wagon pack entry points in production builds by @njaeggi in https://github.com/hitobito/hitobito/pull/4227
- Implement event question template (hitobito/hitobito_sac_cas#2322) by @njaeggi in https://github.com/hitobito/hitobito/pull/4072
- Fix course list containing duplicate entries (hitobito/hitobito_sac_cas#2366) by @codez in https://github.com/hitobito/hitobito/pull/4228
- Add i18n_enums to guests (hitobito/hitobito_sww#350) by @njaeggi in https://github.com/hitobito/hitobito/pull/4230
- Adjust event contact field to only toggle on value presence by @nilsrauch in https://github.com/hitobito/hitobito/pull/4225
- Clarify namespacing of other classes when using singular modules for a model by @carlobeltrame in https://github.com/hitobito/hitobito/pull/4196
- TableDisplay export also needs ability (hitobito/hitobito_pfadi_de#31) by @amaierhofer in https://github.com/hitobito/hitobito/pull/4233
- Bump graphiti from 1.8.2 to 1.10.2 by @dependabot[bot] in https://github.com/hitobito/hitobito/pull/4069
- Bump js-yaml from 3.14.1 to 3.14.2 by @dependabot[bot] in https://github.com/hitobito/hitobito/pull/3745
- Bump bcrypt from 3.1.20 to 3.1.22 by @dependabot[bot] in https://github.com/hitobito/hitobito/pull/4066
- Fix update redirect for invoice_runs nested under period template (#4165) by @amaierhofer in https://github.com/hitobito/hitobito/pull/4234
- Do not send confirmation instructions for person without email by @nilsrauch in https://github.com/hitobito/hitobito/pull/3924
- Support duplicating period_invoice_template (#3754) by @amaierhofer in https://github.com/hitobito/hitobito/pull/4237
- Remove idField value when autcomplete input is empty (hitobito/hitobito_sac_cas#3250) by @njaeggi in https://github.com/hitobito/hitobito/pull/4231
- Use .lft instead of .name for layer sorting by @rnestler in https://github.com/hitobito/hitobito/pull/4229
- Show messages for events and participations (hitobito/hitobito_sac_cas#2419) by @codez in https://github.com/hitobito/hitobito/pull/4214
- Check if event application is possible in participation contact data controller (hitobito/hitobito_sac_cas#2398) by @codez in https://github.com/hitobito/hitobito/pull/4209
- Add interactive mode to form_field_check_dependent_controller (hitobito/hitobito_sac_cas#2400) by @njaeggi in https://github.com/hitobito/hitobito/pull/4219
- Improve Performance for deleted people queries by @codez in https://github.com/hitobito/hitobito/pull/4210
- Bounce Determinator 3001 by @kronn in https://github.com/hitobito/hitobito/pull/4235
- Define field_order_id for Mail::OptionalField by @njaeggi in https://github.com/hitobito/hitobito/pull/4249
- Add group_id presence validation to role api by @njaeggi in https://github.com/hitobito/hitobito/pull/4250
- Return 404 instead of 500 for FileNotFoundError by @njaeggi in https://github.com/hitobito/hitobito/pull/4251
- Return empty list of receivers when recipient_source has been destroyed by @njaeggi in https://github.com/hitobito/hitobito/pull/4252
- Pass ability to table display export in subscription export job (hitobito/hitobito_pfadi_de#31) by @njaeggi in https://github.com/hitobito/hitobito/pull/4253
- Only reify attributes that still exist on the current model by @codez in https://github.com/hitobito/hitobito/pull/4245
- Make service_token on person explicit (hitobito/hitobito_sac_cas#2469) by @codez in https://github.com/hitobito/hitobito/pull/4247
- Add person_id presence validation to qualification api by @njaeggi in https://github.com/hitobito/hitobito/pull/4256
- Ensure single invoice run per letter invoice dispatch job (#4224) by @amaierhofer in https://github.com/hitobito/hitobito/pull/4244
- Add setting to (not) subscribe managers to mailchimp (hitobito/hitobito_sac_cas#2446) by @codez in https://github.com/hitobito/hitobito/pull/4255
- Implement passes with mobile wallet integration (#3911) by @amaierhofer in https://github.com/hitobito/hitobito/pull/4205
- Implement event question template form (hitobito/hitobito_sac_cas#2345) by @njaeggi in https://github.com/hitobito/hitobito/pull/4263
- Do not check people readables for api person name resources (hitobito/hitobito_sac_sac#2426) by @codez in https://github.com/hitobito/hitobito/pull/4248
- OIDC:
openidScope Inkonsistenz by @openscript in https://github.com/hitobito/hitobito/pull/4266 - Update ALL the actions to their current latest version by @kronn in https://github.com/hitobito/hitobito/pull/4269
- Allow basic_permissions_only users to see own details (hitoibito/hitobito_sww#386) by @daniel-illi in https://github.com/hitobito/hitobito/pull/4268
- Use street label in contactable/address_fields (hitobito/hitobito_sww#287) by @amaierhofer in https://github.com/hitobito/hitobito/pull/4272
- feature/pfadi de 46 new group attributes by @amaierhofer in https://github.com/hitobito/hitobito/pull/4262
- Enable refresh tokens in OAuth by @carlobeltrame in https://github.com/hitobito/hitobito/pull/4275
- feature/swb 190 ts role massen mutationen by @amaierhofer in https://github.com/hitobito/hitobito/pull/4276
- Feature/4020 UI for background jobs by @RandomTannenbaum in https://github.com/hitobito/hitobito/pull/4092
- Load additional settings files with extra_sources instead of prepend_source by @codez in https://github.com/hitobito/hitobito/pull/4282
- Bug/Fix job observations migration by @RandomTannenbaum in https://github.com/hitobito/hitobito/pull/4283
- Make manually sendable participation emails dependent on event type (hitobito/hitobito_sac_cas#2399) by @njaeggi in https://github.com/hitobito/hitobito/pull/4270
- Render icons for contact decorator attributes (hitobito/hitobito_sac_cas#2370) by @njaeggi in https://github.com/hitobito/hitobito/pull/4280
- Allow payments for more invoice states (#4240) by @carlobeltrame in https://github.com/hitobito/hitobito/pull/4293
- Bump nokogiri from 1.19.2 to 1.19.3 by @dependabot[bot] in https://github.com/hitobito/hitobito/pull/3959
- Display correct sti model label in flash messages by @njaeggi in https://github.com/hitobito/hitobito/pull/4285
- Replace sort_by! with sql ordering expression in application market controller (hitobito/hitobito_sac_cas#2418) by @njaeggi in https://github.com/hitobito/hitobito/pull/4287
- Log partial mailchimp syncs in error log (hitobito/hitobito_sac_cas#2447) by @njaeggi in https://github.com/hitobito/hitobito/pull/4292
- Fix N+1 query in event participation table displays by @njaeggi in https://github.com/hitobito/hitobito/pull/4296
- Enforce dd.mm.yy on datepicker for all languages by @njaeggi in https://github.com/hitobito/hitobito/pull/4273
- Allow to use Redis for caching by @rnestler in https://github.com/hitobito/hitobito/pull/4154
- Allow adding guests for participants other than oneself by @carlobeltrame in https://github.com/hitobito/hitobito/pull/4264
- Bug/Fix unclickable section in mobile layout by @RandomTannenbaum in https://github.com/hitobito/hitobito/pull/4291
- Refactor group statistic for extensibility (hitobito/hitobito_sww#345) by @daniel-illi in https://github.com/hitobito/hitobito/pull/4161
- Update brakeman to 8.0.5 by @njaeggi in https://github.com/hitobito/hitobito/pull/4305
- Offer question templates in event form (hitobito/hitobito_sac_cas#2344) by @nilsrauch in https://github.com/hitobito/hitobito/pull/4278
- Add an AGENTS.md by @kronn in https://github.com/hitobito/hitobito/pull/4289
- Payments Overview by @kronn in https://github.com/hitobito/hitobito/pull/4286
- OIDC: Standardkonforme Claim-Namen hinzufügen by @openscript in https://github.com/hitobito/hitobito/pull/4267
- Only paginate HTML responses by @kronn in https://github.com/hitobito/hitobito/pull/4310
- Add bcv and bcvs payment providers (#4265) by @nilsrauch in https://github.com/hitobito/hitobito/pull/4306
- Filter receiver invoices by accessible finance groups by @amaierhofer in https://github.com/hitobito/hitobito/pull/4277
- Add field visibility stimulus controller (hitobito/hitobito_sac_cas#2449) by @njaeggi in https://github.com/hitobito/hitobito/pull/4298
- Fetch role_type dropdown options from helper method to override in wagon (hitobito/hitobito_sac_cas#2407) by @njaeggi in https://github.com/hitobito/hitobito/pull/4309
- Remove unused post address sync query key (#4109) by @amaierhofer in https://github.com/hitobito/hitobito/pull/4301
- Finish pass layouts by @carlobeltrame in https://github.com/hitobito/hitobito/pull/4313
- Bug/Fix redirect after pdf exports by @RandomTannenbaum in https://github.com/hitobito/hitobito/pull/4284
- Include stage in wallet pass ids (refs #3911) by @daniel-illi in https://github.com/hitobito/hitobito/pull/4316
- Improve post address sync (hitobito/hitobito_sac_cas#2434) by @njaeggi in https://github.com/hitobito/hitobito/pull/4312
- Implement memory usage app status and handle termination signals in delayed job (#4198) by @RandomTannenbaum in https://github.com/hitobito/hitobito/pull/4303
- Extract fetch_all_uids method to be able to override in wagon (hitobito/hitobito_tenants#33) by @njaeggi in https://github.com/hitobito/hitobito/pull/4315
- Replace delete_on with end_on in role paper trail versions by @njaeggi in https://github.com/hitobito/hitobito/pull/4323
- Update bundler to version 4.0.13 and introduce cooldown by @RandomTannenbaum in https://github.com/hitobito/hitobito/pull/4295
Full Changelog: https://github.com/hitobito/hitobito/compare/2.9.0...2.10.0
Breaking Changes
- Rechnungsexport now includes additional columns for Vorname (first name) and Nachname (last name) separately, which may affect import pipelines in downstream systems (#4164).
Security Fixes
- OIDC: Fixed non‑standard claim names to be standard‑conformant.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
Related context
Related tools
Beta — feedback welcome: [email protected]