Michael Fuller

Example Projects

Game of Life in React

This is a quick React app that replicates Conway's Game of Life.
It's small enough to have a quick read through the source, while being complex enough to showcase.
The project is a pure React app with custom Hooks, TypeScript, a CSS Grid and TDD unit tests.

Game of Life

React Native Web + Mobile App, with AWS

Study project making FlashDecks is a web/mobile app that lets users create and share collections of "Flash Cards" for studying.

Flash Cards are a study tool where a question is on one side, and answers are on the reverse.
Since these cards are digital they can contain media which physical cards don't, such as video and links.

It has a single codebase, it has builds for both web and native React apps.
The backend is hosted on AWS using their technologies.

FlashDecks - Own Decks
FlashDecks - B, Side 1
FlashDecks - B, Side 2
FlashDecks - B, Side 1
FlashDecks - B, Side 2
FlashDecks - Details
FlashDecks - Resize Content
FlashDecks - Modify Content
FlashDecks - Kitchen Sink

Multiplayer Word Game

Solo project creating a multiplayer word game (similar to Boggle) where people on the internet raced against each other to get the highest score within the time limit. Letters were arranged in a hexagonal shape, so each was connected to 4-6 other letters (depending on if it was an edge/corner). Players would click/draw a string of connected letters to spell out a word. Points are awarded for length, with bonus points for difficult letters.
Since it’s multiplayer, the game is generated on a Java server.

The rules for generating the grid were that it could be of 3 different sizes, must contain a minimum number of words, and had a blacklist of words that must never appear (since it’s aimed at children). This meant that the words on the grid had to be known at the time of creation. A brute-force approach going through the millions of paths through the grid took several seconds after the time is exacerbated by applying the rules. A competitor was found with a similar game and their game took a while to start, so it appears they were doing the brute force approach.

The application was optimised by combining Dijkstra's Algorithm with the Trie data structure to quickly generate a random grid while also knowing the consequence of each letter being placed by the algorithm,
such as whether it would create an undesired word or break one of the rules regarding how the grid should look.
This took the processing time down to ~2-10ms.

PlayLive Leaderboard
PlayLive Avatar Select
PlayLive Gameplay
PlayLive End Screen

Multi-year Greenfield Hybrid Angular App

Small team creating a major new SaaS product for the company, branching from the school market to parents & children. This was a new platform to host pre-existing activities in a new, gamified, context outside the classroom.

Working closely with the art team, this was incredibly rich and animated, to give a game-like experience. Children could progress through to harder content and earn "gems" for their avatar. It has a Laravel Lumen back-end and an AngularJS front-end. Since I was aware Angular 2 (now just "Angular") was being created, I set up the groundwork for the app to use Component Based Development, reflecting the patterns Angular 2 was using.
I also did this because I believed it was a cleaner approach than our existing codebase at the time, and being on the ground-floor of this product, I had a chance to change that.

My position within this team is probably what got me promoted to Senior Programmer.

Novabods Subject Select
Novabods Content Select
Novabods Content Gameplay
Novabods Avatar Select
Novabods Dashboard
Novabods Account Management

Student Assessment Report

A large data-visualisation project involving the whole department to improve how we present student progress to teachers. As a senior developer, I helped break down the project into blocks of work that could be turned into Scrum Stories by the Product Owners. I also worked with other developers on the UI.

Assessment Report
Assessment Report Drawer

New Teacher Tools

This was our first move from using the old AngularJS to the new Angular 4. We created a library of components to create teaching aids for teachers. Since I had prior experience with AngularJS and TypeScript from playing around at home, I spent a lot of time helping others and running a couple of training sessions. The team with accompanied me with the previous project were able to take advantage of being familiar with the component-driven workflow.

Teacher Tool - Wheels

Student Content

I've worked on many different types of content for children using different technologies.

  • Puzzles & Games - Built in Adobe Flash initially and then HTML5 + CreateJS.
  • A Video Player with support materials - Built in Adobe Flash.
  • A quiz/assessment app - Built in Adobe Flex.
  • Story Books - Built in HTML5 + CreateJS.
  • A mobile game for Android - Built in Java.

Activity Into
Activity Question

Single Sign On with parent company

I was the developer for our Java interface for a SOAP-based Single Sign On system being created by our parent company, working closely with their lead developer and adhering to their changing specifications as it was being developed.

Database Migration

This consisted of about 3 people. 1-2 for the architecture of the migration system, 1 person responsible for transforming the internal system data, and myself for transforming the customer-facing data. This was done with SymmetricDS to transform our messy old SQL databases, into the clean new architecture & structure.

News Feed Widget

While a 3rd party was finishing setting up an external blogging system, I was asked to create a widget to show those items within our customers dashboard. It's an Angular 4 app that calls out to a PHP interface with caching to the right RSS feed & filters, based on their account & subscription settings. There were quite a few last minute changes made to the format their end that I needed to respond to, so it was made to be quite robust.

Teacher Tool - Wheels
Built with Gatsby - a popular Static Site Generator utilising React.