Back to the portfolio

Sophisticated Hobby

Software and Quantitative Projects

10 projects built outside work and outside coursework, 8 of them currently running or in use. Status is stated per project, because most of these run without ever having been shipped as a product.

Three things run through the lot of them. Position sizing and falsification show up in every finance project, which is a point of view rather than a coincidence. Several were audited and one was retired when the evidence said to. Cost or hardware limits drove the architecture up front instead of being worked around later.

FiPol Stream

Deployed

Financial media monitoring platform that ingests YouTube financial commentary, transcribes it, and surfaces ticker-level sentiment in near real time.

Celery workers under a beat scheduler handle ingestion and transcription asynchronously so the API stays responsive, with Redis serving as both cache and broker. Transcripts come from YouTube automatic captions where they exist, falling back to Whisper where they do not. Each ticker mention is scored for sentiment with a confidence value and a timestamp. The front end covers a mentions dashboard, a sentiment heatmap across tickers, a watchlist with ticker aliasing, an alerting layer, and a conversational agent built as a thin routing tier over the existing API rather than a rewrite. Runs on a DigitalOcean VPS with a separate Ubuntu database node, static front end served by nginx reverse proxying to FastAPI on the same host.

  • FastAPI
  • PostgreSQL
  • Redis
  • Celery
  • Whisper
  • React
  • TypeScript
  • Vite
  • Docker Compose
  • nginx

Local AI Lab

Operational

A working local AI development environment on a thin-and-light laptop with no discrete GPU, under a hard constraint of zero recurring cost.

Constraints were set explicitly up front: CPU-only PyTorch wheel, no model over 5GB, no paid services, no capability substitutions that quietly degrade output. Kokoro-82M provides local text to speech at roughly 330MB, faster than real time on CPU, wrapped in a script that splits on paragraph breaks for natural pacing. Agentic coding tooling speaks the Anthropic Messages API format, so pointing one environment variable at a local inference server routes it to a local open-weight model with no external API calls. Planned expansion is a 16GB NVIDIA card in a Thunderbolt enclosure, with 16GB as the floor rather than a preference, because layer offloading against the existing 32GB of system RAM is what makes generation fast enough to iterate on. The integrated Arc GPU cannot pool with an NVIDIA card or participate in CUDA work, so it contributes nothing here.

  • Python 3.11
  • CPU-only PyTorch
  • Kokoro-82M
  • Ollama
  • LM Studio
  • Open Interpreter
  • WSL
  • Ubuntu
  • DigitalOcean

Gold and Miner Signal Dashboard

In use

A live decision dashboard tracking the macro conditions that would invalidate a long-horizon gold miner thesis.

Four tabs: a signal dashboard scoring each input red, amber, or green against written thresholds with decision rules attached, a data log with auto-updating charts for the commodity, the equity, and real yields, a release calendar for every relevant data drop, and a reference tab of calendar year returns and historical drawdowns. Tracked signals are ten year TIPS real yields, central bank net purchases, ETF flows, drawdown from the fifty-two week high, all-in sustaining cost inflation, CFTC managed money positioning, and a binary consolidation flag. Manual input cells and formula cells are color separated so normal use cannot break the workbook, and conditional formatting drives the signal states so status is read rather than calculated. Thresholds are written into the sheet as text, which commits the decision rule in advance rather than rationalizing it after the fact. The design premise is falsification: every signal is a condition that would prove the thesis wrong.

  • Excel
  • openpyxl
  • Google Sheets

Multiple Expansion Scanner

Working

Swing trading scanner that scores technical confluence across a stock universe and returns fully specified trade setups with position sizing.

Screens for volume accumulation, Bollinger Band compression, Money Flow Index positioning, stochastic recovery, and bullish divergence, then assigns a composite confluence score. Setups clearing the threshold return an entry trigger, a stop level, two profit targets, and a share count. Sizing is risk-first: share count falls out of the stop distance and a fixed dollar risk budget, which keeps dollar exposure constant across setups of very different volatility. Command line flags switch between scanning for new setups, monitoring existing watchlist positions, or both. Scoping the universe to liquid names cut runtime from roughly thirty minutes to under ten.

  • Python
  • yfinance
  • pandas
  • numpy

Autonomous Media Pipeline and SMS Control Agent

Built, currently idle

An eleven-phase orchestration system coordinating six external APIs plus browser automation, controlled remotely by text message.

Research, generation, assembly, quality gate, publish, and logging phases run end to end, with a persistent Flask webhook server paired with a background scheduler accepting run, status, last, pause, resume, approve, and reject commands over SMS. A single Chrome session is reused across every browser-automated step so authentication state survives the full run. A threading lock prevents an operator-triggered run and a scheduled run from executing concurrently. Flask's reloader is disabled explicitly, because leaving it on registers the scheduler twice. The Twilio webhook validates the sender number before any command executes, and an eight-check quality gate blocks publication on failure rather than warning and continuing. Cost drove real architecture decisions: an earlier orchestration layer was removed after retry loops produced unexpected charges, and per-call billed services were replaced with flat-rate ones driven through browser automation.

  • Python
  • Flask
  • APScheduler
  • Selenium
  • Twilio
  • OAuth 2.0

Distressed Value Screening Methodology

In active use

A reproducible screen for identifying distressed but solvent household-name companies, built around a defined benchmark profile.

Filters US-listed companies above one billion in market cap for price to sales under 1.0, debt to equity above 1.5, EV to EBITDA under 10, negative trailing revenue growth, and positive gross or operating margin, sorted by price to sales ascending. The first pass returned thirteen names, seven of them foreign issuers trading as OTC depositary receipts, so an exchange restriction to NYSE and NASDAQ was added, which is a fair illustration that screen design is iterative. Of the five remaining US names, per-name deep dives concluded only two fit the actual thesis, which is why the screen is treated as a candidate generator and not a decision tool. Follow-on tracking is built around action signals such as restructuring moves, leadership turnover, and new strategic initiatives rather than quarterly financial readouts.

  • TradingView Screener
  • Fundamental review

Catalyst-Scoring Equity Screener

Retired on the evidence

Fundamental screener ranking candidates on revenue acceleration, short interest structure, and margin expansion.

Scores a candidate universe across three weighted catalyst categories and returns a ranked list with position sizing, stop levels, and price targets attached to each name. An audit for methodological soundness flagged uniform upside targets across every name as a signature of curve fitting, along with the absence of valuation inputs and liquidity screens. The documented outcome was to stop using it as an investment tool and keep it for speculative idea generation only. It is listed here because retiring a tool on the evidence is the part worth showing.

  • Python

Interactive Accounting Learning Application

Complete

Single-file browser application teaching accounting fundamentals through spreadsheet-style interactive exercises.

Delivers a full set of learning objectives as tabbed lessons with hands-on exercises rendered in spreadsheet-style tables, so the practice environment matches the tool the skill is actually used in, with progress tracking across the whole module. Deliberately zero-dependency and single-file, no build step, so it runs from any machine with a browser and nothing to install. Scoped to be completable in a single session, which drove the decisions throughout.

  • HTML
  • CSS
  • JavaScript

Algorithmic Market Scanner

Built and stress tested

Multi-factor breakout scanner combining momentum, volume, and pattern signals into a ranked opportunity list.

Evaluates candidates across Money Flow Index, On Balance Volume divergence, VWAP positioning, Bollinger Band squeeze detection, chart pattern recognition, relative strength versus SPY, and higher timeframe trend confirmation, then outputs breakout entry levels, stop placement, and a three-tier target ladder with risk to reward ratios. The output was submitted for blind adversarial review against published research on momentum breakout strategies specifically to test for overfitting, rather than being accepted because the backtest looked good. That review surfaced uniform target assumptions and missing liquidity and market cap filters. The audit is the story, not the signal list.

  • Python

Windows Automation Scripts

In use

PowerShell utilities for system maintenance and application update management.

Automated cleanup across temp directories, installer caches, browser caches, application-specific cache and log locations, the recycle bin, DNS cache, prefetch, and Windows Update downloads, handling locked files without failing. Detects elevation status and degrades gracefully with a clear message rather than erroring out when not run as administrator, prompts before destructive or irreversible operations, and reports space reclaimed so a run has a verifiable result.

  • PowerShell

This site

Running

The portfolio you are reading, built from scratch rather than from a template.

Astro with hand-written CSS on design tokens, no framework on the client, built to static files and served from GitHub Pages. Dark is the design rather than a toggle over a light theme. Content lives in typed data structures rather than a CMS, so the coursework, the project schedules, and the screenshot gallery all render from the same source at build time.

  • Astro
  • TypeScript
  • CSS tokens
  • GitHub Pages

Before this, the domain ran an arcade-styled placeholder while the rebuild was underway. It is kept here rather than deleted.

View the old under construction page