Skip to content
jabluetoothPublic

About

AI-powered, database-driven portfolio. Chat naturally to explore my work, with responses that dynamically render UI components in real time.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Bonny-AI

A conversational portfolio - ask a question instead of clicking through static pages.

Live

Next.js TypeScript Supabase Groq Tailwind CSS



The problem

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.

What it does

  • 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.

Try it

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.


How it works

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."

Tech stack

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)

Local setup

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 dev

Database. 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. Replace YOUR_ADMIN_EMAIL with your MY_EMAIL value first; the script refuses to run with the placeholder. Every visitor gets an anonymous Supabase session to chat, and anonymous users carry the authenticated role, 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.


About the developer

Fil Heinz O. Re La Torre - Automation & AI Solutions Engineer, building integrations and AI-backed workflows that go from idea to production in days.

Portfolio LinkedIn GitHub Gmail

Other projects: Match · ZeroPress · Mimo · Insight · see all →

License

MIT - see LICENSE

About

AI-powered, database-driven portfolio. Chat naturally to explore my work, with responses that dynamically render UI components in real time.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Packages

Contributors

Languages