Hi!

I'm Brett.

A full-stack developer living in Tokyo.

About Me

I have professional experience in web development with Ruby on Rails on AWS, and an interest in any and all areas of programming. Though I chose to start with web development due to plentiful high-quality free learning resources, I would love to get experience in other areas.

I began learning to code in February 2022 with The Odin Project and in November 2022 joined KidsUP (my current employer) as an English teacher. Shortly after joining the company, I was entrusted with sole responsibility for designing, developing and organizing hosting for a new event registration site to replace the incumbent Google Forms/Sheets arrangement. That site is currently in production use for KidsUP's biggest seasonal event of the year, with more than 3 000 bookings expected by the end of the event. Since completing that project I have been given responsibility for multiple other projects related to modernizing internal systems.

While solo-developing such an important site has certainly been a valuable learning experience, I am currently exploring opportunities to join a more traditionally structured development team. If you're interested in hiring a full stack web developer with a proven track record of quickly learning and improving under pressure, feel free to get in touch!

Download CV

Skills

I began learning Ruby through The Odin Project in mid-2022, and Rails shortly after. My projects for that course gave me experience with the individual components of Ruby and Rails like the MVC pattern, ActiveRecord and Ruby's 'everything is an object' approach.

In November of 2022, I brought all these skills and many more I had to learn on the fly to bear on the KidsUP Registration Site. Among many other skills, this project required me to develop a much deeper understanding of ActiveRecord. Polymorphic associations, scopes and associations with custom names all became second nature to enable the sometimes convoluted business logic linking events, time slots, options and the calculation of a total cost for each booking made.

New skills I acquired over the course of this project included testing with RSpec, using partials to keep my code DRY, creating and customizing ActionMailer mailers, creating authorization policies with Pundit, adding interactivity/SPA-like islands with Stimulus/Turbo (parts of Hotwire) and many more.

  • Related Skills
  • Hotwire
  • I18n
  • Ruby
  • Rspec

I started learning vanilla CSS in February 2022 with The Odin Project, and have used it multiple times a week every week since then. Though I've recently begun using frameworks like Boostrap to speed up basic styling, I still happily fall back to vanilla CSS whenever I need something more complex.

I'm familiar with responsive design using media queries, Flexbox and Grid, and have some familiarity with using transforms, transitions and animations to bring a page to life. I'm excited to use some of the new features coming to CSS like view transitions for a more app-like experience and container queries as an extension of media queries.

In terms of frameworks and pre-processors, I made extensive use of Bootstrap while styling the KidsUP Registration Site to match the provided Adobe InDesign mockups. I made frequent use of components like the accordion and modals to improve UX, notably combining turbo-frames and the Bootstrap modal to allow customers to preview their full booking details in a modal, then simply close that modal to resume editing it without leaving the booking page.

  • Related Skills
  • Bootstrap
  • Tailwind
  • Sass

I began learning Javascript in early 2021 as the first 'proper' language of my development journey, and have used it consistently since. Since mid-2022 all my personal and work projects have been written in Typescript, even small projects which probably don't need it, since I prefer the improved developer experience types provide. Writing Typescript after having used plain Javascript and Ruby for a year made me appreciate the appeal of strongly typed languages, and I'll likely pick up something like Go or Rust as my next language as a result.

The Setsumeikai Form project was built with React, written entirely in Typescript. It uses React Router for navigation within the form and loading data from the Seasonal Registration Site API. Testing was done with Bun's built in test runner (which uses a Jest-compatible API). I have also worked on numerous small personal projects (using Typescript) for the Odin Project, which can be found on my Github.` When interactivity is required on the Seasonal Registration site I find Rails' built in Hotwire/Turbo/Stimulus integrations to be sufficient, and have developed a reasonable proficiency with those.

  • Related Skills
  • Astro Logo Astro
  • Hotwire
  • npm
  • Typescript
  • Webpack
  • Vite Logo Vite

My experience with AWS began around March 2023, when my supervisor informed me the I would be responsible for organizing hosting for the KidsUP Registration Site in addition to my initial responsibilities. Given that my experience with AWS at that point amounted to knowing that it existed and was popular, what followed was definitely a bumpy and error filled ride. Despite that, as I write this 4 months later, the site is currently live and serving customers with no downtime to date.

After some research I selected AWS Elastic Beanstalk as the main hosting provider for the site, as it seemed to have the most documentation/StackOverflow questions to help me out and AWS' free tier allowed me to reduce costs for what was largely an exploratory project to upper management. After wading through Amazon's sea of AWS products, our site now utilizes a Postgres RDS DB instance and EC2 instance managed by Elastic Beanstalk as the main resources, with SES providing automated confirmation and update emails, S3 storing/serving large assets like images and Route 53 routing traffic from our domain the the Application Load Balancer for the Elastic Beanstalk environment.

Getting to this stage required a lot of reading documentation, as well as trial and error when documentation didn't cover the issues I was experiencing. One early issue was the numerous conflicts between the EC2 instance's gem versions/dependecies and those my app used, as well as finding an obscure issue with one gem not correctly giving permissions to its code in production. The first required learning about deploy hooks in .ebextensions, while the second was eventually solved after I found an open Github issue on the gem suggesting that rolling it back to a previous version resolved the permissions issue. Integrating S3 and SES were significantly less frustrating, but still involved processes which required a lot of reading to understand how best to utilize the AWS SDK gems for those services in the context of our site.

  • Services Used
  • EC2 Logo EC2
  • Elastic Beanstalk Logo Elastic Beanstalk
  • RDS Logo RDS
  • Route 53 Logo Route 53
  • S3 Logo S3
  • SES Logo SES

Bash/ZSH

I use an M1 MacBook Air for development when working from a school, and WSL2 when working from home. Between those two and needing to use bash for SSH to our EC2 instance, I'm familiar with simple commands like tail, cat, mkdir, rm, htop and similar. I'm also very familiar with many of Rails, rbenv and bundler's command line tools. I'm aware there's a whole world of useful commands to improve my productivity by learning here, and look forward to doing so in the future.

Git

I'm very comfortable with basic Git usage like staging, committing, pushing, pulling and managing branches using the command line. I also have some experience with merging, rebasing, managing pull requests, and using git reset to fix errors with a detached head, though those are skills which could definitely use some more development.

VSCode

I've used VSCode since I started learning to code, and have picked up a wide variety of useful shortcuts to improve my productivity, from my early discovery of multiple cursors to using shift+tab to remove large blocks of leading whitespace rather than manually creating a million cursors and mashing backspace. This is another area with seemingly infinite tricks to learn, and lately I've been trying to integrate a new shortcut into my workflow every few days in an attempt to continue improving.

WSL2

WSL2 has been a huge boon for my development journey, as when I first started I only had access to a Windows laptop, obviously not ideal given that a lot of tools/languages (like Ruby/Rails) either don't run or work poorly on Windows. WSL allowed me to learn things I otherwise couldn't have with just that laptop, and the (in the beginning at least) complete reliance on using the command line without any GUI definitely polished my skills in that regard. I can now say I'm comfortable with setting up a Rails dev environment on both Mac and (WSL) Ubuntu, and I actually wrote an internal wiki page on the latter.

Projects

KidsUp Seasonal Registrations

Registration site mobile signup Registration site home splash

KidsUP was originally using a combination of Google Forms and Sheets to handle online reservations for their seasonal events. While it worked, making a large number of bookings was an incredibly cumbersome experience for customers, and the Sheet school managers used to track those registrations would take several minutes to load, then a few more to become interactive.

I was tasked with finding a more user-friendly way for customers to register for multiple activities/options and a way of displaying those registrations to school managers in a timely manner. After presenting an early prototype to management I was given the go-ahead, with the aim of having it ready to use by mid-May for Summer School.

I was responsible for nearly all aspects of this project from start to finish, including but not limited to the initial design of the database, writing and testing all backend code, coding and styling the views and setting up hosting on AWS. Translations and design mockups were provided by other members of the online team, but ultimately implemented by me. The project was delivered on schedule, and has now served the company for two seasonal events with no major issues.

Since its deployment I have been tasked with adding many new features like built-in surveys after registration for an event, PDF invoice generation, statistics charts for various levels of staff and more. Whenever I have free time I also take the opportunity to write tests and refactor/make optimisations I simply didn't have time for during inital development. This process has greatly increased the ease of adding new features to affected parts of the site, and now that I have a bit more pull in discussions with management I always insist on timelines for new projects which leave time for TDD and writing readable, efficient code.

KidsUp Setsumeikai Form

Setsumeikai school list Setsumeikai calendar Setsumeikai calendar

The previous form customers used to register for information sessions was a relic from our old site, embedded in an iframe sourced from a site no-one had access to anymore. I was asked to replace the iframe with a more modern and responsive form, as well as create backend for staff to create information sessions and manage inquiries for them. The new backend also had to maintain compatibility with a legacy Google Sheets system which regularly queried the old backend's API for new inquiries.

I decided to create the new form in React, and use the existing Season Registrations site as the backend since staff already had access to it. The React app embedded on the Wordpress site queries the Seasonal backend for a list of schools and their associated Setsumeikais (created through the backend UI by staff), then once the user completes the form submits a POST request for the backend to create a new inquiry. That inquiry can then be managed through the backend UI by staff, and will be provided to the legacy Google Sheets system when requested through the API exposed for that purpose.

This redesign dramatically improved UX for customers wishing to register for an information sessions, especially on mobile device. It also helped staff by consolidating the processes for adding sessions and managing their inquiries into a single place. As the iframe form and assocciated database were the last things requiring the old site to be kept alive the servers for that site can now be spun down, saving the company some money as well.