A Django-based personal CRM that helps you stay in touch with the people you care about. It syncs with Google Contacts, Google Calendar, and Google Tasks, and uses AI to suggest conversation topics when it's time to reach out.
- Google Contacts sync - Import and keep your contacts up to date
- Google Calendar integration - View upcoming events with your contacts
- Google Tasks integration - Automatically create follow-up reminders
- AI-powered suggestions - Uses Groq (LLaMA) to analyze past interactions and suggest conversation topics
- Daily email digest - Morning email with today's tasks, overdue items, and contacts to reach out to
- Keep-in-touch tracking - Set follow-up frequencies per contact and get reminded when it's time
- Backend: Django 4.2, Celery, Redis
- Database: SQLite (local) / MySQL 8.0 (Docker)
- Auth: django-allauth with Google OAuth2
- AI: Groq API (LLaMA 3)
- Infrastructure: Docker Compose, Nginx
- Docker and Docker Compose
- A Google Cloud project with OAuth2 credentials
- A Groq API key
-
Clone the repository
git clone https://github.com/your-username/memoria.git cd memoria -
Create your environment file
cp .env.example .env
Edit
.envand fill in your actual values:SECRET_KEY- Generate one withpython -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"GROQ_API_KEY- From Groq ConsoleGOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRET- From Google Cloud Console (see below)- Email and database credentials as needed
-
Configure Google OAuth2
- Go to Google Cloud Console
- Create a new project (or select an existing one)
- Enable the following APIs:
- People API
- Google Calendar API
- Google Tasks API
- Go to Credentials > Create Credentials > OAuth 2.0 Client ID
- Set the authorized redirect URI to:
http://localhost:8080/accounts/google/login/callback/ - Copy the Client ID and Client Secret into your
.envfile
-
Start the application
docker compose up --build
-
Run database migrations
docker compose exec web python manage.py migrate -
Create a superuser (optional)
docker compose exec web python manage.py createsuperuser -
Access the application
Open http://localhost:8080 in your browser.
memoria/
├── docker-compose.yml # Docker services (web, redis, celery, nginx, db)
├── docker-compose_production.yml
├── nginx/ # Nginx configuration
├── myproject/
│ ├── Dockerfile
│ ├── manage.py
│ ├── requirements.txt
│ ├── myproject/ # Django project settings
│ │ ├── settings.py
│ │ ├── urls.py
│ │ ├── tasks.py # Celery periodic tasks
│ │ └── utils.py # Email utility
│ ├── memoria/ # Main app (contacts, logs, views)
│ ├── google_integration/ # Google API integration (contacts, tasks, calendar)
│ ├── templates/ # Django templates
│ └── staticfiles/ # Static assets
└── .env.example # Environment variables template
MIT

