Colum Kelly

Projects

Threads Clone

Threads Clone

A pixel-perfect clone of the Threads social media app. Includes a suite of automated end-to-end and integration tests, custom auth with email verification, and AI content moderation. Built with Next.js 15, React 19, Drizzle, and SQLite. I spent several months working on this daily, focussing on matching the UX, accessibility and performance of Threads. My only regret is using Next.js — I have learned so many framework-specific patterns and gotchas at this point but I would rather have focussed on core web platform skills and patterns.

  • NextJS
  • Drizzle
  • SQLite
  • Vitest
  • Playwright
BizPortraits

BizPortraits

An AI-powered headshot generator that transforms selfies into studio-quality portraits in seconds, with Stripe integration for secure payments. This was my first experiment with AI agents. I noticed a market gap for affordable headshots using bleeding-edge AI workflows and wanted to launch quickly. Consumer models caught up rapidly, so I shipped a simple MVP instead of continuing full development.

  • NextJS
  • Drizzle
  • SQLite
  • Stripe
Paragliding Dashboard

Paragliding Dashboard

A weather dashboard for local paragliding pilots. Features a scrollable dynamic wind graph, displays for multiple weather APIs, an interactive UI for viewing windgrams, and a live camera feed of the local mountain. It's a pretty simple tool but it's used daily by all active pilots in the area. I filed detailed issues and proposed improvements to several upstream projects during development, helping to improve the tools it depends on.

  • Typescript
  • React
  • NextJS
  • Recharts
File Uploader

File Uploader

A cloud storage application for file management and sharing. Built with Typescript, Express, EJS and Web Components. Features a modular architecture with various performance and security optimizations. This was an experiment in building a multi-page SSR app. I gained significant experience with performance tuning, security best practices, bundling strategies, and the limitations of this stack.

  • Typescript
  • Node
  • Express
  • EJS
  • PostgreSQL
  • Docker
Messaging App

Messaging App

A real-time messaging app built with Next.js using React, Tailwind, Prisma, Postgres, NextAuth, and Pusher. Although this was initially modelled on a tutorial with a slightly different stack, I spent a few weeks addressing issues, improving privacy, security, and performance, replacing dependencies, and adding new features of my own.

  • NextJS
  • Typescript
  • Prisma
  • Postgres
  • Tailwind
Blog API

Blog API

A REST API for my personal blog using Node, Express, and MongoDB. I built a simple CMS to interact with the API using React and Tailwind. It includes a markdown previewer with syntax highlighting. Authentication is handled using JWTs via access and refresh tokens stored in HTTP-only cookies.

  • Node
  • Express
  • MongoDB
  • React
  • Tailwind
Where's Alex Honnold?

Where's Alex Honnold?

A hidden object puzzle for climbers. (Think Where's Wally on El Cap). Players are timed as they search a draggable high-resolution image for famous rock features.

  • React
  • Firebase
  • Vite
CV Generator

CV Generator

A React CV Generator. Users can add additional sections for experience, education, or their own custom sections. A print preview is updated live and can be saved as a PDF.

  • React
  • PostCSS
  • Vite
Battleship

Battleship

An MVC battleship game in Vanilla JS, developed using TDD and built with Webpack. Drag and drop to position ships. Computer opponent uses a hunt and target algorithm.

  • Javascript
  • HTML
  • CSS
  • Webpack
Memory Game

Memory Game

A memory game built in React. Players are scored based on speed and accuracy.

  • React
  • Vite
Pixel Pad

Pixel Pad