Portfolio Assistant
Built a document-grounded assistant at Sidigimarket with FastAPI, Gemini, ChromaDB, and Redis, integrated into a Next.js streaming chat widget and deployed on DigitalOcean.
- Python
- FastAPI
- Gemini
- ChromaDB
- Redis
- Next.js
- Server-Sent Events
- DigitalOcean

The problem
Make company information accessible through a conversational interface grounded in a document collection.
My contribution
Developed and integrated the portfolio chatbot at Sidigimarket, including document retrieval, conversation sessions, a streaming chat widget, a contact follow-up interface, and the infrastructure connecting the API to the website.
How it was built
- Document ingestion and text chunking prepare company material for embeddings and persistent vector storage in ChromaDB.
- The backend retrieves relevant passages and includes recent conversation history when preparing model context.
- Redis-backed sessions support conversation continuity, with an in-memory fallback. Standard and streaming chat endpoints serve the frontend.
- Implemented the streaming chat widget and a contact follow-up interface within the portfolio website. The interface work does not establish that follow-up emails were delivered.
- Rate limits, concurrency limits, and timeouts bound API requests. Health and readiness endpoints support deployment checks.
- The API runs on an Ubuntu DigitalOcean Droplet with systemd, Nginx, and HTTPS. A GitHub Actions workflow handles checks, deployment, service restart, and readiness verification.
Limitations
Retrieval and generated answers depend on the source documents and model behavior; no accuracy or performance benchmark is claimed. Contact follow-up automation was explored, but email delivery was not verified as operational.
What the project delivered
Connected document retrieval, session handling, streamed responses, and deployment in one application.