A conversational portfolio - ask a question instead of clicking through static pages.
A static portfolio page makes a visitor hunt for the one project or skill that's relevant to them. Bonny-AI lets them just ask - "have you worked with RAG?", "show me your automation projects" - and get a direct answer plus the matching UI, instead of scrolling.
- Natural-language chat over a real database of my skills, projects, and experience - not a hardcoded FAQ.
- Dynamic UI rendering - the chat's intent detection decides which frontend component to render (a project card, a skill chip row, a timeline) alongside the text response.
- Admin dashboard - Google OAuth-gated, for managing the underlying content and reviewing past conversations.
- Database-first design - skills, projects, and experience live in Postgres and are queried live, not baked into the frontend at build time.
Live: filheinzrelatorre.com
Ask it about a specific technology, a past project, or how a particular system was built - no sign-in required to chat.
Replies stream token by token, so answers start appearing within a few hundred milliseconds. The LLM path is rate-limited per IP, and the contact form works without a chat session (exact origin check, honeypot, per-IP limit).
The chat pipeline does intent detection on each message first, deciding whether the response needs to pull specific context (a project, a skill set) from Postgres before generating an answer, and whether that response should also trigger a UI component. This keeps responses grounded in real stored data rather than the model inventing details about my own background, and keeps AI usage balanced between deterministic lookups and generative phrasing rather than defaulting to "just ask the LLM everything."
| Layer | Choice |
|---|---|
| Framework | Next.js 16, React 19, TypeScript |
| Styling | Tailwind CSS, shadcn/ui, Framer Motion |
| Database | Supabase (PostgreSQL, Auth, RLS) |
| LLM | Groq |
| Auth | Google OAuth (admin dashboard) |
git clone https://github.com/jabluetooth/bonny-ai.git
cd bonny-ai
npm install
cp .env.example .env.local # fill in the values
npm run devDatabase. The SQL in supabase/sql/ is meant to be run in the Supabase SQL editor:
content-agent.sql: tables for the GitHub content agent.security-hardening.sql: admin-only writes on every content table, plus the per-IP rate-limit function. ReplaceYOUR_ADMIN_EMAILwith yourMY_EMAILvalue first; the script refuses to run with the placeholder. Every visitor gets an anonymous Supabase session to chat, and anonymous users carry theauthenticatedrole, so this is what stops a visitor from editing content from the browser console.
The core content tables (projects, skills, experiences, the About tables, conversations and messages) aren't scripted yet; they were created in the Supabase dashboard.
Fil Heinz O. Re La Torre - Automation & AI Solutions Engineer, building integrations and AI-backed workflows that go from idea to production in days.
Other projects: Match · ZeroPress · Mimo · Insight · see all →
MIT - see LICENSE