Operational is an open-source event tracking platform designed for tech founders and developers to monitor critical product events in real time. It solves the problem of being unaware of operational issues like failed logins, cronjob failures, or payment events by delivering instant push notifications to mobile and web. Unlike general analytics tools, Operational focuses on high-impact events that require immediate human intervention.
Built as a monorepo with Node.js, Express.js, Prisma, and Vue 3, Operational supports both hosted and self-hosted deployments via Docker, Render, or VPS. It has minimal third-party dependencies, avoids complex data stores like ClickHouse in its open-source version, and provides a lightweight SDK for quick integration into any tech stack.
What You Get
- Push Notifications to Mobile & Web - Receive real-time alerts for critical events like user signups, failed logins, or payment events directly on your phone or browser via service workers and Web Push API.
- Action Buttons with Webhook Triggers - Add custom buttons (e.g., “Ban IP”, “Approve User”) to event cards that trigger external webhooks to automate responses within your system.
- Event Contexts (Events-in-Events) - Chain related events together to understand complex workflows, such as linking a Stripe payment to a user signup and subsequent cronjob.
- JSON Event Logging with Formatting - Ingest and display raw JSON payloads from webhooks, APIs, or logs with syntax highlighting and structured rendering for debugging.
- Progressive Web App (PWA) - Use Operational as a fully functional PWA that works offline, installs on mobile homescreens, and receives push notifications without requiring a native app.
- SDK for Quick Integration - Integrate with just a few lines of code using the official @operational.co/sdk npm package to send events from any Node.js or browser environment.
Common Use Cases
- Monitoring SaaS signups and waitlists - A founder uses Operational to get instant push notifications when someone joins a waitlist, with user details displayed so they can personally follow up.
- Tracking cronjob failures in production - A DevOps engineer sets up Operational to alert them when scheduled tasks fail or take too long, with timestamps and logs visible in a live timeline.
- Debugging webhook payloads from Stripe or GitHub - A product team uses Operational to capture and inspect raw JSON from payment or CI/CD webhooks, then triggers automated actions like banning abusive IPs.
- Auditing user actions and billing events - A startup uses Operational to log every subscription change, user deletion, or admin action, creating an immutable audit trail with context and action buttons.
Under The Hood
Architecture
- Monorepo structure isolates backend, frontend, and SDK concerns with clear workspace boundaries, promoting modular development
- Service-layer abstractions exist via shared stores and APIs, but lack formal dependency injection or interface contracts
- Frontend components follow component-based patterns with global state management, though tightly coupled to Vue instances
- Backend route handlers conflate controller logic with routing, violating clear MVC separation
- UI components reuse shared libraries with consistent theming, but state management lacks testability and scalability
Tech Stack
- Node.js backend with Express and Prisma ORM for type-safe data access, integrated with Stripe for payments
- Vue 3 frontend using Pinia for state, Vee-Validate for forms, and Vue Final Modal for UI components
- Unified monorepo managed via npm workspaces, coordinating backend, frontend, and shared packages
- Docker-based deployment with custom build scripts for multi-package initialization
- Prettier enforces consistent formatting, but TypeScript adoption is minimal and inconsistent
Code Quality
- Testing is nearly absent, with no meaningful assertions or test coverage to validate behavior
- Mixed usage of Options API and Composition API creates inconsistent component patterns
- Error handling is superficial, relying on generic try/catch without custom types or recovery strategies
- Naming conventions are erratic across components, stores, and props, lacking a unified style
- Absence of type annotations and linting tooling leads to runtime risks and unstructured code
What Makes It Unique
- Native event tracking and widget engine enable real-time, customizable dashboards without external tools
- Dynamic widget system supports event-driven and push-based data sources with automatic caching and rendering
- Built-in server monitoring dashboard provides deep system insights directly in the admin interface
- Editor.js-based content parser allows rich, structured blogging without traditional CMS dependencies
- Integrated Telegram and push notifications tied to event sources create unified, multi-channel alerting
- Widget schema system dynamically generates forms and data pipelines, eliminating need for static API endpoints