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.
The first principle is that you must not fool yourself, and you are the easiest person to fool.
Richard Feynman
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.