Skip to content

karloscodes/fusionaly-oss

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

185 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fusionaly

Latest Release License: AGPL-3.0 CI Docker

Privacy-first, self-hosted web analytics. No cookies, no fingerprinting, no personal data stored.

One script tag. One attribute. You own everything.

Website · Documentation · Installation · Free vs Pro


Install

curl -fsSL https://fusionaly.com/install | bash

Or with Docker:

docker pull karloscodes/fusionaly:latest

See the Installation Guide for full setup instructions.

How It Works

Add the tracking script to your site:

<script defer src="https://your-domain.com/y/api/v1/sdk.js"></script>

Page views and button clicks are tracked automatically. Want more? One attribute works on any element:

<button data-fusionaly-event-name="signup_clicked">Sign Up</button>
<a href="/pricing" data-fusionaly-event-name="pricing_viewed">Pricing</a>
<form data-fusionaly-event-name="contact_submitted">...</form>
<section data-fusionaly-event-name="testimonials_seen">...</section>

The SDK does the right thing based on element type — click, submit, sendBeacon, or scroll into view. Read the docs.

Features

  • Page views & SPA navigation — automatic, zero config
  • Button & link tracking — automatic or named with one attribute
  • Form tracking — tracks on submit, suppresses button double-events
  • Section tracking — fires when scrolled into view (50% visible)
  • Revenue tracking — purchases with price, currency, metadata
  • Custom events — JavaScript API for dynamic data
  • Goal conversions — track signups, purchases, any event as a goal
  • User flows — see how visitors navigate entry to exit
  • Annotations — mark deployments, campaigns, incidents on your timeline
  • Shareable dashboards — public links to your analytics
  • Bot filtering & spam protection — clean data by default
  • Subdomain tracking — first-party, ad-block proof

Tech Stack

  • Backend: Go, Fiber, GORM, SQLite
  • Frontend: React, Inertia.js, Tailwind CSS, shadcn/ui
  • Testing: Go testing, Playwright E2E

Development

Requirements: Go 1.25+, Node.js 22+, SQLite

make install      # Install dependencies
make db-migrate   # Apply migrations
make dev          # Start dev server (hot reload)

Access at http://localhost:3000

make test         # Unit tests (~3s)
make test-e2e     # Playwright E2E (~5min)
make lint         # Run linters
make build        # Production binaries

Project Structure

fusionaly/
├── cmd/
│   ├── fusionaly/     # Main server binary
│   ├── fnctl/         # CLI tool (migrations, admin tasks)
│   └── manager/       # Production manager (health checks, upgrades)
├── internal/          # Core business logic (Phoenix Contexts pattern)
├── api/v1/            # Public tracking API + SDK
├── web/               # React frontend (Inertia.js + Tailwind)
├── e2e/               # Playwright E2E tests
└── storage/           # Runtime data (database, GeoLite2)

Configuration

Defaults work out of the box for development.

For production, set:

  • FUSIONALY_DOMAIN — your domain name
  • FUSIONALY_PRIVATE_KEY — generate with openssl rand -hex 32

See Installation Guide for Docker setup and SDK Configuration for tracking options.

Contributing

  1. Open an issue first — discuss features or significant changes before starting
  2. Bug fixes — PRs welcome with clear problem/solution description
  3. Run make lint before submitting
  4. Run make test and make test-e2e to verify changes

License

AGPL-3.0


Website · Docs · Issues · Docker Hub

About

Single tenant and self-hosted analytics

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors