Skip to content

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 17 Jun 12:36

[1.1.0] — 2026-06-16

Bug Fixes

  • core: Correct sender identity in host operational alert emails
  • core: Treat unfinished Stripe onboarding as incomplete, not restricted
  • core: Distinguish superseded from expired email verification links
  • core: Stop duplicate emails when SMTP delivery is slow
  • core: Keep verification and reset links valid after a resend
  • core: Repair custom-field min/max persisted as JSON numbers
  • core: Prevent Google Calendar sync crash on token-refresh failure
  • core: Harden crash reporter and skip it when admin alerts are disabled
  • core: Prevent admin-alert floods from repeated crashes and job failures
  • core: Attach crash reporter after the supervision tree is up
  • core: Correct crash reporter loop-prevention domain filters
  • core: Update final onboarding step CTA to go to dashboard
  • core: Correct Docker Compose env forwarding, volumes, and DB config
  • core: Stop endless sync retries when a calendar is deleted on the provider side
  • core: Auto-deselect Google calendars deleted on the provider side
  • core: Make POSTGRES_PASSWORD optional when building the Docker image
  • core: Prevent admin alert email floods when many jobs fail at once
  • core: Redact calendar identifiers and token-bearing paths from logs
  • core: Keep password-reset and verification links out of job logs
  • core: Redact identifiers from request and LiveView logs
  • core: Update final onboarding step CTA to go to dashboard
  • core: Correct Docker Compose env forwarding, volumes, and DB config
  • core: Make the calendar private-IP guard configurable
  • core: Fill missing English catalogue entries for new messages
  • core: Reject theme video uploads when transcoding is unavailable
  • core: Give dropdown dialogs accessible names
  • core: Improve the dashboard tour on small screens
  • core: Restore centred embed layout and make wide layout opt-in
  • core: Translate booking flash messages
  • core: Remove orphaned calendar events when booking sync fails
  • core: Block private-network addresses in calendar server URLs
  • core: Prevent a crash when dismissing an announcement twice
  • core: Prevent locking yourself out of sign-in settings
  • core: Validate custom question answers and bounds more strictly
  • core: Improve paid booking reliability and payment errors
  • core: Keep video meeting links in sync when bookings change
  • core: Protect Slack webhook secrets and handle rate limits
  • core: Validate LiveComponents via live/0 instead of optional update/2
  • core: Fill missing English translation for "New feature" label
  • core: Keep dashboard sidebar fixed while only the content scrolls
  • core: Preserve typed answers when navigating booking questions
  • core: Reject overly long phone numbers in booking questions
  • core: Keep Quill meeting-type cards a fixed size on hover and selection
  • core: Size Quill meeting-type step to match the calendar step
  • core: Remove clipped copy-link confirmation tooltip in dashboard sidebar
  • core: Stop false type-change warning when editing a custom question
  • core: Show embed live preview before embed domains are configured
  • core: Copy booking link to clipboard on onboarding ready step
  • core: Show Rhythm booking meeting-type descriptions on wide screens
  • core: Show Quill booking meeting-type descriptions on wide screens
  • core: Keep Quill booking time-slot buttons a uniform size
  • core: Keep Quill booking time slots scrollable and free of overflow on small screens
  • core: Reflow the Quill booking overview to fit and use space across screen sizes
  • core: Prevent embedded booking from flickering and lurching on resize
  • core: Apply all Stripe Connect account updates, not just the first
  • core: Translate booker-facing booking and payment strings for de/fr/uk/it
  • core: Show payment confirmation time in the attendee's timezone
  • core: Let attendees return to booking after a cancelled payment
  • core: Stop admin alerts for benign Connect application_fee events
  • core: Record disputes and refunds that arrive before payment confirmation
  • core: Allow refunds when no reason is supplied
  • core: Record Stripe charge id to enable refunds and disputes
  • core: Fix checkout failure for paid bookings
  • core: Heal booking_payments attendee columns to nullable on stale databases
  • core: Pass event details when provisioning video room from calendar edit
  • core: Seed custom answers for embedded paid booking confirmation
  • core: Allow disconnecting a Slack OAuth integration
  • core: Harden DashboardTour hook against scroll-jack and resize
  • core: Persist dashboard tour completion across all dismissal paths
  • core: Make dashboard tour backfill irreversible
  • core: Preserve first-seen timestamp on dashboard tour mark
  • core: Anchor sidebar tour step on the real aside element
  • core: Dim page on welcome step of dashboard tour
  • core: Cancel stale anchor polling in DashboardTour hook
  • core: Accept both yes and no as valid answers to a yes/no question
  • core: Keep edit button visible on each custom-question list row
  • core: Assign empty custom-field defaults on honeypot path and tighten typespecs
  • core: Note acknowledgement not accepted in custom questions wizard
  • core: Persist custom_fields through the meeting type save path
  • core: Handle malformed step nav and single-question wizard skip
  • core: NoteAckValidator must reject non-UTC timestamps
  • core: Tighten TimeValidator and DateValidator strictness
  • core: Keep dropdown phx-click-away bound when closed
  • core: Show Zoom as an OAuth provider in the video integration list
  • core: Repair Zoom meeting creation and harden the OAuth flow
  • core: Prevent Zoom meeting creation crash on malformed datetime
  • core: Tighten Zoom provider stub edge cases and adapter dispatch
  • core: Align Slack channel picker dropdown with design tokens
  • core: Polish Slack integration form before launch
  • core: Tighten Slack integration lifecycle and error reporting
  • core: Correct Slack worker retry handling and rate-limit backoff
  • core: Allow disabling password auth when no admin auth path is currently active
  • core: Block password auth disable when any admin still uses it
  • core: Redirect non-admins to dashboard from admin page
  • core: Show Baikal in the dashboard calendar integration list
  • core: Remove jumping hover effect on action buttons
  • core: Enforce refund window in cancel-meeting modal
  • core: Correct refund and disconnect flow in host payments dashboard
  • core: Show Pro and Stripe-required automation gates as user flashes
  • core: Make Stripe Connect onboarding country configurable
  • core: Block default currency change when pending payments exist
  • core: Omit application_fee_amount when zero in Stripe Checkout sessions
  • core: Prevent duplicate payment notification emails on Oban retry
  • core: Return 503 when Stripe Connect webhook secret is missing
  • core: Serialise charge.refunded webhook against in-app refunds
  • core: Recover meeting state when paid checkout completes after expiry
  • core: Close TOCTOU race when host disconnects Stripe with pending bookings
  • core: Preserve booking payments past host deletion with nil attendee data
  • core: Use integer arithmetic for payment money math
  • core: Correct PaymentsLive dashboard correctness pass
  • core: Serialize concurrent refund attempts and block refunds on disputes
  • core: Correct Stripe Connect onboarding race and replay idempotency
  • core: Persist Stripe charge id on checkout completion
  • core: Widen Webhooks @SPEC to cover full feature_access error union
  • core: Drop the literal "there" salutation on anonymous refund emails
  • core: Include awaiting_payment in slot conflict queries
  • core: Add awaiting_payment and expired statuses to meeting state machine
  • core: Fix pixelated Cloudron dashboard icon
  • core: Show booker-facing emails in the recipient's language for de/fr/uk
  • core: Return bare access token from Teams OAuth fallback refresh
  • core: Show calendar reconnect prompt when event creation needs reauth
  • core: Allow disconnecting a Slack OAuth integration
  • core: Harden DashboardTour hook against scroll-jack and resize
  • core: Persist dashboard tour completion across all dismissal paths
  • core: Make dashboard tour backfill irreversible
  • core: Preserve first-seen timestamp on dashboard tour mark
  • core: Anchor sidebar tour step on the real aside element
  • core: Dim page on welcome step of dashboard tour
  • core: Cancel stale anchor polling in DashboardTour hook
  • core: Accept both yes and no as valid answers to a yes/no question
  • core: Keep edit button visible on each custom-question list row
  • core: Assign empty custom-field defaults on honeypot path and tighten typespecs
  • core: Note acknowledgement not accepted in custom questions wizard
  • core: Persist custom_fields through the meeting type save path
  • core: Handle malformed step nav and single-question wizard skip
  • core: NoteAckValidator must reject non-UTC timestamps
  • core: Tighten TimeValidator and DateValidator strictness
  • core: Keep dropdown phx-click-away bound when closed
  • core: Align Slack channel picker dropdown with design tokens
  • core: Polish Slack integration form before launch
  • core: Tighten Slack integration lifecycle and error reporting
  • core: Correct Slack worker retry handling and rate-limit backoff
  • core: Allow disabling password auth when no admin auth path is currently active
  • core: Block password auth disable when any admin still uses it
  • core: Redirect non-admins to dashboard from admin page
  • core: Show Baikal in the dashboard calendar integration list
  • core: Remove jumping hover effect on action buttons
  • core: Show Zoom as an OAuth provider in the video integration list
  • core: Repair Zoom meeting creation and harden the OAuth flow
  • core: Prevent Zoom meeting creation crash on malformed datetime
  • core: Tighten Zoom provider stub edge cases and adapter dispatch

Features

  • core: Show a loading spinner while opening Stripe Connect onboarding
  • core: Auto-save meeting type edits as you change them
  • core: Show price and custom-question count on meeting type cards
  • core: Add slow fade animations to the dashboard tour
  • core: Add a cooldown to the resend verification email button
  • core: Attach global crash reporter at startup
  • core: Rate-limit crash alerts with one throttle notice per window
  • core: Classify and forward process crashes to AdminAlerts
  • core: Add CrashReporter crash-filtering predicate
  • core: Register unhandled_crash admin alert type
  • core: Add admin alerts for permanently failed Oban jobs
  • core: Add config-driven extra static sources to the endpoint
  • core: Announce custom questions, payments and Zoom in a what's-new modal
  • core: Support expiry, admin preview and docs links in announcements
  • core: Widen the Quill booking card on short, wide viewports
  • core: Trim trailing empty weeks so the booking calendar fits
  • core: Fit Quill and Rhythm booking pages to short viewports
  • core: Add a payments dashboard for Stripe Connect, currency, and refunds
  • core: Let hosts set a price on paid meeting types
  • core: Toggle meeting payments from the admin settings page
  • core: Show reconnect prompt for revoked video integrations
  • core: Default new embed snippets to column layout
  • core: Auto-fit embed height and add column layout option
  • core: Add Reconnect button to pending Slack OAuth integrations
  • core: Add post-onboarding dashboard tour
  • core: Add dashboard tour overlay styles
  • core: Add DashboardTour JS hook for spotlight positioning
  • core: Wire dashboard tour state into DashboardLive
  • core: Tag dashboard layout elements with data-tour anchors
  • core: Add TourOverlay LiveComponent
  • core: Add dashboard tour step catalog
  • core: Expose dashboard tour helpers from Auth context
  • core: Add mark_dashboard_tour_seen user query
  • core: Migrate users.dashboard_tour_seen_at with backfill
  • core: Add dashboard_tour_seen_at field to user schema
  • core: Gate custom booking questions behind a feature flag
  • core: Redesign custom questions step with in-brand answer controls
  • core: Edit custom question options as individual fields
  • core: Show custom-field answers on host booking cards
  • core: Include custom-field answers in ICS event description
  • core: Include custom-field answers in appointment emails
  • core: Show custom-field answers on Rhythm confirmation step
  • core: Show custom-field answers on Quill confirmation step
  • core: Confirm before clearing type-specific config on type change
  • core: Add custom questions builder to meeting type form
  • core: Persist custom-field snapshot and answers on booking submission
  • core: Add Rhythm CustomQuestionsComponent for booker custom fields
  • core: Wire :questions step into Quill scheduling LiveView
  • core: Add Quill CustomQuestionsComponent for booker custom fields
  • core: Insert :questions step into scheduling state machine
  • core: Add CustomQuestions.Engine state machine for the booker wizard
  • core: Add CustomFields context module
  • core: Add CustomFields.Snapshot for freezing field definitions onto bookings
  • core: Add CustomFields.Validator dispatching by field type
  • core: Add select, multi_select, yes_no, note_ack field validators
  • core: Add phone, url, date, time, number field validators
  • core: Persist custom_fields_snapshot and custom_field_answers on meetings
  • core: Embed custom_fields in MeetingTypeSchema
  • core: Add FieldDefinition embedded schema for custom-field definitions
  • core: Add FieldOption embedded schema for custom-field selects
  • core: Add custom_fields and custom_field_answers columns
  • core: Export dropdown helpers from CoreComponents
  • core: Add standardised dropdown component
  • core: Add dropdown design tokens
  • core: Sync Zoom meetings when bookings are rescheduled or cancelled
  • core: Remove Zoom integration automatically when uninstalled from Zoom
  • core: Add Zoom as a video meeting provider
  • core: Create real Zoom meetings via Zoom REST API v2
  • core: Add Zoom OAuth authorization-code flow
  • core: Register Zoom as a video provider
  • core: Allow refreshing Slack channel list without reopening the form
  • core: Notify Slack when meetings are booked, cancelled, or rescheduled
  • core: Configure Slack via runtime environment variables
  • core: Add Slack dashboard UI
  • core: Add Slack input validation helper
  • core: Make slack_oauth_available config gate OAuth UI
  • core: Add Slack OAuth start/callback controller
  • core: Add Slack.OAuth helper with signed state tokens
  • core: Clean stale pending OAuth stubs before new install
  • core: Auto-disable Slack integration when webhook URL is revoked
  • core: Register Slack runtime config defaults
  • core: Add Slack.Dispatcher event entry point
  • core: Add SlackWorker for async message delivery
  • core: Add Slack context module
  • core: Add Slack.SlackQueries data access module
  • core: Add Slack.MessageBuilder for Block Kit payloads
  • core: Add Slack.API HTTP client
  • core: Add oauth_init and set_channel changesets to SlackIntegrationSchema
  • core: Add SlackDeliverySchema and slack_integration factory
  • core: Add SlackIntegrationSchema with OAuth + webhook URL modes
  • core: Add slack_deliveries table
  • core: Add slack_integrations table
  • core: Add SSO, reCAPTCHA, and admin alert toggles to admin settings
  • core: Disable password-auth toggle when lockout would apply
  • core: Show display name and booking slug in admin users table
  • core: Protect admin panel from auth lockout and allow self-demotion
  • core: Add admin control panel for self-hosted installs
  • core: Group calendar providers into OAuth and CalDAV sections
  • core: Add Baikal CalDAV calendar integration
  • core: Show what's-new modal on dashboard for unseen feature announcements
  • core: Cancel in-flight bookings when host disconnects Stripe
  • core: Translate meeting payments into de/fr/it/uk
  • core: Retain payment records past user deletion for tax compliance
  • core: Support paid bookings inside embed iframes via window.open
  • core: Add telemetry events for payments operations
  • core: Refresh Connect account state on return from Stripe onboarding
  • core: Add reconciliation worker for awaiting_payment meetings
  • core: Email hosts when Stripe restricts their connected account
  • core: Email hosts when Stripe opens a dispute on their booking
  • core: Email attendees when their booking payment is refunded
  • core: Add received-amount summary to organiser confirmation email
  • core: Add receipt block to attendee confirmation email
  • core: Add refunds context and host dashboard refund flow
  • core: Handle account.updated Connect webhook to refresh host capability flags
  • core: Handle charge.dispute.closed Connect webhook to reconcile booking status
  • core: Handle charge.dispute.created Connect webhook to mark booking disputed
  • core: Handle charge.refunded Connect webhook to reconcile refunds
  • core: Handle checkout.session.expired Connect webhook to free held slots
  • core: Handle checkout.session.completed Connect webhook for paid bookings
  • core: Add Stripe Connect webhook endpoint with signature and replay protection
  • core: Add Rhythm theme payment-processing and payment-cancelled tests
  • core: Add Quill theme payment-processing and payment-cancelled return pages
  • core: Branch booking orchestrator on paid vs free event types
  • core: Add Checkout Session creation for paid bookings
  • core: Add currency selector with reset confirmation to payments dashboard
  • core: Add status card, payments table, stats, and disconnect to /dashboard/payments
  • core: Add Connect Stripe controller for the payments dashboard
  • core: Add /dashboard/payments LiveView skeleton
  • core: Add Stripe Connect onboarding context with placeholder-first persistence
  • core: Add StripeAdapter test seam for Stripe API calls
  • core: Retain payment_transactions past user deletion for tax compliance
  • core: Add booking_payments schema for paid bookings
  • core: Add connect_accounts schema for Stripe Connect
  • core: Add payment fields to meeting_types schema
  • core: Add :meeting_payments feature atom with default-off self-host gating
  • core: Show reconnect prompt for revoked video integrations
  • core: Default new embed snippets to column layout
  • core: Auto-fit embed height and add column layout option
  • core: Add Reconnect button to pending Slack OAuth integrations
  • core: Add post-onboarding dashboard tour
  • core: Add dashboard tour overlay styles
  • core: Add DashboardTour JS hook for spotlight positioning
  • core: Wire dashboard tour state into DashboardLive
  • core: Tag dashboard layout elements with data-tour anchors
  • core: Add TourOverlay LiveComponent
  • core: Add dashboard tour step catalog
  • core: Expose dashboard tour helpers from Auth context
  • core: Add mark_dashboard_tour_seen user query
  • core: Migrate users.dashboard_tour_seen_at with backfill
  • core: Add dashboard_tour_seen_at field to user schema
  • core: Gate custom booking questions behind a feature flag
  • core: Redesign custom questions step with in-brand answer controls
  • core: Edit custom question options as individual fields
  • core: Show custom-field answers on host booking cards
  • core: Include custom-field answers in ICS event description
  • core: Include custom-field answers in appointment emails
  • core: Show custom-field answers on Rhythm confirmation step
  • core: Show custom-field answers on Quill confirmation step
  • core: Confirm before clearing type-specific config on type change
  • core: Add custom questions builder to meeting type form
  • core: Persist custom-field snapshot and answers on booking submission
  • core: Add Rhythm CustomQuestionsComponent for booker custom fields
  • core: Wire :questions step into Quill scheduling LiveView
  • core: Add Quill CustomQuestionsComponent for booker custom fields
  • core: Insert :questions step into scheduling state machine
  • core: Add CustomQuestions.Engine state machine for the booker wizard
  • core: Add CustomFields context module
  • core: Add CustomFields.Snapshot for freezing field definitions onto bookings
  • core: Add CustomFields.Validator dispatching by field type
  • core: Add select, multi_select, yes_no, note_ack field validators
  • core: Add phone, url, date, time, number field validators
  • core: Persist custom_fields_snapshot and custom_field_answers on meetings
  • core: Embed custom_fields in MeetingTypeSchema
  • core: Add FieldDefinition embedded schema for custom-field definitions
  • core: Add FieldOption embedded schema for custom-field selects
  • core: Add custom_fields and custom_field_answers columns
  • core: Export dropdown helpers from CoreComponents
  • core: Add standardised dropdown component
  • core: Add dropdown design tokens
  • core: Allow refreshing Slack channel list without reopening the form
  • core: Notify Slack when meetings are booked, cancelled, or rescheduled
  • core: Configure Slack via runtime environment variables
  • core: Add Slack dashboard UI
  • core: Add Slack input validation helper
  • core: Make slack_oauth_available config gate OAuth UI
  • core: Add Slack OAuth start/callback controller
  • core: Add Slack.OAuth helper with signed state tokens
  • core: Clean stale pending OAuth stubs before new install
  • core: Auto-disable Slack integration when webhook URL is revoked
  • core: Register Slack runtime config defaults
  • core: Add Slack.Dispatcher event entry point
  • core: Add SlackWorker for async message delivery
  • core: Add Slack context module
  • core: Add Slack.SlackQueries data access module
  • core: Add Slack.MessageBuilder for Block Kit payloads
  • core: Add Slack.API HTTP client
  • core: Add oauth_init and set_channel changesets to SlackIntegrationSchema
  • core: Add SlackDeliverySchema and slack_integration factory
  • core: Add SlackIntegrationSchema with OAuth + webhook URL modes
  • core: Add slack_deliveries table
  • core: Add slack_integrations table
  • core: Add SSO, reCAPTCHA, and admin alert toggles to admin settings
  • core: Disable password-auth toggle when lockout would apply
  • core: Show display name and booking slug in admin users table
  • core: Protect admin panel from auth lockout and allow self-demotion
  • core: Add admin control panel for self-hosted installs
  • core: Group calendar providers into OAuth and CalDAV sections
  • core: Add Baikal CalDAV calendar integration
  • core: Show what's-new modal on dashboard for unseen feature announcements
  • core: Sync Zoom meetings when bookings are rescheduled or cancelled
  • core: Remove Zoom integration automatically when uninstalled from Zoom
  • core: Add Zoom as a video meeting provider
  • core: Create real Zoom meetings via Zoom REST API v2
  • core: Add Zoom OAuth authorization-code flow
  • core: Register Zoom as a video provider