How to Self-Host Monica: Personal CRM 2026
TL;DR
Monica (AGPL 3.0, ~21K GitHub stars, PHP/Laravel) is a personal CRM for managing your relationships — not business leads, but friends, family, and acquaintances. Track contact info, birthdays, important dates, notes from conversations, activities you've done together, gifts, and reminders. Monica Cloud starts at $9/month. Self-hosted Monica is free.
Key Takeaways
- Monica: AGPL 3.0, ~21K stars, PHP/Laravel — personal relationship manager
- Not a business CRM: Designed for personal contacts, not leads/pipelines
- Contacts: Full profiles with birthdays, relationships, social profiles, photos
- Reminders: Get email/notification reminders for birthdays, anniversaries, follow-ups
- Activities: Log conversations, dinners, and shared experiences
- Journals: Keep a private journal attached to contacts
- Requirements: PHP/MySQL — Docker makes this easy
Monica vs Business CRMs vs Contacts App
| Feature | Monica | Salesforce/HubSpot | Phone Contacts |
|---|---|---|---|
| Purpose | Personal relationships | Business leads | Basic contact storage |
| Cost | Free (self-hosted) | $20–$100+/user/mo | Free |
| Relationship context | Yes | Limited | No |
| Activity logging | Yes | Yes | No |
| Reminders | Yes | Yes | Birthday only |
| Notes per contact | Yes (detailed) | Yes | Basic |
| Gift tracking | Yes | No | No |
| Journal | Yes | No | No |
| Privacy | Yours | Vendor's | Apple/Google |
Part 1: Docker Setup
# docker-compose.yml
services:
app:
image: monica:latest
container_name: monica
restart: unless-stopped
ports:
- "8080:80"
depends_on:
- db
volumes:
- monica_storage:/var/www/html/storage
environment:
APP_ENV: production
APP_KEY: "${APP_KEY}" # base64:<32-random-bytes>
APP_URL: "https://crm.yourdomain.com"
DB_HOST: db
DB_DATABASE: monica
DB_USERNAME: monica
DB_PASSWORD: "${DB_PASSWORD}"
MAIL_MAILER: smtp
MAIL_HOST: "smtp.yourdomain.com"
MAIL_PORT: "587"
MAIL_USERNAME: "noreply@yourdomain.com"
MAIL_PASSWORD: "${SMTP_PASSWORD}"
MAIL_ENCRYPTION: tls
MAIL_FROM_ADDRESS: "monica@yourdomain.com"
MAIL_FROM_NAME: "Monica"
db:
image: mysql:8.0
container_name: monica-db
restart: unless-stopped
volumes:
- mysql_data:/var/lib/mysql
environment:
MYSQL_DATABASE: monica
MYSQL_USER: monica
MYSQL_PASSWORD: "${DB_PASSWORD}"
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
volumes:
monica_storage:
mysql_data:
# Generate APP_KEY:
echo "base64:$(openssl rand -base64 32)"
docker compose up -d
# Run initial setup:
docker exec monica php artisan setup:production --pretend
docker exec monica php artisan setup:production
Part 2: HTTPS with Caddy
crm.yourdomain.com {
reverse_proxy localhost:8080
}
Visit https://crm.yourdomain.com → register your account.
Part 3: Add Your First Contact
- Contacts → + Add Contact
- Fill in:
- First and last name
- Nickname
- Birthday (with reminder option)
- How you met
- Photo
- Social profiles: Twitter, LinkedIn, Instagram handles
- Phone numbers, email addresses, addresses
Part 4: Relationship Mapping
Define relationships between contacts:
- Open a contact → Relationships
- + Add relationship → type + contact
- Types: Partner, Sibling, Parent, Child, Friend, Colleague, Boss
- Monica shows the relationship from both contacts' perspectives
Example: Mark "John Smith" as "Friend of" → the contact auto-shows in John's profile too.
Part 5: Activities
Log shared activities with contacts:
- Contact → Activities → + Log Activity
- Date: when it happened
- Activity type: Call, Dinner, Coffee, Trip, etc.
- Description: notes from the conversation
- Duration: optional
Dashboard shows your recent activity timeline across all contacts.
Part 6: Reminders
Never miss an important date:
Automatic Birthday Reminders
When you add a birthday to a contact → Monica automatically creates a yearly reminder.
Custom Reminders
- Contact → Reminders → + Add Reminder
- Title: "Call to check in about job application"
- Date: specific date or interval (e.g., "in 2 weeks")
- Frequency: one-time, monthly, yearly
- Reminder sent via email
Part 7: Notes
Log thoughts and context about contacts:
- Contact → Notes → + Add Note
- Write anything: impressions, important info they shared, things to follow up on
- Notes are timestamped and searchable
Emotionally tagged notes: tag notes as positive, neutral, or negative — useful for tracking relationship dynamics over time.
Part 8: Gift Tracking
Track gift ideas and given/received gifts:
- Contact → Gifts → + Add Gift
- Name: "Blue ceramic coffee mug"
- Status: Idea → Given / Received
- URL: link to the product
- Optional: occasion (Birthday, Christmas, etc.)
See at a glance what gifts you've given someone over the years.
Part 9: Journal
Keep a private journal with Monica:
- Journal → + New Entry
- Date (defaults to today)
- Write your entry
- Optional: rate your day (1–10)
The journal is separate from contacts — for general reflections. Or create journal entries linked to a specific contact for private notes about your relationship.
Part 10: Import Contacts
Import existing contacts from vCard (.vcf):
- Settings → Import → Import vCard
- Export contacts from iPhone/Android/Google Contacts as .vcf
- Upload → Monica imports name, email, phone, birthday
Maintenance
# Update Monica:
docker compose pull
docker compose up -d
# Run migrations after update:
docker exec monica php artisan migrate --force
# Backup:
# Database:
docker exec monica-db mysqldump -u monica -p${DB_PASSWORD} monica | gzip \
> monica-db-$(date +%Y%m%d).sql.gz
# Attachments and photos:
tar -czf monica-storage-$(date +%Y%m%d).tar.gz \
$(docker volume inspect monica_monica_storage --format '{{.Mountpoint}}')
# Logs:
docker compose logs -f app
See all open source productivity and personal tools at OSSAlt.com/categories/productivity.