Skip to content
Skip to content

Nathan Espejo

Software engineer building full-stack, infrastructure and hardware projects, lately mostly LLM tooling. 3rd-year Software Engineering at Western.

Ask about me

Nathan Espejo

3rd year (2026-27) in Software Engineering at Western University, graduating May 2028. Looking for a Summer 2027 software engineering or applied AI internship.

Most of what I build lately is LLM tooling I use every day, and I put as much care into the parts around the model as the model itself, with tests running in CI, data that syncs cleanly and changes I can roll back. I'd rather pick a cheap model that does the job well than pay for the biggest one.

Right now I'm using Campus, the AI agent I built that reads all six of my courses, and running a homelab of two NixOS machines managed from a single repo, where every change is declared in config, reviewed and easy to roll back.

Outside of AI I build for fun: games and 3D in Unity and Blender, VR, and hardware with Arduino and ESP32.

  • May 2026 to Aug 2026

    Software Engineering Intern · TeraGo · Markham, ON

    Built a prototype pipeline that uses a locally hosted LLM (Ollama) to turn unstructured emails into structured tickets, working end to end. Also built a Python RF channel-planning tool that shortlists clear frequencies for fixed-wireless links, and deployed an internal RAG assistant that answers engineers' technical questions from company documentation.

    Case study

  • Sep 2025 to Aug 2026

    Software Developer (Sep 2025 to Apr 2026), then VP of Data/ML (May 2026 to Aug 2026) · 3D Western · London, ON

    I was on the data team from Sep 2025, writing the render scripts and working on the 3D model scraping and the STL rendering pipeline, and as VP of Data/ML I co-led two data developers on a print-safety dataset and benchmark, tracking the work on a GitHub project board. We rendered the scraped models in Blender, checked every label with a VLM, and benchmarked small vision models as a safe-or-flag gate, where the best one, Qwen3-VL-2B, agreed with those labels on 84.2% of models with the filename visible. Ran alongside my TeraGo internship.

    Case study

  • Campus

    Aug 2026 to nowsolo

    My courses are spread across six Brightspace pages, so I built one place to check deadlines, study from slides and test a draft against the brief. Campus syncs everything into SQLite and answers from the course files with search that is lexical by default, with embeddings and a cross-encoder reranker switched on in config. Its agent logs every change it makes to my notes or due dates, and it runs on any OpenAI-compatible endpoint, local or hosted.

    • Python
    • FastAPI
    • SQLite
    • embeddings
    • cross-encoder reranking
    • React
  • NixOS homelab

    May 2026 to nowsolo

    My laptop and a home server built from used parts are both defined in a single repo of Nix/NixOS config, so every package, service and firewall rule is version-controlled and any change can be reviewed and rolled back. The server hosts my passwords, photos, files, git remote and AI services behind Caddy and Tailscale, backs up to a NAS every day, and pushes an alert when something fails. A Hermes Agent profile on each machine makes changes the way I do, by editing the config and rebuilding.

    • Architecture diagram. A git repo holds one Nix flake with hosts, modules and sops-encrypted secrets, and both machines build from it. The laptop, flow, runs two Hermes Agent profiles, llama.cpp on an RTX 4060 and the desktop. The server, home, runs 35 containers and 10 native services and backs up to a NAS. Arrows show the homelab profile reaching the server over SSH, and the server's Bifrost gateway using the laptop's local models.
    • NixOS
    • Nix flakes
    • Docker
    • Tailscale
    • Caddy
    • sops-nix
  • AWARE

    Jul 2026Hack the 6ix 2026solo

    A home-awareness device I built solo at Hack the 6ix 2026 on an $80 Arduino UNO Q, with a camera, a microphone and sensors feeding vision and audio models that all run on the board, so there is no cloud inference. You set automations in plain English, like "when glass breaks after 10pm, alert me", a small on-board LLM turns each one into a rule, and plain code checks the rules with no LLM in that loop.

    • Python 3.12
    • YOLOv8n
    • YAMNet
    • Whisper-tiny
    • MiniCPM5-1B (GGUF)
    • Arduino UNO Q
  • CareBridge

    Feb 2026Spark 2026team project

    Overall 3rd placeSpark 2026

    Overall 3rd at Spark 2026, built with my team. We started from a winter storm that cut off a regional hospital and led to missed referrals and follow-ups. Patients check in by chat or voice, and providers get one timeline with risk signals pulled from those conversations.

    • React
    • TypeScript
    • Vite
    • FastAPI
    • Supabase
    • Cohere
    • ElevenLabs

Also built

8 awards across 22 hackathons, all with teams. Four I'd point to are below. The rest are on the projects page.

  • Careerly

    NSBEHacks · 2024

    3rd overall; Cohere's Challenge 1st place

    Team project

  • Auralis

    Hack Western 12 · 2025

    Best AI Application Built with Cloudflare

    Team project

  • Eyecandy

    Hack the North · 2025

    Snap Spectacles AR Runner Up

    Team project

  • CareBridge

    Spark · 2026

    Overall 3rd place

    Team project

Off the hackathon circuit: Dean's Honour List (2024, 2025) at Western University.