🟢 Open to Co-op Opportunities · January or May 2027 Open to Co-op · Jan or May 2027

Hi, I'm Jonathan.

I'm a 3rd-year Electrical Engineering student at Carleton University.

I'm passionate about hardware, wireless systems, robotics and artificial intelligence.

A bit about myself

I grew up in Ottawa with a longstanding interest in how things work at a physical and mechanical level. That curiosity shapes how I approach engineering throughout my studies and personal projects. I like taking an idea from a rough sketch to something that actually works, testing it until it breaks or reaches its limit, figuring out why, and then fixing it properly. I've picked up a broad set of practical skills that way and constantly try to gain more experience in whatever ways I can.

Outside of school, I work as a lifeguard, swim instructor, and first aid instructor with the City of Ottawa. I've coached and competed nationally in speed skating, and between work and sport I've built up strong interpersonal and self-development skills. I also have an interest in personal finance and economics, which has grown into a broader curiosity about practical AI and where it genuinely fits into engineering and finance, rather than the superficial hype around it.

Check out my builds!

A growing list of projects and challenges I've tackled. Click Learn More → on any card for the full story.

Modular Bicycle Lighting System
PROJ-01

Modular Bicycle Lighting System

Designed and built a weatherproof RGBW lighting system for bicycles using a custom PCB coupled with Arduino and Adafruit components.

KiCadPCB DesignC++ / ArduinoCAD + 3D Print
Learn More →
Electric Go-Kart
PROJ-02

Electric Go-Kart

Built a 1.6kW electric go-kart from a hand-built steel frame to a complete electrical power system.

Three-Phase SystemsMotor ControlMetal WorkingFabrication
Learn More →
Power distribution board layout for the RC aircraft
PROJ-03

Avionics & Power Distribution PCB for RC Plane

Building the flight controller, power system and wireless control for a twin-motor RC aircraft team project.

AltiumPCB DesignSTM32ExpressLRSPower Electronics
Learn More →
Orange Pi Zero 3 on My Desk
PROJ-04

Full-Stack AI Secretary For Enhanced Personal Decision Making

A self-hosted AI secretary that merges my email, calendar and investments into one prioritized daily brief, shown on a web dashboard and an ESP32-driven LED wall.

Node.jsSQLiteLinuxESP32APIs
Learn More →
MOSFET-switched roof rack lights beside two ESP32-C3 LoRa nodes on a breadboard
PROJ-05

Smaller Builds: Vehicle Lighting & LoRa Network

Two smaller hands-on builds: MOSFET-switched high-power lighting for my car, and a growing LoRa radio network on ESP32-C3 boards.

MOSFETsLoRaPower ElectronicsRFSPI
Learn More →

Industries that interest me

Cutting-edge robotics

Cutting-Edge Robotics

Legged and humanoid robots closing the gap between lab demos and real-world deployment. I'm most interested in advancements with actuator technology and integrations with machine learning.

RF and space communications

Wireless & Space Communications

6G and IoT requirements are pushing wireless communication to its limits. I'm fascinated by satellite constellations and keen to understand antenna design and the many ways wireless links can be used.

AI and AGI datacenter

Machine Learning & AGI

Looking past the buzzwords, I am excited to see the real use cases for AI systems within certain sectors like transport, industry, chip design and global finance. I try to pick up new tools as they become available and learn how they can grow into powerful personal and corporate systems.

Contact

Let's connect.

I'm looking for a co-op starting January 2027 (8 to 12 months) or May 2027 (up to 16 months). Always happy to talk about a project, a role, or just electronics and technology in general.

← Back to projects
PROJ-01

Modular Bicycle Lighting System

2022Timeline
Solo ProjectRole

The Idea

I created a PCB layout for a personal project of mine. The aim was to build a novel, programmable, and controllable RGBW lighting system for my bicycle and electric scooter. The intention was to potentially commercialize the final product, since I felt there weren't any options on the market providing the same functionality.

Prototyping the Idea

I started prototyping with raw wires and generic component boxes. Over a few iterations, I added features like chimes and signal clicks, then removed them once I decided they were unnecessary.

prototype v1
Fig. 1 — Layout V1, first prototype
prototype v2
Fig. 2 — Layout V2, compact circuit

Designing the PCB

I designed the PCB in KiCad to support the control module (an Arduino Nano) and have all the required connections in functional locations for final assembly. This was based on the circuit layout I developed during the prototyping phase. The process involved learning how to use the PCB design interface and researching best practices for vias and hole tolerances for various components. It was useful to cross-reference by measuring pin diameters with a precision caliper at home to make sure no major mistakes were being made.

pcb raw
Fig. 3 — Raw PCB as received
pcb populated
Fig. 4 — Components being added

Assembly & Testing

Before combining everything with the 3D printed casings, I ran the assembly through a couple of testing phases. The first pass was missing the physical switches, which I simulated with keystrokes on the Arduino-connected laptop while programming. That stage also included soldering the Adafruit NeoPixel strip boards onto the outer portion of the pixel design. The final circuit shown below includes the real switches and was tested exactly as it would be used on the bike.

final circuit
Fig. 5 — Final circuit assembly on PCB

Hardware & Mounting

Next, I needed to make sure the system was weatherproof for rainy days and outdoor storage. I designed three different casing models in CAD and 3D printed them for front, rear, and a compact version aimed at scooters or racing bikes. The circular case uses the same PCB as the linear one, though the connections for the side NeoPixel strips are simply left unused on that version.

The design was originally meant to be easy to construct and produce, simple and scalable enough to sell at a reasonably competitive price. I never ended up trying to sell any, mainly due to cost and manufacturing time, even though the final design came close to being a finished product.

casings
Fig. 6 — Different casing designs (front, rear, compact)

Takeaways

This took an idea from loose wires to a finished, weatherproof light I actually used on night rides. As my first solo PCB and CAD design, it taught me to check hole sizes and tolerances against real parts before ordering, and to prototype and test in stages before committing to final hardware.

← Back to projects
PROJ-05

Smaller Builds

Not every project needs its own page. These are two smaller builds, each centred on one specific thing I wanted to learn.

Part 1

MOSFET Switched Off-Road System

The Problem

I wanted to retrofit some high-powered LED lights onto the roof rack of my vehicle. I researched ways to connect this system to an existing Arduino I already had installed in my dash for modular projects like this. I settled on using MOSFET components to act as quick-response relays for flash patterns, connecting the system to a switched fusebox source through the MOSFETs. The whole system is button-controlled via the Arduino, since using a microcontroller let me build more complex rapid flash patterns based on button presses and switch sequences.

Initial Design

I first designed a rough draft of the circuit on paper based on my research into MOSFETs and Arduino pin control. This served as a template for prototyping the circuit.

hand sketch
Fig. 1 — Hand-drawn sketch of wiring and plan

Prototyping & Testing

I assembled the design on a breadboard and tested it with a modular power supply to make sure there wouldn't be any issues with overloading or heat dissipation once it was fully installed on the car.

installed lights
Fig. 2 — Final install, static yellow mode

This project still serves me during the summer months, and I've since tweaked the design to be more easily removable with modular weatherproof connectors that I soldered onto both the car wiring outputs and the roof rack connections.

Along the way I learned practical power electronics: choosing MOSFETs as fast switches, prototyping on a breadboard before anything touched the car, and testing for heat across the -35°C to 40°C range a vehicle can see. I also learned how to wire safely into a car's existing fusebox with the proper fuses and load resistors.

Part 2

LoRa Node Network

Why LoRa

RF and wireless communication are the parts of electrical engineering I'm most curious about, and this project is my first real chance to learn them hands-on instead of from a textbook. I picked LoRa because it trades data rate for long range and very low power, which suits small battery-powered nodes that only need to send a few bytes at a time.

Each node pairs an ESP32-C3, chosen for its low power draw, with an SX1276 LoRa transceiver on the 915 MHz band, connected over SPI.

The First Link

I started with both nodes on the same breadboard, which let me get the SPI wiring and radio settings working with everything in one place before distance came into it.

Two ESP32-C3 boards on one breadboard, each wired to an SX1276 LoRa radio module
Fig. 3 — Both nodes on one breadboard: two ESP32-C3 boards, each wired to its own SX1276 radio

Now that the two are reliably passing messages, I'm wiring one to its own 18650 lithium-ion cell so it can run untethered as the first independent node, for range testing and measuring signal strength, noise and packet loss as the nodes move apart.

After that, the plan is a 4 to 5 node network where each node carries its own sensors, starting with motion sensing. That's where the real networking problems start: frequency hopping across the 902 to 928 MHz band, keeping nodes in sync, and handling messages that collide or never arrive.

← Back to projects
PROJ-02

Electric Go-Kart

2019Timeline
2-Person TeamRole

The Idea

An earlier project of mine was inspired by Formula One, when a friend and I wanted to take on the challenge of building a soapbox racing kart just for fun. It quickly evolved into a fully-fledged 1.6kW powered metal machine and taught me a lot about three-phase motor control and manufacturing.

Frame

The frame was initially planned out using wood beams cut to size, to check the size and maneuverability of a simple rectangular box with bracing. Once the design was proven to work conceptually, the whole kart was cut from rounded square box-section steel with sheet metal for the flooring. With limited tooling, this proved to be a real challenge even with careful measurement. You can see the repurposed kid's bike wheel below, standing in as a makeshift steering wheel while we tested rolling resistance and steering angles.

frame assembly
Fig. 1 — Mostly assembled frame (with a repurposed kid's bike wheel standing in as the steering wheel during testing)

Power System & Electronics

The power system consisted of four 12V lead-acid batteries, generally used for emergency lighting systems, wired in series. These provided the necessary voltage to the 1.6kW-rated motor controller. The motor is normally used for large garage door mechanisms or electric outboard motors for boats, but the mounting plate and torque ratings made it a good fit for this application. The gear ratio was chosen for low-speed pickup and rougher terrain use, since it multiplied the torque almost tenfold. That meant the real challenge became keeping the motor running near its max RPM and current rating for any mid to high-speed cruising at that gear ratio, and we ran into plenty of issues with chain tensioning and brackets bending under heavy acceleration.

battery pack
Fig. 2 — Assembled battery pack
motor assembly
Fig. 3 — Motor assembly

I ended up having to research and swap out the actuator pedal for the motor controller so it had a larger analog travel range. The original one was nearly impossible to map into smooth RPM increase, even with a lot of practice, and since there was no way to reprogram the controller itself, replacing the pedal was the easiest fix for the jerky acceleration.

Final Result

With the electronic controls in place and some torque and power delivery optimizations, my friend managed to hit 49 km/h in a straight-line test on paved road, not bad for a build carrying a 200+ lb driver. Under more regular use, like cruising around neighborhoods and parks, the 15 Ah battery pack gave us 3 to 5 hours of stop-and-go runtime. We looked into adding regenerative braking to recharge the battery as a generator, but it quickly became clear the extra three-phase battery control hardware needed would blow past our budget.

final gokart
Fig. 4 — Final construction

Takeaways

This was the first project where I combined mechanical fabrication with electrical systems, and it's the one that pointed me toward electrical engineering. Fixing the jerky throttle and the power delivery issues taught me to troubleshoot by trial and error when I couldn't change the controller itself.

← Back to projects
PROJ-03

Avionics & Power Distribution PCB for RC Plane

OngoingTimeline
Electronics TeamRole

The Project

I lead the power distribution hardware and flight-controller electronics within our three-person electronics subteam, part of a larger project team of six people building a twin-motor RC aircraft. A multi-motor airframe is hard on its electronics: big motor current draws, voltage spikes when the motor controllers switch, and enough electrical noise to mess with GPS and other sensors if the power system isn't handled carefully. So before touching the flight computer, my first job was a Power Distribution Board (PDB) that takes raw 4S battery power and puts out clean, separate rails for everything downstream.

Power Distribution

The board splits the battery into four rails:

  • Raw power straight to the motor controllers
  • 12V rail for video gear and other extras
  • 5V rail for the flight controller, servos, and radio receiver
  • 3.3V rail just for the IMU and other sensitive sensors
Power distribution board schematic: 12V, 5V, and 3.3V regulator stages
Fig. 1 — The regulator schematic: three rails plus the battery input

I designed and laid out the 4-layer board in Altium Designer, my second real PCB overall but my first time using Altium. Before sending it off to be made, I had a teammate review it, which turned up a few real problems worth fixing now: the 12V regulator is a linear part (it just burns off the extra voltage as heat instead of stepping it down efficiently), so it can't hold up once the battery sags under heavy motor load, there's nothing yet to absorb the voltage spikes the motor controllers throw off, and we also figured it would be more convenient to mount detachable XT30 or 60 connectors instead of the big ESC solder pads.

3D render of the power distribution board
Fig. 2 — The board, rendered in Altium

What's Changing for V2

Here's what I aim to fix with the next design: the 12V regulator swaps from that linear part to a buck converter, so it stays regulated even as the battery sags under heavy motor load and wastes a lot less as heat. I'm adding a diode and a bulk capacitor across the battery input to catch the voltage spikes the motor controllers throw off before they reach anything downstream, plus small decoupling caps right at each regulator's input pins to keep switching noise contained near the source instead of spreading across the board. The output capacitors on that rail are also getting bumped up to a higher voltage rating for more margin. And the high-current paths are moving from routed traces to solid copper pours tied together with vias, which spreads the current and the heat out more evenly.

Flight Computer

The flight computer is built around an STM32, which will handle the motor and servo outputs, read the IMU and GPS, and run the control logic for autonomous flight. The toolchain is up and running, and I've got the 9-axis IMU wired in and being tested on the bench; next is bringing in the GPS module and building out the actual flight-control code.

STM32 dev board wired to a BNO085 9-axis IMU on a breadboard
Fig. 3 — Bench-testing the STM32 against the IMU before it goes on the plane

Radio Link

I set up and tested the plane's radio link using ExpressLRS (ELRS), with a RadioMaster Pocket transmitter talking to a RadioMaster RP4TD receiver. It's bound, holding a stable connection, and reading all 16 control channels cleanly. Left to do: mapping which stick and switch drives which channel, soldering permanent wiring, and connecting the channels to actual servo and motor control.

Testing the RadioMaster Pocket transmitter and RP4TD receiver link
Fig. 4 — Testing the RadioMaster Pocket / RP4TD radio link

Where It Stands

V1 of the power board is designed and reviewed, with the V2 fixes above planned. The flight computer toolchain and the radio link both work, with the sensors and motor/servo control next.

← Back to projects
PROJ-04

Full-Stack AI Secretary For Enhanced Personal Decision Making

OngoingTimeline
Solo ProjectRole

The Idea

I have always wanted something closer to an actual personal secretary than a chatbot: a system that understands what's actually on my plate and helps me manage it, not just answer questions when I ask. That means real calendar awareness, real deadline pressure, and a sense of priority: what's genuinely urgent today versus what can wait. A side benefit is that I'm not re-explaining my own schedule and context to some AI tool every time I open a new chat. The system already knows.

I built a backend that pulls my Gmail, Google Calendar, investment holdings, and school deadlines into one place, and turns that into a single prioritized brief every day. The part that actually makes it feel like a secretary rather than a dashboard is memory: it tracks what it's already shown me, what I've dealt with, and what's still open, so it only surfaces what's new or genuinely still urgent.

V1: Hermes

For the first version, I installed and configured Hermes, a self-hosted AI agent that operates through existing LLM providers' API keys. I set up its plugins and markdown configuration files around the tasks I actually wanted automated day to day: daily weather updates on a cron job, a Telegram-delivered investment summary pulling from Yahoo Finance, and turning saved Instagram Reels into structured notes in my Obsidian vault. It worked, but I was limited to whatever the platform let me configure. I was never able to get it feeling truly "smart," even after an expensive API upgrade to Anthropic's Opus 5 model. No real state, no real prioritization logic, no actual UI. The ceiling was the architecture, not the model, and that's what pushed me to rebuild it as V2.

hermes telegram bot demo
Fig. 1 — The Hermes/Telegram setup from V1, in action

V2: The Rebuild

V2 is a custom system: a Node.js/Express backend on an Orange Pi Zero 3 (4GB) at home, a React dashboard, and, as of the newest round, a physical LED wall display in my room.

A note on how this was built: I designed and iterated the system myself: the architecture, the data sources, how prioritization should work, the hardware. But with the complexity and scope of this project, I went all in with Claude Code and Codex to actually write the functional software from my specs. My job was direction, decisions, and testing; theirs was the code. Worth saying plainly rather than implying otherwise, since I'm still very early in learning to code this type of system myself.

Stack: Node.js 22, Express, and SQLite. I migrated off a flat JSON file once it stopped scaling to the complexity of the different data sources and cache requirements. It pulls from Gmail and Calendar over Google's OAuth, live Yahoo Finance prices for my holdings, and D2L Brightspace deadlines via an .ics feed. The frontend is React 18 + Vite across nine pages: Today, Week, Tasks, Portfolio, Stats, Weather, Commute, Wall, and System, served over HTTPS through Tailscale so I can open it from my phone anywhere. DeepSeek handles the AI backbone by default, with Claude available as a swappable provider. DeepSeek's developer API won out mainly on cost, and I'm accepting its data-security tradeoffs for now.

orange pi zero 3 close-up
Fig. 2 — The Orange Pi Zero 3 the backend actually runs on

What's Working

Calendar and Gmail are fully connected, merging every calendar in my Google account and my university's Brightspace feed into one view.

week dashboard page
Fig. 3 — Week page: busy score for the next 7 days, pulled straight from my calendar

Portfolio tracking pulls real prices for 40+ holdings, synced from my own Obsidian notes rather than typed in by hand. I was inspired by the GitHub commit tracking screen and built a portfolio performance tracker with a similar feel. It tracks daily moves, streaks and other stats, which was a lot of fun to see come together.

stats dashboard page
Fig. 4 — Stats page: daily portfolio moves and the year in numbers

There's also a "Worth a look" feature that researches and surfaces real stock candidates from live market data and my actual sector allocation, built so it can't invent a pitch it doesn't have data for.

worth a look stock idea card
Fig. 5 — "Worth a look": a real stock idea, sourced from live market data

A couple of things didn't survive the first round of real-world use, and I think they're worth mentioning: portfolio prices used to live in a manually updated config file with zero connection to anything real. I've since wired it to pull live from my Obsidian vault instead, so it can't quietly go stale. Market news started out as raw scraped search queries; I migrated it to a real fetch so it's never faking a headline. Neither was a huge fix, but they're the difference between something that looks like a demo and something I'd actually trust to run unattended and make real decisions with.

LED Panel Display

The newest piece, and the one that turns this from a browser project into something physical: an ESP32-S3 driving four HUB75 LED matrix panels (256×32 px total) mounted as a wall display in my room, so I don't need to open a tab to see my brief. It polls the backend over WiFi on two separate schedules: a slower one for data and summaries prepared and cached on the Pi by DeepSeek and my sorting algorithms (portfolio, calendar, market moves), and a fast-refresh one just for live control, so pinning a screen or pushing a notification from the dashboard reaches the wall in near real time instead of waiting out the slow data cycle.

Firmware is fully written for the dedicated ESP32-S3, including a parallel simulation build that prints the same logic to a serial monitor so I could validate the WiFi and rendering logic before ever touching the physical panels. It's now wired up and running on the wall, after starting with three panels and adding a fourth.

HUB75 LED matrix panels wired to the ESP32-S3 driver
Fig. 6 — The panels and ESP32-S3 driver, unpowered, before final mounting
Full LED wall assembly with power supply and driver board
Fig. 7 — Full assembly on the bench: chained panels, power supply, and driver board
The finished LED wall running, showing the busy score screen
Fig. 8 — The finished wall running, showing the day's busy score
wall control page
Fig. 9 — The live control page: enable/pin screens and push notifications straight to the hardware

Looking Ahead

The secretary now runs on a self-hosted Orange Pi, merging my email, calendar and investments into one brief, with a chat panel and the LED wall on top. I drove the architecture and design; Claude Code and Codex wrote the implementation. Next is better reliability and, eventually, a local LLM to cut API costs and keep my data at home.