Featured Projects

Solutions architecture projects with a focus on business intelligence, data analytics, and applying technology to real-world problems.

Smaller Projects & Experiments

Open-source utilities and learning exercises on GitHub, each highlighting a specific technical area.

Game · Python
Tic-Tac-Toe

Command-line tic-tac-toe implementation — a small exercise in game-state modelling, win/draw detection, and turn-based input validation.

PythonCLIGame Logic
View on GitHub
Desktop App · Python
Watermark

Desktop app for adding text, logo, or tiled watermarks to images — with a live preview, drag-to-place positioning, and threaded batch processing.

PythonPyQt6Pillow
View on GitHub
Desktop App · Python
Typing Speed Test

Desktop typing-speed test with real-time WPM and accuracy tracking — correct and mistyped characters are highlighted live as you type, with a timer that auto-starts on first keystroke and a restart button to load a fresh passage.

PythonPyQt6GUI
View on GitHub
Game · Python
Breakout

Clone of the classic 80s arcade game, built with Python’s standard-library turtle module — paddle-angle ball steering, smallest-overlap brick collision to bounce off the correct face, and endless speed-increasing levels at a manual ~60 FPS render loop.

PythonTurtleGame Logic
View on GitHub
Web App · Python
Todo List

A multi-user task manager built with Flask — each account gets its own private, session-authenticated list. Todos carry due dates with overdue highlighting, priority levels and category tags, and can be filtered by status, text search or priority. Backed by SQLite via SQLAlchemy, with CSRF-protected WTForms and hashed passwords throughout.

PythonFlaskSQLAlchemy
View on GitHub
Web App · Python
dissText

A writing app that punishes hesitation — inspired by The Most Dangerous Writing App. Pick a time or word target and keep typing; stop for more than five seconds and your words fade out and are wiped. A Flask backend serves the page, but all the timing, fading and wiping run client-side in vanilla JavaScript, so the draft never touches the server and lost words are truly gone. Built as Day 90 of the 100 Days of Code Python bootcamp.

PythonFlaskJavaScript
Live Demo View on GitHub
CLI Tool · Python
PDF to Speech

A command-line tool that turns a PDF into speech — read aloud or rendered to a WAV audio file. Text is extracted with pypdf and cleaned so it reads naturally (hyphenated line-breaks rejoined, paragraph breaks turned into pauses), then voiced offline with pyttsx3 — no API key or network needed. Supports page ranges and adjustable rate and volume. Built as Day 91 of the 100 Days of Code Python bootcamp.

Pythonpypdfpyttsx3
View on GitHub
Web App · Python
Colour Palette Generator

A Flask website that finds the most common colours in an uploaded image and shows them as a palette of copyable hex swatches, each labelled with the percentage of the image it covers. Colours are extracted with Pillow using median-cut quantization; uploads are processed in memory and never written to disk. Built as Day 92 of the 100 Days of Code Python bootcamp.

PythonFlaskPillow
View on GitHub
Game · Python
Space Invaders

The classic arcade shooter, built in Pygame and compiled to WebAssembly with pygbag so it plays right here in the browser — the same Python runs on the desktop and on the page, no install. A 5×10 alien fleet marches side to side, drops a row and accelerates as you thin it out, raining bombs from its front line while you shoot back for a row-tiered score. Every sprite is drawn from pixel-art bitmaps at runtime, so the game ships with no image files. Built as Day 95 of the 100 Days of Code Python bootcamp.

PythonPygameWebAssembly
Live Demo View on GitHub
Automation · Python
Chrome Dinosaur Game Bot

A bot that plays the Chrome offline dinosaur game by watching the screen — no browser automation, no reading the game's memory. Sixty times a second it captures a narrow strip of pixels just ahead of the dino, re-checks whether the game has flipped to night mode, and counts the pixels contrasting with the sky; enough of them means a cactus is arriving, and it presses jump. The strip drifts steadily forward so the bot reacts earlier as the game accelerates. Built as Day 94 of the 100 Days of Code Python bootcamp.

PythonNumPypyautogui
View on GitHub
Data Engineering · Python
Legacies of British Slavery — Research Index

A personal research tool built around UCL's Legacies of British Slavery database — a core source for my postgraduate genealogical research. It maintains a local working copy so records can be re-examined and cross-referenced offline, with coverage reconciled against the site's own listing counts rather than assumed.

PythonSeleniumSQLiteBeautifulSoup

Professional Experience

Over 30 years in enterprise software across presales, solutions architecture, consulting, and product strategy — taking emerging technologies to market for blue-chip clients including Deutsche Bank, Barclays, BP, BT, SocGen, Nationwide and Tesco.

  • Independent Technology & Product Consultant
    2017 – present

    Working with ISVs, VARs and VC advisory firms (incl. Guidepoint) on solution design, value engineering, and go-to-market strategy. Currently focused on the SAP Analytics Cloud, Datasphere and BDC ecosystem.

  • Silwood Technology Limited · Solutions Architect
    2023 – present

    Solution design for Safyr metadata-discovery tooling, surfacing SAP, Oracle and Salesforce application metadata for data integration and migration projects.

  • Optimal Datacentres · Co-Founder
    2013 – 2016

    Software and services helping Telco, FS and manufacturing clients consolidate virtual and physical infrastructure to meet legislative and efficiency targets.

  • Nlyte Software · EMEA Senior Solutions Consultant
    2012 – 2013

    DCIM solutions for SocGen, Nationwide, Experian and Amadeus.

  • Adaptive Computing · EMEA Presales Manager, Cloud
    2010 – 2012

    Led EMEA presales for the Adaptive Cloud Suite, partnering with HP and IBM and delivering for Barclays Capital and Deutsche Bank.

  • Enigmatec Corporation · Technical Director / EMEA Presales Manager
    2006 – 2010

    IT process automation. Notable engagement: BP — $850k licence consolidating 18 management tools and reducing fulfilment time from months to days.

  • BMC Software · Senior Presales Consultant, Change & Configuration Management
    2005 – 2006

    Most profitable EMEA team per head within the company (Q3 FY06).

  • Motive Communications · Senior Presales Consultant, Northern Europe
    2001 – 2004

    Lead sales engineer for Telewest (£1.5m+); £6m+ in licence revenue closed in 2002.

  • BusinessObjects UK (now SAP) · Presales Manager, Financial & Commercial
    1996 – 2001

    BI presales for BT, Barclays, CSFB, Tesco and Rolls Royce. Technical Account Manager for British Airways.

Technical Skills

Python PyQt6 Flask SQLAlchemy Pydantic SAP Analytics Cloud SAP Datasphere OData / REST APIs Business Intelligence Data Mining PyInstaller Jupyter Notebooks SQL

Interested in a technical project or advisory engagement?

Get in Touch