nzbasic.com Open in urlscan Pro
2606:4700:3031::ac43:d897  Public Scan

Submitted URL: http://nzbasic.com/
Effective URL: https://nzbasic.com/
Submission: On December 27 via api from US — Scanned from DE

Form analysis 0 forms found in the DOM

Text Content

You need to enable JavaScript to run this app.

James



nzbasic

Home

Skills

Projects



HOME





HI, I'M


JAMES / NZBASIC


I'M A SOFTWARE ENGINEER WITH AN INTEREST IN FRONTEND DEVELOPMENT, DATA
VISUALISATION, AND DEVOPS.

jamescoppard024@gmail.comnzbasicJames Coppardbasic#7373nzbasicnzbasic



TOTAL SERVICE REQUESTS (7D)

Requests: 4,719,426

Bandwidth: 10.55 TB

Page Views: 5,436




PAST ROLES


PORTAINER.IO


QUALITY ASSURANCE ENGINEER


NOV 2020 - NOV 2022

A New Zealand based startup creating container management software.


RESPONSIBILITIES

 * Writing manual tests for new features in Docker, Kubernetes, and Nomad
   environments.
 * Developing automated tests using cypress.


EDUCATION


BACHELOR OF ENGINEERING (HONS)


SOFTWARE ENGINEERING


UNIVERSITY OF AUCKLAND


AWARDS

 * UoA Engineering Final Year Project Winner (Web Tools & Applications)


HOBBIES

 * Yoga
 * Rhythm Games
 * Software Projects
 * Custom Keyboards


HERE ARE THE TECHNOLOGIES I USE

Updated November 2022
Backend

Go

Java

NestJs

NodeJs

Python
Frontend

Angular

NextJs

React

TailwindCSS
Fullstack

C#

GraphQL

JavaScript

TypeScript
DevOps

Docker

Kubernetes

Nginx
Database

MongoDB

SQLite
Enjoyment

Experience


PROJECTS


BATCH BEATMAP DOWNLOADER

Repo


DESCRIPTION

A standalone application and API for mass downloading osu! beatmaps.

The project consists of an API (Golang) and an application (Electron) with
visual query builders to make it easy for osu! players to downloads lots of maps
that fit a certain criteria.


ROLE

Sole Developer


MOTIVATION

Outside of a few peer hosted torrents, there was no easy way to download a lot
of beatmaps at one time. Users usually download maps one at a time using the
osu! client or through the official website which was very arduous.


CHALLENGES

Data egress costs would been enormous if I decided to use a cloud solution such
as AWS S3, and Cloudflare R2 was not available at launch. To overcome this
initially I decided that the best solution was to host them myself because I
already had an excellent internet connection.


ACHIEVEMENTS

 * Serving over 1.5TB of data in a single day
 * Serving over 2 million beatmap sets in a month
 * 25,000 app downloads
 * 50 stars on GitHub


TAKEAWAYS

 * Cloud egress data rates are extremely expensive.
 * Hosting yourself and building a server rack is really fun.
 * Live metrics and analytics are awesome for monitoring a service.


SCREENSHOTS

Home
Server Status
Simple Query
Advanced Query




LIVE SERVER STATUS

Current Usage
0 Active Downloads
0Mpbs
Daily Stats
0 Beatmap Sets Downloaded
000.00GB Downloaded
000 Completed Downloads


TECHNOLOGIES - API

Database

SQLite

Cloudflare R2
Backend

Go
DevOps

Docker


TECHNOLOGIES - APPLICATION

Frontend

React

TailwindCSS
Fullstack

TypeScript
Backend

Electron


OSUTRACKER

RepoDeployment


DESCRIPTION

osuTracker is an online web tool that tracks osu! daily statistics of any player
who signs up. It also offers a unique overall view of each country, including
the top 100 plays history and top 10 players over time.


ROLE

Sole Developer


MOTIVATION

Initially I just wanted to track data for a few of my friends so that we could
look back later and see our full daily history in osu!. Officially, the website
only displays the last 90 day rank history, which misses out on a huge amount of
extra data points. After building a simple app for my friends, I realised that
there was a huge potential in storing granular data for more players so that in
the future I could analyze long term trends.


CHALLENGES

osuTracker was the first real website that I built for other people to use. I
had to learn a great deal about every part of the development process, including
frontend, backend and deployment.

The biggest problem I had was scaling against API limitations. osu! only
officially allows around 60 requests per minute, and I was scaling to tens of
thousands of users while also running other applications for the same API. To
solve this, I developed an API proxy and client that would cache requests and
make sure that requests from any of my services would not exceed the limits.


ACHIEVEMENTS

 * 25000+ Total users
 * 3000+ Active monthly users


LESSONS LEARNED

 * Store everything. Storage is cheap and data is powerful.
 * Use TypeScript.
 * Cloudflare is awesome for free SSL, analytics and DNS.
 * You need to use a reverse proxy to host multiple services from one address.


SCREENSHOTS

Home
Player Stats
Player Score-History
Country Stats
Country History
Stats




TECHNOLOGIES

Frontend

React

TailwindCSS
Fullstack

TypeScript
Database

MongoDB
DevOps

Docker
Backend

NodeJs


MĀORI PRONUNCIATION DICTIONARY BUILDING TOOL


DESCRIPTION

The Māori Pronunciation Dictionary Building Tool is a project to create a
comprehensive dictionary of Māori words and their pronunciation for use in
Text-to-Speech services.


ROLE

Co-Developer (Two person final year university project)


MOTIVATION

This project was my final year project for my engineering degree which involved
a year of research with a partner. Our motivation was to help in the creation of
the first speech synthesis tools for Māori as a way to aid in revitalising the
language.


CHALLENGES

I had no prior experience with the Māori, so I had to spend a great deal of time
researching everything about its orthography and phonological rules. Thankfully,
Māori pronunciations were usually predictable and followed a simple set of
rules.


ACHIEVEMENTS

 * Best in category award (Web Tools & Applications) for final year engineering
   projects at the University of Auckland
 * 95% pronunciation generation accuracy


LESSONS LEARNED

 * Legacy code is hard to work with and rewriting is worth the time.
 * You don't need to know a language in order to study its pronunciation rules
 * Robust drag and drop interfaces are quite hard to build but it is worth it
   for improved UX.


SCREENSHOTS

Browse
Quick Add
Bulk Add
Export
API Docs




TECHNOLOGIES

Backend

Python

Go
Frontend

React

TailwindCSS
Fullstack

TypeScript
Database

MongoDB
DevOps

Docker


SIMULATE EXCHANGE

Repo


DESCRIPTION

A stock exchange simulation tool for practicing with high frequency trading
bots.

The website provided a way to create an isolated exchange with custom trading
instruments with the option of inviting other users to compete on a leaderboard.


ROLE

System Architect and Frontend Developer.


MOTIVATION

We had just previously in an online automated trading competition held by Jane
Street and we had a lot of fun, so we wanted to build our own exchange
simulation tool. When a university project came up where we had full control
over the groups, tech stack, and project idea, we thought it was a great
opportunity to develop the tool.


CHALLENGES

The stack for this application was quite insane. An exchange matching engine was
developed in C++, a trade generator in Python, and the website in
Typescript/NestJs/NextJs. Each exchange required its own matching engine and
trade generator which would need to be publicly exposed and only accessible by a
user

As the system architect, it was my job to design a system to make all of these
services work, communicate, and scale together. To achieve this, I developed an
orchestrator application that would act as an internal service and would
communicate with the Docker API to scale the containers for the exchanges and
then report back to the client with connection information.


CONTRIBUTIONS

 * System architecture design
 * Docker orchestration tool
 * Deployment
 * Frontend dashboard design and development


LESSONS LEARNED

 * Going overboard and over engineering a solution can be fun with the right
   people.


SCREENSHOTS

Dashboard
Architecture




TECHNOLOGIES

Backend

NestJs

Go

Python
Fullstack

TypeScript

GraphQL
DevOps

Docker

Nginx
Frontend

NextJs


PLATFORMPI TIME TRACKER


DESCRIPTION

An employee time tracking tool built for a client's business (TechTALK,
PlatformPi).

The application allows users to sign up, create their own organisations, invite
employees, assign supervisors, and submit and manage time sheets.


ROLE

Scrum Master and Fullstack Developer


CHALLENGES

As the scrum master, it was my responsibility to plan and run sprints for my
team of 8 developers (including myself). It was the first time I had taken this
type of role which resulted in a pretty rough start. Planning enough tickets for
each developer on the team each week was quite difficult so I had to spent a lot
of time each sprint in backlog grooming.

I also had two members of the team who did very little work and were hard to
communicate with and their membership on the team was out of my control. This
resulted in me and one other developer picking up all of the extra work which
added more stress to the team.


CONTRIBUTIONS

 * Live chat system using WebSockets
 * Support for multiple organizations
 * Time sheet entry approval and editing system
 * Deployment


LESSONS LEARNED

 * Sometimes you just have to put up with people who are hard to deal with.
 * GraphQL is a cool technology but the initial setup cost is very high.


SCREENSHOTS

Supervisor Approvals-And-Chat
Supervisor Dashboard
Supervisor Entries
Employee Dashboard-And-Notifications
Employee Timesheet
Org Admin-Management




TECHNOLOGIES

Frontend

React

TailwindCSS
Fullstack

TypeScript

GraphQL
Database

MongoDB
DevOps

Docker
Backend

NestJs


COLLECTION HELPER

Repo


DESCRIPTION

A collection management application for osu!.


ROLE

Sole Developer


MOTIVATION

I wanted to create a tool that would help me to sort my beatmaps into
collections in osu!. I thought it would be cool to have a code editor inside the
application that would let people write functions in javascript that could read
the contents of a map to decide if it would go in a collection.


CHALLENGES

When I first developed the application I was using a framework called Wails
because I wanted to learn Golang and Angular and I had seen that it would
support it. It turned out that Wails uses MSHTML to display web content which is
the engine for internet explorer. I had to use hacks everywhere to get modern
features to work which ultimately ended up in me swapping to Electron out of
frustration.

osu! database files were also written in binary which made it quite awkward to
parse with a NodeJs backend


ACHIEVEMENTS

 * 6k Downloads
 * Full Russian internationalisation support


LESSONS LEARNED

 * Angular isn't as bad as people make it out to be
 * Critically think about framework and language limitations before diving into
   a project.


SCREENSHOTS

Collections
Custom Filter
Collection Editing




TECHNOLOGIES

Frontend

Angular

TailwindCSS
Backend

Electron
Database

SQLite