Skip to content
View wsqreis's full-sized avatar

Block or report wsqreis

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
wsqreis/README.md

Typing SVG


Visitors LinkedIn


👨‍💻 About Me

I'm a full-stack engineer moving my backend experience into AI engineering: LLM agents, MCP servers and graph RAG, built with the same habits as any production system. Deterministic code makes the decisions, every claim is backed by an eval, and guardrails assume the model will get things wrong.

data class WesleyReis(
    val name     : String = "Wesley Reis",
    val role     : String = "Software Engineer · AI Engineering",
    val focus    : List<String> = listOf("LLM Agents", "MCP Servers", "Graph RAG", "Evals", "Backend"),

    val ai       : List<String> = listOf("LangGraph", "LangChain", "Spring AI", "MCP", "Neo4j / Cypher", "pgvector", "OpenRouter"),
    val practice : List<String> = listOf("Eval-driven prompts", "Retrieval evals", "Structured outputs", "Guardrails", "Agent memory"),
    val languages: List<String> = listOf("TypeScript", "Python", "Java 21", "Kotlin"),
    val backend  : List<String> = listOf("Node.js / Fastify", "Spring Boot 4", "FastAPI"),
    val frontend : List<String> = listOf("React 19", "Next.js"),
    val data     : List<String> = listOf("PostgreSQL", "Neo4j", "Redis", "SQLite", "Kafka"),
    val cloud    : List<String> = listOf("AWS", "Docker", "GitHub Actions"),

    val funFact  : String = "I turn ☕ into distributed systems"
)

🚀 Featured Projects

🟦 TypeScript · LangGraph · MCP

🏎️ f1-graph-qa

Ask about Formula 1 history in plain English. A LangGraph agent writes Cypher over a Neo4j graph of every Grand Prix since 1950 (26k race results), fixes its own failed queries, and answers only from what the database returns.

  • Self-correction on errors, guard rejections and empty results
  • Read-only defence in depth: static guard + READ transactions
  • Execution-accuracy eval against hand-written reference queries

LangGraph Neo4j TypeScript Docker

An MCP server for The Movie Database, designed around how agents use tools: compact typed outputs, names instead of ids, and errors an agent can act on.

  • Tool outputs up to 99% smaller than raw TMDB responses
  • discover by genre and streaming service in one call
  • Stdio and HTTP modes, with bearer auth and rate limiting

MCP TypeScript Node.js Zod

A travel assistant with long-term memory the user controls. It learns preferences from what the traveller says, never from its own suggestions, and keeps a change log.

  • Memory extraction runs in parallel with the reply
  • Structured set/add/remove/clear updates in SQLite
  • /memory, /history, /forget; precision/recall eval

LangGraph SQLite TypeScript

A conversational table-booking agent where the LLM understands and phrases, and deterministic code decides availability.

  • Multi-turn slot filling; side questions keep the booking
  • Opening hours, table assignment and alternatives in code
  • Intent and slot-extraction eval, in three languages

LangGraph Fastify TypeScript

☕ Java · Spring AI

Event-driven ticket triage: two Spring Boot services over Kafka. An LLM classifies tickets and drafts grounded replies; when the model is slow or down, keyword rules take over, and a human approves every reply.

  • Transactional outbox, dead-letter topics, idempotent consumers
  • Timeout and circuit breaker with a rules fallback
  • Drafts only when retrieval, the model and citations agree

Spring Boot Kafka PostgreSQL

Ask the Spring Boot reference docs and get streamed answers that cite the exact sections. The same index is an MCP server for coding agents.

  • Vector, keyword and hybrid search in one PostgreSQL table
  • A retrieval eval that overturned the hybrid-search default
  • Semantic cache and an off-topic gate before any LLM call

Spring AI PostgreSQL MCP

Explainable music recommendations over a Last.fm listening graph, with a mood search tuned to each listener's taste.

  • Similar artists, friends and tags as Cypher queries
  • Explanations built from graph facts; the LLM only phrases them
  • Holdout eval against a popularity baseline

Neo4j Redis Spring Boot


🧭 How I Build AI Systems

The same principles run through every project above:

Principle In practice
The LLM understands, code decides The booking agent never decides availability; a rules engine does, and the reply may only use its result.
No claim without an eval Each project ships an eval runner: execution accuracy for text-to-Cypher, intent and slot accuracy, memory precision and recall, retrieval hit rate, recommendation recall against a baseline.
Assume the model will be wrong Read-only guards plus READ transactions for generated Cypher, retries fed with the actual error, and graceful failure when extraction breaks.
The model will also be down A circuit breaker hands triage to keyword rules, explanations fall back to a template, and agents try the next model when a provider fails.
Design tools for agents, not for APIs Compact outputs, human names instead of ids, and error messages that tell the agent how to fix its call.
Users own their data Agent memory can be inspected, traced to when it was learned, and erased.

🛠️ Tech Stack

🤖 AI Engineering

LangGraph LangChain Spring AI MCP Neo4j OpenRouter Claude OpenAI

💻 Languages

TypeScript Python Java Kotlin

⚙️ Backend

Node.js Fastify Spring Boot FastAPI

🖥️ Frontend

React Next.js

🗄️ Data & Messaging

PostgreSQL Redis SQLite Apache Kafka

☁️ Cloud, Infra & DevOps

AWS Docker GitHub Actions


📊 GitHub Stats


🔥 Contribution Streak

GitHub Streak


"First, solve the problem. Then, write the code." — John Johnson

⭐️ From wsqreis

Pinned Loading

  1. f1-graph-qa f1-graph-qa Public

    Ask about Formula 1 history in plain English: LangGraph text-to-Cypher agent over a Neo4j graph of every Grand Prix since 1950, with self-correction, read-only guards and an execution-accuracy eval.

    TypeScript

  2. tmdb-mcp tmdb-mcp Public

    MCP server for TMDB with compact, agent-friendly tools: movies, TV, people, discover by genre and streaming service, where to watch. Stdio and authenticated HTTP.

    TypeScript

  3. travel-planner-agent travel-planner-agent Public

    Travel planning assistant with long-term memory the user controls: structured memory updates, SQLite profile with change log, /memory /history /forget, context summarisation, memory precision/recal…

    TypeScript

  4. restaurant-booking-agent restaurant-booking-agent Public

    Conversational table-booking agent: LangGraph state machine where the LLM understands and phrases, and deterministic code decides. Multi-turn slot filling, side questions, eval of intent/slot extra…

    TypeScript

  5. support-triage support-triage Public

    Event-driven support ticket triage: two Spring Boot services over Kafka, an LLM behind a circuit breaker with a rules fallback, and grounded draft replies that a human approves.

    Java

  6. docs-assistant docs-assistant Public

    Ask the Spring Boot reference docs and get answers that cite their sources, plus an MCP server for coding agents. Vector, keyword and hybrid retrieval, measured with a labelled eval.

    Java