BT

My name is Ben and I make web applications.


I'm currently looking for a junior web/software developer role.

Code:
github.com/bt1k

Email:
bt@bt1k.co.uk

Featured web applications

I have deployed these two web applications on a VPS (virtual private server), which is running Debian GNU/Linux.

My VPS

What's a VPS?

A VPS is a virtual machine, typically running on a server in a data centre. More info can be found from sources such as AWS, Google Cloud, and Wikipedia.

Why a VPS?

It was a lot cheaper than a PaaS such as Heroku or Render.

Why Debian?

I chose Debian for my VPS because I'm already familiar with Debian-based Linux distros, having used Debian and Ubuntu in my spare time. I think Debian's server edition is meant to be more lightweight than Ubuntu's server edition, and Ubuntu puts some packages in their "universe" repository, which requires Ubuntu Pro for proper security coverage. Debian just seemed easier, and recent Debian releases have each had 3 years of security updates (before the LTS period), which is enough for me. In fact, I've already upgraded my VPS from Debian 12 to Debian 13, due to the former moving from standard support to LTS support, and the upgrade seemed to work just fine.

How is EmojiBoard being run?

The EmojiBoard web application is a single binary, produced by Go's compiler, and it is running as a systemd service. The front-end files are embedded into the binary. If you look in EmojiBoard's repo, at the file "extra_prod.go", you'll see the front-end files embedded in a variable named clientFiles (unless I've changed the code by the time you're reading this).

How is Laravel Test being run?

Laravel Test is being run with the FastCGI Process Manager (FPM) and Nginx.

Is your VPS secure?

I'm using several measures to keep the VPS secure:

  • In the repos of my VPS web applications are scripts which I use to check for dependency vulnerabilities (normally daily), and I upgrade dependencies if needed. I should set up Dependabot and GitHub Actions, but I haven't done this yet.
  • The unattended-upgrades package automatically installs security updates on a regular basis.
  • I'm using software to ban IP addresses from SSH logins after too many failed attempts, to make brute force attacks more difficult.
  • I'm using Cloudflare Tunnel, which means all web traffic between my VPS and users goes through Cloudflare, for DoS/DDoS protection. HTTP requests directly to my VPS's IP address, on standard ports, are blocked by a firewall.

EmojiBoard

Code: github.com/bt1k/emojiboard

React TypeScript Go

EmojiBoard allows users to submit emojis for others to see. Submitted emojis are stored in a PostgreSQL database. Features include:

  • Rate limiting to reduce server load in the event of many requests.
  • Database check constraint to ensure only certain emojis can be submitted.
  • Database trigger function to ensure that a maximum of 10 emoji posts are in the database at any time, to prevent unlimited growth of database size.

Laravel Test

Code: github.com/bt1k/laravel-test

PHP Laravel

Laravel Test allows users to submit short text messages, which are shown publicly. It uses a PostgreSQL database. Features include:

  • Data validation, so that only certain text inputs will be saved.
  • Each post has a "delete" button which sends an HTTP DELETE request to the back-end.
  • New posts can't be saved if at least 10 posts are already saved, so that the database can't grow infinitely in size.

Sleeping web applications

These two web applications can each take around 1 minute to load. I am using free hosting on Render which puts websites to sleep when inactive.

New Rails Blog

Ruby Rails

New Rails Blog is a simple blog website made with Ruby on Rails and a PostgreSQL database. Features include:

  • The Trix WYSIWYG text editor for writing rich text blog posts.
  • User authentication, which is required to submit a blog post.
  • Integration with Cloudinary to host images submitted within blog posts.

The reason for "new" in the name is because I made this website to replace a previous inferior blog website which I also made with Rails.

PostBoard

JavaScript Node.js Preact

PostBoard is similar to EmojiBoard above, but instead of submitting only emojis, you can submit text messages. Features include:

  • Google's Gemini artificial intelligence API is asked, with a suitable prompt, whether each submitted text message is offensive. Offensive messages are not saved.
  • Back-end written with Node.js, the web framework Express, and the Prisma ORM.
  • Preact is used on the front-end. It's a lightweight alternative to React, but the developer experience is nearly identical.

© (Current year) BT