I Built an Open-Source Alternative to Google Analytics + Hotjar
Source: Dev.to
Core Features
| Feature | Seentics | Plausible | Hotjar | PostHog | GA4 |
|---|---|---|---|---|---|
| Real‑time analytics | ✅ | ✅ | ❌ | ✅ | ✅ |
| Heatmaps | ✅ | ❌ | ✅ | ❌ | ❌ |
| Session replays | ✅ | ❌ | ✅ | ✅ | ❌ |
| Funnels | ✅ | ✅ | ✅ | ✅ | ✅ |
| Behavioral automations* | ✅ | ❌ | ❌ | ❌ | ❌ |
| Privacy‑first (no cookies) | ✅ | ✅ | ❌ | ✅ | ❌ |
| Open source | ✅ | ✅ | ❌ | ✅ | ❌ |
| Self‑hostable | ✅ | ✅ | ❌ | ✅ | ❌ |
Script size – 10 s on PostgreSQL runs in ~50 ms on ClickHouse—even with millions of rows.
- PostgreSQL stores non‑time‑series data: user accounts, site configurations, goals, automation rules.
- Script size stays under 1 KB (compare GA4 45 KB+, Hotjar 100 KB+). No cookies, no fingerprinting, no PII collection.
Installation
# Requires Docker
git clone https://github.com/Seentics/seentics.git
cd seentics
docker compose up -d --build
Open the application and you have a full analytics platform running.
High‑level data flow
Browser --> Tracking Script --> Go Backend API (:3002)
|
+---------------------+---------------------+
| | |
ClickHouse PostgreSQL MinIO
(events) (metadata) (replays)
- The tracking script is served by the Go backend and sends events directly to it.
- Events are buffered in memory and batch‑inserted into ClickHouse.
- Session replay data goes to S3‑compatible storage (MinIO for self‑hosted, any S3 for cloud).
- PostgreSQL stores user accounts, site configs, goals, and automation rules.
Getting Started on Your Site
Add the following snippet once to your HTML (replace YOUR_SITE_ID):
Custom Event Tracking
// Basic event
seentics.track('signup_click')
// With properties
seentics.track('purchase', {
value: 49.99,
plan: 'pro'
})
Roadmap
- AI‑powered insights (anomaly detection, natural‑language queries)
- Custom dashboards & email reports
- WordPress plugin
Try It
- Cloud version:
- Self‑host: GitHub repo – star it if you find it useful!
I’d love feedback — what features would make you switch from your current analytics setup? What’s missing?
Thanks for reading!