Skip to content

add Calemander, Calemander Email Sending (dual provider) - #1823

Merged
pawel-kow merged 1 commit into
Domain-Connect:masterfrom
calemander:add-calemander-email-sending-dual
Sep 12, 2026
Merged

pawel-kow merged 1 commit into
Domain-Connect:masterfrom
calemander:add-calemander-email-sending-dual

Conversation

@calemander

@calemander calemander commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Description

Calemander is a scheduling platform: businesses publish booking pages, and the platform sends the booking confirmations, reminders and cancellation notices that result. This template verifies a business's sending domain with two email providers at once so the business's own from-address keeps working if one provider is unavailable. It is a separate serviceId from calemander.com.email-sending.json (#1821), which stays the single-provider template.

Records, in two groups (the apply URL always names groupId; the app never applies without one):

  • group emailit: MX emailitfeedback-smtp.ffdc-1.emailit.com
  • group emailit: SPFM emailitinclude:_spf.emailit.com
  • group emailit: TXT emailit._domainkey%dkim%
  • group resend: MX sendfeedback-smtp.us-east-1.amazonses.com
  • group resend: SPFM sendinclude:amazonses.com
  • group resend: TXT resend._domainkeyp=%resend_dkim%

All records sit under fixed labels (emailit, emailit._domainkey, send, resend._domainkey); the domain's apex MX and SPF are never touched. Both SPF records are SPFM. The two DKIM TXT records use different conflict modes on purpose: Emailit's value is the whole record (All), Resend's carries a fixed p= prefix (Prefix), matching Resend's own merged templates. The Resend record shape was verified today against a live Resend-issued record set.

syncPubKeyDomain is calemander.com with the RS256 public key published as chunked TXT at _dc1.calemander.com; syncRedirectDomain is calemander.com. Proxy preference: none of these records should be proxied.

Type of change

Please mark options that are relevant.

  • New template
  • Bug fix (non-breaking change which fixes an issue in the template)
  • New feature (non-breaking change which adds functionality to the template)
  • Breaking change (fix or feature that would cause existing template behavior to be not backward compatible)

How Has This Been Tested?

Please mark the following checks done

  • Template functionality checked using Online Editor
  • Template file name follows the pattern <providerId>.<serviceId>.json
  • resource URL provided with logoUrl is actually served by a webserver

Checklist of common problems

Mark all the checkboxes after conducting the check. Comment on any point which is not fulfilled.
See Template Quality Guidelines for details and rationale on each rule.

  • syncPubKeyDomain is set — this is mandatory; omitting it requires explicit justification in the PR description or the PR will be rejected
  • warnPhishing is not set alongside syncPubKeyDomain — the two must not appear together
  • syncRedirectDomain is set whenever the template uses redirect_uri in the synchronous flow
  • no TXT record contains SPF content ("v=spf1 ...") — use the SPFM record type instead
  • txtConflictMatchingMode is set on every TXT record that must be unique per label or content prefix (e.g. DMARC)
  • no variable is used as a bare full record value (e.g. @ TXT "%foo%") unless necessary — prefer @ TXT "service-foo=%foo%"; if bare, justify in the PR description
  • no bare variable is used as the full host label — the non-variable parts are fixed to limit misuse
  • no variable is used in the host field to create a subdomain — use the host parameter or multiInstance instead
  • %host% does not appear explicitly in any host attribute
  • essential is set to OnApply on records the end user may need to modify or remove without breaking the template (e.g. DMARC)

Note on the bare-variable rule: %dkim% is the full value of the emailit._domainkey TXT record, as in #1821, because a DKIM record's content is prescribed by RFC 6376 and carries no service prefix; the Resend record uses the p= prefix form.

Online Editor test results

Editor test link(s):

@github-actions github-actions Bot added the Test links missing No test links from Online Editor provided label Sep 11, 2026
@github-actions

Copy link
Copy Markdown

JSON Filename Check Passed

@github-actions

Copy link
Copy Markdown

JSON Schema Validation Passed

@github-actions github-actions Bot added the automerge-possible Label indicating, that restrictive linter checks all pass. For now it's PoC. label Sep 11, 2026
@github-actions

Copy link
Copy Markdown

Linter OK

calemander.com.email-sending-dual.json

Level Code Note

@github-actions github-actions Bot removed the Test links missing No test links from Online Editor provided label Sep 11, 2026
@github-actions

Copy link
Copy Markdown

PR Description Check Passed

All required sections are filled in correctly.

Details
  OK  Type of change: 1/4 checkboxes ticked
  OK  How Has This Been Tested?: all 3 checkboxes ticked
  OK  Checklist of common problems: 10/10 checkboxes ticked
  OK  Online Editor test results: 3 link(s) found
  OK  Template coverage: all 1 template(s) covered
Labels to remove: Checklist of common problems not complete, Forged editor links, PR description incomplete, Test links missing

PR description check PASSED

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Linter passed all checks — approving for auto-merge.

@pawel-kow
pawel-kow added this pull request to the merge queue Sep 12, 2026
Merged via the queue into Domain-Connect:master with commit 5f2d005 Sep 12, 2026
6 of 7 checks passed
@github-actions

Copy link
Copy Markdown

Thanks @calemander for contributing to the template. 🎉

This template has been reviewed and merged by @pawel-kow. 🙌

This template repository and its review process are maintained by independent individuals in their spare time, not as part of a paid role. If you or your company benefit from this protocol and its tools, please show your appreciation by buying a beer for @pawel-kow: https://github.com/sponsors/pawel-kow

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

automerge-possible Label indicating, that restrictive linter checks all pass. For now it's PoC.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants