LLM reasoning layer
Model selection, prompt and context construction, structured outputs, function/tool calling, and reasoning patterns for product and business workflows.
AI systems
A technical map of how I think about AI products as systems: model reasoning, orchestration, retrieval, memory, observability, evaluation, and production application architecture.
Systems point of view
The screenshots below show a consistent operating model: LLMs need data infrastructure, orchestration, evaluation, memory, observability, and product workflows around them to become useful business systems.
Model selection, prompt and context construction, structured outputs, function/tool calling, and reasoning patterns for product and business workflows.
Multi-step chains, ReAct-style loops, tool routing, task decomposition, retry logic, and workflow control for reliable AI systems.
Embedding pipelines, chunking strategy, metadata filters, vector search, relational truth stores, Redis-style session memory, and grounded RAG responses.
Trace inspection, prompt versions, retrieval quality, latency, token cost, failure modes, evaluation sets, and production monitoring.
AI operating layer
They rely on context, tools, permissions, documentation, reusable skills, automations, and human review loops. I treat MCPs, plugins, markdown instruction files, and agent skills as part of the operating layer that connects AI systems to real business workflows.
MCPs connect AI agents to tools, data, and workflows. I treat them as a systems concept for giving assistants controlled access to real operating surfaces, not as a replacement for validation.
Markdown files can define instructions, workflows, documentation, reusable operating procedures, and project context that agents can follow consistently.
Plugins, skills, and automations extend AI assistants beyond chat into task execution patterns: searching, reading files, generating artifacts, checking outputs, and routing work.
Human review keeps AI workflows safe and practical. Generated analysis, architecture, and documentation should be checked against source data, requirements, and business intent.
Visual AI architecture
Each frame explains a different part of AI orchestration: the stack, the system boundary, the RAG ingest path, the grounded chat loop, and the product surface.

Core components
This diagram separates a modern agent system into four layers: the LLM for reasoning and generation, an orchestrator for control flow, a vector database for semantic retrieval, and observability for traces, debugging, and quality control.
Technical interpretation
The key idea is separation of responsibility. The model should not be treated as the whole system; reliability comes from the surrounding architecture that controls context, retrieval, tools, state, and monitoring.

System boundary
The nested system view shows the LLM inside orchestration and observability, with vector and memory databases as supporting layers. It also distinguishes structured stores, semantic stores, and cache/session stores.
Technical interpretation
This is how I think about production AI: the LLM performs reasoning, the orchestrator coordinates tools and steps, Postgres remains the durable source of truth, vector search retrieves relevant knowledge, and observability makes behavior reviewable.

Retrieval workflow
The flow breaks an agentic assistant into an ingest lane and a chat lane. Documents move through a React interface into a Node API, are embedded, and land in a vector database. Prompts then route through the backend into an LLM-powered response path.
Technical interpretation
The important RAG decisions live in the middle: parsing, chunking, embedding, metadata design, retrieval scoring, context packing, answer grounding, and guardrails that reduce hallucinated or unsupported answers.

Grounded assistant loop
This version connects the chat loop back to the vector database so the assistant can retrieve relevant context before generating an answer. The orchestrator mediates between user intent, retrieval, and model output.
Technical interpretation
A strong AI assistant needs state discipline: short-term conversation context, long-term semantic memory, relational business data, citation or source awareness, and evaluation checks for answer relevance and factual grounding.

Product execution
Ghost AI turns the architecture thinking into a product interface: AI architecture generation, realtime collaboration, instant spec generation, authentication, and a polished onboarding surface.
Technical interpretation
This is where AI system design becomes product design: a clear user journey, secure auth boundary, collaborative state, specification workflows, and deployment-ready implementation details that teams can build from.
What I bring
My value is in connecting product analysis and business logic with the technical architecture required to make AI systems trustworthy, useful, and maintainable.
Translate business and product goals into system diagrams, agent workflows, data boundaries, and implementation-ready architecture.
Design ingestion, chunking, embeddings, semantic retrieval, metadata filters, grounding patterns, and source-aware answer flows.
Structure ReAct loops, tool routing, planner/executor patterns, validation checkpoints, and human-in-the-loop control paths.
Separate vector memory, relational truth, cache/session state, event logs, and analytics tables so the AI layer stays auditable.
Plan traces, prompt versions, retrieval diagnostics, token/cost monitoring, safety constraints, and evaluation loops.
Connect Next.js interfaces, Node APIs, background jobs, auth, collaboration layers, CI/CD, and deployed AI product surfaces.
AI projects
The same shared project records and AI category matcher power this section and the AI filter on the main projects page, keeping the portfolio evidence synchronized.
Local AI agent workspace
A macOS desktop assistant that combines realtime voice, visual artifacts, local workspace context, image tools, notes, web search, and confirmation-gated computer actions.
Business question
How can one AI interface move naturally between conversation, local files, visual output, and tool execution without giving up user control?
Turns a chat interface into an operator workspace: selected files and folders become grounded context, tool results become reviewable artifacts, and risky actions stop for explicit confirmation before execution.

AI-native systems platform
Production-grade AI-powered architecture and workflow builder with realtime collaboration, AI-assisted systems design, and interactive canvas orchestration.
Business question
How can product, analytics, and engineering teams design AI systems collaboratively while keeping architecture, workflow orchestration, and implementation context in one place?
Positions Ghost AI as an AI-native product, analytics, and systems orchestration platform for collaborative system design, product/spec generation, background AI workflows, and production debugging.

AI + warehouse interface
A natural-language interface to the BudgetDB warehouse: ask a plain-English question, Claude runs read-only SQL through tool calling, and the answer is grounded in queried rows.
Business question
How can non-technical leaders ask trusted warehouse questions without opening SQL, while keeping the AI read-only and auditable?
Extends BudgetDB from warehouse to conversational decision layer: schema-grounded tool use, read-only execution, strict query allowlisting, and visible SQL audit trails.
Chat With Your Data · source preview
1import re23_FORBIDDEN = re.compile(r"\b(INSERT|UPDATE|DELETE|DROP|ALTER|CREATE|TRUNCATE|GRANT|REVOKE|ATTACH|PRAGMA)\b", re.I)456def is_safe_select(sql: str) -> bool:7 """Defense-in-depth check: only SELECT/WITH, no mutating keywords anywhere in the string.8 This runs in addition to (not instead of) opening the DB connection read-only - either9 layer alone should already stop a write, both together is the point.10 """11 stripped = sql.strip().rstrip(";")12 if not re.match(r"^\s*(SELECT|WITH)\b", stripped, re.I):13 return False14 if _FORBIDDEN.search(stripped):15 return False16 if ";" in stripped: # no stacked statements17 return False18 return TruePrototype in development
An iPhone app and web landing-page concept for learning AI agent fundamentals, comparing platforms, and saving reusable skills.
Business question
How can people learn agent workflows, compare the right platforms, and reuse practical skills in one place?
Shows product thinking beyond portfolio work: mobile UX, content model, Supabase schema, launch plan, web page, and launch video assets.
Code evidence
Architecture frames explain the system model; these existing project excerpts show the product, data, workflow, and safety decisions in code and implementation notes.
Ghost AI · architecture and workflow
1Ghost AI is positioned as an AI-native product, analytics, and systems orchestration platform.23- Frontend: Next.js, TypeScript, and a React Flow architecture canvas4- Collaboration: Liveblocks presence, feeds, and realtime shared workspace patterns5- AI layer: OpenRouter LLM integration for assisted systems design and product/spec generation6- Workflow layer: Trigger.dev background jobs for long-running AI orchestration7- Data layer: Prisma with PostgreSQL for persisted workspace and system context8- Delivery layer: Vercel deployment, environment management, and production debuggingChorus · schema and SwiftUI
1create table if not exists public.skills (2 id uuid primary key default gen_random_uuid(),3 category_id uuid references public.skill_categories(id) on delete set null,4 slug text not null unique,5 title text not null,6 subtitle text not null,7 summary text,8 prompt text,9 source_notes text,10 is_published boolean not null default false,11 sort_order integer not null default 0,12 created_at timestamptz not null default now(),13 updated_at timestamptz not null default now()14);Chat With Your Data · read-only agent
1def is_safe_select(sql: str) -> bool:2 stripped = sql.strip().rstrip(";")3 if not re.match(r"^\s*(SELECT|WITH)\b", stripped, re.I):4 return False5 if _FORBIDDEN.search(stripped):6 return False7 if ";" in stripped:8 return False9 return True101112def run_sql_query(sql: str) -> dict:13 if not is_safe_select(sql):14 return {"error": "Refused: only a single read-only SELECT/WITH statement is permitted."}1516 conn = sqlite3.connect(f"file:{DB_PATH}?mode=ro", uri=True)17 conn.row_factory = sqlite3.Row18 rows = conn.execute(sql).fetchall()19 conn.close()20 return {"rows": [dict(r) for r in rows][:200]}