Caleb O'Leary

Caleb O'Leary

Full Stack Web Developer

Contact Me
Caleb O'Leary

Caleb O'Leary

Contact Me

About Me

Hello, my name is Caleb and I'm a professional engineer manager and software engineer specializing in Javascript, specifically React and Node. I thrive on challenges and am great at coming up with creative, original and unconventional solutions to problems. I try to keep this portfolio reasonably up to date, but to see my latest code adventures, check out my codepen

Latest Projects

Many projects I work on for employers are internal and not easy to share, such as CRMs and accounting software for SelectQuote, nurse training tools and conference demos for Intouch, etc. Instead, take a look at some stuff I've coded for clients that's publicly viewable, or for fun in my spare time:



React Checkers

React Checkers & AI Opponent

I know that the title says 'React Checkers', but there isn't a ton of React in use here, it's only handling the display (that's its job, huh?). Essentially React displays our board array, and most of the moving and detection are just accessing that array. The AI is built out using a limited version of the minimax algorithm (see http://neverstopbuilding.com/minimax for a nice explanation of what that means), simply it means that the program forecasts futures, assumes you'll play as if you were doing the same, and picks the route that it thinks will result in the best for itself if you also play 'perfeclty', and I use that word loosely because this AI currently only looks 3 turns in to the future. It uses a point system to determine 'good' and 'bad' stuff that could happen, for example, if it can win in the next 3 turns, thats a 100 point outcome. If it will lose in the next 3 turns, thats worth -100 points, losing a king or killing an enemy king are worth -25 or 25 points respectively, and killing/losing regular pieces are worth +-10 points. Lastly, classifies making a new king of it's own as worth 15 points, so slightly better than killing 1 opponent. The bot looks through something like 1000-1500 possible futures before each move.

Try to beat it!

Street Scene Build

Street Scene Full Build & Custom Parts Finder

Street Scene has thousands of products, many of which fit only certain vehicles of specific year/make/models. They needed a custom solution to allow customers to easily drill down and find parts for their vehicle. The custom parts finder uses Javascript, jQuery, and MVT (Miva, their ecommerce provider's version of PHP) to fluidly allow customers to view parts for their car, down to the year-make or year-make-model.

Try it live!

See the code

Angular Tic Tac Toe & Minimax AI

Angular Tic Tac Toe & Minimax AI

This was a follow up project after my Angular Connect 4 project. Where that AI thought like a human, I wanted to build a game AI that thought like, well, a computer. I'll give you a heads up, the bot is unbeatable, only tie-able. After you make your move, it analyzes EVERY future possibility, more than 30,000 futures on the first turn, and uses the fairly common Minimax Algorithm to decide which move is mathematically the best. I used Angular and JavaScript recursive functions to build this.

Test your skills

jQuery Extended Mag

jQuery Extended Mag Open Source

In the ecommerce world, there's often a need to get a 'closer look' at a given product. I'd installed a zoom plugin for several customers and was frustrated with certain bugs that I came up against over and over. Eventually I decided to create my own jQuery plugin to handle zoom functionality, and Extended Mag(nify) was born. This plugin tracks image position and mouse position to display a zoomed image relative to where you would like to zoom. It's free to use, check it out! (For a quick demo, see my image at the top of the page.)

See the demo

See the code

Other Projects

DeSubstitute Cipher Cracker

This project uses Native Javascript and a method called 'shotgun hillclimb' to attempt at breaking any cipher where every letter is replaced by one other letter (ex: all a's replaced with x's: Cxleb O'Lexry, etc..). Note: jQuery was used to handle the display on this demo, but the cipher functions are Native.

Crack the code

Read about how this was done

Lux AI Kaggle competition

A friend and I worked together on our first AI competition on Kaggle and placed 565/1178 teams. We were mostly hand-coding agent behavior and trying different strategies, though we'd started to look into trying to implement reinforcement learning with TensorflowJS when the competition ended.

View the competition

Read the code

More on CodePen

Work Experience

Various - SelectQuote Insurance Services (2019 - Present)

Software Engineering Manager (2021 - Present)

I supervise, coach, and mentor a team of five senior engineers and architects. I'm also the tech lead for two SOX compliant finance & accounting applications and directly contribute code ~50% of my week.

Senior Software Engineer (2019 - 2021)

I used React and Node, along with a myriad of other technologies, to create a CRM used by hundreds of insurance sales agents to track their leads, sales history, and much more. I also worked on two SOX compliant applications for the companies accounting and finance departments to use.

Front End Web Developer - Intouch Solutions (2016 - 2019)

I used my skills in HTML, CSS, JavaScript, Responsive Development, and troubleshooting to build enterprise level pharmaceutical websites. From dosing tools for doctors to certification quizzes for nurses, mistakes can be costly in the healthcare field, and attention to the most minute details is a must.

Web Developer - Miva (2015 - 2016)

I used HTML, CSS, Javascript, jQuery, AJAX, PHP, and more to create fully customized functionality for clients on the Miva ecommerce platform.

Lead Web Developer - Response! Targeted Marketing (2014 - 2015)

I provided heavily customized and fully custom WordPress solutions to clients, and focused on using the website as a tool to bring in business.

More on LinkedIn

Send me a Message

I had a nice contact form here, but it's been attracting spam bots. If you'd like to contact me, please message me on Linkedin.