Project catalog

What the repositories actually do.

I build machine learning systems that turn messy data into clinical, financial, and visual decisions — and privacy safeguards around those workflows. This page replaces a resume layout with a plain-language tour of the work: problem, approach, and result.

Swing trading Private repository

Signal Matrix

A daily swing-trading screener for S&P 500 names: it looks for pullbacks inside long-term uptrends, then publishes a public preview and a member dashboard for the full candidate list.

01

Problem

Scanning hundreds of names by hand for a swing setup — liquid, still in an uptrend, pulled back, RSI in a bounce zone — does not survive a daily close.

Approach

After the U.S. close, GitHub Actions runs layered filters: $10–$150, 1M+ volume, above MA240, below MA20, RSI 30–40. FastAPI + Next.js serve a public preview; a Vercel member app (Stripe test mode) is meant to unlock the rest.

Result

A live catalog of today’s swing candidates plus a forward track record. The public demo shows a subset; the member site is still being built.

PythonFastAPINext.js yfinancepandas-taGitHub Actions StripeVercel
Healthcare AI

Clinical Trial Navigator

An evidence-grounded assistant that helps cancer patients discover, understand, and monitor trials — US market, starting with HER2-positive breast cancer. It suggests possibly relevant studies and questions for a clinician; it does not make treatment decisions.

02

Problem

Trial search is fragmented. Patients cannot easily see why a study might fit, how far the nearest site is, or what to confirm with a doctor.

Approach

ClinicalTrials.gov sync, encrypted profiles, rule-based matching with travel-distance hard filters, and a React/TypeScript UI over FastAPI + SQLAlchemy. Frontend on Vercel, API on Fly.io, database on Neon.

Result

Ranked matches with compatibility reasons, inclusion criteria, and nearest-site mileage. Matching sits behind a strategy interface so scoring can later swap to an ML model.

FastAPISQLAlchemyReact TypeScriptPostgreSQLVercel Fly.ioNeon
Healthcare · Privacy engineering

Medical AI Privacy Gateway

A DICOM privacy gateway prototype that checks chest X-rays before they cross a trust boundary to an external AI system, combining metadata de-identification with burned-in text detection.

03

Problem

Removing identifiers from DICOM headers is not enough when names or other sensitive text may also be embedded in image pixels.

Approach

De-identify selected metadata and regenerate study, series, and instance UIDs, then inspect pixels with a fixture detector or optional Tesseract OCR. Direct identifiers are redacted; only PASS reaches a simulated external client, while REVIEW and BLOCK remain inside.

Result

An auditable release decision path evaluated with a 120-image seeded phantom set, with OCR limitations documented. It is a prototype, not a HIPAA compliance claim.

PythonDICOMpydicom Tesseract OCRpytest
AI engineering · Research MVP

Regulatory Multi-Agent RAG System

A source-aware FDA research assistant that routes questions to regulation, guidance, and supplemental web research agents, then validates citations before evaluation and review.

04

Engineering

LangGraph orchestration over PostgreSQL/PGVector retrieval, structure-aware evidence expansion, and BGE cross-encoder reranking.

Reliability

Deterministic citation validation, answer evaluation, bounded revision and research retries, and checkpointed human review.

Measured result

In a 23-case retrieval evaluation, final evidence coverage improved from 0.928 to 1.000 with facet-aware selection; this is not an end-to-end answer-accuracy result.

PythonLangGraphPostgreSQL PGVectorBGE rerankerGradio
Healthcare · RL Private repository

Preventive Breast Cancer Decision Support

A reinforcement-learning clinical decision support system that personalizes prevention for high-risk patients (BRCA1/2, PALB2) by choosing both the intervention — surgery vs. surveillance — and its timing over a 45-year horizon.

05

Problem

Guideline-based prevention ignores individual preferences and the long-run trade-off between treatment aggressiveness and quality of life.

Approach

End-to-end MDP / deep RL (PPO, Gymnasium), Pareto analysis of aggressiveness vs. utility, and SHAP explanations for menopausal status, breast density, and patient preferences.

Result

Personalized policies that outperform standard guidelines by up to 4.33 quality-adjusted life years (QALYs), with drivers a clinician can inspect.

PythonPyTorchPPO GymnasiumSHAPMDP
Computer vision

Real-time Anomaly Detection

A local FastAPI service that classifies video frames as normal or anomalous. The model was trained and tracked on Azure Databricks with MLflow, then moved off the cloud so inference has no ongoing bill.

06

Problem

The Databricks workspace was deleted. The model still needed a reproducible local path: download once, serve predictions, inspect results in a browser.

Approach

Export the MLflow Transformers pipeline, serve batch base64 images from FastAPI, and wrap a Streamlit drag-and-drop UI. Salt-and-pepper noise experiments test robustness.

Result

CPU inference with color-coded confidence, a public results page, and zero cloud cost after the one-time model download.

FastAPIMLflowAzure Databricks StreamlitPyTorchTransformers
Computer vision · Deep learning

Neural Style Transfer

A from-scratch PyTorch implementation of Gatys et al. (CVPR 2016): keep the content of one image, paint it in the texture of another, and compare Adam vs. L-BFGS on the same VGG19 features.

07

Problem

Style transfer is often a black-box demo. I wanted the losses, Gram matrices, and optimizer behavior to be inspectable — including how fast each optimizer actually converges.

Approach

VGG19 features (content at conv4_2, style at conv1_1–conv5_1), MSE on Gram matrices, 512px inputs, and intermediate snapshots every 50 epochs. Trained on a Colab T4.

Result

L-BFGS reaches a usable transfer in about 50 epochs; Adam needs closer to 300. Final quality is similar; L-BFGS is roughly 6× fewer iterations, at a higher cost per step.

PyTorchVGG19Gram matrix AdamL-BFGS
Deep learning · NLP

Transformer from Scratch

An encoder–decoder Transformer written in PyTorch — tokenizer, attention layers, padding masks, training, and greedy decoding — trained on a small Korean→English corpus so every moving part stays visible.

08

Problem

High-level libraries hide the mechanics that matter when you need to reason about masks, special tokens, and generation.

Approach

Custom vocabulary + tokenizer, multi-head attention, encoder/decoder stacks with pre-norm and post-norm, cross-entropy that ignores padding, and greedy decode from <sos> to <eos>. Runs on MPS, CUDA, or CPU.

Result

A compact, readable seq2seq model that trains in minutes on toy KR→EN pairs and prints a translation at inference time.

PyTorchAttentionTokenizer Seq2seqGreedy decoding
Backend systems

AI Custom Apparel Backend

Microservices for an MVP that turns user keywords into AI-generated t-shirt art, then carries the order through admin, object storage, and payment — FastAPI for generation, Django for operations, Nginx as the gateway.

09

Problem

Image generation, order state, and an admin UI have different lifecycles. One process trying to do all three becomes hard to deploy and harder to scale.

Approach

Docker Compose services: Nginx routes traffic, Django owns users and orders on PostgreSQL, FastAPI talks to external image APIs, JWT authenticates clients, and AWS S3 stores generated art.

Result

A containerized backend with an admin panel, OpenAPI docs, and a path from prompt → image → order without coupling the AI path to the CMS.

FastAPIDjangoDocker NginxJWTAWS S3 PostgreSQLPrompting
Computer vision · Healthcare

Medical OpenPose

A pose-estimation pipeline that extracts 25+ anatomical landmarks from patient video so rehabilitation progress can be measured, not only observed — trained from MSCOCO and applied to clinical footage.

10

Problem

Gait, range of motion, and post-surgical recovery are often scored by eye. That is slow and hard to compare across visits.

Approach

PyTorch OpenPose on CUDA: MSCOCO prep, GPU training notebooks, TensorBoard monitoring, and a patient-specific inference notebook that maps keypoints onto clinical video.

Result

Real-time GPU inference (30+ FPS) with major-joint detection above 95%, producing quantitative movement traces from raw video.

PyTorchOpenPoseMSCOCO CUDATensorBoardJupyter
Agents · MCP

Binance MCP Server

A Model Context Protocol server that turns Binance market data into tools an AI agent can call. Implemented in Python (FastMCP) and TypeScript, with STDIO and HTTP transports, plus a LangGraph client that asks Gemini for live prices through those tools.

11

Problem

LLMs do not have a live tape. Agents need a small, inspectable interface for current price, 24-hour change, and rolling windows — without baking exchange HTTP calls into every prompt.

Approach

FastMCP tools (get_price, get_price_24hr_change, get_rolling_windows_price), in-memory activity logs, symbol aliases (btc → BTCUSDT), a TypeScript SDK server, and a LangGraph ReAct agent over STDIO.

Result

The same market tools work from Claude Desktop, HTTP clients, and a LangGraph agent. No local files, so the HTTP server can run in a container.

FastMCPMCPTypeScript LangGraphBinance APISTDIO / HTTP

No projects in this category.