I recently decided to start writing regularly and publishing what I write on this blog, Musings. While I mostly write for my contentment—to allow myself to think about a topic, research, and form a meaningful thought about it, I’d also like to know if others are reading what I put out and what posts and topics have the most views.

Most people would end up integrating a popular option like Google Analytics, Mixpanel, or similar. I have a huge problem with these as they are heavy and not very privacy-friendly. If I invite Google to a site like mine, I also give Google information on what my audience are reading. Since Google can track users across sites, they would use this information to target my audience with more personalized ads. I don’t want to get into this topic any deeper in this post, but this makes the case for a privacy-friendly analysis tool.

Previous Solution: Reasoning

In the past, in an earlier version of my blog where I had coded the entire thing using bare HTML and CSS, I developed a bare-bones analysis service on AWS using API Gateway, Lambda, and DynamoDB and called it Reasoning. It did not have a dashboard to view page counts and other insights, but a CLI tool to fetch this from my service and show different insights on blog posts views and popularity, filtered within in a time range. This was working great, but eventually work caught up, I wasn’t writing very much anymore, and I couldn’t maintain Reasoning.

I called it ‘Reasoning’ because most other commercial services used the term ‘analytics’ or ’telemetry’, and as a user of Pi-Hole, I had regex matched such terms into a custom blocklist on my home network (and eventually on NextDNS). I wanted my service to use another terminology as it was very privacy-conscious.

When I got back to actively writing in 2023, I realized this: as fulfilling as it is to code the entire blog site and the analytics service from scratch, I was spending a non-insignificant amount of time to get a new post out. I wanted to mainly concentrate on my writing this time around.

I have since revamped my entire blog. It now uses Hugo. Read more about it in Musings—My New Blog Site.

Sometime in the last 4–5 years, when Reasoning was being used on my blog, Telemetry Deck came out as a privacy-friendly alternative to all other analytics services out there. Initially, it was a service only for iOS apps, since I make and maintain a few of those myself, I started using them for my apps Cacti and Dialogue. It quickly became a solid and straight forward service. The people who developed and maintain the service are quite responsive and active on Slack and engage with the developer community. The measures they have taken to ensure the privacy of the users/audience of my apps were quite strong.

During my current research for privacy-friendly analytics services, and having found a few strong contenders, I wanted to check if Telemetry Deck had an option for web yet. To my amusement, they did! I quickly integrated that in my Hugo site. It took me less than an hour to set it up and test it. Took me 20 more minutes to configure my Hugo config file and page head to send different signals for development and production modes and to test all this.

This has been working quite well. I get to see which page/post has been viewed how many times, I can see this info on different time scales—day, week, month, etc. I also get a dashboard with charts instead of using CLI like I used to with Reasoning.

How Private is Telemetry Deck?

I cannot speak with absolute certainty about a service I don’t fully control. But, I believe Telemetry Deck is good on their word.

Firstly, Musings does not use cookies to track a user. Telemetry Deck also doesn’t. This means, I cannot truly count unique users to my site—I am okay with losing that insight for a huge gain in my audience’s privacy.

Telemetry Deck does not just pseudonymize identifier data, they anonymize it. This means, a user cannot be identified by stitching or reconstructing other data sources. On top of this, from Musings, I do not send any user identifier—I don’t have any to send. If you check the page source of any Musings’ pages, in the <head> section, you will find a <script> tag where Telemetry Deck is being configured. Here, I send anonymous under the user tag. On Telemetry Deck, I won’t be able to dig in and see activity per user. I can only view what my audience did, at large, all flattened together. Basically, I only get counts. Read more here. You may also check Telemetry Deck’s code to verify their claims yourself.

Telemetry Deck does not store events with minute or second granularity, all events are stored against the hour of each day. This further reduces what may be identified from the data on Telemetry Deck. This makes the insights I gather on Musings very private, anonymized, and ethical.

Due to all this, this site is beyond GDPR-compliant. We do not track or are even aware of user identities. There’s no need for a tracking consent banner.

You are not being identified or tracked by using this site.