Skip to content
Start in HitKeep Cloud
← All posts

HitKeep 2.10.0: Custom Tracking Domains, Team Admin Pages, And Chart Preferences

Pascale Beier6 min read

HitKeep 2.10.0 release artwork showing a verified custom tracking domain with ownership, DNS target, and TLS checks next to a first-party tracking snippet

HitKeep 2.10.0 lets teams serve the tracker and ingest endpoints from their own verified hostnames, turns the team administration area into real addressable pages, remembers your chart style and report preferences, and tightens the cloud plan surface.

What Shipped

  • Custom tracking domains: team admins verify their own tracker hostnames with a DNS TXT record; active domains serve hk.js, hk-vitals.js, and browser ingest for every site in the team.
  • Managed TLS for tracking domains: HitKeep Cloud issues on-demand certificates after DNS verification; self-hosted setups get documented Caddy, nginx, and Traefik examples.
  • Team admin pages: overview, members, API clients, custom domains, branding, activity, and danger zone are now routed subpages with their own URLs and browser titles.
  • Tables with dialogs: custom domains and API clients use the same table-plus-dialog management pattern, with validity shown as per-check icons.
  • Chart style toggle: switch charts between area, line, and bars with an icon control; the choice applies to every chart and is remembered, alongside the report range and overview sort order.
  • Cloud plan polish: a clearer plan comparison with locale-aware prices, usage-aware free plan notices, and a focused upgrade path from banner, sidebar, and lifecycle emails.
  • Fixes: search field icons align with the theme again, the multi-site overview gets proper hover feedback, and the free plan notice no longer competes with itself.

Custom Tracking Domains

Serving analytics from a third-party hostname is a common reason measurement quietly degrades. HitKeep 2.10.0 lets a team register its own tracker hostnames, prove ownership with a DNS TXT record, and then serve the tracker scripts and ingest endpoints from that first-party domain.

HitKeep team custom domains table showing a verified tracking domain with ownership, DNS target, and TLS check icons plus row actions
Custom domains are managed in a table: per-check validity icons for ownership, DNS target, and TLS, with verify, DNS setup, and delete as row actions.

Adding a domain opens a DNS setup dialog with the exact records to copy: the _hitkeep-tracking TXT record for ownership and the CNAME, A, or AAAA target for routing. Verification checks all three concerns separately, so a half-finished DNS change is visible as exactly that.

HitKeep DNS setup dialog listing the TXT name, TXT value, and DNS target records with copy buttons and verification status
The DNS setup dialog shows copyable records and the current verification state for each check.

Once a domain is active, site tracking snippets can be generated against it, and browser ingest accepts traffic through it for every site in the owning team. Cross-team use is rejected at the API: a domain verified by one team never ingests for another team’s sites.

On HitKeep Cloud, TLS is part of the feature: after DNS verification, certificates are issued on demand for the custom hostname. Custom tracking domains are available on the Pro plan and higher in the cloud; self-hosted deployments get the feature without restriction, with Caddy, nginx, and Traefik examples in the repository.

Terminal window
# Self-hosted configuration
HITKEEP_CUSTOM_TRACKING_DNS_TARGET=analytics.example.com # host or IP your domains must point at
HITKEEP_CUSTOM_TRACKING_TLS_MODE=external # or caddy-on-demand
HITKEEP_CADDY_TLS_ASK_TOKEN=... # protects the Caddy on-demand TLS ask endpoint

Team Administration Gets Real Pages

The team area used to be one page with query-parameter tabs. In 2.10.0 every section is a routed subpage: /admin/team/members, /admin/team/custom-domains, /admin/team/branding, and so on. Deep links work, browser titles are descriptive, and the activity page enforces its audit permission on the route itself.

HitKeep team members page showing the routed team admin tabs, a searchable members table with roles, and pending invites
Members, invites, API clients, and custom domains share the same searchable table pattern with row actions.

The pages also share one design language now. API clients and custom domains use the same table-plus-dialog pattern, status is a color-coded icon rather than prose, and the danger zone matches its site-level counterpart card for card.

Chart Style And Remembered Preferences

Analytics charts get a three-way style toggle — area, line, bars — rendered as an icon control above the plot instead of a dropdown over it. The selection applies to every chart in the dashboard at once and is remembered per browser.

HitKeep dashboard with the traffic chart and the area, line, and bars style toggle above the plot
The chart style toggle sits above the plot and applies to all charts, including comparisons and trend lines.

The same preference layer now covers the report range and the multi-site overview sort order, so the dashboard reopens the way you left it. The overview cards also picked up proper hover feedback: the card lifts, the sparkline deepens, and keyboard focus receives the same treatment.

HitKeep multi-site overview with sort control, search, and site cards showing sparklines and metrics
The overview remembers your sort order and search stays a keystroke away.

Cloud Plans And Upgrade Flow

For HitKeep Cloud, the plan comparison inside the team overview was rebuilt: a section header, a highlighted recommended plan, a custom-domains feature line, and locale-aware prices — €15 in English locales renders as 15 € in German. The free plan notice became usage-aware: when a team fills 80% or more of its site or member allowance, the banner switches to the exhausted limit and resurfaces even if the time-based notice was dismissed. A matching lifecycle email reaches owners who are not in the dashboard.

Every upgrade surface — banner, sidebar chip, plan page, lifecycle emails — now leads to the same plan comparison instead of jumping straight into a checkout. The comparison page states plainly that HitKeep is fully open source, including every paid feature, with sponsoring and self-hosting as first-class alternatives.

None of this appears on self-hosted deployments: plan gating, notices, upsell emails, and the sidebar chip are managed-cloud surfaces only.

Bug Fixes And UI Polish

  • search field icons across all tables align with the PrimeNG theme again
  • the signup page states the essentials up front: no credit card, region-pinned data, export or self-host anytime
  • the free plan retention notice consolidated three competing actions into one
  • the seeded demo covers custom domains, so screenshots and e2e tests exercise the real flow

What Is Not Changing

HitKeep keeps the same operating model:

  • one Go binary
  • embedded DuckDB data stores
  • embedded NSQ queueing
  • no required PostgreSQL, Redis, Kafka, ClickHouse, or hosted analytics dependency
  • cookie-free browser tracking by default
  • open export paths
  • self-hosted and managed cloud built from the same product foundation

Custom tracking domains do not change the tracking model. The tracker still sets no analytics cookies, respects Do Not Track, and serves the same hk.js — only the hostname it loads from becomes yours.

Upgrade Guidance

Upgrade to 2.10.0 if you want first-party tracking hostnames, the reworked team administration area, or remembered chart and report preferences.

After upgrading, check:

  • the new custom_tracking_domains table is created by the automatic migration
  • HITKEEP_CUSTOM_TRACKING_DNS_TARGET if your deployment serves custom tracking domains
  • HITKEEP_CUSTOM_TRACKING_TLS_MODE and the reverse-proxy examples if you terminate TLS yourself
  • deep links into /admin/team/... used in internal runbooks or bookmarks (legacy tab URLs redirect)
  • the chart style toggle and remembered report range on your most-used dashboards

Read More

Follow HitKeep on X, Bluesky, and LinkedIn.