Projects

Three projects built around real data, then personal tools and coursework. Most of my repositories are private; the source is available on request.

Personal projects and coursework

Personal tools and coursework in C++, Java and C#.

  1. Personal JavaFX desktop app

    Portfolio Planner

    • 18 JUnit tests
    • ~1,580 lines of Java
    • Java 21
    • JavaFX 21
    • SQLite
    • JUnit

    A personal JavaFX desktop app for tracking an 8-week schedule, built with Java 21, SQLite and JUnit.

    Problem

    Plan an 8-week schedule session by session and keep weekly notes in a Markdown file.

    Approach

    A small desktop app for my own use: JavaFX for the interface, SQLite for storage, and notes appended to a plain Markdown file.

    Implementation
    • A session grid and a week editor, written in JavaFX with no FXML.
    • Notes are appended to a weekly-notes.md file.
    • 18 JUnit tests across about 1,580 lines of Java.
    Result

    A personal desktop app with 18 JUnit tests, about 1,580 lines of Java.

  2. Personal tool, alpha

    Multi-Agent Logger

    • 165 xUnit tests
    • C#
    • .NET 10
    • WPF
    • SQLite
    • Dapper
    • xUnit
    • Claude Code (AI-assisted)

    An alpha .NET 10 tool that records what AI coding agents do: the problems they find and the fixes they make.

    Problem

    I wanted to see what AI coding agents actually do in a session, not just the result they hand back.

    Approach

    Log the problems and fixes to SQLite as agents work. Expose the log to agents as an MCP server, so they record it themselves, and show it in a desktop dashboard.

    Implementation
    • A core library that stores records in SQLite through Dapper.
    • A command-line tool that is also an MCP server, exposing log_issue, log_exception, log_fix and list_open_issues.
    • A WPF desktop dashboard with charts.
    • Capture of Claude Code hook events.
    • 165 xUnit tests across about 9,600 lines of C# plus XAML.
    Result

    An alpha tool (phase 5 of 6) with 165 xUnit tests, built with Claude Code to see what AI agents actually do.

  3. Coursework, spring 2026

    Birthday Database

    • C++
    • Binary search tree
    • File I/O

    A menu-driven birthday database in C++, built on a template binary search tree.

    Problem

    Keep a collection of birthdays that can be searched, edited and saved to a file.

    Approach

    Store the entries in a binary search tree written as a template, and save them to a file between runs.

    Implementation
    • A node class, a tree class and a binary search tree built in layers, with nodes held by std::shared_ptr.
    • Custom exceptions for entries not found and violated preconditions. The Person class overloads the comparison operators.
    • A menu to add, modify, remove and search entries, list everyone born in a given month, and save to or load from a file.
    Result

    Practice combining a template data structure, file I/O and a menu-driven program.

  4. Coursework

    Sorting algorithms

    • C++

    Six sorting algorithms in C++, plus a timing program that runs them on random integers.

    Problem

    Compare how different sorting algorithms behave as the input grows.

    Approach

    Write each sort and run them on random integers at four sizes, from 10k to 1M, skipping the O(n²) sorts at 1M.

    Implementation
    • Selection, bubble, insertion, merge, quick (median-of-three pivot) and radix sort.
    • A SortLab class that holds the data in a dynamic array and follows the rule of five: copy and move constructors and assignment, and a destructor.
    • A timing program that uses clock() on 10k, 50k, 100k and 1M random integers.
    Result

    Practice with how each sort works, and with managing dynamic memory in C++.

  5. Coursework

    Linked structures

    • C++
    • Templates
    • Recursion

    Linked lists, stacks, queues and a bag as C++ templates, plus a palindrome checker and a rainfall-statistics program.

    Problem

    Build the basic linked data structures as reusable templates and use them in small programs.

    Approach

    Write each structure as a C++ template so the same code works for any type, then use the structures in small programs.

    Implementation
    • A linked list, array list, linked stack, array stack, a queue built on the linked list, and a linked bag, all as templates.
    • A palindrome checker that compares a queue of characters against a stack of characters.
    • A rainfall-statistics program built on its own linked list.
    • Recursion exercises, including recursive binary search.
    Result

    Practice with templates, pointer-based structures and recursion.

  6. Coursework

    BST same-tree check

    • C++
    • Recursion

    A C++ program that checks whether two binary search trees hold the same values, using recursive in-order traversals.

    Problem

    Check whether two binary search trees hold the same values, whatever their shape.

    Approach

    Traverse each tree in order, recursively, into a vector, and compare the two vectors.

    Implementation
    • A recursive in-order traversal of each tree into a vector.
    • A comparison of the two vectors, so the shape of the tree doesn’t matter.
    Result

    Practice with recursion on binary search trees.

  7. Intro coursework

    Java fundamentals

    • Java
    • JavaFX

    Exercises from an intro Java course: a Luhn credit-card number check, a loan calculator, and JavaFX tax and investment calculators.

    Problem

    Practice the basics of Java with small programs.

    Approach

    Small programs for the basics, with a JavaFX interface for the tax and investment calculators.

    Implementation
    • A credit-card number check (Luhn).
    • A console loan calculator.
    • JavaFX tax and investment calculators.
    Result

    Core Java syntax and a small JavaFX interface.

Want to see the code?

Most of my repositories are private. Email me and I can share the source.

Email me