# Sam Kelleher, Principle Software Engineer > This is the professional website and portfolio of Sam Kelleher, a software engineer and expert developer based in London. The website contains 35 blog format posts (dating as far back as 2008) of various projects and products that he has built. Including detailed screenshots, write-ups, and some long form articles to present an idea of his inside thinking. They are organised by category ## Portfolio Projects These are the most recent 25 examples from my portfolio. - [Something different... terminal CLI app to track pension performance](https://samkelleher.com/portfolio/Something-different-terminal-CLI-app-to-track-pension-performance): Written August 2025. Built from scratch in a day, a terminal CLI app for tracking pension performance over time, an app built to last a lifetime. No internet or online storage requirement, you own your data.After seeing that airport boarding gates still use thin clients using a terminal like application, and even Bloomberg Terminal being the popular way to access financial markets, I wondered what pretty, small and useful app I could build that wasn't web based. - [Local first: Travel Itinerary Planning App](https://samkelleher.com/products/Local-first-Travel-Itinerary-Planning-App): Written October 2024. This is a local first app (an app without a backend) for tracking a users travel, so think hotel bookings, reservations, flights and trains.Then there is the various loyalty programs offered by airlines, and keeping track of each flight and award.Putting that information into a manageable timetable and tracking the associated costs and expenses.These are the issues I addressed to improve when making this offline first app. - [In-house tooling: Powerful CRM Tooling](https://samkelleher.com/portfolio/In-house-tooling-Powerful-CRM-Tooling): Written July 2022. Building a product for a business is nothing without an empowered team behind it; equipped with capable tooling to enable them to do their best.As part of a project to build a customer loyalty platform, the business also needs tooling to view sales data, view customer profiles, their loyalty history, see a unified view of communications, their 'touch point' activity with the business; as well as the ability to modify and control the various bells and whistles of the platform. - [MacroMealPrep App](https://samkelleher.com/products/macro-mealprep-app): Written October 2021. I created this as a side project in my spare time as a way to plan ahead the food I would need to eat in a given week. The saying goes, "if you don't plan then you plan to fail".This goal of this app is different to other apps like MyFitnessPal which are geared around weight loss, and don't allow you to make plans in advance. Merely, they just track the food you eat, as and when you eat it.With my app, I wanted to put advance planning first, meaning, during the week, I would not need to spend mental energy thinking about what I should eat, when, or where. - [Whitelabel Retail + In-Store Functionality](https://samkelleher.com/portfolio/Whitelabel-Retail-In-Store-Functionality): Written March 2020. Eastern Mountain Sports is a physical and online sportswear retailer located in the north-eastern United States. Following an acquisition of EMS by my employer, Sports Direct International, the Research and Development arm of SDI had the opportunity to re-platform their e-commerce property from Demandware (now known as Salesforce Cloud) to something of our own choosing. Reaction Commerce is a startup of a few years based in Santa Monica, California. They build a Meteor based, semi headless e-commerce platform called Reaction, with a GraphQL API and plugin architecture at its core. - [Ultra fast response times serving static files with WebAssembly Workers](https://samkelleher.com/experiments/Ultra-fast-response-times-serving-static-files-with-WebAssembly-Workers): Written February 2020. With trends moving to Serverless or Function-as-a-Service we've started building our web servers from instances of Express running inside Docker containers, to "functions" that instead run on managed infrastructure, responding to each request as they arrive. Many cloud providers supply this type of system which is fast, cheap, and very easy to maintain as all you have to do is upload your functions. Cloudflare in particular innovate further by replicating your worker to every edge node in their network, drastically limiting CPU + memory time, in exchange for response time as each worker 'instance' is located physically close to users. With previous approaches, worker instances were usually just located in a single region with redundant zones only; thus requiring a load balancer to be setup which is also not simple. - [React Isomorphic eCommerce Retail Experience](https://samkelleher.com/portfolio/isomorphic-ecommerce-headless-bobs): Written August 2019. A new Isomorphic React website that I describe as dumb, in that very little processing is done in storefront itself, instead, transactions are handed off to the API wherever possible.The goals that the website had to achieve was basically to not be Demandware. It should be uncoupled and agnostic from the datasource in all instances. It should be extremely fast, reliable, simple, and also customisable and theme-able.An anonymised responsive webpage is generated dynamically for each request, utilising significant in-app caching, and is frontend on the edge using Cloudflare which means the consumer gets a very fast and rapid render of the page, so even if the script takes a load to kick in on their browser, it happens before they begin to start interacting with the page. - [Auto-Generated Release Notes in Docker for Webpack](https://samkelleher.com/experiments/auto-generate-release-notes-docker-github): Written June 2019. This is an inline tool that, when used in a Continuous Deployment workflow can automatically generate full featured release notes when run as a Docker mounted commandIn particular, it is useful for Webpack build JavaScript projects that have outputted a stats file, as this tool is able to consume the data, and integrate relevant parts of it into the final release notes. The full release notes, and formatted bundle information relating to the Webpack build, are uploaded to GitHub and created as a release on the commit that generate it.It's able to compare the last prior release with the current one, and highlight important performance information, such as changes in the number of bundles, their chunk names, and their respective sizes; which are all relevant if you want to maintain an ongoing trend oflight client releases. - [React + Redux Administrative Panel SPA](https://samkelleher.com/portfolio/React-Redux-Administrative-Panel-SPA): Written February 2017. A sleek and comprehensive single page application built using the latest React and Redux technologies.This application had to include comprehensive user permission capabilities including user management, data manipulation, search, a detailed analytics visualisation section, image editing with drag and drop.There was a lot to do, but with just a few tweaks the app is lightening fast to startup and initialise.One of my personal favourite things about Redux, and the flux pattern in general, is the predictability. As such, this project was one of with the fewest detected defects.Since what is on the screen is guaranteed to be generated by the data in state, any glitches or unexpected behaviour could be traced instantly using the Redux Time Machine. - [Responsive Isomorphic Website with React, GraphQL, CSS Modules](https://samkelleher.com/portfolio/Responsive-Isomorphic-Website-with-React-GraphQL-CSS-Modules): Written February 2017. Had the privilege of creating the public facing website for the company I work for, Blink. Since it's another greenfield site and React was strongly adopted by the company, it made a lot of sense to also construct the website using React.The content had to be editable by the marketing team, but since the parts of the website don't fit in a classic page type system that is popular on Wordpress, I integrated a third part content management platform, Contentful. Since the website would be Isomorphic, I had a Node Express server at my disposal, so I immediately got to work adding a GraphQL API that would be responsible for serving up the various strings and images stored in the CMS for the specific elements of these bespoke built pages. - [P3 Image Color Experimentation](https://samkelleher.com/experiments/P3-Image-Color-Experimentation): Written December 2016. 2016 generation MacBooks and iPhones have a wide-gamut P3 display that show 25% 'more' red and greens compared to standard RGB monitors. So I began to experiment to work out what was needed to be able to use this extra color space when presenting images on web and native apps.Basically what I needed to work out was, when given an image that is using P3 color space, can I make a thumbnail from it without destroying the P3 colors and output a transformed image that is still in P3. Further that, to be able to display the specific P3 optimised images on devices that support it. - [Pure Swift Instagram Queue App for iOS](https://samkelleher.com/experiments/Pure-Swift-Instagram-Queue-App-for-iOS): Written November 2016. Sometimes it's nice to branch of into new technologies to keep perspective and knowledge of relevant stacks. This is my adventure into pure the pure iOS world with a simple Swift iPhone app.The app handles the basics, but should handle them well. Connecting to a HTTPS pinned API, download a data in JSON, cache it locally. Then parse it and use it to display data within the app.In this case, the app is a list of photos I have taken that I have uploaded to my website, but have yet to share on Instagram.I can track which photos are shared as I linked Instagrams post callback into my website, so new posts on Instagram can be matched to photos I've uploaded to my website by way of metadata matching. - [Fashion Retailer iOS App + Backend](https://samkelleher.com/portfolio/Oasis-Stores-Fashion-Retail-iOS-App-Backend): Written August 2016. Stared this project from using the same code base developed for ASOS China in Spring 2016 for a London based agency on behalf of their client Oasis Stores, a ladies fashion wear, which also had physical stores in the UK.This project was designed to utilise existing development for a fast turn around, but had new functionality such as in-store stock, reserve online, and collect in store. This Cordova powered runs iOS devices.This project was more of an exercise in re-usability of a codebase than developing new tech. While there were some new features, this is essentially a rebranding of an existing app, and repurposing while retaining existing features.The backend for this was a NodeJS HAPI API which worked as an interim layer between the customers iPhone and the stores backend, which in this case, was Demandware. - [ASOS中国 - Hybrid iOS and Android eCommerce App](https://samkelleher.com/portfolio/ASOS-China-Hybrid-iOS-and-Android-eCommerce-App): Written August 2015. Stared this project from scratch in Spring 2015 for a London based agency on behalf of their client ASOS China. Following a similar design to the UK iOS app, this Cordova powered runs on both Android and iOS devices, in both orientations, on both mobile and tablet.Making pure JavaScript single page applications is one thing, with it's own set of complexities and challenges; but doing the equivalent for a JavaScript app that will function only in a mobile environment brings with it an entire new set of challenges. These are specifically related to the user interface. The app still has to retain the gesture recognition and actions found in native applications, and perform will full buttery smooth animations expected from real applications. - [Dynamic iOS Passbook with notifications](https://samkelleher.com/experiments/Dynamic-iOS-Passbook-with-notifications): Written October 2014. Using a C# API to generate Passbook passes for the Passbook app on iPhones using iOS. The system can then track each users subscription, and send updates in realtime to each device via the Apple Push Notification Service (APNS). - [CMS Gallery + GIF Support](https://samkelleher.com/products/CMS-Gallery-GIF-Support): Written September 2014. A photo gallery within the admin console of a CMS I created called Leaf. The gallery components takes uploaded images, and creates all the required dimensions for the website. It supports creating WebP versions of all images, as well as the usual PNG, JPEG, types. PDFs are also converted to AVIFs. If a GIF is uploaded, the animation is preserved and rendered. The GIF is also undergoes some lossless compression to make the animation load faster. - [Backbone + WebSocket Single Page Application for Car Dealerships](https://samkelleher.com/portfolio/Backbone-WebSocket-Single-Page-Application-for-Car-Dealerships): Written September 2014. A online and packagable application built using Backbone.js + Marionette.js, running on a WebSocket enabled C#/SQL backend. Being a Single Page Application (SPA), the application runs very natively, with fast performance between screen loads, and can handle transient network errors as users dip in and out of WiFi coverage. - [Responsive, Realtime, Customisable, Interactive Dashboard](https://samkelleher.com/portfolio/Responsive-Realtime-Customisable-Interactive-Dashboard): Written September 2014. This is a dashboard for a health and safety monitoring product I built. It has numerous unique features, and complex backends since the dashboard must effortlessly crunch potentially large datasets and summarize them in simple tabular graphs or numbers. - [Realtime two-way Android based Safety Monitor tablet.](https://samkelleher.com/portfolio/Realtime-two-way-Android-based-Safety-Monitor-tablet): Written September 2014. An Android powered tablet client application that uses Google Cloud Messaging (GCM) to establish a two way realtime connection (using XMPP via the Android OS) to receive and relay events for essential safety monitoring. Due to the volume of data driven, and the number of simultaneous connections; it was essential this Android app would scale and be able to deliver and function 100% of the time, never with a chance of user data loss.The data could be processed in a powerful C# .NET backend. The server-side XMPP connection to GCM was also a C# .NET Worker Role, running in Microsoft Azure. - [Multilingual Job Board with geospatial search capabilities.](https://samkelleher.com/portfolio/Multilinqual-Job-Board-with-geospatial-search-capabilities): Written September 2014. This job board aimed at supply chain roles in Europe is able to automatically display the language relevant to the current user, as well as offer sophisticated geospatial search tools. Jobs and Candidates are then auto-matched for each job based on currency/salary (the jobs can show their currency in any known currency available), skills, and location. Location is based on specified travel distance from the desired location, which could be specific towns or continents, to sorting the relevant jobs is priority. - [Quick and easy credit card payment page](https://samkelleher.com/portfolio/Quick-and-easy-credit-card-payment-page): Written June 2014. This simple, static, and responsive payment page allows customers to simply enter the value they need to pay and enter their payment information and complete payment with a single click. - [Backbone + Marionette GitHub Repository List - Sample Application](https://samkelleher.com/experiments/Backbone-Marionette-GitHub-Repository-List-Sample-Application): Written March 2012. Sometimes the best way to learn something is to study each component separately, this gives us a true in depth skill on how something specific works.However, putting these components together to make a full featured application is another ball game entirely.I've always maintained that Software Engineering isn't difficult, but it can be complicated - as a typical application will consume numerous different technologies from development stages, to deployment, to runtime.It's putting all these modules together that is the hard part. - [Calendar Based Booking System](https://samkelleher.com/portfolio/Calendar-Based-Booking-System): Written September 2011. This online booking and availability system has the functionality to show to both customers and staff members the same UI but with different enabled functionality. Staff can use the same system to view availability with granular detail, and book on behalf of customers (such as over the phone), while customers can use the system to book themselves. By using this adaptive UI technique saves time and costs as no separate 'staff only' system is required to make bookings. - [Interesting Login Screen](https://samkelleher.com/portfolio/Interesting-Login-Screen): Written September 2010. This login screen makes things a little bit more interesting for the end users by displaying an inspirational photo on the login screen. The images would be sourced to show ones relevant to the user (such as from their own user-uploaded gallery) from where their previous login was identified but a password re-prompt is necessary for certain operations. - [Estate Agent Management Platform](https://samkelleher.com/portfolio/Estate-Agent-Management-Platform): Written August 2008. A web-based and responsive application for estate agents to handle the day-to-day rental agreements of properties leased out to tenants on behalf of their owners. The application allows the tenants themselves to login and access the platform, as well as the landlords.