A comprehensive analytics and data management platform built with Next.js, TypeScript, and modern web technologies. Databuddy provides real-time analytics, user tracking, and data visualization capabilities for web applications.
- π Real-time analytics dashboard
- π₯ User behavior tracking
- π Advanced data visualization // Soon
- π Secure authentication
- π± Responsive design
- π Multi-tenant support
- π Real-time updates // Soon
- π Custom metrics // Soon
- π― Goal tracking
- π Conversion analytics
- π Custom event tracking
- π Funnel analysis
- π Cohort analysis // Soon
- π A/B testing // Soon
- π Export capabilities
- π GDPR compliance
- π Data encryption
- π API access
- How do I get started? Follow the Getting Started guide.
- Bun 1.3.4+
- Node.js 20+
Databuddy can be self-hosted using Docker Compose. The repo includes two compose files:
| File | Purpose |
|---|---|
docker-compose.yaml |
Development only β starts infrastructure (Postgres, ClickHouse, Redis) for local dev |
docker-compose.selfhost.yml |
Production / self-hosting β full stack with all application services from GHCR images |
# 1. Configure environment
cp .env.example .env
# Edit .env β at minimum set BETTER_AUTH_SECRET and BETTER_AUTH_URL
# 2. Start everything
docker compose -f docker-compose.selfhost.yml up -d
# 3. Initialize databases (first run only)
docker compose -f docker-compose.selfhost.yml exec api bun run db:push
docker compose -f docker-compose.selfhost.yml exec api bun run clickhouse:initServices started:
- API β
localhost:3001 - Basket (event ingestion) β
localhost:4000 - Links (short links) β
localhost:2500 - Uptime monitoring is optional β uncomment in the compose file and set QStash keys.
All ports are configurable via env vars (API_PORT, BASKET_PORT, etc.). See the compose file comments for the full env var reference.
If the init job fails and Postgres logs show password authentication failed for user "databuddy", the Postgres volume was likely initialized with an older password.
Changing POSTGRES_PASSWORD or DATABASE_URL in your environment does not update the password stored inside an existing Postgres data volume.
To keep the existing data, update the password inside the running Postgres container to match your current environment and redeploy:
docker exec -it databuddy-postgres psql -U databuddy -d databuddyThen inside psql:
ALTER USER databuddy WITH PASSWORD 'your-current-postgres-password';Make sure the password in DATABASE_URL matches the same value.
If you do not need to preserve the database, remove the existing volume and start fresh so Postgres initializes with the current environment values:
docker compose -f docker-compose.selfhost.yml down -v
docker compose -f docker-compose.selfhost.yml up -dSee CONTRIBUTING.md for guidelines.
See SECURITY.md for reporting vulnerabilities.
-
What is Databuddy? Databuddy is a comprehensive analytics and data management platform.
-
How do I get started? Follow the Getting Started guide.
-
Is it free? Check our pricing page.
-
What are the system requirements? See Prerequisites.
-
How do I deploy? See the deployment documentation in our docs.
-
How do I contribute? See Contributing.
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See the LICENSE file for details.
Copyright (c) 2025 Databuddy Analytics, Inc.