Custom domains

How a published profile is hosted - on a *.hep.gg slot or your own custom domain - and how host routing serves your profile alongside uploader files.

Custom domains

A published profile is served on a host you mount it to. You can use a Hep.gg subdomain slot (<slug>.hep.gg) or attach your own custom domain. Attaching and verifying a domain is a dashboard action behind your hep.gg session; this page documents the resulting public hosting behavior, which is what determines how visitors and crawlers reach your profile.

Slot vs custom domain

  • *.hep.gg slot. Your profile is served at https://<slug>.hep.gg. Nothing to configure on your end beyond claiming the slot in the dashboard, since the subdomain already resolves to Hep.gg.
  • Custom domain. Your profile is served at https://<your-domain>. You point the domain at Hep.gg with a DNS record, then attach and verify it in the dashboard. Certificate provisioning and ownership verification are handled for you once the record is in place.

How host routing resolves a request

Hep.gg resolves profiles for every incoming request before bouncing unmatched custom domains back to hep.gg. For any incoming request the resolution is:

  1. Requests to /api/* are skipped (those are the JSON and media endpoints).
  2. Paths that look like an uploader file ID are skipped, so the file route keeps owning them.
  3. The remaining / request is matched against profiles.domain by host. If a published profile matches, it is rendered.
  4. If nothing matches and the host is the hep.gg apex or another exempt root domain, the request falls through to the dashboard.
  5. If nothing matches on an unmatched custom domain, the request is redirected to hep.gg.

A profile only renders when it is published (is_public), not suspended, and not expired. See visibility and availability.

Profile and uploader files share a host

Because the profile is matched at / and uploader file IDs are matched at /<shortid>, the same *.hep.gg subdomain (or custom domain) can serve both in parallel:

  • https://<slug>.hep.gg/ renders your profile page.
  • https://<slug>.hep.gg/<shortid> serves an uploader file.

This is by design. Routing checks for a file-ID-shaped path first and only falls back to the profile render at the root, so the two never collide.

Endpoints on your mounted host

Once a domain is mounted, these public behaviors apply on that host:

  • GET / renders the profile page. See the rendered page.
  • The page's og:image points at https://hep.gg/api/v1/profiles/<profileID>/og.png (the OG endpoint is always served from the hep.gg apex, not your custom domain). See Open Graph image.

The presence, SSE, music, and contact endpoints are all served from the hep.gg apex under /api/v1/profiles/..., regardless of which domain your profile page is mounted on.