NCNoah Curoe
NC

Hey, I'm Noah

I'm a software engineer and full-stack web developer, recently graduated from the University of Manitoba with a B.Sc Computer Science Major (and Mathematics Minor)!

I'm open to work in-person in Winnipeg MB, or remote across Canada.


Skills

Here's a quick look at the skills I have and the tools I know how to use.

Programming Languages & Frameworks

C# and .NET

ASP.NET Core, EFCore, SpecFlow, Blazor

JavaScript and TypeScript

React.js, React Native, Next.js, TailwindCSS, shadcn/ui, Chakra UI, Bootstrap

Other Languages

Python, C, C++, Go, HTML, CSS, SQL

Software & Tools

Git & Project Management

GitHub, GitLab, Perforce, Jira, Notion

Development Environments

Visual Studio, VS Code, IntelliJ IDEA, Unity

Hosting

Vercel, CloudFlare, AppWrite, Pocketbase

Operating Systems & Environments

Desktop

Windows, MacOS, Linux

Production

Docker, Proxmox VE, VMWare ESXi, Portainer

Automation

GitHub Actions, GitLab CI


Work Experience

I've had the amazing opportunity to work at some great companies and learn from some amazing people. Here's a quick look at what I worked on!

Inworld AI

Mountain View, CAMay - Aug 2023

Inworld Logo

I had the incredible opportunity to work at Inworld AI, a startup in Silicon Valley building tools for integrating AI into video games and other virtual experiences.

At Inworld, I independently built a turn-based RPG game demo in Unity to showcase the capabilities of the Inworld AI platform and help find areas of improvement for the Inworld Unity SDK. Over the course of four months, I built a full game demo with a unique NPC conversation mechanic which allowed you to speak to NPCs with free-range text input and have NPCs generate responses in realtime using the Inworld LLM engine. This conversation mechanic was integrated into the game's unique battle system, drawing inspiration from games like Undertale.

While creating the game, I developed a game design document detailing all details of the game demo I was developing, including details of the game's story, mechanics, interface elements, and deadlines. At the end of the internship, I presented and showed a demo of the game to the rest of the company

Custom inventory UI for equipment, consumables, and stat points.

Greenline (BLAZE Canada)

Vancouver, BCSept - Dec 2022

Greenline Logo

At Greenline, I directly contributed to all parts of the Point-of-Sale system used by hundreds of cannabis retailers across Canada. I built new endpoints in our Node.js backend to support new frontend functionality and React components which improved workflow efficiency for point-of-sale operators. For any new UI changes, I worked with our design team to mock new features and ensure they were robust and effective tools for our customers.

I was also tasked with handling tier 3 technical support for customers. I used tools like Sentry and AWS CloudWatch to monitor and investigate issues reported by customers, debug and fix these issues, and push these fixes to production.

When I started at Greenline, our web management dashboard had no automated tests. During one of the companies' hackathons, I independently explored the Jest testing framework and built the starting foundation for implementing unit tests and integration tests in our web frontend moving forward.

Ubisoft Winnipeg

Winnipeg, MBJan - Apr 2022

Ubisoft Winnipeg Logo

At Ubisoft, I worked with the Ubisoft TG teams in Winnipeg and Montreal to help build a tool to increase Jira workflow productivity for game asset designers. I developed backend logic in ASP.NET for a node graph Jira automation system including implementing custom node graph error validation logic and Jira integrations.

I also helped improve robustness of the Vue.js frontend and investigated improvements to development and integration testing workflows by reverse engineering the Jira licensing process to determine how to automatically license new Jira deployments inside Docker containers.

Finally, before finishing my work term at Ubisoft, I worked with the QA team to build a new integration testing framework using SpecFlow, including building custom Gherkin language features.

At every step of the way, I was working with an experienced product design team to ensure that new features were intuitive and met user experience standards. I also frequently presented code reviews and progress updates to my team and other teams inside Ubisoft, including presenting at the Ubisoft TG All Hands meeting with hundreds of Ubisoft members from Winnipeg and Montreal, as well as at the Ubisoft Winnipeg Studio All Hands meeting.


Projects

I love to do projects to expand my skills and learn new things. Below are a mix of personal projects I've worked on in my free time, and a selection of my best term projects from my degree. Don't be fooled! Even if it's a course project, I always look to push the limits of the requirements to build something unique.

Full-Stack and Web

TotalFormat: In-Browser File Formatting Tool

To keep my skills sharp over the summer, I decided to dive into creating a product using recent, cutting-edge web technologies. TotalFormat is a tool which allows users to convert audio, video, and image files between different formats right in their browser. Unlike other available solutions, TotalFormat uses WebAssembly to run the conversion logic directly in the browser, meaning that your files never leave your computer.

With the goal of creating a user-friendly, polished, and feature complete product, extra care was taken to create a clean and intuitive user interface with a thorough landing page outlining the features of the tool. The project is currently in the final stages of development, with the conversion logic fully implemented and the UI nearing completion, and should release later this year.

Landing page with product overview.
File selection with file dropzone or browse dialog options.
Conversion options available for each source format.
Conversion progress updates in real-time.
Landing page with product overview.

Cumulus: Cloud Game Hosting Solution

For my undergraduate Computer Networks term project, I worked with my partner to build the foundation for a cloud game hosting solution. The project allows users to deploy new Minecraft game servers to Hetzner just a couple button presses, then offers server management through a web interface.

The novelty of this project was to use WebSockets to allow the browser to communicate directly with an agent (written in Go) that is installed on each individual cloud server, rather than have all communications proxied through a primary node. This removes the single point-of-failure in typical solutions and reduces overhead costs for a business using this solution, as new game servers can be deployed on-demand without needing to lease full dedicated servers ahead of time. The project received a 100% final grade.

Markdoc

After being endlessly frustrated trying to create resumes with Microsoft Word and fighting with it's inconsistent formatting, I decided to built my own tool, Markdoc, to create resumes and other documents using Markdown.

The tool gives a fully-featured text editor using Monaco, full styling support using CSS, and a live preview. The tool also has a customizable export function, streamlining the process of creating tailored resumes for different job applications. This is easily the most challenging web interface I've designed yet, as supporting resizable panes, properly isolating and resizing the live HTML preview, and exporting documents without formatting issues are quite challenging when using web technologies.

GENKI Companion

About a year into my degree, I wanted to learn more about modern web technologies as I only had experience with Blazor which, at the time, was still in preview and not very performant as WASM was still in it's infancy. I decided to learn React by building a quizzing tool for content in my GENKI Japanese Textbook as I had been taking a intro Japanese course at the time.

The website is a simple client-side web application built using basic React.js and features quizzable content from all of the GENKI textbook chapters that were covered in my Japanese course. This includes vocabulary, grammar, conjugation and translating between Romaji, Kana, Kanji and English.

SDSetup

My first large-scale project. In the early days of Nintendo Switch homebrew, collecting all of the software you needed to run custom programs on your Switch was a pain. You had to navigate to dozens of different GitHub repositories, download the latest release, configure everything yourself manually, and hope there weren't any compatibility issues.

To fix this I built SDSetup, a website made with Blazor and ASP.NET that would automatically generate a custom zip file with all of the latest homebrew software for your Switch, along with all of the necessary config files. A user would simply check off which software they wanted to download, and they'd get a zip file ready to extract to their SD card. The site was a huge success, averaging over 40,000 monthly users.

Games & 3D Graphics

For my undergraduate Computer Graphics term project, I implemented a demonstration in C++ and OpenGL showing how shell texturing could be used for a variety of graphical effects including grass, clouds, fur, features, and bumpy surfaces.

The demo exposes all parameters of the simulation in an ImGUI-based properties panel to allow the user to experiment with creating different graphical effects. The demo also supports loading arbitrary .obj files using a custom Waveform OBJ and MTL parser, allowing the user to apply shell texturing to any parts of any model that they wish to experiment with the effect. The project, presentation and report was well received and received an A+ final grade.

Simple scene with shell-textured grass and polar bear fur.
Polar landscape with shell-textured snow and polar bear fur.
Hellish landscape with shell textured ground surface.
Attempt at distinct feathers on wings and tail.
Clouds with the illusion of volume using shell texturing.
A grassy field in the style of The Legend of Zelda: The Wind Waker.
Simple scene with shell-textured grass and polar bear fur.

Goose Hunt

For the 2023 .devClub Hackathon, I worked in a team of 5 to build Goose Hunt, a Duck Hunt clone for the Nintendo Switch written in Lua using the LovePotion homebrew library. In particular, I worked on implementing motion controls for the game using the gyroscopic sensors in the Joy-Cons.

I also helped out with HUD design and implementing the game loop, while others worked on art, sound design, story and other game logic. The game was built in just 48 hours and was a great success at the hackathon, winning the top prize. The game is available for download and can be played on any modded Switch.

Galactic Civilizations

For the 2022 CSSA Game Jam, I worked independently to build Galactic Civilizations, a rudimentary clone of the classic game Galcon with an added planet production upgrade mechanic. The game was built in Unity using C#.

Given the 48 hour time limit for the game jam, the visuals are basic and scope of the game is fairly small. Regardless, this game served as my first attempt at programming opponent AI using an opportunity cost approach, and presented a unique user experience challenge with implementing planet selection controls. Though the final result is simple, it is quite fun to play!

OreConfig for Minecraft

With the 1.16 update for Minecraft, Mojang overhauled world generation in such a way that made it much more difficult to change ore generation features at runtime. For many modpack creators, this is a big problem as they rely on custom ore generation settings to tweak the difficulty of their modpacks.

I decided to delve into the new world generation system and learn how to modify the new feature generation engine. After some poking around and reverse engineering the new system, I built OreConfig, a mod for Minecraft that allows modpack creators to easily customize ore generation through a simple configuration file. The mod was the first of its kind to support the new ore generation system, and has racked up over 1,500,000 downloads!


Community Work

In 2023, I ran for Director of Events on the Computer Science Students' Association (CSSA) at the University of Manitoba. I was elected, and I helped organize several events throughout the year. I also worked to improve the CSSA's outreach abilities and technical infrastructure. Here's a short overview of what I worked on.

CSSA Website

When I joined the CSSA, our website was built on fragile remnants of a convoluted Jekyll theme. I helped spearhead the initiative to rewrite the website from scratch using React.js and Chakra UI before handing it off to another committee to maintain.

At the end of my term, we decided to migrate to Next.js to improve loading speeds and to make it easier to securely make external API calls for certain website content. I ported the existing website to Next.js and rewrote every component to use TailwindCSS and shadcn/ui to improve maintainability for future executive teams.

Capture the Flag

The first major event I planned for the CSSA was a Capture the Flag tournament. Along with the rest of the team, I developed custom challenges related to binary and web exploitation, reverse engineering, and digital forensics.

I handled setting up all of the technical infrastructure required for the event, including leasing a dedicated server and setting up Proxmox and Portainer, configuring Docker containers with inetd to host binary exploitation challenges over netcat, and setting up a CTFd instance to host the challenges and scoreboard.

Goosies Awards & Ticketing Tools

At the end of the year, we wanted to hold an awards night for the amazing instructors and professors at the University of Manitoba. I focused on building out the required tools for selling and scanning tickets for the event.

We used Square to sell tickets for the event. Then, using the Square Orders API, I built a custom ticket generation tool which creates ticket QR codes and generates emails for each customer. I then designed a simple ticket scanning tool using Next.js and shadcn/ui to scan tickets at the event.

Livestream Infrastructure & AV Equipment

One of my platform promises was to make CSSA events more accessible by recording and livestreaming our events whenever possible, in particular for our general meetings. With a budget of only $800, I researched and procured all necessary AV equipment to both livestream/record our events, and to make our AV setup better for in-person events.

The end result was a custom built AV cart with a projector, wireless microphone set, audio mixer, audio booster and speakers. The build was designed to allow easy setup with OBS Studio for livestreaming and recording, and to allow for easy transport and storage of the equipment. I even custom-built the cart itself, using a cheap garage shelf with casters attached to the bottom!

Lounge Door Sensor

The CSSA has a lounge space for students on campus, but one issue we had was that there was no easy way to know whether a supervisor was around to have the lounge open. I decided to build a simple door sensor using an ESP32 board, a distance sensor and a switch. The board detects if the door to the lounge is open, and after a short delay will send a message to the CS Discord server to notify students that the lounge is open.

The source code is fully available on GitHub with a detailed README on how to set up the ESP32 board. Wiring diagrams are available, and the project was designed to be fully buildable on a mini breadboard with no soldering required.

HonkBot

The CSSA helps run a Computer Science Discord server for students, but we needed custom verification and moderation tools to help us comply with University policy and ensure we could adequately act on cases of academic misconduct or harassment.

To tackle this, I created HonkBot, a custom Discord bot that integrates with our University's email system. This allows us to ensure only students are able to join the Discord server, and lets us link Discord accounts to student identities to enable enforcement of academic misconduct and harassment policies, helping make our Discord server a safer place for students. I also implemented custom moderation tools like a Vote Ban system that allows server moderators to collectively act on clear rule violations without needing to wait for an administrator to step in.


Contact Me

Like what you see? I'm open to work and would love to join your team! Please reach out by email at [email protected]

You can also find me on the following platforms: