{ "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* core: Add features_url config and safelist display token classes\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* 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* core: Guard against non-pending transaction states in payment processing\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* 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* 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* 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* 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": "* 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* core: Redesign site_footer with supplemental_nav slot and column layout\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": "* core: Use meaningful name for unused variable in maybe_extract_host\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* core: Strip URL scheme/port/path in validate_domain/1\n* core: Resolve Dialyzer type comparison warning in telemetry test\n* core: Resolve credo warnings in validate_video_presets and layouts\n* core: Compute availability over full 42-day calendar display range\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* 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", "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": "* 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.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* 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* 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* 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* 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* 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" }, "0.100.0": { "creationDate": "Tue, 14 Apr 2026 14:41:13 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Unbreak dashboard event creation async result path\n* core: Redirect to /dashboard after onboarding and update e2e test for 7-step flow\n* core: Wire password toggle hook on every auth form and give each a unique id\n* core: Stop back-to-website button animating from inside auth card\n* core: Remove phantom css classes and migrate password toggle to data attributes\n* core: Install tailwindcss-animate plugin and remove dead animate classes\n* core: Remove phantom css classes with no definition\n* core: Style rhythm overview empty state\n* core: Register grid-cols-14 and grid-cols-16 in Tailwind config\n* core: Replace stale xs: breakpoint on automation card test buttons\n* core: Use turquoise scale for reCAPTCHA notice links\n* core: Remove unreachable clause in availability shift_safe\n* core: Harden 2026 email helpers against edge-case inputs\n* core: Render quill time slots in a responsive grid\n* core: Adapt rhythm schedule step to iframe height via flex\n* core: Preserve unspecified calendar preference fields on partial upsert\n* core: Re-centre dashboard calendar on current time after refresh\n* core: Keep cancel button icon and label on one line\n* core: Handle OAuth plain-map events in blocking? and convert_events_to_timezone\n* core: Convert CalDAV EXDATE values to Date for cache storage\n* core: Fold created_by_tymeslot into recreate_provider_calendar_events migration\n* core: Normalize OAuth calendar events in EventsRead fetch path\n* core: Set stable field to current version string in CloudronVersions.json\n* core: Restore missing [0.99.39] section in Cloudron CHANGELOG\n* core: Replace fixed CSS values with fluid responsive equivalents\n* core: Resolve code review issues from module-splits deep review\n* core: Resolve architecture issues and add test coverage after code review\n* core: Harden event fingerprinting after code review\n* core: Add @spec to where_overlapping_range\n* core: Improve Google OAuth UX and deduplicate calendar callback rate limiting\n* core: Scrub PII before logging, harden hostname fallback, trim emails\n* core: Address code review findings for canonical CalendarEvent\n* core: Validate calendar discovery input before rate-limiting\n* core: Use user-id for calendar rate limits and reset is_saving on throttle\n* core: Add missing rate limits to calendar event creation and connection tests\n* core: Restore real HealthCheck module in HealthCheckTest setup\n* core: Update stale subscription schema reference in customer lookup test\n* core: Resolve Dialyzer warnings in Profiles module\n* core: Address review findings in co-location branch\n* core: Resolve rebase conflict artifacts in email worker and onboarding\n* core: Address review findings in bounded health check changes\n* core: Bound health check job execution to prevent 10+ minute runs\n* core: Redesign transactional and system emails for 2026\n* core: Add periodic forced full re-sync for CalDAV integrations\n* core: Fingerprint calendar events created by Tymeslot\n* core: Add og-image.png social card for Open Graph meta tags\n* core: Enrich admin alerts with structured reason and PII scrubbing\n* core: Normalise all calendar providers through canonical CalendarEvent\n* core: Add canonical CalendarEvent struct and provider_calendar_events table\n* core: Add standardised admin alerts infrastructure\n* core: Add Credo check enforcing Repo call boundaries", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.0", "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.100.0", "website": "https://tymeslot.app" }, "publishState": "revoked", "ts": "Tue, 14 Apr 2026 14:41:13 GMT" }, "0.100.1": { "creationDate": "Wed, 15 Apr 2026 20:13:06 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Add consecutive_hard_failures to monitor test state fixtures\n* core: Rename bare _ bindings to _upserted in sync sweep worker test\n* core: Address deep review findings for Outlook sync bootstrap refactor\n* core: Decouple Outlook sync bootstrap from push subscription and land cache/security cleanups\n* core: Handle DST transitions in convert_to_utc and expand TZID coverage\n* core: Strip quoted TZID and normalise provider timezones (closes #38)\n* core: Align booking conflict check with canonical blocking predicate\n* core: Harden security module against edge-case bypasses\n* core: Honour configured meeting type order on public booking page\n* core: Normalise provider to atom in CalDAV health check client\n* Resolve umbrella root from RELEASE_ROOT in runtime config\n* core: Stop entity-encoding plain-text fields in UniversalSanitizer\n* core: Prevent Quick Actions card overflow on mobile dashboard\n* core: Prevent logo and user dropdown overlap on mobile dashboard\n* core: Hide back-to-website button on mobile auth pages", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.1", "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.100.1", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Wed, 15 Apr 2026 20:13:06 GMT" }, "0.100.2": { "creationDate": "Thu, 16 Apr 2026 09:35:32 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Guard against nil calendar_paths in CalDAV queue wiring\n* core: Retain etag in provider_metadata for CalDAV events\n* core: Address deep review findings for scheduling availability refresh\n* core: Refresh scheduling page availability on calendar sync\n* core: Address deep review findings for attendee notifications\n* core: Resolve Dialyzer warnings in CalDAV queue wiring\n* core: Address deep review findings for CalDAV reliability branch\n* core: Make CalDAV full-fetch reconciliation atomic\n* core: Centralise attendee notifications with change detection and ICS sequencing\n* core: Centralise attendee notifications with change detection and ICS sequencing\n* core: Handle move_event_async failures via offline queue\n* core: Wire dashboard direct edit into CalDAV offline queue\n* core: Wire dashboard create/delete into CalDAV offline queue\n* core: Wire CalendarEventWorker into CalDAV offline queue\n* core: CalDAV offline write queue\n* core: Persist raw iCal body alongside parsed CalDAV events\n* core: Re-probe CalDAV sync tier on forced full fetch\n* core: Retry CalDAV conditional PUTs on transient errors\n* core: CalDAV conflict-resolution policy on 412", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.2", "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.100.2", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Thu, 16 Apr 2026 09:35:32 GMT" }, "0.100.3": { "creationDate": "Thu, 16 Apr 2026 13:39:00 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Add local icon path to manifest and use boolean stable field\n* core: Populate empty 0.99.32 changelog and correct install URL\n* core: Remove dead nil guard and fix bare underscore patterns in CalDAV queue wiring\n* core: Add :mix to child app Dialyzer PLT", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.3", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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.100.3", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Thu, 16 Apr 2026 13:39:00 GMT" }, "0.100.4": { "creationDate": "Thu, 16 Apr 2026 13:52:05 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Use boolean stable field in CloudronVersions.json", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.4", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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.100.4", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Thu, 16 Apr 2026 13:52:05 GMT" }, "0.100.5": { "creationDate": "Thu, 16 Apr 2026 15:33:28 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Isolate shared breaker state in bootstrap_sync circuit test\n* core: Expand recurring events in fresh-fetch availability path", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.5", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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.100.5", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Thu, 16 Apr 2026 15:33:28 GMT" }, "0.100.6": { "creationDate": "Fri, 17 Apr 2026 08:00:21 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Suppress CalDAV/iMIP auto-scheduling for booked events\n* core: Widen provider_calendar_events text columns to unbounded text\n* core: Handle 3-tuple api_error in Outlook fallback sync sweep\n* core: Deduplicate upsert batch by uid to prevent cardinality violation\n* core: Accept calendar server URLs without an explicit scheme", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.6", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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.100.6", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 17 Apr 2026 08:00:21 GMT" }, "0.100.7": { "creationDate": "Fri, 17 Apr 2026 16:29:06 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Prevent calendar grid crash on invalid user timezone\n* core: Extend IDOR prevention to booking-form reschedule paths\n* core: Prevent IDOR on meeting cancel/reschedule\n* core: Emit METHOD:PUBLISH cancellations and harden ICS parameters\n* core: Allow Stripe billing and checkout hosts in CSP form-action\n* core: Create default weekly schedule for OAuth users", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.7", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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.100.7", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 17 Apr 2026 16:29:06 GMT" }, "0.100.8": { "creationDate": "Fri, 17 Apr 2026 20:39:29 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Prevent Docker first-run failure when PostgreSQL volume is root-owned\n* core: Supervise fire-and-forget tasks in auth and webhook paths\n* core: Isolate per-request state on reused worker processes\n* core: Move video-room HTTP call outside DB transaction\n* core: Invalidate availability cache after calendar sync persists\n* core: Re-anchor UTC-midnight all-day events to owner tz in availability", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.8", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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.100.8", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 17 Apr 2026 20:39:29 GMT" }, "0.100.9": { "creationDate": "Mon, 20 Apr 2026 10:30:17 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Prevent uploaded non-media files from being served as HTML\n* core: Restore Outlook calendar sync broken by Graph delta query rejection\n* core: Prevent Nextcloud calendar setup failure on common hostnames\n* core: Make Docker QuickStart succeed on Docker Desktop and bind-mounts\n* core: Surface calendar refresh flashes that were silently dropped\n* core: Surface booking and theme error flashes that were silently dropped\n* core: Translate user-facing emails in French, German, and Ukrainian\n* core: Warn in dashboard when a calendar integration has no calendars selected", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.9", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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.100.9", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Mon, 20 Apr 2026 10:30:17 GMT" }, "0.100.10": { "creationDate": "Tue, 21 Apr 2026 14:51:19 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Count all concurrent failed login attempts toward account lockout\n* core: Restore meeting-type creation when no calendar is selected\n* core: Deliver attendee notifications on calendar event updates\n* core: Prevent password-reset race that could overwrite a user's new password\n* core: Prevent availability crash on DST-transition break times\n* core: Collapse duplicate time slot labels on daylight-saving fall-back days\n* core: Prevent CalDAV sync crash on malformed server responses\n* core: Honour :already_scheduled dedup contract in CalendarJobs\n* core: Reject double-encoded open-redirect payloads\n* core: Sign pagination cursors to prevent forged keyset offsets\n* core: Block webhook delivery redirects to private networks\n* core: Flag calendar integrations for reauth on decryption failure\n* core: Preserve circuit-breaker state across worker restarts\n* core: Keep account lockout counter in effect across restarts\n* core: Block XSS via custom theme CSS breakout\n* core: Require OAuth callback state to match session user\n* core: Add Italian to supported booking and email languages", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.10", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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.100.10", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Tue, 21 Apr 2026 14:51:19 GMT" }, "0.100.11": { "creationDate": "Thu, 23 Apr 2026 11:21:47 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Prevent reCAPTCHA tokens being corrupted during form validation\n* core: Derive with_retry_async's Task.await timeout from the retry budget\n* core: Prevent search engines from indexing booking pages\n* core: Surface timezone conversion failures from ensure_utc/1\n* core: Surface OAuth token persistence failures loudly\n* core: Deliver reschedule confirmation emails without pattern mismatch\n* core: Warn when toggling a deleted calendar integration\n* core: Show validation error when break end time precedes start time", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.11", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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.100.11", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Thu, 23 Apr 2026 11:21:47 GMT" }, "0.100.12": { "creationDate": "Fri, 24 Apr 2026 14:10:20 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Stop deleted CalDAV events from reappearing on refresh\n* core: Keep the dashboard in sync after editing a calendar event\n* core: Preserve CalDAV reauth flag when worker DB write fails\n* core: Harden CalDAV reconnect flow\n* core: Add 3-day view, swipe navigation, and responsive view demotion\n* core: Flag CalDAV integrations needing reauth when sync hits 401\n* core: Allow CalDAV credential rotation without recreating the integration\n* core: Add OAuth reconnect button to calendar integration cards", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.12", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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.100.12", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 24 Apr 2026 14:10:20 GMT" }, "0.100.13": { "creationDate": "Tue, 28 Apr 2026 14:00:59 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Fix mailbox.org calendar discovery failing with unsupported provider error\n* core: Prevent crash when clicking mailbox.org calendar provider\n* core: Auto-discover calendars during CalDAV onboarding\n* core: Keep signup form responsive when the email field is missing\n* core: Downgrade webhook redirects from POST to GET on 301/302/303\n* core: Make Outlook delta sync resilient to expired and partial responses\n* core: Align booking integration selection across meeting schemas\n* core: Stop duplicating attendee message in calendar events\n* core: Correct mailbox.org provider integration after pre-merge review\n* core: Reject blank CalDAV credentials before connecting\n* core: Keep Radicale auth failures flagged for reauth after 403 mapping change\n* core: Finish wiring mailbox.org through onboarding and runtime client paths\n* core: Enable mailbox.org in the runtime calendar-provider toggle list\n* core: Include mailbox.org in remaining CalDAV provider lists\n* core: Hide task-only CalDAV calendars from event calendar pickers\n* core: Prevent CalDAV permission errors from disconnecting calendars\n* core: Pre-fill and lock server URL in mailbox.org calendar setup\n* core: Add setup guide links to CalDAV provider configuration forms\n* core: Notify users immediately when integration credentials become invalid\n* core: Add mailbox.org as a CalDAV calendar provider\n* core: Load environment variables from a .env file at boot", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.13", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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.100.13", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Tue, 28 Apr 2026 14:00:59 GMT" }, "0.100.14": { "creationDate": "Thu, 30 Apr 2026 14:55:11 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Prevent CalDAV sync crash on all-day recurring events with EXDATEs\n* core: Fix Nextcloud connection test failing for bare server URLs\n* core: Auto-pause integrations stuck unhealthy past the configured cutoff", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.14", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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.100.14", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Thu, 30 Apr 2026 14:55:11 GMT" }, "0.100.15": { "creationDate": "Wed, 06 May 2026 09:28:18 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Translate reCAPTCHA notice text so it localises with the booking form\n* core: Translate location placeholder in booking confirmation emails\n* core: Translate location placeholder in booking confirmation emails\n* core: Fix invisible reply text in Thunderbird dark mode\n* core: Restore CalDAV booking creation when discovery omits path", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.15", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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.100.15", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Wed, 06 May 2026 09:28:18 GMT" }, "0.100.16": { "creationDate": "Wed, 06 May 2026 17:13:32 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Apply calendar deselection to CalDAV sync immediately\n* core: Prevent calendar dashboard crash on 3+ overlapping all-day events\n* core: Reject Google Calendar connections without write access\n* core: Add custom colour picker for booking page palettes and backgrounds\n* core: Add rotating file logs with sensitive-data redaction", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:0.100.16", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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.100.16", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Wed, 06 May 2026 17:13:32 GMT" }, "1.0.0": { "creationDate": "Fri, 08 May 2026 07:17:36 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Add marketing-list opt-out helpers to Auth", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.0.0", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.0.0", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 08 May 2026 07:17:36 GMT" }, "1.0.1": { "creationDate": "Fri, 08 May 2026 16:57:38 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Correct availability and slot ordering in the booking calendar\n* core: Fix pixelated Cloudron dashboard icon", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.0.1", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.0.1", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 08 May 2026 16:57:38 GMT" }, "1.0.2": { "creationDate": "Tue, 12 May 2026 14:49:53 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Prevent duplicate booking invites from CalDAV servers (closes #41)", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.0.2", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.0.2", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Tue, 12 May 2026 14:49:53 GMT" }, "1.0.3": { "creationDate": "Fri, 22 May 2026 10:27:45 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Allow moving events between calendar integrations\n* core: Prevent email header injection in subject lines\n* core: Use a neutral greeting in transactional emails when no name is set\n* core: Route demo meeting-type slug lookup through Demo facade\n* core: Skip force-with-lease for new remote branches in sync-core.sh\n* core: Respect calendar selection in meeting picker and grid\n* core: Show placeholder hints in form inputs\n* core: Prevent CalDAV event delete and update from failing through circuit breaker\n* core: Prevent Docker container from failing to restart with an existing volume\n* core: Preserve special characters in meeting titles and labels", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.0.3", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.0.3", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 22 May 2026 10:27:45 GMT" }, "1.0.4": { "creationDate": "Fri, 29 May 2026 07:45:14 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Restore clipped dropdown menus in the calendar grid toolbar\n* core: Refresh Outlook calendars on demand with a rolling sync window\n* core: Create Google Meet links inline with Google Calendar events", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.0.4", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.0.4", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 29 May 2026 07:45:14 GMT" }, "1.0.5": { "creationDate": "Wed, 03 Jun 2026 08:11:00 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Repair payment-transactions user FK to cascade on delete\n* core: Keep real-time calendar sync working for all connected calendars", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.0.5", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.0.5", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Wed, 03 Jun 2026 08:11:00 GMT" }, "1.1.0": { "creationDate": "Tue, 16 Jun 2026 07:46:12 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Correct sender identity in host operational alert emails\n* core: Treat unfinished Stripe onboarding as incomplete, not restricted\n* core: Distinguish superseded from expired email verification links\n* core: Stop duplicate emails when SMTP delivery is slow\n* core: Keep verification and reset links valid after a resend\n* core: Repair custom-field min/max persisted as JSON numbers\n* core: Prevent Google Calendar sync crash on token-refresh failure\n* core: Harden crash reporter and skip it when admin alerts are disabled\n* core: Prevent admin-alert floods from repeated crashes and job failures\n* core: Attach crash reporter after the supervision tree is up\n* core: Correct crash reporter loop-prevention domain filters\n* core: Update final onboarding step CTA to go to dashboard\n* [BREAKING] core: Correct Docker Compose env forwarding, volumes, and DB config\n* core: Stop endless sync retries when a calendar is deleted on the provider side\n* core: Auto-deselect Google calendars deleted on the provider side\n* core: Make POSTGRES_PASSWORD optional when building the Docker image\n* core: Prevent admin alert email floods when many jobs fail at once\n* core: Redact calendar identifiers and token-bearing paths from logs\n* core: Keep password-reset and verification links out of job logs\n* core: Redact identifiers from request and LiveView logs\n* core: Update final onboarding step CTA to go to dashboard\n* [BREAKING] core: Correct Docker Compose env forwarding, volumes, and DB config\n* core: Make the calendar private-IP guard configurable\n* core: Fill missing English catalogue entries for new messages\n* core: Reject theme video uploads when transcoding is unavailable\n* core: Give dropdown dialogs accessible names\n* core: Improve the dashboard tour on small screens\n* core: Restore centred embed layout and make wide layout opt-in\n* core: Translate booking flash messages\n* core: Remove orphaned calendar events when booking sync fails\n* core: Block private-network addresses in calendar server URLs\n* core: Prevent a crash when dismissing an announcement twice\n* core: Prevent locking yourself out of sign-in settings\n* core: Validate custom question answers and bounds more strictly\n* core: Improve paid booking reliability and payment errors\n* core: Keep video meeting links in sync when bookings change\n* core: Protect Slack webhook secrets and handle rate limits\n* core: Validate LiveComponents via __live__/0 instead of optional update/2\n* core: Fill missing English translation for \"New feature\" label\n* core: Keep dashboard sidebar fixed while only the content scrolls\n* core: Preserve typed answers when navigating booking questions\n* core: Reject overly long phone numbers in booking questions\n* core: Keep Quill meeting-type cards a fixed size on hover and selection\n* core: Size Quill meeting-type step to match the calendar step\n* core: Remove clipped copy-link confirmation tooltip in dashboard sidebar\n* core: Stop false type-change warning when editing a custom question\n* core: Show embed live preview before embed domains are configured\n* core: Copy booking link to clipboard on onboarding ready step\n* core: Show a loading spinner while opening Stripe Connect onboarding\n* core: Auto-save meeting type edits as you change them\n* core: Show price and custom-question count on meeting type cards\n* core: Add slow fade animations to the dashboard tour\n* core: Add a cooldown to the resend verification email button\n* core: Attach global crash reporter at startup\n* core: Rate-limit crash alerts with one throttle notice per window\n* core: Classify and forward process crashes to AdminAlerts\n* core: Add CrashReporter crash-filtering predicate\n* core: Register unhandled_crash admin alert type\n* core: Add admin alerts for permanently failed Oban jobs\n* core: Add config-driven extra static sources to the endpoint\n* core: Announce custom questions, payments and Zoom in a what's-new modal\n* core: Support expiry, admin preview and docs links in announcements", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.1.0", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.1.0", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Tue, 16 Jun 2026 07:46:12 GMT" }, "1.1.1": { "creationDate": "Wed, 17 Jun 2026 12:23:09 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Stop Zoom video integration falsely reporting connection issues\n* core: Create Google Meet links without a duplicate calendar event\n* core: Harden Finch HTTP pool against transient pool_not_available errors\n* core: Prevent calendar webhook renewal crash on provider network errors\n* core: Show try-later message when Stripe payment setup is temporarily unavailable", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.1.1", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.1.1", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Wed, 17 Jun 2026 12:23:09 GMT" }, "1.2.0": { "creationDate": "Fri, 19 Jun 2026 11:05:35 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Add id to booking-link slug form for LiveView form recovery\n* core: Prevent booking page step labels from clipping in themes\n* core: Accept text/plain handshake for calendar webhook validation\n* core: Label footer legal link as \"Terms and Conditions\"\n* core: Scroll to top reliably when navigating between pages\n* core: Add config-driven Resources navigation menu\n* core: Announce guest attendees and illustrate the booking-link modal\n* core: Add booking-link share previews with organiser photo and details\n* core: Add icons to the navigation menu and Features dropdown\n* core: Support a Features navigation dropdown via :feature_pages config\n* core: Add eligible-user count query to Auth context\n* core: Scroll to top on internal link navigation site-wide\n* core: Add config-gated pricing link to nav and footer\n* core: Add Contact link to desktop site navigation\n* core: Add config-gated pricing link to nav and footer", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.2.0", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.2.0", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 19 Jun 2026 11:05:35 GMT" }, "1.2.1": { "creationDate": "Tue, 23 Jun 2026 16:53:16 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Only require ANALYTICS_SALT_SECRET when booking analytics is enabled\n* core: Stop button icons wrapping onto their own line\n* core: Include config-referenced heroicons in the asset bundle\n* core: Keep Quill booking content readable over image backgrounds\n* core: Show hamburger nav on tablets, not just phones\n* core: Match mobile nav menu structure to desktop\n* core: Verify reCAPTCHA before consuming per-recipient booking limit\n* core: Validate every resolved address in SSRF guard\n* core: Rate-limit booking confirmations per recipient to curb email abuse\n* core: Block SSRF to internal hosts on CalDAV and video integrations\n* core: Drop 'unsafe-inline' from CSP script-src\n* core: Propagate CSP nonce to the reCAPTCHA loader script\n* core: Drop unused 'unsafe-eval' from CSP script-src\n* core: Present booking-analytics visitors and conversion as estimates\n* core: Suppress false booking-analytics anomaly alerts on small samples\n* core: Stop capturing arbitrary query parameters in booking analytics\n* core: Stop false booking-analytics anomaly alerts across day boundaries\n* core: Count booking-page visitors consistently when the client IP is unknown\n* core: Trust forwarded IP headers only from known proxies on live connections\n* core: Resolve the real client IP on live connections behind a proxy\n* core: Prevent scheduling page crash when booking analytics is enabled\n* core: Base booking-analytics conversion on actual converting visitors\n* core: Count a booking-page visitor once across meeting types\n* core: Bound persisted tracking-param size at the data layer\n* core: Harden booking analytics ingestion and dashboard\n* core: Stabilise top_sources tiebreak order\n* core: Refine and gate the booking analytics dashboard\n* core: Exclude an organizer's own page visits from booking analytics\n* core: Add vendor-neutral analytics view-on-mount hook\n* core: Show custom question answers in synced calendar events\n* core: Add per-request CSP nonce to script-src\n* core: Add device-type breakdown to booking analytics\n* core: Add admin toggle for booking analytics\n* core: Make booking analytics opt-in via config flag\n* core: Add generic data-analytics-event click tracking\n* core: Emit booking-page-published telemetry on first publish\n* core: Emit booking-created telemetry on guest bookings\n* core: Emit calendar-connected telemetry with provider\n* core: Emit onboarding-completed telemetry\n* core: Add analytics dashboard with sources and visits over time\n* core: Add VisitsChart component for analytics dashboard\n* core: Add SourcesTable component for analytics dashboard\n* core: Add SummaryCards component for analytics dashboard\n* core: Persist UTM and tracking params on bookings end-to-end\n* core: Log page views on public scheduling routes\n* core: Persist UTM and tracking parameters on bookings\n* core: Cast UTM and tracking fields on meetings\n* core: Add UTM and tracking columns to meetings\n* core: Add Analytics context with log_page_view and reads\n* core: Add UtmExtractor for UTM and custom tracking params\n* core: Add Analytics rate limiter for event ingestion\n* core: Add BotDetector for UA-based bot filtering\n* core: Add daily-salted Fingerprint for cookie-less analytics\n* core: Add EventQueries for analytics reads\n* core: Add EventSchema for analytics events\n* core: Add analytics_events table for booking analytics", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.2.1", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.2.1", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Tue, 23 Jun 2026 16:53:16 GMT" }, "1.2.2": { "creationDate": "Wed, 24 Jun 2026 07:39:12 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Serve gzip static assets only in production\n* core: Give the analytics dashboard refresh visible feedback\n* core: Add one-click Google Calendar connect to onboarding", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.2.2", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.2.2", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Wed, 24 Jun 2026 07:39:12 GMT" }, "1.2.3": { "creationDate": "Wed, 24 Jun 2026 13:48:19 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "WordPress embed guidance, a public FAQ page, and stability fixes.\n* Embed dashboard links WordPress users to the official plugin\n* Blocked embeds show a clear notice rather than the homepage", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.2.3", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.2.3", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Wed, 24 Jun 2026 13:48:19 GMT" }, "1.2.4": { "creationDate": "Thu, 25 Jun 2026 12:52:02 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "Session security hardening, stage-aware onboarding emails, and marketing page improvements.\n* Sessions end immediately on logout or credential change", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.2.4", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.2.4", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Thu, 25 Jun 2026 12:52:02 GMT" }, "1.2.5": { "creationDate": "Mon, 29 Jun 2026 08:02:03 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "Personal free/busy feed, richer calendar events, and CalDAV improvements.\n* Personal free/busy calendar feed for sharing availability externally\n* Calendar events enriched with conference links, language tags and free/busy status\n* SMTP now accepts wildcard TLS certificates", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.2.5", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.2.5", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Mon, 29 Jun 2026 08:02:03 GMT" }, "1.3.0": { "creationDate": "Wed, 01 Jul 2026 12:20:26 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "A fuller in-app calendar, Apple iCloud sync, and Tymeslot's move to open source under AGPLv3.\n* Create recurring and all-day calendar events, with colours and reminders\n* Quick-add, search, agenda view and keyboard shortcuts for the calendar\n* Apple iCloud added as a calendar provider alongside Google, Outlook and CalDAV\n* Live booking-page preview and theme picker moved into onboarding\n* Relicensed under AGPLv3, so self-hosters can modify and redistribute Tymeslot", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.3.0", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.3.0", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Wed, 01 Jul 2026 12:20:26 GMT" }, "1.4.0": { "creationDate": "Mon, 06 Jul 2026 18:08:26 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "A unified integrations hub, calendar colour sync, and a live dashboard agenda, alongside encryption, security and accessibility hardening.\n* Unified integrations hub for calendars, video and payments with health status and one-click reconnect\n* Event colours now sync both ways with your calendar provider\n* Data-at-rest encryption key can be rotated independently of deployment\n* Live \"Your day\" agenda and setup nudges on the dashboard overview\n* Improved keyboard and screen-reader accessibility across booking and dashboard", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.4.0", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.4.0", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Mon, 06 Jul 2026 18:08:26 GMT" }, "1.4.1": { "creationDate": "Wed, 08 Jul 2026 08:37:39 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "A branded 404 page, an onboarding calendar fix, and security patches to bundled dependencies.\n* A branded 404 page for unknown routes\n* Security patches for bundled HTTP dependencies (plug, hpax, mint)", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.4.1", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.4.1", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Wed, 08 Jul 2026 08:37:39 GMT" }, "1.4.2": { "creationDate": "Tue, 14 Jul 2026 16:04:10 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "Maintenance release with behind-the-scenes improvements.", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.4.2", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.4.2", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Tue, 14 Jul 2026 16:04:10 GMT" }, "1.4.3": { "creationDate": "Fri, 17 Jul 2026 08:21:39 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* core: Clear the reschedule-requested state once the attendee rebooks\n* core: Remove calendar event and reminders when a reschedule is requested\n* core: Show current city names for legacy timezone ids browsers report\n* core: Show cancel and reschedule times in the attendee's timezone\n* core: Accept valid timezones the format check wrongly rejected\n* core: Retry the initial Outlook calendar sync after connecting", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.4.3", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.4.3", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 17 Jul 2026 08:21:39 GMT" }, "1.4.4": { "creationDate": "Fri, 17 Jul 2026 12:52:48 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "Descriptions on meeting type cards, a Stripe API generation upgrade, a Connect onboarding fix, and security patches for six bundled dependencies.\n* Descriptions now appear on meeting type cards\n* Security patches for six bundled dependencies, including Phoenix and LiveView\n* Stripe now runs on the 2025-11-17 API generation, no webhook changes needed\n* Stripe Connect onboarding no longer blocked by the security policy\n* Booking pages no longer fail on daylight-saving changeover days", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.4.4", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.4.4", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 17 Jul 2026 12:52:48 GMT" }, "1.5.0": { "creationDate": "Sat, 25 Jul 2026 06:17:51 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "* [BREAKING] core: Select an external database only when DATABASE_URL is remote\nExternal PostgreSQL support and a slim Docker image, faster page loads, and calendar sync and accessibility fixes.\n* Connect to an external PostgreSQL with DATABASE_URL, including TLS\n* A slim Docker image that runs PostgreSQL as its own container\n* Faster page loads with zstd-compressed assets and lighter provider icons\n* Calendar event updates use the provider's id, fixing Google sync failures", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.5.0", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.5.0", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Sat, 25 Jul 2026 06:17:51 GMT" }, "1.6.0": { "creationDate": "Fri, 31 Jul 2026 15:51:37 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "New email delivery providers alongside calendar sync, video link and email reliability fixes.\n* Send email through SendGrid, Mailgun or AhaSend as well as SMTP and Postmark\n* Read-only calendars are no longer offered as booking targets\n* Organisers and guests now reliably receive video join links\n* CalDAV sync recovers from emptied calendars and stricter servers\n* A misconfigured email provider now fails at startup instead of silently dropping mail", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.6.0", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.6.0", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Fri, 31 Jul 2026 15:51:37 GMT" }, "1.7.0": { "creationDate": "Tue, 04 Aug 2026 10:46:51 GMT", "manifest": { "addons": { "localstorage": {}, "oidc": { "loginRedirectUri": "/auth/oauth/callback" }, "postgresql": {}, "sendmail": {} }, "author": "Luka Karsten Breitig", "changelog": "Calendar feed subscriptions and invoicing for paid bookings, with CalDAV sync and daylight-saving fixes.\n* Subscribe to any published calendar feed by URL and have it block your availability\n* Invoices are now issued automatically for paid meeting bookings\n* CalDAV sync no longer stalls or drops events on stricter servers\n* Booking times stay correct across daylight-saving and the 2026 clock changes", "contactEmail": "hello@tymeslot.app", "description": "A meeting scheduler application with CalDAV integration", "dockerImage": "luka1thb/tymeslot-cloudron:1.7.0", "documentationUrl": "https://tymeslot.app/docs", "healthCheckPath": "/healthcheck", "httpPort": 4000, "icon": "priv/static/images/brand/icon.png", "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": "1.7.0", "website": "https://tymeslot.app" }, "publishState": "published", "ts": "Tue, 04 Aug 2026 10:46:51 GMT" } } }