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
Effective URL: https://nzbasic.com/
Submission: On December 27 via api from US — Scanned from DE
Form analysis
0 forms found in the DOMText 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