Explore showcase

RAG-Powered Portfolio

Full-Stack & Artist · June 2025 – Present

Project2 / 13

Overview

At a glance

Personal portfolio and chat surface where retrieval-augmented answers stay grounded in my resume and project corpus. The build couples streaming LLM output with cost controls, Redis vector search, and a handcrafted pixel UI layer.

Next.js 15GeminiUpstash RedisVercel AI SDK
View GitHubView GitHub

Features

  • Chatbot grounded in a personal project/experience corpus.
  • Config-driven content architecture for fast updates.
  • Edge-streamed responses with resilient error and retry-aware UX.
  • Portrait idle animation, glasses toggle, dialogue variants, icon buttons, layered parallax.
  • Distinct art direction with handmade pixel assets and motion polish.

Implementation

  • Implemented embedding generation and Redis retrieval pipeline with cosine similarity ranking.
  • Added SHA-256 query-embedding cache (24h TTL) to lower repeated embedding cost and latency.
  • Implemented corpus hashing to auto-trigger re-embedding when underlying content changes.
  • Added request-size and message-count guards for usage control and stability.
  • Implemented Redis IP-based rate limiting with frontend-readable error semantics.
  • Built typed hooks for typing state, timeline orchestration, responsive/parallax control, and interaction feedback pulses.
  • Optimized media assets (including WebP compression) to reduce animation-heavy performance bottlenecks.
  • Carried full cross-functional pipeline from Aseprite/Figma visual ideation to production code integration.
  • Experimented with RabbitMQ during this project era and reused related queueing ideas later, though free-tier limits constrained continued usage.

Challenges

  • Early performance was rough due to heavy parallax + animated menu combinations.
  • Ongoing tradeoff between visual richness and runtime stability/performance.
  • Security and durability still require hardening for larger traffic bursts.
  • Free-tier limits on supporting infrastructure constrained some experimentation depth.
  • Significant QA/refinement still needed for production-grade reliability.

Reflection

  • This project is super personal to me. Seeing Aseprite -> Figma -> code turn into a living site over nearly a year was insanely rewarding.
  • I put a lot of effort into tiny details because I wanted it to feel fun, not sterile.
  • Fun fact: I made my own pixel GitHub icon before realizing there was already an official one.
  • AI helped me move faster on boilerplate/type/error scaffolding, but the site still needs more hardening in perf/security/durability.
  • I’m lowkey hoping traffic doesn’t spike too hard right now because I might be cooked.
  • Still, performance improved massively after optimization passes and asset compression—my 2017 MacBook can handle it now!