Skip to main content

How to Self-Host Monica: Personal CRM 2026

·OSSAlt Team
monicapersonal-crmrelationshipsself-hostingdocker2026

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

FeatureMonicaSalesforce/HubSpotPhone Contacts
PurposePersonal relationshipsBusiness leadsBasic contact storage
CostFree (self-hosted)$20–$100+/user/moFree
Relationship contextYesLimitedNo
Activity loggingYesYesNo
RemindersYesYesBirthday only
Notes per contactYes (detailed)YesBasic
Gift trackingYesNoNo
JournalYesNoNo
PrivacyYoursVendor'sApple/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

  1. Contacts → + Add Contact
  2. Fill in:
    • First and last name
    • Nickname
    • Birthday (with reminder option)
    • How you met
    • Photo
  3. Social profiles: Twitter, LinkedIn, Instagram handles
  4. Phone numbers, email addresses, addresses

Part 4: Relationship Mapping

Define relationships between contacts:

  1. Open a contact → Relationships
  2. + Add relationship → type + contact
  3. Types: Partner, Sibling, Parent, Child, Friend, Colleague, Boss
  4. 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:

  1. Contact → Activities → + Log Activity
  2. Date: when it happened
  3. Activity type: Call, Dinner, Coffee, Trip, etc.
  4. Description: notes from the conversation
  5. 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

  1. Contact → Reminders → + Add Reminder
  2. Title: "Call to check in about job application"
  3. Date: specific date or interval (e.g., "in 2 weeks")
  4. Frequency: one-time, monthly, yearly
  5. Reminder sent via email

Part 7: Notes

Log thoughts and context about contacts:

  1. Contact → Notes → + Add Note
  2. Write anything: impressions, important info they shared, things to follow up on
  3. 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:

  1. Contact → Gifts → + Add Gift
  2. Name: "Blue ceramic coffee mug"
  3. Status: Idea → Given / Received
  4. URL: link to the product
  5. 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:

  1. Journal → + New Entry
  2. Date (defaults to today)
  3. Write your entry
  4. 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):

  1. Settings → Import → Import vCard
  2. Export contacts from iPhone/Android/Google Contacts as .vcf
  3. 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.

Comments