{ "stable": true, "versions": { "0.99.24": { "creationDate": "Thu, 12 Mar 2026 09:57:44 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Only trigger Docker builds on version tags\n* core: Correct git-cliff archive path in release workflows\n* Guard all core-sync-tmp references against early deletion\n* Guard summary against missing core-sync-tmp when no new commits\n* core: Use find to locate git-cliff binary after extraction\n* core: Restrict valid? to country-based timezones to prevent UTC fallback showing first list entry\n* saas: Add /features page with full feature reference\n* core: Add features_url config and safelist display token classes\n* saas: Add JSON-LD schema markup to docs pages\n* core: Add GitHub release workflows and cliff.toml", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.24", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.24", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Thu, 12 Mar 2026 09:57:44 GMT" }, "0.99.25": { "creationDate": "Thu, 12 Mar 2026 19:19:27 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Fix Google Calendar OAuth scope and discovery crash on 3-tuple error\n* core: Handle SaaS-tagged versions in sync_tags", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.25", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.25", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Thu, 12 Mar 2026 19:19:27 GMT" }, "0.99.26": { "creationDate": "Fri, 13 Mar 2026 11:55:59 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Show booking validation errors per-field based on touched state\n* core: Debounce email validation on auth forms to fire on blur", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.26", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.26", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 13 Mar 2026 11:55:59 GMT" }, "0.99.27": { "creationDate": "Fri, 13 Mar 2026 15:07:27 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Use valid IANA timezone in availability refinement test\n* core: Make DST slot generation test use dynamic future date\n* core: Relax flaky concurrent rate limiting test assertions\n* core: Align Google OAuth test assertions with widened calendar scope\n* core: Replace cookie rewriting with signed token auth for embeds\n* core: Add Tymeslot.Embed.Token for signed embed tokens", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.27", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.27", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 13 Mar 2026 15:07:27 GMT" }, "0.99.28": { "creationDate": "Sun, 15 Mar 2026 15:52:01 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Use IANA zone1970.tab for primary timezone country assignment\n* core: Correct iconUrl path in Cloudron manifests\n* core: Compile app before asset setup in Dockerfiles\n* core: Add packagerUrl and bump minBoxVersion in Cloudron manifests\n* core: Add packagerName to Cloudron manifests\n* core: Remove unreachable 3-tuple error pattern in OAuth helpers\n* core: Auto-generate SECRET_KEY_BASE on first Cloudron install\n* core: Add session-free WebSocket for cross-origin embed iframes", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.28", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.28", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Sun, 15 Mar 2026 15:52:01 GMT" }, "0.99.29": { "creationDate": "Tue, 17 Mar 2026 14:02:41 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Fix dashboard headline position on automation and profile pages\n* core: Use check_all_queues in healthcheck to handle test mode\n* core: Skip credential validation on update when already encrypted\n* core: Remove unused default arg in backoff_with_counter test helper\n* core: Tighten embed static path matching and guard stale remove_domain events\n* core: Fix stale modal retry interval and digested filename error handler\n* core: Harden embed edge cases found in audit\n* core: Validate event inputs in embed settings and guard JS public API\n* core: Wrap calendar deletion in transaction, extract testable boundary fn\n* core: Calendar integration edge cases — stale refs, timezone boundaries, error reporting\n* core: Harden video integration edge cases — upsert on OAuth, unique constraint, graceful JSON handling\n* core: Disable async in storage tests that mutate global Application config\n* core: Harden theme customisation — error tuples, browsing_type guard, image size limit\n* saas: Add plain-text bodies to all email templates and harden edge cases\n* core: Discard permanent meeting errors and log confirmation step failures\n* core: Patch theme edge-case review findings\n* core: Guard booking step against double-submission and direct URL access\n* core: Restore keyboard focus visibility and consolidate Inter font import\n* core: Add empty state to Rhythm overview and replace emoji icons in Quill meeting pages\n* core: Improve theme error logging and plug exception handling\n* core: Return error when all selected calendars fail in MultiCalendarFetch\n* saas: Harden payment subsystem — config, truncation, dunning resilience\n* core: Guard against non-pending transaction states in payment processing\n* saas: Harden payment edge cases across subscription lifecycle\n* core: Prevent duplicate processing of already-completed payments\n* core: Harden theme customization logic against edge cases\n* core: Harden auth security — email normalisation, token hashing, open redirect\n* core: Harden infrastructure resilience and healthcheck\n* saas: Guard HomepageLive against unknown send_to_component module\n* saas: Harden docs search and tag filtering\n* core: Normalize 3-tuple API errors to 2-tuples in ProviderCommon.discover_calendars\n* core: Decrypt CalDAV credentials and forward custom video URL in health check\n* core: Validate email format in PasswordReset.initiate_reset before anti-enumeration path\n* core: Handle invalid_input map from authenticate_user in session controller\n* core: Remove unreachable three-element error pattern in calendar primary\n* saas: Use TymeslotSaasWeb in ChangelogLive\n* core: Restore PubSub alias and canonical URL logic\n* core: Pass parent-origin to embedded iframe URL\n* core: Fall back to parent-origin param when referrer is stripped\n* core: Normalise canonical URLs to strip query params and trailing slashes\n* core: Add minimum height floor to inline embeds\n* core: Silence Tidewave compile warnings when dep is unavailable\n* saas: Eliminate flaky dispute test race condition\n* core: Handle three-tuple OAuth discovery error and move tidewave to saas\n* core: Harden embed security, accessibility, and reliability\n* core: Respect calendar event transparency (free/busy) across all providers\n* core: Wire availability overrides into business hours calculation\n* saas: Harden contact form against empty reCAPTCHA and over-limit messages\n* core: Config-driven dashboard extension system with parallel init and health check fixes\n* core: Harden iframe embed security with wildcard domains and www auto-matching\n* core: Derive PHX_HOST from CLOUDRON_APP_DOMAIN in runtime config\n* core: Derive PHX_HOST from CLOUDRON_APP_DOMAIN on Cloudron install", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.29", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.29", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Tue, 17 Mar 2026 14:02:41 GMT" }, "0.99.30": { "creationDate": "Wed, 18 Mar 2026 13:47:20 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* saas: Add missing feature icon keys to validation allowlist and emoji map\n* core: Hide reCAPTCHA v3 badge per Google's terms\n* core: Clean up iframe embedding security headers\n* core: Use signed parent_origin for embed domain verification\n* saas: 27 profession landing pages at /for/:slug\n* core: Redesign site_footer with supplemental_nav slot and column layout\n* saas: Profession landing pages at /for/:slug\n* core: Add supplemental_nav slot to site_footer for injecting extra link columns", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.30", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.30", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Wed, 18 Mar 2026 13:47:20 GMT" }, "0.99.31": { "creationDate": "Thu, 19 Mar 2026 20:13:06 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* saas: Use pattern match instead of != for non-empty list assertion\n* saas: Replace length/1 check with empty list comparison in changelog test\n* core: Use meaningful name for unused variable in maybe_extract_host\n* saas: Correct embed docs — fix wrong attributes, Shopify script instructions\n* core: Clarify embed option descriptions for non-technical users\n* core: Align embed domain tests with protocol-stripping behavior\n* core: Correct embed resize tests to match inline embed behavior\n* saas: Resolve Dialyzer type comparison warning in changelog test\n* core: Strip URL scheme/port/path in validate_domain/1\n* core: Resolve Dialyzer type comparison warning in telemetry test\n* saas: Resolve Dialyzer warnings in demo resolver and savings calculator\n* saas: Resolve credo warnings in payment_event_worker and changelog_test\n* core: Resolve credo warnings in validate_video_presets and layouts\n* saas: Implement get_range_availability in demo resolver\n* core: Compute availability over full 42-day calendar display range\n* saas: Support alphanumeric theme IDs in demo username patterns\n* core: Add missing \"All rights reserved\" to footer copyright\n* core: Reject domains with protocols in embed domain validation\n* core: Use Oban unique jobs for video transcoding and clean up variants on delete\n* core: Sanitize upload paths in video sources and close media query gap\n* core: Skip Telegram webhook registration outside production\n* saas: Fix footer use cases columns and expand related guides to four\n* core: Split Night period into Early Morning and Late Night\n* core: Split embed system into inline and modal modes\n* core: Responsive video transcoding for uploaded backgrounds\n* core: Add responsive video transcoding for uploaded backgrounds\n* core: Add natural sort for meeting types in LocalizationHelpers\n* saas: Add 10 new profession landing pages\n* saas: Add free plan pricing section to all for-pages\n* saas: Add integration + Calendly FAQs and keyword copy to all for-pages", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.31", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.31", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Thu, 19 Mar 2026 20:13:06 GMT" }, "0.99.32": { "creationDate": "Mon, 23 Mar 2026 08:44:15 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.32", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.32", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Mon, 23 Mar 2026 08:44:15 GMT" }, "0.99.33": { "creationDate": "Mon, 23 Mar 2026 10:00:27 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Add tzdata and logger config to core runtime.exs\n* core: Group handle_event clauses in ServiceSettingsComponent\n* core: Resolve WebSocket and OAuth failures on Cloudron deployment\n* core: Check max length against trimmed name in meeting type validation\n* core: Strengthen clear_calendar_references test isolation\n* core: Harden meeting types edge cases — booking validation, reorder integrity, input guards\n* themes: Scope container margin removal to modal embed mode only\n* core: Add @deprecated attrs, non-raising profile lookup, duration guard\n* core: Harden availability edge cases — IDOR protection, cache invalidation, input guards\n* core: Point tzdata at writable directory on Cloudron", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.33", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.33", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Mon, 23 Mar 2026 10:00:27 GMT" }, "0.99.34": { "creationDate": "Fri, 27 Mar 2026 08:48:58 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Derive display location from meeting fields in AppointmentBuilder\n* core: Remove unreachable pattern in scheduling_handlers with/else\n* core: Translate email location labels at render time per recipient locale\n* core: Set timezone via connect_params in availability refinement test\n* core: Set timezone via connect_params in availability refinement test\n* saas: Replace length/1 check with empty list comparison\n* core: Remove double scrollbar on time slots in constrained-height embeds\n* core: Reword comment to avoid triggering UseCoreInputs Credo check\n* core: Fix timezone dropdown height, width, and popular ordering\n* saas: Remove unimplemented daily booking limits feature\n* core: Improve Quill overview duration card visibility and avatar alignment\n* core: Prevent time slots from stretching when period has few slots\n* core: Remove HEEx comments from MJML heredoc strings\n* core: Align video OAuth re-auth tests with current integration-matching logic\n* core: Close multi-account integration gaps\n* core: Address code review findings in multi-account integrations\n* core: Harden multi-account OAuth security, correctness, and test quality\n* core: Resolve code review findings in multi-account integrations\n* core: Harden multi-account integration dedup, rate limiting, and observability\n* core: Harden workers against edge cases and security gaps\n* core: Propagate persist_calendar_mapping errors in create path\n* core: Restore first-attempt failure guards and add symlink check\n* core: Address code review findings in worker hardening\n* core: Harden Oban workers against edge cases and security gaps\n* core: Harden dashboard against task timeouts and open redirects\n* core: I18n organizer reminder email and sanitize error output in CalDAV sync\n* Preserve existing versions when adding new entry in set_version\n* core: Replace TzExtra with curated continent city modules\n* core: Multi-account integration support\n* core: Multi-account integration support with per-account uniqueness", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.34", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.34", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 27 Mar 2026 08:48:58 GMT" }, "0.99.35": { "creationDate": "Sun, 29 Mar 2026 12:35:20 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Eliminate race condition in RequestCoalescer test\n* core: Exclude migrations tag from default test runs\n* core: Add MigrationConstraintSafety Credo check\n* core: Backfill calendar provider_account_id before creating null-guard index", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.35", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.35", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Sun, 29 Mar 2026 12:35:20 GMT" }, "0.99.36": { "creationDate": "Thu, 02 Apr 2026 18:41:50 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Preserve expanded recurring event occurrences in dedup\n* core: Expand CalDAV recurring events for availability checking\n* core: Rename calendar sync migration timestamps to avoid collisions\n* core: Centralise sync window and widen to 365 days back\n* core: Scope detect_deletions to calendar path in multi-calendar CalDAV sync\n* core: Add missing 3-arity update_subscription callback to StripeProvider\n* core: Return error when cancelling an already-cancelled meeting\n* core: Remove unreachable pattern match clauses flagged by Dialyzer\n* core: Address deep review findings across calendar sync, emails, and UI\n* core: Address deep review findings across calendar sync feature\n* core: Address code review findings across calendar sync feature\n* core: Harden calendar sync against webhook abuse, circuit breaker misfire, and duplicate notifications\n* core: Disable next month when max booking date equals month boundary\n* core: Pass reserved paths to username validation\n* core: Handle Hammer TOCTOU race in rate limiter\n* core: Align webhook URL validation and default to strict mode\n* core: Address review findings in URL validation consolidation\n* core: Address review findings in validation consolidation\n* core: Replace non-existent Phoenix.LiveView.Assigns.t() with map() in component specs\n* core: Correct action_button doc and info_box spec\n* core: Prevent timing-based email enumeration and log notification failures\n* core: Replace != [] with Enum.empty? to fix Dialyzer typing violation\n* core: Address code review findings for test suite improvements\n* core: Fix CI workflow — remove unsafe test fallback and invalid audit task\n* core: Restore property-based tests removed during mocking refactor\n* core: Harden calendar sync with batch webhooks, async CRUD, and race fixes\n* core: Make profile timezone optional and rename video integration route\n* core: Update booking, meeting list, and email UI\n* core: Calendar grid inline editing and event management\n* core: Update calendar webhook controllers\n* core: Improve calendar sync workers\n* core: Calendar API and backend sync improvements\n* core: Add calendar grid UI with inline title editing\n* core: Add calendar event sync engine\n* core: Rename integration routes and add scheduling/calendar mode tab bar", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.36", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.36", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Thu, 02 Apr 2026 18:41:50 GMT" }, "0.99.37": { "creationDate": "Fri, 03 Apr 2026 09:04:50 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Handle all-day events in recurrence expander\n* core: Remove circular deps symlink breaking standalone builds", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.37", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.37", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 03 Apr 2026 09:04:50 GMT" }, "0.99.38": { "creationDate": "Fri, 03 Apr 2026 11:42:17 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* Skip pre-push hook on sync-core.sh internal pushes\n* Handle empty cherry-picks and wire up core sync in pre-push hook", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.38", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.38", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 03 Apr 2026 11:42:17 GMT" }, "0.99.39": { "creationDate": "Fri, 03 Apr 2026 15:54:55 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Add central Mox setup for HTTP client in calendar tests\n* saas: Correct Dialyzer type specs in email testing helpers\n* core: Supervise security monitoring webhook task\n* core: Correct Dialyzer type specs in security logger\n* core: Correct Dialyzer type specs across auth, bookings, emails, integrations, and security modules\n* core: Correct Dialyzer type specs for theme customisation presets\n* core: Inline changelog text in CloudronVersions.json entries\n* core: Resolve Credo config path doubling when run from child app", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.39", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.39", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 03 Apr 2026 15:54:55 GMT" }, "0.99.40": { "creationDate": "Tue, 07 Apr 2026 16:11:20 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Extract shared Date-to-DateTime coercion into DateTimeUtils.to_datetime/1\n* saas: Exclude manual subscriptions from reconciliation discrepancy checks\n* core: Skip duplicate transaction on initial subscription invoice\n* core: Address review findings in onboarding redesign\n* core: Address review findings in TLD validation\n* core: Add warning log and test assertions for partial reminder delivery\n* core: Prevent duplicate reminder emails on partial delivery failure\n* core: Defer view assign to initialisation and handle background sync\n* core: Remove dead pattern match branch in get_calendar_path\n* core: Restore calendar grid scrolling broken by empty state wrapper\n* core: Update CalendarEventWorker default to Calendar.Events\n* core: Use real user in integration_health_state schema tests\n* core: Add missing calendar integration setup in event creation tests\n* core: Add missing user FK constraint to integration_health_states\n* core: Address review findings in typespec refactor\n* core: Add central Mox setup for HTTP client in calendar tests\n* saas: Correct Dialyzer type specs in email testing helpers\n* core: Supervise security monitoring webhook task\n* core: Correct Dialyzer type specs in security logger\n* core: Correct Dialyzer type specs across auth, bookings, emails, integrations, and security modules\n* core: Correct Dialyzer type specs for theme customisation presets\n* core: Inline changelog text in CloudronVersions.json entries\n* core: Resolve Credo config path doubling when run from child app\n* core: Add translations for attendee discard confirmation plural string\n* core: Notify attendees when organiser updates event details\n* core: Redesign onboarding with split-screen layout and individual scheduling steps\n* core: Add 310 missing IANA TLDs to validation list\n* core: Expand TLD list with 77 missing domain extensions\n* core: Add TLD validation to domain validator\n* core: Add TLD validation to email validator\n* core: Add TLD list module with typo suggestions\n* core: Add TLD data file for domain ending validation\n* core: Add calendar invitation emails with attendee management\n* core: Add multi-attendee support to calendar events\n* core: Add ad-hoc meeting invitations from dashboard calendar\n* core: Show empty state banner when no calendars are connected", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.99.40", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "iconUrl": "https://raw.githubusercontent.com/Tymeslot/tymeslot/main/priv/static/images/brand/icon.png", "id": "app.tymeslot", "manifestVersion": 2, "mediaLinks": [ "https://tymeslot.app/images/cloudron-screenshots/dashboard.png", "https://tymeslot.app/images/cloudron-screenshots/availability.png", "https://tymeslot.app/images/cloudron-screenshots/embedding.png" ], "memoryLimit": 1073741824, "minBoxVersion": "9.1.0", "packagerName": "Luka Karsten Breitig", "packagerUrl": "https://lukabreitig.com", "postInstallMessage": "Thank you for installing Tymeslot!", "tagline": "Smart meeting scheduling with CalDAV", "tags": [ "calendar", "scheduling", "meetings", "caldav" ], "title": "Tymeslot", "version": "0.99.40", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Tue, 07 Apr 2026 16:11:20 GMT" } } }