Four active applications spanning document search, tool-using AI, content creation, and digital dining. Explore each project to see how its interface, API, data layer, and integrations fit together.
Ask questions across your own documents
A document question-answering app that accepts pasted text and uploads, extracts and chunks content, stores embeddings, retrieves relevant passages, and streams grounded answers through a separate API.
Next.js + TypeScript
App Router interface for document management and streamed chat responses.
Express
Separate API handles ingestion, chunking, embedding, retrieval, and answer generation.
Supabase
Authentication, PostgreSQL data, and uploaded file storage.
Gemini
Creates document embeddings and generates answers grounded in retrieved context.
pgvector
Similarity matching retrieves relevant document chunks for a question.
An agent that searches, reads, and reports
A streaming research assistant that calls web-search and page-extraction tools, then returns findings in a chat interface. The app includes a separate API and persists conversations and messages.
Next.js + TypeScript
Chat interface consumes server-sent events and displays agent progress.
Express 5
API coordinates model requests, tool execution, streaming, and persistence.
OpenRouter
Model API with structured tool calls and a bounded multi-step agent loop.
Tavily
Web search and page extraction tools provide current source material.
Supabase
Stores conversation and message records.
Turn source material into short-form scripts
An AI application that takes user-provided source text and generates hooks, short-form video scripts, and captions through a Next.js interface and an Express API.
Next.js + React
Responsive interface for entering source material and reviewing generated content.
Express
Provides the generation endpoint and keeps model calls on the server.
Gemini Interactions API
Uses a content-generation prompt to produce hooks, reel scripts, and captions.
Tailwind CSS
Utility styling for the application interface.
A guest ordering flow backed by a restaurant API
A multi-app QR dining project spanning a customer interface, staff dashboard, and NestJS API. The backend models restaurants, menus, dining sessions, and orders, with signed table access and staff authentication.
Next.js
Separate customer and staff-facing applications.
NestJS + TypeScript
REST API for restaurant data, menu operations, dining sessions, and order endpoints.
PostgreSQL + Prisma
Relational persistence and schema for restaurant, menu, session, and order data.
Signed table sessions
HMAC-signed tokens establish access to a table session; staff routes use JWT authentication.
Current scope
The customer checkout and payment/loyalty flow still uses browser-side mock data; backend order endpoints are implemented separately.
Roles, freelance gigs, side-project collabs, or just a hello — I read everything and usually reply within a day.