A personal memory vault that preserves your relationships and shared experiences — with an interactive knowledge graph to visualize how people and memories connect.
Memoir helps you preserve the people in your life and the memories you've shared with them. You can store photos and text entries linked to specific people — and explore those connections through a dynamic relationship graph.
Think of it as a personal CRM meets memory journal, built for human relationships.
- Memory Storage — Add text and photos tied to people in your life
- Relationship Graph — Interactive force-directed graph showing how people connect
- People Management — Track relationships by category (Family, Friends, Colleagues)
- AI Search — Natural language search through your memories using RAG
- PDF Export — Generate beautiful PDF memoirs for any person
- REST API — Clean FastAPI backend with full CRUD operations
- Persistent Storage — PostgreSQL with SQLAlchemy ORM for reliable data modeling
| Layer | Technology |
|---|---|
| Backend | FastAPI, Python 3.11 |
| Database | PostgreSQL, SQLAlchemy |
| Frontend | React 18, Tailwind CSS 4, Framer Motion |
| Icons | Lucide React |
| API | RESTful with Pydantic validation |
Memoir/
├── backend/
│ ├── routes/
│ │ └── main.py # FastAPI app entry point
│ ├── database/
│ │ ├── models.py # SQLAlchemy ORM models
│ │ └── config.py # Database configuration
│ ├── rag/
│ │ ├── main.py # RAG implementation
│ │ ├── embeddings.py # Embedding utilities
│ │ └── vector_store.py # Vector storage
│ ├── ai/
│ └── __init__.py
├── frontend/
│ ├── src/
│ │ ├── components/ # React components
│ │ │ ├── Dashboard.jsx
│ │ │ ├── Login.jsx
│ │ │ ├── PersonDetail.jsx
│ │ │ ├── SearchPage.jsx
│ │ │ └── GraphPage.jsx
│ │ ├── lib/
│ │ │ └── utils.js # Utility functions
│ │ ├── App.jsx # Main app component
│ │ ├── main.jsx # React entry point
│ │ └── index.css # Tailwind CSS styles
│ ├── package.json
│ └── vite.config.js
├── migrate_database.py
├── migrate_memories.py
├── requirements.txt
├── render.yaml
└── README.md
Memoir/ ├── backend/ │ ├── main.py # FastAPI app entry point │ ├── models.py # SQLAlchemy ORM models │ ├── schemas.py # Pydantic request/response schemas │ ├── database.py # DB connection and session management │ ├── routes/ # API route handlers │ └── utils/ # Helper utilities ├── frontend/ │ ├── src/ │ │ ├── components/ # React components │ │ │ ├── Dashboard.jsx │ │ │ ├── Login.jsx │ │ │ ├── PersonDetail.jsx │ │ │ ├── SearchPage.jsx │ │ │ └── GraphPage.jsx │ │ ├── lib/ # Utilities │ │ ├── App.jsx # Main app component │ │ └── index.css # Tailwind CSS styles │ ├── package.json │ └── vite.config.js ├── requirements.txt └── README.md
---
## Getting Started
### Prerequisites
- Python 3.10+
- PostgreSQL running locally
- Node.js 18+
### Installation
```bash
git clone https://github.com/MKarthik730/Memoir.git
cd Memoir
# Backend setup
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
# Frontend setup
cd frontend
npm install
Create a .env file:
DATABASE_URL=postgresql://user:password@localhost:5432/memoir_db# Terminal 1 - Backend
cd backend
uvicorn main:app --reload
# Terminal 2 - Frontend
cd frontend
npm run devOpen http://localhost:5173 in your browser.
API docs available at http://localhost:8000/docs
| Method | Endpoint | Description |
|---|---|---|
| POST | /sign_up |
Create new account |
| POST | /login |
Sign in |
| Method | Endpoint | Description |
|---|---|---|
| GET | /home/categories |
List all categories |
| POST | /home/category |
Create a category |
| Method | Endpoint | Description |
|---|---|---|
| GET | /home/category/{id}/people |
Get people in category |
| POST | /home/person |
Add a new person |
| GET | /home/person/{id}/files |
Get person's files |
| POST | /home/person/{id}/upload |
Upload photo |
| GET | /home/person/{id}/pdf |
Download PDF memoir |
| Method | Endpoint | Description |
|---|---|---|
| GET | /home/person/{id}/memories |
Get person's memories |
| POST | /home/person/{id}/memory |
Add memory to person |
| Method | Endpoint | Description |
|---|---|---|
| POST | /home/rag/query |
AI search memories |
- Building React SPAs with component-based architecture
- Styling with Tailwind CSS while maintaining design consistency
- Designing relational schemas for graph-like data (people ↔ memories many-to-many)
- FastAPI dependency injection for database session management
- SQLAlchemy relationship modeling with backref
- Implementing smooth animations with Framer Motion
- Audio notes storage
- Timeline view sorted by date
- Mobile-responsive refinements
- Tags and filtering system
- Sharing/collaboration features
Karthik Motupalli — @MKarthik730
CS Student, ANITS Vizag | LinkedIn