Shipping, week by week.

User-facing changes from the Supermetry project history, newest first. 705 entries across 2 weeks.

Changes per week, oldest to newest, last 2 weeks.

  1. 2026-W42300 changes

    • Show update progress below the version status
    • Add minute, hour and day views to the visitor chart
    • Default base URL to Supermetry Cloud
    • Default host to Supermetry Cloud
    • Default host to Supermetry Cloud
    • Default to Supermetry Cloud when no host is set
    • Enable hourly charts for 30 days
    • Restore hourly chart on short ranges
    • Show update history below the update card
    • Include recent update jobs in the update status
    • Show update steps, an estimate and the offline warning
    • Check free disk space during preflight
    • Back up before stopping and poll health faster
    • Keep the new version directory enterable by the service
    • Drop version typing from the update confirmation
    • Allow update jobs without a manifest digest
    • Stage Node SDK releases for approval
    • Publish Node SDK from local archive
    • Check for updates on demand
    • Offer an existing .env as the install configuration
    • Show source, countries and cities on each tracking pixel page
    • Keep country, city and GitHub-or-other source for pixel views
    • Count image-proxy hits on the tracking pixel
    • Tracking pixels as a list with a dedicated page for each
    • Tracking pixel CRUD and per-tag stats
    • Managed tracking pixels, counted only for registered tags
    • Harden Node package artifacts
    • Copyable badges on the tracking pixel tab
    • Serve a total or stats badge at the email pixel's ID
    • In-memory site totals for the tracking pixel badge
    • Dedicated stats page for each tracking pixel campaign tag
    • Select a campaign tag to see only its pixel stats
    • Filter tracking pixel stats by campaign tag
    • Period cards and day/week/month grouping on the tracking pixel tab
    • Period summary in the tracking pixel stats API
    • Pixel period cards, range and day/week/month grouping
    • Period summary in the project stats API
    • Stats badge with total, today and a 30-day sparkline
    • Do not count dashboard badge previews
    • Refresh pixels periodically and validate badge labels
    • Keep all-time badge totals across retention and restarts
    • Stop idle proxy keys from sharing one rate bucket
    • Bound cold total loads and keep persisted totals
    • Allow editing pixel projects without hosts
    • Keep pixel views for forever-retention projects
    • Include project kind in account sites
    • Serve open counter badges, stats page and cleanup
    • Count proxied badge views per GitHub key
    • Add open counter tables and configuration
    • Hide web-only navigation for pixel projects
    • Add pixel project dashboard with snippets and badges
    • Ask what to measure when creating a project
    • Add radio group component
    • Purge pixel views past project retention
    • Serve pixel images and management API
    • Render view-count badges with optional branding
    • Add in-memory pixel registry and total cache
    • Add pixel store and buffered view recorder
    • Count image-proxy views with a dedicated limiter
    • Carry project kind through store, registry and create API
    • Add project kind, pixels and daily pixel views
    • Send top_bot_rules as [] when a site has no bot hits
    • Suggest the public URL from the listen address
    • Detect Raspberry Pi architectures
    • Recognize Raspberry Pi artifacts
    • Recover ambiguous dispatches
    • Sign update artifacts and images
    • Support Windows free-space checks
    • Run the privileged updater helper
    • Require backup verification tools
    • Verify Docker schema health
    • Apply and monitor admin updates
    • Wait for Docker readiness
    • Enable managed deployment controls
    • Reconcile helper progress
    • Query helper job status
    • Provision the privileged updater
    • Apply pinned Docker releases
    • Apply verified binary releases
    • Add authenticated apply endpoint
    • Expose durable job state
    • Classify verified rollback outcomes
    • Add narrow helper socket client
    • Add crash-safe helper protocol and state
    • Fetch and validate release artifacts
    • Verify signed release manifests
    • Create verified database archives
    • Create idempotent admin jobs
    • Add durable update jobs
    • Add system update status page
    • Show available updates in the header
    • Query admin update status
    • Localize system update status
    • Expose admin update status
    • Check official release availability
    • Persist Docker data at the runtime path
    • Build the versioned deployment image
    • Count the last 30 minutes from pageviews and events, not engagement beacons
    • Build site links from the slug and edit it in site settings
    • Return the site slug and accept it on site update
    • Load, derive and change the site slug
    • Give every site a unique per-organization slug
    • Open the last visited site by default after sign in
    • Default the after-sign-in page to the last visited site
    • Overview no longer fails for time zone names the database does not know
    • Retention reads recordings as playback does, so a damaged tail no longer fails the job
    • Stop printing the live-count explanation on the Realtime page
    • Allow the base URL hostname and extra hosts in the Vite host check
    • Forward the client Host to Vite, listen on loopback, tighten the dev CSP
    • Serve the UI through the Go server on :8787 by proxying Vite
    • Stop redirect loops for proxied paths and harden the dev redirect
    • Redirect :8787 pages to the Vite UI, print a banner, check for bun
    • Offer Bengali in the picker and accept it on the server
    • Add the Bengali catalogues
    • Fail when Vite cannot bind, detect renames, anchor proxy paths
    • Serve the UI through Vite and proxy Go paths
    • Make dev restarts the server on Go changes
    • Ignore re-selecting the current language in the header menu
    • Add a language menu to the app header
    • Retry a failed palette load only on the next open and keep commands while it closes
    • Contain palette chunk load failures, retry on next open, ignore Ctrl/Cmd K over the help dialog
    • Open the command palette from the header and Ctrl/Cmd K
    • Filter the command palette on visible text only and keep focus with the caller after a command runs
    • Add the command palette on cmdk 1.1.1
    • Make palette links carry the same search as the sidebar links
    • Derive command palette entries from the sidebar's own gating
    • Support Ctrl/Cmd chords in useShortcuts
    • Keep one main landmark and PageHeader on onboarding, no-org and landing screens
    • Render account, admin and every /app route inside one app shell
    • Add the account sidebar for pages outside an organization
    • Give the pending cross-breakdown skeleton a status role
    • Let the sticky inspector clear the filter row's measured height
    • Keep dashboard main at one tree position and measure the container before first paint
    • Add Inspect to Where countries and Weekly rhythm cells
    • Add Inspect to breakdown rows, separate from the filter click
    • Push when the inspector opens and replace when it closes so Back never reopens it
    • Render the dashboard as main panel plus inspector driven by the inspect param
    • Add the inspector body built from existing stats and breakdown queries
    • Fall back to the sheet when the container cannot fit main plus the inspector, and cover the breakpoints
    • Add DashboardPanels with a resizable side inspector and sheet fallbacks
    • Add inspector width storage and the shadcn resizable primitive
    • Add a validated inspect search param to the dashboard route
    • Move dashboard filters into one sticky row and Export into the header actions
    • List every keyboard shortcut in the help dialog
    • Keep the collapsed sidebar rail scrollable and its switcher icon in bounds
    • Start the sidebar on the icon rail at tablet widths
    • Extract AppHeader as the single 44px sticky bar and drop project tabs
    • Move settings and account from the header into the sidebar
    • Resolve site crumbs by any site alias, tighten breadcrumb a11y and migrate remaining h1s to PageHeader
    • Show breadcrumbs in the app header
    • Link the site settings crumb to its default tab
    • Derive breadcrumbs from the route
    • Adopt PageHeader and PageContainer on the dashboard
    • Add PageContainer and PageHeader frame primitives
    • Fall back to SUPERMETRY_ROUTE_HITS when the config leaves it empty
    • Add a design-token package that generates dashboard, site and chart outputs
    • Translate the new auth error messages into Spanish and German
    • One ApiProblem error model with specific auth and setup messages
    • Listen on :8787 by default and keep one bad event from stalling ingest
    • Restyle the dashboard shell, charts, stat cards, toolbar and auth screens
    • Add framework, server and mobile SDKs
    • Log the cause of unexpected private API failures
    • Keep the API reference endpoint column compact at wide widths
    • Contain the API reference navigation, add endpoint search and deep links
    • Stop the hidden links table from stretching the page, readable scrollable diagram on phones
    • Bound journey anchor path length and correct the journey contract text
    • Journey carries path ids and counts visitors on integer keys
    • Readable flow nodes without overlap, localized labels
    • Add journey page messages in en, es and de
    • Run the API benchmark against closed days with a fixed clock
    • Add a step that closes loaded days before benchmarking
    • Thin x-axis labels on narrow charts
    • Make the phone replay overlay full-screen so the player uses the available width
    • Explain an empty visitors-per-minute chart and give the Live now card more room
    • Crop Antarctica from the world map and keep country actions pinned above the safe area
    • Make horizontally scrollable tables and snippets keyboard focusable
    • Readable active nav links, admin table overflow, status role on loading placeholders
    • Darken muted text and destructive tokens in light theme for contrast
    • Add Spanish and German translations for the ui catalogues
    • Add the ui catalogue for dashboard cards and account pages
    • Translate the full report button in Spanish and German
    • Read sidebar labels when rendering so they follow the active language
    • Add the Spanish dashboard editor catalogue
    • Add the Spanish catalogue
    • Add the German dashboard editor catalogue
    • Add the German catalogue
    • Open the full report from breakdown cards, lazy-loaded
    • Add the searchable, sortable full report dialog with column choice and CSV/JSON export
    • Add strings for the full report dialog
    • Add paged JSON export helper and share the stats query body builder
    • Wire Spanish and German catalogues with a parity test
    • Add an interface language picker to the profile page
    • Follow the active language in number, date and relative-time formatting and the calendar week
    • Load the active language before the first render and register message catalogues
    • Add a typed catalogue overlay, message formatting, pseudo-locale and Intl helpers
    • Store an interface language preference
    • Reset widget size and id when the kind changes in the add dialog, keep slot titles readable
    • Read ZIP entries in name order so duplicate handling is deterministic
    • Open the dashboard editor from the dashboard route
    • Add the dashboard editor components with live preview
    • Add dashboard editor mutations, conflict mapping and strings
    • Add the dashboard editor layout model with limits, packing and templates
    • Add Mixpanel and Amplitude providers to the imports page
    • Accept Mixpanel and Amplitude uploads for import and preview
    • Parse Mixpanel and Amplitude event exports
    • Show Search Console CTR as a percentage
    • Add the viewer and switcher to the site dashboard
    • Render each widget kind with the existing cards
    • Add saved dashboard list hook and layout helpers
    • Add the site settings integrations route and tab
    • Add integrations page and Search Console report components
    • Add integrations API hooks and strings
    • Add a GA4 provider with file preview and undo to the imports page
    • Redirect the OAuth callback to the dashboard settings route
    • Percent-encode the colon in Search Console property paths
    • Add OAuth, disconnect, backfill and top-queries API with spec
    • Add GA4 import source and a dry-run preview endpoint
    • Serialize per-site writes with a two-key advisory lock
    • Add provider interface, service, scheduler jobs and Search Console provider
    • Add connection, oauth state and search console tables
    • Add a GA4 CSV importer with row errors, dedupe and preview
    • Scope every dashboard operation to the site in the path
    • Serve dashboard management endpoints
    • Validate layouts and store saved dashboards
    • Define the dashboard layout model and endpoints in the contract
    • Add the dashboards table
    • Add the Cohorts page with a condition builder and power users
    • Save, rename, duplicate and delete cohorts
    • Evaluate cohorts on demand and rank power users
    • Add the cohort and power user contract
    • Add links and pixels pages with QR codes and statistics
    • Serve short links, pixel and link management endpoints
    • Add links.manage action for editors and above
    • Tabbed install recipes with copy buttons and a verify-installation check
    • Let the app shell content column shrink so wide content scrolls inside its own box
    • Generate install recipes for browser frameworks and server code
    • Add short link and tracking pixel storage, redirect and pixel handlers
    • Add breakdown, attribution and customers to the revenue page
    • Add revenue report strings
    • Add revenue report and customers query hooks
    • Serve the revenue endpoints from the query engine
    • Load orders, touches and customers for the revenue report
    • Aggregate revenue by dimension with first and last click attribution
    • Define the revenue report and customers endpoints
    • Route /app/admin for instance admins and link it from the account menu
    • Add admin users, organizations, sites, settings and security pages
    • Add instance admin API hooks and strings
    • Enable profiles on new projects and document the defaults
    • Default tracking mode to identified and drop the upgrade guard
    • Add the instance admin API, audited mutations and two-factor enforcement
    • Add admin schema with reserved organization slugs and two-factor policy state
    • Add notification history and template editor
    • Record delivery history and render per-channel templates
    • Build responsive triage views
    • Add triage client state
    • Add filtered replay listing and saves
    • Persist user saved recordings
    • Build responsive traffic overview
    • Add sites overview aggregates
    • Persist dashboard preferences
    • Record the innermost matched route for nested routers
    • Add per-route API performance harness
    • Show FCP and TTFB on the vitals page, with tests
    • Collect FCP and TTFB in the vitals module
    • Store, validate, query and expose FCP and TTFB
    • Redirect legacy onboarding path
    • Strengthen analytics hierarchy
    • Polish responsive analytics controls
    • Document installer flags and examples
    • Add safe planning and compatibility checks
    • Renumber the last-event migration to avoid a duplicate version
    • Show live tracker health
    • Expose current install status
    • Update last-event state per batch
    • Add compact last-event projection
    • Add API route inventory generator
    • Record matched routes during tests
    • Clone migrated template databases
    • Tune production chunk boundaries
    • Defer below-fold dashboard content and start the main chart early
    • Lazy-load heavy site routes
    • Split auth and organisation route modules
    • Add share composer and public report
    • Expose configured share queries
    • Enforce locked share scope
    • Add persisted share configuration
    • Fill modal and page player layouts
    • Resize recordings with the player stage
    • Add viewport contain-fit geometry
    • Add live accuracy observation
    • Explain live visitor counting
    • Document the live visitor contract
    • Count exact accepted-event visitors
    • Improve dashboard accessibility and layout
    • Make sessions responsive
    • Split optional features into modules and cover navigation in a real browser
    • Harden security headers and cookies per route class
    • Close five verified UI and security defects from the live audit
    • Add geography and weekly rhythm cards, remove the map page
    • Add traffic grid and country details
  2. 2026-W41405 changes

    • Add weekday-hour traffic breakdown
    • Add interactive installer command
    • Add cross-platform release installers
    • Support Windows disk space checks
    • Lower minimum password length to six
    • Bound the restart query from the oldest live session
    • Show the MaxMind credit as a short link like the DB-IP one
    • Credit the geolocation provider that is in use in the footer
    • Report the active geolocation provider in the public config
    • Send the Origin header on the soak benchmark's private requests
    • Compare each metric the way its product defines it
    • Make the A/B traffic and queries match what a real tracker would send
    • Poll one cheap query per product while waiting for ingestion to settle
    • Treat Plausible Community Edition's missing revenue metric as a known difference
    • Do not count a single-page-app navigation to the current page as a pageview
    • Let a second scenario continue the visitor numbering of the first
    • Add three-way accuracy comparison
    • Make the A/B stack bring-up work against the real products
    • Add Supermetry soak benchmark
    • Add accuracy A/B volume sender
    • Add browser-driven accuracy A/B fixture
    • Add accuracy A/B stack lifecycle
    • Add accuracy truth model
    • Add deterministic accuracy scenarios
    • Hint at the bundled-db profile when the postgres host is not found
    • Use SUPERMETRY_DATABASE_URL when set, else the bundled PostgreSQL with separate credentials
    • Build the database URL from separate host, user and password settings
    • Warn when the bundled PostgreSQL falls back to the default password
    • Default the bundled PostgreSQL user, password and database to supermetry
    • Create the bundled PostgreSQL role and database from SUPERMETRY_DATABASE_URL
    • Serve when no command is given and add --help
    • Read settings from the repository root .env in Compose
    • Make plain docker compose up use SUPERMETRY_DATABASE_URL
    • Choose a bundled or external PostgreSQL with a Compose profile
    • Add a Delete stored traffic card to tracking settings
    • Request and list data purges for a site
    • Delete stored traffic by date range, source and country
    • Add instance admins and limits on organizations per user and sites per organization
    • Restorable deletion for sites and organizations, with notice emails and org rename (#6)
    • Send signed-in users away from the login and signup pages (#3)
    • Harden operator-facing request controls
    • Add expiring share links
    • Harden password changes and TOTP verification
    • Forward POST /api/private/orgs to the platform handler
    • Show per-site dropped traffic
    • Protect shared dimension dictionary capacity
    • Add opt-in site traffic protections
    • Add an Add organization option to the switcher and a page to create one
    • Add POST /api/private/orgs so a signed-in user can create an organization
    • Show the brand name beside the logo and merge project and organization switching into one dropdown
    • Make the restore dump check work with pg_restore 18
    • Allow a single address up to a tenth of the process ceiling
    • Bind property keys and cap filter complexity
    • Keep one session row per session and shorten the reservation lock
    • Isolate per-site day closing and refresh closed days after profile erasure
    • Correct overlap and local-day aggregation
    • Lock partition creation per schema so parallel test packages do not queue
    • Isolate collection rate limits
    • Correct deployment defaults and readiness checks
    • Hand PostgreSQL a time zone name it knows for hourly charts and retention
    • Store real paths on an identified instance regardless of site profiles
    • Resolve the site start day in Go so unknown database time zone aliases cannot stop the close job
    • Route range gaps and catch up missed closes
    • Prevent ingest data loss for attribution and metadata
    • Bound dimension dictionary cardinality
    • Serve the logo and favicons as files
    • Bound and collect CSS blobs
    • Restore clean-checkout gate
    • Fail closed on full-only options
    • Validate dumps before restore cleanup
    • Serve full script for hash routing
    • Rename key labels to supermetry/... and add migrate-labels
    • Configure replay S3 storage with a single SUPERMETRY_REPLAY_S3_URL
    • Correct funnel, goal and filter metrics
    • Security batch 2
    • Durable, restart-safe profile deletion
    • Collection reliability, part 1
    • Bind 2FA confirmation to the validated secret and allow long import uploads
    • Server timeouts and browser security headers
    • Revoke access to deleted organizations
    • Two-factor setup, disable and recovery-code screens
    • Secure the two-factor lifecycle
    • Store pending 2FA enrollment and the last used TOTP step
    • Read replay day as a date so the blob key check ignores the database time zone
    • Read replay day as a date so the blob key check ignores the database time zone
    • Render percentile trend chart
    • Add daily percentile trends
    • Honor funnel match modes
    • Add sign out other devices action
    • Expose bulk session revocation
    • Revoke other user sessions
    • Configure Telegram notification channels
    • Deliver notifications through Telegram
    • Store Telegram channel configuration securely
    • Place realtime before replays
    • Derive restore compatibility from embedded migrations
    • Preserve journeys across closed storage
    • Expose Web Vitals diagnostic breakdowns
    • Reserve writer capacity before session mutation
    • Make replay erasure retryable
    • Hide enabled replay recording banner
    • Separate replay history visibility from recording status
    • Keep anonymous dashboards within supported query scope
    • Gate analytics navigation by instance privacy policy
    • Include instance tracking policy in site bootstrap
    • Preserve account device labels alongside browser metadata
    • Show account sign-in details and local session activity
    • Capture account metadata and distinguish session polling
    • Add nullable account session sign-in metadata
    • Reject saturated event intake before enrichment
    • Expose non-reserving event capacity preflight
    • Distinguish unavailable goal revenue from zero
    • Match revenue rows to site-scoped event goals
    • Wire tracking rollout checks and document enforcement boundaries
    • Expose effective privacy settings and constrained replay controls
    • Restrict identity history and enforce project privacy ceilings
    • Enforce independent replay permission and tracker consent
    • Enforce identity policy at intake and queued persistence
    • Parse tracking mode and define anonymous payload sanitization
    • Add inert tracking and privacy policy primitives
    • Remove duplicate sidebar account identity
    • Add account menus and coordinated session logout
    • Hide billing controls in the open-source interface
    • Scope account sessions independently of organizations
    • Route issued invitation links to the application
    • Establish organization authorization foundation
    • Return an empty rollup breakdown when no closed block covers the range
    • Count profile and replay results
    • Count session and event results
    • Define paginated result totals
    • Paginate events and profiles
    • Paginate sessions and replays
    • Add shared list pager
    • Open list replays from URL state
    • Add session replay overlay
    • Expose replay session IDs in event timelines
    • Invalidate cached results on import and isolate shared query cancellation
    • Cache closed-range results
    • Set-based Web Vitals filters
    • Set-based hot-tier aggregation and timezone-independent date ranges
    • Serve browser, OS and device icons as static files
    • Add visitor details to replays and events
    • Show visitor details in dashboard tables
    • Live visitor badge on every site page and 30-minute count on realtime
    • Realtime summary endpoint for the live badge
    • Size the replay player to its card
    • Play replays even when a stylesheet cannot be fetched
    • Open the replay player instead of staying on the replay list
    • Send replay session IDs as strings so the browser keeps all 64 bits
    • Accept chunks across client-side navigations and after dropped chunks
    • Send events to the Panel host the per-site script was loaded from
    • Explain that session replay needs the per-site tracker snippet
    • Show the replay switch as read-only status and skip locked fields on save
    • Make PANEL_REPLAY_ENABLED the only replay switch
    • Send empty URL pattern lists as arrays and tolerate null in the settings form
    • Align the Replays sidebar item and place it after Sessions
    • Rehydrate player styles with generated client
    • Erase profile-linked session recordings
    • Wire storage lifecycle jobs
    • Mount stylesheet upload routes
    • Restrict replay settings changes to site owners and admins
    • Share one blob store across replay services and dedupe merged declarations
    • Show rollup backfill progress and document automatic upgrades
    • Run rollup backfill from serve and report progress in data health
    • Backfill closed-day rollups when the rollup layout changes
    • Add rollup_state table for rollup layout and backfill progress
    • Allow jobs to run once at startup
    • Wire retention and erasure hooks
    • Guard recording on low disk space
    • Enforce retention and storage quotas
    • Send has_replay as a boolean query parameter
    • Wire dashboard blob storage
    • Add dashboard replay endpoints
    • Expose replay availability in analytics
    • Rehydrate deduplicated stylesheets
    • Deduplicate snapshot stylesheets
    • Add deduplicated CSS upload handler
    • Wire replay upload services
    • Add bounded replay upload handlers
    • Load replay settings into registries
    • Add deterministic session sampling
    • Wire dashboard routes and replay links
    • Add replay list and lazy player
    • Add replay settings interfaces
    • Add dashboard API boundary
    • Add resumable blob migration
    • Add S3 blob storage and spill files
    • Add batching replay index writer
    • Add disk blob store and tolerant gzip reader
    • Add replay_sessions index table with monthly partitions
    • Embed and serve replay script
    • Load session replay recording
    • Add browser recording bundle
    • Run the minute rollup job and read stored minutes in realtime
    • Keep stored minutes whose raw events have expired during catch-up
    • Dictionary-encode raw utm_source in bulk loader
    • Exclude untagged utm_medium and utm_campaign from breakdowns
    • Version, screen size, language and hostname breakdowns
    • Renumber the visitors_per_minute migration to 0023
    • Pass the minute source to the realtime handlers
    • Roll closed minutes up from raw events with catch-up
    • Merge stored closed minutes into the visitors-per-minute chart
    • Add visitors_per_minute table
    • Browser and OS version, screen size, language and hostname dimensions
    • Resolve effective replay settings
    • Parse replay site settings
    • Add replay instance settings migration
    • Parse replay environment settings
    • Store browser and OS versions, screen size, language and hostname
    • Channels tab and channel filter
    • Channel grouping derived from source and medium
    • Scroll-depth goals in the goal editor
    • Scroll-depth goals and server-side goal evaluation
    • Add UTM Source tab and export raw utm_source in CSV
    • Protect /metrics with a bearer token or loopback-only access
    • Query utm_source from the raw tag instead of the blended source
    • Carry raw utm_source through sessions, writer, closer and rehydrate
    • Add utm_source_id columns to events, sessions and closed tables
    • Count privacy-signal drops separately from 503 drops
    • Drop engagement and Web Vitals pings that arrive after the session ended
    • Let background pings join a live session without starting one
    • Time on page and exit rate columns
    • Recompute-rollups command for new rollup counters
    • Count exits for page-filter queries without a page dimension
    • Exit rate and time on page
    • Privacy signal toggle and opt-out install docs
    • Respect_privacy_signals setting and heatmap snippet attribute
    • Drop events carrying GPC or DNT when the site respects them
    • Visitor opt-out and opt-in heatmap capture
    • Account profile page with a danger zone
    • Expose account self-service routes
    • Add account self-service to the auth service
    • Add email change tokens and soft-deleted users
    • Make public signup invite-only by default
    • Count spike visitors from the in-memory session store and wire integrity checks at startup
    • Reject duplicate files, replace atomically, fail interrupted imports
    • Suppress erased identities at intake and flush
    • Add profile tombstones and import file hashes
    • Tracker settings and country block rules
    • Docker image, release build and installer, Apache-2.0 license
    • Per-site generated script
    • World map view for the countries card
    • Tracking settings and blocked countries
    • 28-day, 91-day and 6-month periods
    • Panel backup and restore
    • Create scoped, site-limited and expiring API keys from the dashboard
    • Add checkbox and select components
    • Tracker settings type for the per-site script
    • Link organization settings from the sidebar
    • Add the API key scope picker
    • Publish the API key management contract
    • Expose public API key management
    • Enforce delegated API key boundaries
    • Add the sessions page with a timeline drawer
    • Regenerate the API client for sessions
    • Bounded session exploration queries
    • Session list and timeline endpoints
    • Keep session start and profile in the closed tier
    • Add the generated TypeScript client package
    • Expose the reference in organization settings
    • Add the interactive API reference page
    • Build the OpenAPI reference model
    • Events explorer page
    • Add-filter picker with value suggestions
    • Events, properties and suggestions endpoints
    • Scoped public writes for annotations and segments
    • Raw event, property and suggestion queries
    • Document event exploration and scoped write endpoints
    • Harden favicon discovery
    • Manual-mode engagement, same-URL dedupe, consent queue and relative URLs
    • Form submit and class-tagged events
    • Reject favicon responses larger than the size limit
    • Consent mode with an in-memory queue
    • Hash routing, manual pageviews and a beforeSend hook
    • Build the full script from marked blocks
    • Show and refresh site icons
    • Tracker wrapper for npm
    • Discover and refresh site favicons
    • Forward GET /me/ip so "Add my current IP" works
    • Show what each feature needs on the installation page
    • Choose between the full and core tracker on the installation page
    • Label the realtime counter as live in the last 5 minutes
    • Add visitors_last_30m to the realtime response
    • Count live visitors over the last 5 minutes
    • Send heatmap clicks directly instead of patching JSON.stringify
    • Stop treating the WhatsApp in-app browser as a crawler
    • Show annotation markers on the dashboard chart and MCP setup guide
    • Add MCP endpoint for analytics tools
    • Add chart annotations table and CRUD API
    • Add journeys and retention report pages
    • Add journey and within-day retention report endpoints
    • Add notifications and alerts settings tabs
    • Expose alert and notification channel endpoints
    • Add alert rules, notification channels and evaluator
    • Add the dashboard CSV export menu
    • Full stats API with date ranges, metrics, filters, comparison and streamed CSV export
    • Apply, save, rename and delete segments from the filter bar
    • Add saved segment endpoints
    • Add segments table and shared filter validation
    • Show revenue on goals and send revenue from the tracker
    • Add total and average revenue metrics and revenue goals
    • Accept and store revenue on custom events
    • Replace full database walk with constant-cost check at startup
    • Add region and city tabs and drop the invalid referrer tab
    • Add region and city dimensions and filters
    • Store region and city for events and sessions
    • Add the Exclusions settings tab
    • Store and validate exclusion rules, add current-IP endpoint
    • Drop events from excluded IP ranges and paths per site
    • Offer the full tracker and custom click help in the install guide
    • Add full tracker with outbound, download, 404 and attribute click tracking
    • Log country and bot-drop reason in the diagnostics
    • Stop treating VPN, proxy and hosting networks as bots
    • Optional address-resolution diagnostics and a startup log line
    • Show country flag and name in the countries breakdown
    • Persistent SPA application shell with dark auth screens
    • Use the nearest public address from X-Forwarded-For
    • Trust IPv4 proxies on dual-stack listeners
    • Add automatic MaxMind database updates
    • Serve the real tracking snippet and copy it on plain http
    • Add dashboard site management
    • Add configurable public signup
    • Add embedded browser tracker
    • Normalize traffic source attribution
    • Always mark cookies Secure on https deployments
    • Mark cookies Secure only over HTTPS
    • Read .env automatically
    • Stabilize real-binary dashboard end-to-end tests
    • Serve the embedded dashboard for non-API paths
    • Add platform user flows
    • Wire application services
    • Add first-site onboarding
    • Add shared dashboard view
    • Add settings and health routes
    • Add secure settings controls
    • Add goal management page
    • Add realtime analytics page
    • Add funnel builder and results
    • Add panel load for bulk NDJSON ingestion
    • Keep an empty site restriction from granting all sites
    • Add accessible dashboard trend chart
    • Add dashboard stats strip
    • Wire dashboard breakdown filters
    • Add dashboard breakdown cards
    • Publish platform resource contracts
    • Add authorized application routes
    • Avoid replaying in-flight batches on shutdown
    • Add authenticated dashboard shell
    • Give the API the site registry for org-scoped access
    • Expose serve lifecycle with golden verification
    • Assemble panel runtime services
    • Resolve platform request credentials
    • Add dashboard state controls
    • Add analytics query hooks
    • Add dashboard URL state
    • Implement invitation lifecycle
    • Add invitation persistence
    • Carry the owning organization into the site registry
    • Cache goal and funnel definitions
    • Add site management and registry
    • Send reports only to members who still have access
    • Embed and serve dashboard assets
    • Scaffold dashboard SPA and API client
    • Send scheduled analytics summaries
    • Persist email subscriptions
    • Add shared dashboard access
    • Persist shared dashboard links
    • Scope site access to the caller's organization
    • Add API key lifecycle
    • Add API key persistence
    • Implement platform authentication flows
    • Add platform user and session persistence
    • Add authenticated analytics HTTP API
    • Add transactional membership management
    • Define authorization policy
    • Add ordered funnels and route equivalence coverage
    • Add exact tiered query planning
    • Add mail and transaction foundations
    • Add cryptographic primitives
    • Add platform schema and configuration
    • Expire partitions and erase sites
    • Close site days into analytics tiers
    • Add closer rollup aggregation primitives
    • Scope the migration lock to the target schema
    • Add validated event intake
    • Add trusted proxy networks
    • Cache closed-range query results
    • Validate and guard analytics queries
    • Add bounded PostgreSQL batch persistence
    • Restore durable open sessions
    • Expose operational metrics
    • Report five-minute active sessions
    • Add generated analytics API contract
    • Add metric definitions and formulas
    • Add advisory-locked job runner
    • Add the sharded in-memory store
    • Define the live session store contract
    • Add JSON-backed site registry
    • Add client enrichment and bot filtering
    • Add cached integer dictionaries
    • Add random daily visitor salts
    • Add closed-tier and rollup schema
    • Partition hot tier by retention class
    • Add PostgreSQL migration foundation
    • Add repository skeleton, config, and CI

Follow along.

Subscribe to the blog feed, or watch the repository.