Skip to content

HQ Coach subdomain templates#740

Closed
kyrixdev wants to merge 12 commits intoDomain-Connect:masterfrom
kyrixdev:master
Closed

HQ Coach subdomain templates#740
kyrixdev wants to merge 12 commits intoDomain-Connect:masterfrom
kyrixdev:master

Conversation

@kyrixdev
Copy link
Copy Markdown

@kyrixdev kyrixdev commented Feb 1, 2026

Description

Domain Connect templates for HQ Coach (https://hq.coach), a fitness coaching CRM platform that allows coaches and gym owners to manage their clients, forms, payments, and email communications.

These templates enable one-click custom domain setup for HQ Coach users through DNS providers that support Domain Connect (e.g., GoDaddy).

Templates:

  • hq.coach.forms.json — CNAME record for client forms, check-ins, and assessments (e.g., forms.yourdomain.comproxy.hq.coach)
  • hq.coach.payment.json — CNAME record for payment links and invoices (e.g., pay.yourdomain.comproxy.hq.coach)
  • hq.coach.email.json — SPF, DKIM (via Resend), DMARC, and domain verification records for sending emails from the user's own domain (e.g., no-reply@yourdomain.com)

All templates use the synchronous flow with digital signatures (syncPubKeyDomain: "hq.coach"). The RSA public key is published at _dck1.hq.coach. syncRedirectDomain is also set since we use redirect_uri for callback handling.

Type of change

  • 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?

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

Checklist of common problems

  • digital signatures are used and syncPubKeyDomain specified — set to hq.coach, public key published at _dck1.hq.coach
  • syncRedirectDomain is specified when intended to use redirect_uri parameter in the synchronous flow — set to hq.coach
  • no TXT record with SPF content — email template uses SPFM type for proper SPF merging; forms/payment templates have no SPF records
  • txtConflictMatchingMode is set on TXT records which shall be unique on a label — DMARC record has "txtConflictMatchingMode": "Full", Resend verification record has "Prefix" with "txtConflictMatchingPrefix": "resend-verification="
  • variables are set to the smallest scope needed — only %resendVerification% in email template, scoped within fixed format resend-verification=%resendVerification%; forms/payment have no custom variables at all
  • no variables as a host name to apply template on subdomain — forms/payment use hostRequired: true with standard host parameter and "host": "@"; email uses hostRequired: false (records apply to root domain)
  • no explicit usage of %host% variable in host attribute — all record hosts use @ or fixed strings (resend._domainkey, _dmarc, _resend)
  • essential setting is used on records which the user shall be able to change or remove manually — DMARC record has "essential": "Always" so users can adjust their DMARC policy without dropping the whole template

Example variable values

hq.coach.forms.json (no custom variables, only standard host):

{
"testData": {
"with-host": {
"variables": {
"domain": "example.com",
"host": "forms"
},
"results": [
{
"type": "CNAME",
"name": "forms",
"ttl": 3600,
"data": "proxy.hq.coach"
}
]
}
}
}

hq.coach.payment.json (no custom variables, only standard host):

{
"testData": {
"with-host": {
"variables": {
"domain": "example.com",
"host": "pay"
},
"results": [
{
"type": "CNAME",
"name": "pay",
"ttl": 3600,
"data": "proxy.hq.coach"
}
]
}
}
}

hq.coach.email.json:

{
"testData": {
"email-setup": {
"variables": {
"domain": "example.com",
"resendVerification": "re_abc123def456"
},
"results": [
{
"type": "TXT",
"name": "_resend",
"ttl": 3600,
"data": ""resend-verification=re_abc123def456""
},
{
"type": "SPFM",
"name": "@",
"data": "include:amazonses.com"
},
{
"type": "CNAME",
"name": "resend._domainkey",
"ttl": 3600,
"data": "resend._domainkey.resend.com"
},
{
"type": "TXT",
"name": "_dmarc",
"ttl": 3600,
"data": ""v=DMARC1; p=none; rua=mailto:dmarc@hq.coach""
}
]
}
}
}

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 1, 2026

Linter OK

hq.coach.email.json

Level Code Note

hq.coach.forms.json

Level Code Note

hq.coach.payment.json

Level Code Note

@kyrixdev
Copy link
Copy Markdown
Author

kyrixdev commented Feb 1, 2026

Hi maintainers! 👋

These templates are for HQ Coach (https://hq.coach), a fitness coaching CRM platform that allows coaches and gym owners to manage their clients.

Use Case:
Our users (fitness coaches, gym owners) want to use their own custom domains for:

  • Forms (forms.theirdomain.com) - Client check-in forms, assessments, and intake forms
  • Payments (pay.theirdomain.com) - Payment links and invoices

Currently, users have to manually configure DNS records, which is error-prone and time-consuming for non-technical users. With Domain Connect, we can offer one-click domain setup that works seamlessly with GoDaddy and other supported providers.

Template Details:

  • Both templates create a simple A record pointing to our server IP
  • multiInstance: true allows users to configure multiple subdomains if needed
  • We've tested the flow and it works correctly once the templates are available

Thank you for reviewing! Please let me know if any changes are needed.

Updated the JSON structure for HQ Coach payment service to include host requirement and changed record type from A to CNAME.
@pawel-kow pawel-kow added PR description incomplete The PR description template was not filled in at all, altered or filled in improperly. Checklist of common problems not complete See PR template and mark *all* checkboxes, even if not applicable. Explain any discrepancies. labels Feb 1, 2026
@pawel-kow
Copy link
Copy Markdown
Member

@kyrixdev Would you mind filling in PR description properly and in fact review and test the template as indicated?

@kerolasa
Copy link
Copy Markdown
Collaborator

kerolasa commented Feb 2, 2026

Are you expecting this template to be applied using sync (pubkey auth) or async (oauth) flow?

@kyrixdev
Copy link
Copy Markdown
Author

kyrixdev commented Feb 7, 2026

Are you expecting this template to be applied using sync (pubkey auth) or async (oauth) flow?

We are using the synchronous flow with pubkey authentication (sync).

All three templates now specify syncPubKeyDomain: "hq.coach" and syncRedirectDomain: "hq.coach". The RSA public key is published as a TXT record at _dck1.hq.coach.

Templates have also been updated based on review feedback:

  • host attribute uses @ with hostRequired: true (forms/payment) instead of %host%
  • syncRedirectDomain added since we use redirect_uri for callbacks
  • Email template uses SPFM instead of TXT for SPF, proper txtConflictMatchingMode on DMARC, and essential: "Always" on DMARC
  • Added the email template (hq.coach.email.json) for Resend email domain setup

This JSON file contains configuration details for the HQ Coach email service, including provider information and DNS records for email sending.
Added syncPubKeyDomain and syncRedirectDomain fields. Updated host value in records.
Added syncPubKeyDomain and syncRedirectDomain fields. Updated host in records to '@'.
@kerolasa
Copy link
Copy Markdown
Collaborator

I cloned your repository, and had a look commit c958e8c.

$ dc-template-linter hq.coach.email.json hq.coach.forms.json hq.coach.payment.json
2026-02-11T10:28:05Z WRN error="Key: 'Record.TxtCMM' Error:Field validation for 'TxtCMM' failed on the 'oneof' tag" code=DCTL1005 dctl_note="template field validation" template=hq.coach.email.json

The error tries to tell "txtConflictMatchingMode": "Full" is none of the valid arguments. See https://github.com/Domain-Connect/dc-template-linter/wiki/DCTL1005 for more info.

@kyrixdev
Copy link
Copy Markdown
Author

thanks for catching that! Fixed txtConflictMatchingMode on the DMARC record from "Full" to "All" — "Full" isn't a valid value per the Domain Connect spec. The valid options are None, All, or Prefix. Used All here since there should only ever be one DMARC record per host, so any existing one should be fully replaced.

Comment thread hq.coach.forms.json
"syncPubKeyDomain": "hq.coach",
"syncRedirectDomain": "hq.coach",
"hostRequired": true,
"multiInstance": true,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

multiInstance with CNAME on @ does not make any sense. The template always conflicts with itself.

Comment thread hq.coach.payment.json
"syncPubKeyDomain": "hq.coach",
"syncRedirectDomain": "hq.coach",
"hostRequired": true,
"multiInstance": true,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

same here
multiInstance with CNAME on @ does not make any sense. The template always conflicts with itself.

@pawel-kow
Copy link
Copy Markdown
Member

Please follow the README.md and fill in description as per Template.

@github-actions github-actions Bot added the Test links missing No test links from Online Editor provided label Mar 4, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Mar 4, 2026

PR Description Check Failed

The PR description is missing required elements. Please update it according to the PR template.

Details
  OK  Type of change: 1/4 checkboxes ticked
  OK  How Has This Been Tested?: all 5 checkboxes ticked
  OK  Checklist of common problems: 8/8 checkboxes ticked

Labels to apply: Test links missing

PR description check FAILED:
  FAIL  'Online Editor test results' section not found
  FAIL  Template coverage: hq.coach.email.json: no editor test link found (expected template id 'hq.coach.email')
  FAIL  Template coverage: hq.coach.forms.json: no editor test link found (expected template id 'hq.coach.forms')
  FAIL  Template coverage: hq.coach.payment.json: no editor test link found (expected template id 'hq.coach.payment')

kerolasa added a commit to Domain-Connect/dc-template-linter that referenced this pull request Mar 6, 2026
It looks like AI is creating new, previously unexpected, template misconfigurations.

Reference: Domain-Connect/Templates#740 (comment)
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
@kyrixdev kyrixdev closed this Mar 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Checklist of common problems not complete See PR template and mark *all* checkboxes, even if not applicable. Explain any discrepancies. PR description incomplete The PR description template was not filled in at all, altered or filled in improperly. Test links missing No test links from Online Editor provided

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants