Personal Projects

Racket Comparison Website

https://www.smashspec.com

Project Overview

My goal was to build a real-world project that would be useful to users. By designing a project with users in mind, I made sure that the website is easy to use and provides real value.

As a regular badminton player who plays several times a week, I have developed a solid understanding of badminton rackets. Based on this interest and experience, I chose to build a racket comparison website. The website is useful for users looking for their racket specifications, and includes a comparison feature to compare up to two rackets. This helps users find a racket that matches their preferences by using filters.

To support a fast and reliable experience, I designed the backend with performance and efficiency in mind.

Project Goals & Scope

This website was built for production to gain experience running and maintaining a production-scale website.

  • Optimised for speed and simplicity
  • Low CPU/RAM environment
  • Implemented simple RESTful API to retrieve racket specifications for display on the frontend
  • Built with React.js and a custom framework using server side rendering (SSR)
  • The project is compiled into to static web files to keep CPU and RAM usage low
  • Deployed to a static server hosted on AWS EC2.

Deployment is handled via a reusable custom static server (Rust), developed as a separate project.

Custom Static Server (Rust)

Coming from a strong C programming background focused on low-resource environments and reliability, I decided to learn more about Rust programming language through real-world projects. I built the static server using Rust to keep CPU and RAM usage low and improve reliability with strong compile-time guarantees and memory safety.

This static server is a simple web file server that serves the website assets such as .html, .css, and .js files.

RAM usage for this static server remains under 5 MB in both idle and full-load conditions, compared to a simple Node.js Express application, which typically uses around 50 MB at idle and can spike to 100 MB under light traffic.

Cloud-Hosted Full-Stack Web Application

https://www.757box.com

Built a modern, cloud-hosted platform to streamline my software development workflow by integrating essential developer tools into a single web application. Developed a dynamic, SEO-optimised frontend using the latest React.js and Next.js features, which significantly levelled up my React.js expertise. Containerised the application with Docker and deployed it using Docker Compose on AWS EC2 to ensure consistent and scalable environments. Static files are served via S3 using RESTful APIs. Implemented secure RESTful APIs to manage application status, and to store page metadata and content. Configured HTTPS, custom domain, and automated CI/CD pipelines for reliable updates. This project demonstrates my hands-on proficiency in full-stack development, cloud infrastructure, and developer tooling.

Personal Portfolio Website - Web Application

https://www.william-stell.com

Built a personal portfolio website using React, Next.js, and TypeScript to showcase my projects and technical skills. The site features a clean, responsive layout built with modern React components and is structured using Next.js for efficient page routing and organisation. Developed using Node.js tooling and deployed via Vercel, enabling automated deployments, HTTPS, and custom domain support with minimal setup. This project highlights my ability to build and deploy modern web applications using a professional frontend stack and cloud-based development workflow.

KeyCryptoBox API

https://github.com/william-stell/keycryptobox-api

This project demonstrates my ability to build fast, lightweight RESTful APIs for cryptographic operations using modern tooling. Developed with Bun and Hono, it leverages their performance advantages over traditional Node.js frameworks, offering faster execution and lower resource usage. The API provides endpoints for key generation, message signing, signature verification, and hashing - all written in TypeScript for strong type safety and long-term maintainability.

Designed as a standalone microservice, this project also serves as a reusable library that can be consumed by other projects via simple HTTP calls, avoiding the need to reimplement or re-test cryptographic logic. It is especially useful in scenarios such as IoT applications, where devices may have limited memory or language constraints, allowing them to offload cryptographic operations to this API instead of handling them locally. This reflects my ability to design modular, efficient tooling that accelerates development and supports a wide range of deployment environments.

Quote of the Day API

https://github.com/william-stell/quote-of-the-day-api

This project demonstrates my expertise in building simple but effective, high-performance RESTful microservices using Bun and Hono, which provide faster execution and significantly lower RAM usage compared to traditional Node.js and Express.js setups. Leveraging Cloudflare Workers, it showcases my ability to deploy scalable applications at the edge for low-latency global delivery. Written entirely in TypeScript, it reflects best practices in type safety and maintainability. Additionally, this project serves as a reusable template, proving my capability to create efficient starter microservices for rapid development.

Currency API

https://github.com/william-stell/currency-api

A lightweight RESTful API built with Node.js and Express.js, serving a list of currencies and their exchange rates. Node.js and Express.js were chosen for their widespread adoption, efficiency, and strong ecosystem, making them ideal for building fast, scalable APIs. This project demonstrates backend fundamentals, API design, and test-driven development using Jest and Supertest. Docker is used for containerised deployment, ensuring consistency and scalability. Designed as a practical template and standard for future API projects.

© 2025 William Stell