<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Pascale Beier</title>
    <description>The latest articles on Forem by Pascale Beier (@examo).</description>
    <link>https://forem.com/examo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3795422%2Fe70dbeb3-becc-4d39-a5b5-9c92eda05057.jpg</url>
      <title>Forem: Pascale Beier</title>
      <link>https://forem.com/examo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/examo"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Pascale Beier</dc:creator>
      <pubDate>Thu, 26 Feb 2026 21:18:10 +0000</pubDate>
      <link>https://forem.com/examo/-4jng</link>
      <guid>https://forem.com/examo/-4jng</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/examo" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3795422%2Fe70dbeb3-becc-4d39-a5b5-9c92eda05057.jpg" alt="examo"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/examo/from-healthtech-to-open-source-building-a-sovereign-web-analytics-engine-in-a-single-binary-4phm" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;From HealthTech to Open Source: Building a sovereign web analytics engine in a single binary&lt;/h2&gt;
      &lt;h3&gt;Pascale Beier ・ Feb 26&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#analytics&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>analytics</category>
      <category>devops</category>
    </item>
    <item>
      <title>From HealthTech to Open Source: Building a sovereign web analytics engine in a single binary</title>
      <dc:creator>Pascale Beier</dc:creator>
      <pubDate>Thu, 26 Feb 2026 20:34:09 +0000</pubDate>
      <link>https://forem.com/examo/from-healthtech-to-open-source-building-a-sovereign-web-analytics-engine-in-a-single-binary-4phm</link>
      <guid>https://forem.com/examo/from-healthtech-to-open-source-building-a-sovereign-web-analytics-engine-in-a-single-binary-4phm</guid>
      <description>&lt;p&gt;A year ago, I was working with a HealthTech client who needed web analytics. Because of strict patient privacy laws and GDPR, Google Analytics was completely off the table. &lt;/p&gt;

&lt;p&gt;We looked at self-hosting great open-source alternatives like Plausible or Umami. But operationally, they felt heavy. To run them reliably, you end up managing a whole stack: PostgreSQL, ClickHouse, Redis, Node.js, or Elixir. &lt;/p&gt;

&lt;p&gt;I didn't want to babysit a database cluster just to count pageviews. I wanted the performance of an enterprise analytics stack, but with the deployment simplicity of a single file.&lt;/p&gt;

&lt;p&gt;So, I built &lt;strong&gt;HitKeep&lt;/strong&gt;. It's been ingesting millions of hits in production for that client, and after battling a healthy dose of imposter syndrome, I’ve spent the last few months polishing the core and open-sourcing it.&lt;/p&gt;

&lt;p&gt;Here is how I built a full analytics platform inside a single 12MB Go binary, and why data sovereignty is its core feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture: DuckDB + NSQ in Go
&lt;/h2&gt;

&lt;p&gt;To make deployment as simple as downloading a binary (or running one Docker container), everything had to be embedded.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4dz1p49dme18ph2c65d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4dz1p49dme18ph2c65d.png" alt="Ingesting tens of thousands hits per hour on a $4 VPS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Storage (Embedded DuckDB):&lt;/strong&gt; Analytics requires OLAP (Online Analytical Processing) databases. Standard row-based databases like Postgres choke on heavy aggregations. I embedded DuckDB—a lightning-fast columnar database that lives in a single file (&lt;code&gt;hitkeep.db&lt;/code&gt;). You can store about 1 Million raw hits per ~120MB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ingestion (Embedded NSQ):&lt;/strong&gt; Writing to a columnar database synchronously per HTTP request creates lock contention. To solve this, HitKeep embeds an NSQ broker in-memory. The HTTP handler enqueues the hit in microseconds, and a background consumer micro-batches the writes to DuckDB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clustering (Memberlist):&lt;/strong&gt; If you need High Availability, it has native clustering via HashiCorp Memberlist (gossip protocol) for leader election.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; The dashboard (Angular) and the 2KB tracking script are compiled directly into the Go binary using &lt;code&gt;embed.FS&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  True Data Sovereignty (The "Takeout" API)
&lt;/h2&gt;

&lt;p&gt;Most "privacy-friendly" tools still lock your data in their ecosystem. I believe your data belongs to you. &lt;/p&gt;

&lt;p&gt;HitKeep has a first-class &lt;strong&gt;Takeout API&lt;/strong&gt;. With one click, you can export every single raw data point (hits, events, goals) into open formats: &lt;strong&gt;Parquet, CSV, JSON, or NDJSON&lt;/strong&gt;. &lt;br&gt;
Parquet is especially powerful here—you can take your HitKeep export and immediately query it in Python, Apache Spark, or a data warehouse without any transformation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3iekf1pi34fzpjl29o82.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3iekf1pi34fzpjl29o82.png" alt="Takeout across sites to Parquet, JSON, Excel.."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Security Isn't an "Enterprise" Feature
&lt;/h2&gt;

&lt;p&gt;Because of its HealthTech roots, security couldn't be an afterthought or a paid upgrade. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Zero 3rd-Party Requests:&lt;/strong&gt; The dashboard makes zero outbound calls. It even proxies site favicons server-side via DuckDuckGo so your browser never leaks IP data. It is fully air-gap compatible.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;WebAuthn &amp;amp; 2FA:&lt;/strong&gt; Hardware security keys (Passkeys/YubiKey) and TOTP (Authenticator apps) are built-in for account protection.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;API Clients:&lt;/strong&gt; Built-in bearer token generation for CI/CD pipelines or custom dashboards.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdlkhzl1c38nefr2k694s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdlkhzl1c38nefr2k694s.png" alt="Yes, you can login completely using only Webauthn"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What it tracks
&lt;/h2&gt;

&lt;p&gt;It is cookie-less by default and (optionally) respects &lt;code&gt;Do Not Track&lt;/code&gt; headers. It tracks exactly what you need to run a website:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Traffic, Referrers, Devices, and Countries.&lt;/li&gt;
&lt;li&gt;  Custom Events &amp;amp; Conversion Goals.&lt;/li&gt;
&lt;li&gt;  Multi-step Funnels with drop-off analysis.&lt;/li&gt;
&lt;li&gt;  Automatic UTM Campaign attribution.&lt;/li&gt;
&lt;li&gt;  Scheduled Email Reports (Dispatched via your own SMTP, no external cron needed).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's also fully translated into English, German, Spanish, French, and Italian.&lt;/p&gt;
&lt;h2&gt;
  
  
  What's missing?
&lt;/h2&gt;

&lt;p&gt;I want to be transparent about what it &lt;em&gt;doesn't&lt;/em&gt; do yet. There is no eCommerce revenue tracking, no cross-device identity stitching (by design, for privacy), and it still needs some UI polish. Up next on the roadmap is bringing your own SSO (OIDC/SAML).&lt;/p&gt;
&lt;h3&gt;
  
  
  Try it out
&lt;/h3&gt;

&lt;p&gt;You can self-host HitKeep right now for free. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;GitHub (Source &amp;amp; Screenshots):&lt;/strong&gt; 

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/PascaleBeier" rel="noopener noreferrer"&gt;
        PascaleBeier
      &lt;/a&gt; / &lt;a href="https://github.com/PascaleBeier/hitkeep" rel="noopener noreferrer"&gt;
        hitkeep
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Privacy-first web analytics you can self-host or run in managed EU/US cloud.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;HitKeep&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Privacy-first web analytics you can self-host or run in managed EU/US cloud.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://opensource.org/licenses/MIT" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://go.dev/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f1bf7501d59b8296e8a3e8d8dd237304708b259d9a1e4679411705387689f835/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f476f2d312e32362e312d3030414444383f6c6f676f3d676f" alt="Go Version"&gt;&lt;/a&gt;
&lt;a href="https://github.com/pascalebeier/hitkeep/pkgs/container/hitkeep" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ce33e0f8dc8c9bcdee0d945a548511dfc450756931382714596fee9481be4df8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f636b65722d676863722e696f2d626c75653f6c6f676f3d646f636b6572" alt="Docker Image (GHCR)"&gt;&lt;/a&gt;
&lt;a href="https://hub.docker.com/r/pascalebeier/hitkeep" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9b01acf36579f91695439df463d7f84ab6e0f2591f6e09730f4e7644841ac60a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f636b65722d446f636b65725f4875622d3234393645443f6c6f676f3d646f636b6572" alt="Docker Image (Hub)"&gt;&lt;/a&gt;
&lt;a href="https://hitkeep.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/26a770ea959a9f2b3752b9ce1a21843f9f16875c33147e04334f5b44014f124f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f63732d6869746b6565702e636f6d2d306561356539" alt="Documentation"&gt;&lt;/a&gt;
&lt;a href="https://www.bestpractices.dev/projects/11990" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5521311d6959bd21af83030ea0ea21bffc7e785510d793a2fb42b0e4a5fa884f/68747470733a2f2f7777772e626573747072616374696365732e6465762f70726f6a656374732f31313939302f6261646765" alt="OpenSSF Best Practices"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;HitKeep is an open source web analytics platform built for people who want a simpler stack than the usual PostgreSQL, Redis, ClickHouse, and reverse-proxy pileup.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Single binary runtime&lt;/li&gt;
&lt;li&gt;Embedded DuckDB and NSQ with batched ingest writes&lt;/li&gt;
&lt;li&gt;Privacy-first tracking&lt;/li&gt;
&lt;li&gt;Goals, funnels, ecommerce, AI visibility, AI chatbot analytics, email reports, and API clients&lt;/li&gt;
&lt;li&gt;Self-hosted or managed cloud with EU/US region choice&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://hitkeep.com" rel="nofollow noopener noreferrer"&gt;Website&lt;/a&gt; · &lt;a href="https://hitkeep.com/cloud" rel="nofollow noopener noreferrer"&gt;Cloud&lt;/a&gt; · &lt;a href="https://demo.hitkeep.com/share/7a55968bb42df256512fbe7ff73ab88f29dd45c236eddc818bd66420b4ffbaad" rel="nofollow noopener noreferrer"&gt;Live Demo&lt;/a&gt; · &lt;a href="https://hitkeep.com/guides/introduction/" rel="nofollow noopener noreferrer"&gt;Docs&lt;/a&gt; · &lt;a href="https://hitkeep.com/api/" rel="nofollow noopener noreferrer"&gt;API&lt;/a&gt; · &lt;a href="https://github.com/PascaleBeier/hitkeep/releases" rel="noopener noreferrer"&gt;Releases&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/PascaleBeier/hitkeep/./.github/assets/dashboard-overview.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FPascaleBeier%2Fhitkeep%2F.%2F.github%2Fassets%2Fdashboard-overview.png" alt="HitKeep analytics dashboard — traffic overview, geographic breakdown, goals, funnels, and UTM attribution"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why HitKeep&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;HitKeep is for teams that want product analytics without adopting a full analytics platform stack.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simple to run:&lt;/strong&gt; one binary, one data directory, no external database required&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Efficient write path:&lt;/strong&gt; NSQ buffers ingest bursts and DuckDB appender batches smooth out disk-heavy per-row inserts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy-first by default:&lt;/strong&gt; cookie-less tracking, Do Not Track support, focused data collection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Useful out of the box:&lt;/strong&gt; traffic analytics with countries/languages…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/PascaleBeier/hitkeep" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Documentation:&lt;/strong&gt; &lt;a href="https://hitkeep.com" rel="noopener noreferrer"&gt;https://hitkeep.com&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you like the project, I'd incredibly appreciate a star on GitHub! &lt;/p&gt;



&lt;p&gt;&lt;strong&gt;☁️ Don't want to manage a server?&lt;/strong&gt;&lt;br&gt;
HitKeep is proudly Open Source. But if you want the strict privacy, data-ownership, and cookie-less tracking of HitKeep &lt;em&gt;without&lt;/em&gt; having to manage a VPS, systemd, or database backups, I am launching &lt;strong&gt;HitKeep Cloud&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;It will offer fully managed, single-tenant instances hosted strictly in the EU (Frankfurt) or the US. &lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://hitkeep.com/cloud" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Join the HitKeep Cloud Early Access Waitlist&lt;/a&gt;
&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>analytics</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
