AdLift AI is a production-ready ad-to-landing-page fit analyzer. It accepts an advertisement image or pasted ad copy, scrapes a landing page, analyzes both sources with Gemini 2.5 Flash, coordinates specialized LangGraph agents, and returns a dashboard-ready fit report with prioritized recommendations.
- Frontend: React, Vite, TypeScript, Tailwind CSS, shadcn-style UI
- Backend: FastAPI, Python 3.12, Pydantic
- AI: Google Gemini 2.5 Flash, LangGraph, LangChain
- Scraping: Playwright, BeautifulSoup4
- Deployment: Vercel for frontend, Render for backend
backend/
app/
agents/ LangGraph workflow and reusable prompts
api/ FastAPI routes
core/ settings and dependencies
models/ Pydantic contracts
services/ Gemini, scraper, PDF adapters
frontend/
src/
components/ dashboard and shadcn-style UI components
lib/ API client and utilities
types/ TypeScript contracts
docs/
- Create environment files:
cp .env.example .envFor Vite, set frontend env values in frontend/.env.local if you need a non-default API URL:
VITE_API_BASE_URL=http://localhost:8000- Install and run the backend:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python -m playwright install chromium
uvicorn backend.app.main:app --reload --port 8000On Windows PowerShell, activate with:
.\.venv\Scripts\Activate.ps1- Install and run the frontend workspace:
npm install
npm run dev:frontendOpen http://localhost:5173.
After both Python and Node dependencies are installed, npm run dev from the repository root starts the backend and frontend together.
Backend:
GOOGLE_API_KEYorGEMINI_API_KEYGEMINI_MODEL, defaults togemini-2.5-flashCORS_ORIGINS, comma-separated frontend origins
Frontend:
VITE_API_BASE_URL, defaults tohttp://localhost:8000
GET /healthPOST /api/analyzePOST /api/reports/pdf
See docs/API.md for request and response details.
Render uses the root Dockerfile and render.yaml. Vercel uses vercel.json and builds the frontend app.
Deployment steps are documented in docs/DEPLOYMENT.md.
pytest backend/tests
npm --prefix frontend run buildThe frontend build requires Node dependencies to be installed first.