# favs-my API de bookmarks personales con categorización automática via LLM. **Live:** https://24.favs.devsignlab.com/ ## Stack - **API:** FastAPI (Python 3.12) - **DB:** PostgreSQL 16 - **LLM:** Claude (Haiku por defecto) - **Infra:** Docker Compose ## Setup ```bash cp .env.example .env # editar .env con tu ANTHROPIC_API_KEY docker compose up --build ``` La API queda en `http://localhost:8000`. La DB en el puerto `5433`. ## Uso ### Crear bookmark ```bash curl -X POST http://localhost:8000/api/bookmarks \ -H "Content-Type: application/json" \ -d '{"title":"FastAPI docs","link":"https://fastapi.tiangolo.com"}' ``` ### Listar todos ```bash curl http://localhost:8000/api/bookmarks ``` ### Filtrar por categoría ```bash curl http://localhost:8000/api/bookmarks?category=python ``` ### Obtener uno ```bash curl http://localhost:8000/api/bookmarks/{id} ``` ### Actualizar ```bash curl -X PUT http://localhost:8000/api/bookmarks/{id} \ -H "Content-Type: application/json" \ -d '{"title":"Nuevo titulo"}' ``` ### Eliminar ```bash curl -X DELETE http://localhost:8000/api/bookmarks/{id} ``` ### Categorizar pendientes (LLM) ```bash curl -X POST http://localhost:8000/api/categorize ``` Toma los bookmarks sin categoría (`category: null`), los envía a Claude y asigna categorías automáticamente. ## Cron Para categorizar automáticamente cada 30 minutos: ```bash crontab -e ``` ``` */30 * * * * curl -s -X POST http://localhost:8000/api/categorize ``` ## Variables de entorno | Variable | Default | Descripción | |---|---|---| | `DATABASE_URL` | `postgresql+asyncpg://favs:favs@favs-db:5432/favs` | Conexión a PostgreSQL | | `ANTHROPIC_API_KEY` | — | API key de Anthropic (requerida para categorizar) | | `CATEGORIZE_MODEL` | `claude-haiku-4-5-20251001` | Modelo a usar para categorización | ## Estructura ``` ├── docker-compose.yml ├── .env.example └── backend/ ├── Dockerfile ├── requirements.txt └── app/ ├── main.py # Entrypoint, lifespan, routers ├── config.py # Settings via env vars ├── database.py # Engine y sesión async ├── models.py # Modelo Bookmark (SQLAlchemy) ├── schemas.py # Pydantic schemas ├── categorizer.py # Lógica de categorización con LLM └── routers/ ├── bookmarks.py # CRUD /api/bookmarks ├── categorize.py # POST /api/categorize └── health.py # GET /api/health ```