Website • App • Documentation
Ari is a self-hosted personal CRM built around immutable history and reliable notifications.
It is designed for people who want full control over their personal data, complete change history, and the ability to self-host with 100% privacy.
- Quick Start (Docker)
- Why this exists
- Core principles
- What exists today
- Architecture at a glance
- Project status & expectations
- Related Repositories
You can run Ari immediately without cloning the code, using the official Docker image.
Option 1: Docker Run
docker run -d \
--name ari \
--restart unless-stopped \
-p 8080:8080 \
-e APP_ENV=prod \
-v $(pwd)/data:/app/core/var \
aleksejs0/ari-app:latestOption 2: Docker Compose
services:
ari:
image: aleksejs0/ari-app:latest
container_name: ari
restart: unless-stopped
environment:
- APP_ENV=prod
volumes:
- ./data:/app/core/var
ports:
- "8080:8080"This project started from a very practical frustration.
I used MonicaHQ for a long time. One of my favorite features was email notifications for important dates, like birthdays. Over time, the project felt stagnant, but it still worked well enough — until one day it didn’t.
On my self-hosted Monica instance, something went wrong. Part of the notification data disappeared from the database. Fixing it meant digging into internals and re-configuring everything from scratch. I didn’t. I simply stopped using the product.
Later, I experimented with managing contacts in Obsidian, treating them as notes. I even built my own plugin to sync Google Contacts. This worked well for data ownership and flexibility, but it still lacked one crucial thing: reliable, cross-platform notifications.
At that point, it became clear that I wanted something different:
- a system where data history is never silently lost
- a system where notifications are treated as first-class, reliable features
- a system I can fully trust, inspect, and self-host
That is how Ari started.
- History-first All meaningful changes are recorded. Losing context or history is not acceptable.
- Reliable notifications Notifications are not a “nice to have” feature. They are part of the core value.
- Data ownership You can self-host Ari and keep full control over your data.
- Open source by default Transparency builds trust. All core logic is open and auditable.
- Privacy by design No tracking, no dark patterns, no data extraction incentives.
- Monolith first, clean architecture Start simple. Optimize and split only when the system proves it needs it.
Ari has moved beyond a technical prototype into a functional system with a stable domain model.
- Dashboard:
- Widget for upcoming anniversaries (sorted by date)
- Recent system activity stream
- Quick access to contact groups
- Contact Management:
- Rich Data: Multiple names, emails, phone numbers, addresses, and organizations.
- Relationships: Bidirectional relationships between contacts (e.g., Parent ↔ Child) with duplicate prevention.
- Grouping: Tagging system with dedicated filtering pages and sidebar navigation.
- Inline Editing: Quick updates for fields directly on the contact card.
- Similar Contacts: Automatic detection of potential family members or duplicates.
- Audit log:
- Full history of the contact lifecycle (Create, Update, Delete).
- Human-readable timelines showing exactly what changed and who changed it.
- "Time travel" visibility into deleted data.
- Notification system:
- Configurable notification channels (currently Telegram).
- Date-based subscriptions.
- Settings:
- Multi-language support (English/Russian).
- Configurable date formats (MM/DD/YYYY vs DD.MM.YYYY).
- Custom "Favorites" group configuration.
- Google Contacts import:
- Imports core details, phones, emails, and addresses.
- Uses external IDs to prevent duplication on re-import.
- React-based UI with TanStack tooling for performance.
- Pagination and Search for managing larger contact lists.
- Favorites system for quick access to important people.
- Dockerized development environment.
- Fully documented API (OpenAPI).
- Extensive automated tests (backend and frontend).
- Strict static analysis (SonarJS, Knip) to ensure maintainability.
This is an early but usable system, still evolving. Workflows are being polished, and parts of the system are intentionally over-engineered for correctness (history, consistency) rather than just UX speed.
- PHP 8.5
- Symfony 7.4
- API Platform (OpenAPI-first)
- MariaDB / SQLite
- Token-based authentication
- Strict user data isolation at the Doctrine level
- Audit logging via Doctrine event subscribers
- React
- TanStack Query / Router
- Multilingual UI
- Typed API client generated from OpenAPI
- Docker-based development environment
- Cron-based background jobs (notifications)
- Designed for self-hosting from day one
The system now supports a Plugin-Oriented Architecture on both Backend and Frontend. This allows extending functionality without modifying the core codebase.
- Proof of Concept: A full plugin system is implemented and functional.
- Demo Video: Building Ari: Plugin Marketplace & User Activation Logic
- Documentation: See Plugin Development Overview for details on creating plugins for both layers.
Ari is in an active stabilization phase.
- The core architecture and data model are in place and expanding.
- Key features (Contacts, Relations, History, Notifications) are functional.
- The UI is becoming more coherent with the addition of dashboards, settings, and inline editing.
However, Ari is not production-ready yet:
- Performance optimization for large datasets is ongoing.
- Import queues are needed for massive Google Contact lists.
- Breaking changes are still possible as the domain model matures.
If you care about data reliability, transparent history, and trustworthy notifications, and are comfortable with an evolving system — Ari is worth following.
- Main Repository: ari (current)
- E2E Tests: ari-e2e
- Documentation: ari-docs
- Landing Page: ari-landing
- Plugin SDK: ari-sdk
- Gifts Plugin: ari-plugin-gifts
- Plugin Registry: ari-plugin-registry