An AI-powered visual moodboard application. Drop images onto the canvas and get automatic AI-generated captions using Google Gemini.
- Drag & Drop - Simply drop images from your computer onto the canvas
- AI Captioning - Images are automatically captioned using Google Gemini
- Visual Canvas - Arrange, drag, and organize your images freely
- Persistent Storage - Images and captions stored in MongoDB
-
Set your Gemini API key:
export GEMINI_API_KEY=your_api_key_here -
Start all services:
make up
-
Open the app:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8001
- Python 3.13+
- Node.js 20+
- MongoDB (local or Docker)
- uv for Python package management
make installmake mongoexport GEMINI_API_KEY=your_api_key_here
make devThis starts:
- Backend at http://localhost:8001
- Frontend at http://localhost:5173
Run make help to see all available commands:
| Command | Description |
|---|---|
make install |
Install all dependencies |
make dev |
Run both frontend and backend in dev mode |
make dev-backend |
Run backend only |
make dev-frontend |
Run frontend only |
make build |
Build Docker images |
make up |
Start all services with Docker |
make down |
Stop all services |
make logs |
View logs from all services |
make clean |
Remove build artifacts and volumes |
moodboard/
├── backend/
│ ├── main.py # FastAPI app and routes
│ ├── database.py # MongoDB operations
│ ├── captioning.py # Gemini integration
│ └── models.py # Pydantic schemas
├── frontend/
│ └── src/
│ └── App.tsx # React application
├── docker-compose.yml # Docker orchestration
└── Makefile # Build automation
| Method | Endpoint | Description |
|---|---|---|
| POST | /upload |
Upload an image for captioning |
| GET | /images |
List all images with captions |
| GET | /images/{id} |
Get a single image |
| DELETE | /images/{id} |
Delete an image |
| GET | /health |
Health check |
| Variable | Description | Default |
|---|---|---|
GEMINI_API_KEY |
Google Gemini API key | Required |
MONGODB_URL |
MongoDB connection string | mongodb://localhost:27017 |
MIT