Projects

Things I've built

Selected projects, side experiments and open-source work.

claude-resume-generator-skill

Resume Tailor is a Claude code skill that turns a job description and a candidate's master profile into ATS-verified, tailored resumes and matching cover letters compiled into publication-quality PDFs. Key Principles & Core Philosophy 1. Code Decides Quality, LLM Writes Content The LLM generates resume content, but deterministic code controls layout constraints, character counts, ATS extraction, and PDF visual bounds. Page count and text alignment are verified against the compiled PDF—never estimated. 2. Strict Schema Guardrails Layout overflow is prevented at the schema level. Pydantic schema validation enforces bullet point counts (e.g., maximum 4 per role) and length limits (e.g., maximum 120 characters per bullet). 3. The Honesty Constraint - Never fabricate skills or metrics: If a skill is missing from the master profile, it is categorized as a genuine gap. - Translate adjacent experience: Existing experience is reframed using the job description's vocabulary (e.g., reframing a legacy migration project as scalable architecture). - Traceable numbers: All metrics and statistics must originate directly from the master profile. 4. Human-in-the-Loop Verification Proposed reframings and gap fillings must be explicitly reviewed and approved by the user before resume compilation.

claude-codejinja
View details

AI-powered Grafana app plugin that generates dashboards from natural-language prompts.

Built an AI-powered Grafana app plugin that generates complex dashboards from natural-language prompts, eliminating hand-authored panel JSON; architected as a React/TypeScript frontend, secure Go proxy protecting API credentials, and a headless Python/FastAPI agent. Orchestrated multi-step LLM workflows with LangGraph and PydanticAI, using Model Context Protocol (MCP) servers to autonomously discover OpenSearch data sources and write dashboards directly to Grafana. Engineered low-latency WebSocket token streaming to the browser plus a database-backed config layer with hot-swappable LLM providers (OpenAI, Anthropic, Ollama) and PostgreSQL-persisted conversation history.

ReactTypeScriptGoFastAPILangGraphPydanticAIMCPOpenSearch
View details

Conversational agent letting scientists search NASA Earth-observation datasets in plain English.

Built a conversational agent (FastAPI, Chainlit, LangGraph, PydanticAI) that lets scientists search and download NASA Earth-observation datasets in plain English, using local LLMs and embeddings via Ollama to translate ambiguous prompts into precise STAC search filters. Designed a dual-database retrieval architecture — PostgreSQL + pgvector for auth and conversational state recall, Neo4j for relationship-aware semantic catalog retrieval — with a real-time Mapbox panel over WebSockets visualizing spatial queries and dataset heatmaps. Containerized the backend with Docker Compose, integrating NASA Earthdata OAuth for secure asset downloads and Logfire for end-to-end agent observability.

FastAPIChainlitLangGraphPydanticAIpgvectorNeo4jDocker
View details

Time-series pipeline forecasting short-horizon price movement with stacked LSTM networks.

Automated slow, emotion-driven manual trading by engineering a time-series pipeline (Python, TensorFlow/Keras) that cleans OHLCV market history, derives technical-indicator features, and trains stacked LSTM networks to forecast short-horizon price movement. Implemented a rule-based execution layer converting model forecasts into buy/sell/hold signals, backtested against held-out historical data before deployment.

PythonTensorFlowKerasLSTM
View details

LoRA-fine-tuned Gemma model generating stylistically coherent Nepali verse.

Curated and preprocessed a corpus of historic Nepali poems (Devanagari script), then fine-tuned Google Gemma with Unsloth using parameter-efficient LoRA adapters on a single consumer GPU. Produced a model generating stylistically coherent Nepali verse from short prompts, demonstrating practical low-resource-language adaptation of open-weight LLMs.

LLM Fine-TuningLoRAUnslothGemma
View details