Open-source event analytics platform for tracking users, sessions, and product events in real time.
Quick Start β’ Test Results β’ Features β’ SDK & Docs β’ Architecture β’ Manual Setup β’ Configuration β’ Contributing
| Suite | Tests | Status |
|---|---|---|
| Backend (Jest) | 14 tests, 3 suites | β Passing |
| Portal (Karma/Jasmine) | 4 tests, 2 components | β Passing |
Backend coverage: utilities.service, lookups.service, lookup.controller
# Run backend tests
cd backend && npm test
# Run portal tests
cd portal && npm test- Real-Time Event Tracking β Capture and visualize events as they happen via WebSocket
- User & Session Analytics β Track active users, sessions, page views, and user journeys
- Dashboard β KPIs, charts, geographic distribution, browser/OS breakdown, UTM analysis
- Funnel Analytics β Build and analyze conversion funnels
- Alerting System β Set up alerts on events with Slack and email notifications
- Integrations β Slack, email (Resend/Nodemailer), and webhook support
- Multi-Project β Manage multiple projects under one account
- OAuth Login β Sign in with GitHub or Google
- REST API β Full API with JWT authentication and PAT tokens
Track events from your app using the official SDKs:
| SDK | Install | Docs |
|---|---|---|
| JavaScript/Node | npm install evntaly-js |
SDK Integration Guide |
| Python | pip install evntaly-python |
SDK Integration Guide |
| Go | go get github.com/Evntaly/evntaly-go |
SDK Integration Guide |
| C# | dotnet add package EvntalySDK |
SDK Integration Guide |
Self-hosted: When running Evntaly yourself, configure the SDK with your backend URL (e.g. http://localhost/api/v1 or your domain). See each SDK's docs for the apiUrl or baseUrl option.
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Browser (:80) β
ββββββββββββββββββββββββ¬βββββββββββββββββββββββββββ
β
ββββββββββΌβββββββββ
β Portal (Nginx) β
β Angular SPA β
βββββ¬ββββββββββ¬ββββ
β β
/api/* β β /*
β β
βββββββββΌββββ β Static files
β Backend β β served by Nginx
β NestJS β β
β (:3000) β
βββββββ¬ββββββ
β
ββββββββΌβββββββ
β MongoDB β
β (:27017) β
βββββββββββββββ
| Component | Tech Stack |
|---|---|
| Backend | NestJS 10, TypeScript, Mongoose, Socket.IO, Passport JWT |
| Portal | Angular 17, Angular Material, Bootstrap 5, ApexCharts, ECharts |
| Database | MongoDB 7 |
| Container | Docker, Docker Compose, Nginx |
The fastest way to run Evntaly is with Docker Compose.
Prerequisites: Docker and Docker Compose
# 1. Clone the repo
git clone https://github.com/Evntaly/Evntaly.git
cd Evntaly
# 2. Copy and configure environment variables
cp .env.example .env
# 3. Start all services
docker compose up -dOpen http://localhost:8080 in your browser.
The API is available at http://localhost:8080/api/v1/.
cd backend
# Install dependencies
npm install
# Copy environment config
cp ../.env.example .env
# Edit .env with your MongoDB connection string
# Run in development mode
npm run start:devThe API starts on http://localhost:3000.
cd portal
# Install dependencies
npm install
# Run in development mode
npm startThe portal starts on http://localhost:8945.
You need a running MongoDB instance. For local development:
# Using Docker
docker run -d --name evntaly-mongo -p 27017:27017 mongo:7
# Or install MongoDB locally
# https://www.mongodb.com/docs/manual/installation/| Variable | Required | Default | Description |
|---|---|---|---|
NODE_ENV |
No | development |
development or production |
PORT |
No | 3000 |
Backend server port |
DB_CONNECTION |
Yes | β | MongoDB connection string |
CLIENT_URL |
No | http://localhost:8945 |
Frontend URL for CORS |
API_BASE_URL |
No | β | Backend API URL for server-side event forwarding (self-hosted) |
SENTRY_DSN |
No | β | Sentry DSN for error tracking |
GITHUB_CLIENT_ID |
No | β | GitHub OAuth app client ID |
GITHUB_SECRET |
No | β | GitHub OAuth app secret |
GITHUB_REDIRECT_URI |
No | β | GitHub OAuth callback URL |
GOOGLE_CLIENT_ID |
No | β | Google OAuth client ID |
GOOGLE_SECRET |
No | β | Google OAuth client secret |
GOOGLE_REDIRECT_URI |
No | β | Google OAuth callback URL |
RESEND_API_KEY |
No | β | Resend API key for transactional emails |
SLACK_REDIRECT_URI |
No | β | Slack OAuth redirect for integrations |
evntaly/
βββ backend/ # NestJS API
β βββ src/
β β βββ @core/ # Utilities, middleware, helpers
β β βββ @domain/ # Mongoose schemas/models
β β βββ api/ # REST controllers + WebSocket gateway
β β βββ Infrastructure/ # Services, repositories, DTOs, transactions
β β βββ app.module.ts # Root NestJS module
β β βββ main.ts # Entry point
β βββ templates/ # Email templates (Handlebars)
β βββ Dockerfile
β βββ package.json
βββ portal/ # Angular frontend
β βββ src/
β β βββ app/
β β β βββ analytics/ # Funnels, retention
β β β βββ core/ # Services, interceptors, helpers
β β β βββ dashboard/ # KPIs, charts, maps
β β β βββ developer-account/ # Auth, settings
β β β βββ events/ # Event feed
β β β βββ insights/ # Users, features, topics
β β β βββ integrations/ # Slack, email
β β β βββ shared/ # Reusable components
β β β βββ theme/ # Layout, header, sidebar
β β βββ environments/ # Angular environment configs
β βββ Dockerfile
β βββ nginx.conf
β βββ package.json
βββ docker-compose.yml # Orchestrates all 3 services
βββ .env.example # Environment template
βββ LICENSE
βββ README.md
All endpoints are prefixed with /api/v1/.
| Method | Endpoint | Description |
|---|---|---|
POST |
/account/create |
Create a new account |
POST |
/account/signin |
Sign in |
GET |
/account/details |
Get account details |
POST |
/register/event |
Register an event (SDK endpoint) |
POST |
/register/user |
Register/identify a user |
GET |
/events/list |
List events |
GET |
/events/kpis |
Event KPIs |
GET |
/dashboard/kpis/* |
Dashboard metrics |
GET |
/users/list |
List tracked users |
POST |
/alerts/create |
Create an alert |
GET |
/integrations/list |
List integrations |
POST |
/funnels/create |
Create a funnel |
Authentication is via JWT token in the Authorization header for dashboard endpoints, and via secret + pat headers for SDK/registration endpoints.
Contributions are welcome! Here's how to get started:
- Fork the repository
- (Optional) Run
./scripts/setup-git-hooks.shto use project git hooks - Create a feature branch:
git checkout -b feature/my-feature - Make your changes and add tests if applicable
- Commit:
git commit -m "Add my feature" - Push:
git push origin feature/my-feature - Open a Pull Request
Please open an issue first for major changes to discuss the approach.
