Code

Personal software projects, from idea to deployment.

ClearPath: a stylised map of Manhattan with busyness hotspots and an accessible route

ClearPath

Crowd-aware accessibility navigation for visitors to Manhattan

Visitors, older adults and people with disabilities often struggle to find suitable healthcare and essential services in an unfamiliar city. The information is scattered across maps, accessibility directories and translation tools, and temporary problems like a broken lift, a blocked entrance or a crowded waiting room rarely show up anywhere.

ClearPath brings it all into one Web and Mobile app. It combines accessibility-aware venue discovery, time-limited community reports, a multilingual retrieval-augmented assistant, emergency support with an encrypted medical profile, and machine-learning estimates of how busy a venue is likely to be.

Built over five Scrum sprints as part of the UCD COMP47360 Research Practicum, it achieved a 97.1% task-completion rate across 70 usability tasks.

  • Python
  • Poetry
  • Flask
  • React
  • React Native
  • TypeScript
  • MySQL
  • Redis
  • Machine Learning
  • Docker
  • AWS
  • CI/CD
View on GitLab
Options Wheel Strategy: the cash-secured put and covered call cycle

Options Wheel Strategy

An automated options wheel bot with a live monitoring dashboard

The wheel is an income strategy built on two moves: sell a cash-secured put when you hold no shares, and sell a covered call once you own at least 100. This bot runs that cycle on its own across a configurable watchlist, connecting to Interactive Brokers through the IBKR Gateway API and picking strikes and expiries within a target days-to-expiry window.

To save server resources, the bot refreshes prices from Yahoo Finance between cycles and only starts the IBKR Gateway container through the Docker socket when there's a real trade to make, shutting it down again afterwards. A web dashboard and health-check endpoints show gateway status, the last and next cycle, per-symbol actions and recent events. It defaults to paper trading in dry-run mode.

  • Python
  • Poetry
  • FastAPI
  • REST APIs
  • Docker
View on GitLab
Stock Market Sector Finder: a grid of sector ETFs with one highlighted pick

Stock Market Sector Finder

AI sector rotation, gated by market-timing signals

This bot watches several VectorVest market-timing systems and only acts when their signals line up. When they do, it asks an LLM (via the Perplexity API) to pick the single US sector ETF best positioned for current conditions. The answer must come back as structured JSON with a confidence score and a short rationale, and it's checked against a fixed list of sector tickers.

It then rotates the portfolio into that ETF through the Trading 212 API, skipping tickers that aren't currently tradable. It runs on a scheduled GitLab CI pipeline, which commits the latest signal and trading state back to the repository so each run picks up where the last one left off.

  • Python
  • Poetry
  • LLMs
  • REST APIs
  • CI/CD
View on GitLab
Autotrader: a signal pipeline feeding an auditable trade ledger

Autotrader

Signal-driven trade execution with an auditable ledger

Autotrader watches a mailbox for trading alerts (VectorVest auto-trade executions and NITRO signals), turns each one into a correctly sized market order on Trading 212, and keeps an auditable ledger of every signal, order, failure and realised profit or loss. It's a production rewrite of a Google Apps Script automation I ran for my own portfolio, fixing the things that become unsafe once real money is involved: duplicate orders, silent failures and mis-sized trades.

Every signal is claimed in a SQLite ledger before its order is sent, so a crash can never trade the same email twice. Orders are retried only when that's safe, and an uncertain submission is flagged for a human rather than re-sent. Signals for US ETFs are re-sized into UK-listed equivalents using live prices and exchange rates. The core follows a ports-and-adapters design, with strict mypy typing, over 90% test coverage, and a GitLab pipeline that tests across Python 3.11 to 3.13 and builds a hardened Docker image.

  • Python
  • Poetry
  • Pydantic
  • SQLite
  • REST APIs
  • Pytest
  • mypy
  • Docker
  • CI/CD
View on GitLab
Payslip Extraction: an encrypted PDF payslip becoming a spreadsheet row

Payslip Extraction

From password-protected payslip emails to a spreadsheet

A small automation that keeps a running record of my pay. It scans an email inbox for new payslips, downloads and decrypts the password-protected PDFs, and uses an LLM to pull out gross pay, net pay, tax, PRSI, USC and the payment date.

The results are appended to a Google Sheet, and processed emails are tracked so nothing is entered twice. It runs on a scheduled GitLab CI pipeline, with linting and tests on every change, and can also run locally with Poetry or as a Docker container.

  • Python
  • Poetry
  • LLMs
  • Google Cloud APIs
  • Pytest
  • Docker
  • CI/CD
View on GitLab