A professional portfolio website built with Next.js and FastAPI, featuring Obsidian vault integration for notes and an AI-powered quotes feature.
This portfolio serves as my central hub for the UvA AI Master's admission board, showcasing my work, education, and technical skills.
- Home — Brief introduction with navigation
- About — Personal background, interests, and goals
- Projects — Showcase of websites, AI projects, and podcasts
- Education — Academic history and certifications
- Notes — Interactive browser for my Obsidian vault
- Daily Quotes — AI-powered inspirational quotes from my reading notes
- Contact — Professional contact form
- Next.js 15 (App Router)
- TypeScript
- Tailwind CSS
- Python 3.11+
- FastAPI
- Pydantic
- PostgreSQL (contact form storage)
- In-memory caching for vault data
My Website/
├── frontend/ # Next.js application
│ ├── app/ # App Router pages
│ ├── components/ # React components
│ └── lib/ # Utilities
├── backend/ # FastAPI application
│ └── app/
│ ├── api/ # REST endpoints
│ ├── services/ # Business logic
│ └── models/ # Pydantic models
└── README.md
- Node.js 20+
- Python 3.11+
- PostgreSQL (optional, for contact form)
cd backend
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env # Edit with your settings
uvicorn app.main:app --reloadcd frontend
npm install
npm run dev- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
- API Docs: http://localhost:8000/docs
OBSIDIAN_VAULT_PATH=/path/to/obsidian/vault
PORT=8000
DEBUG=true
CORS_ORIGINS=http://localhost:3000
CACHE_TTL=300NEXT_PUBLIC_API_URL=http://localhost:8000| Endpoint | Method | Description |
|---|---|---|
/api/notes |
GET | List all notes |
/api/notes/{id} |
GET | Get single note |
/api/notes/tree |
GET | Get navigation tree |
/api/notes/search?q= |
GET | Search notes |
/api/quotes/categories |
GET | List quote categories |
/api/quotes/random |
GET | Get random quote |
/api/contact |
POST | Submit contact form |
# Backend
cd backend && pytest
# Frontend
cd frontend && npm test# Backend
black app/
flake8 app/
# Frontend
npm run lintDocumentation for deployment coming soon.
Francesco Cavina
- GitHub: @FrancescoCavina02
This project is private and intended for portfolio demonstration purposes.