Skip to selected work

Esad Kaya / software + hardware

Ottawa / 45.4215 N, 75.6972 W

Independent systems / 2026

Real
projects,
real solutions

I build software for work and home: workforce tools for crews in Ottawa, payroll systems for a family business, and a local intercom for the house.

View resume
Current
Software engineer intern
Working on
Field-work systems and local hardware
Open to
Internships and contract work

01 / Selected work

Selected work.

2025-2026 / software and hardware

01

Solo founder & full-stack engineer

Raindropticon

Workforce management with geofenced clock-ins.

I built this for a janitorial company with about fifty crews across Ottawa. The main requirement was that a clock-in had to be tied to a real location. Each clock-in is checked against a PostGIS polygon, so supervisors can see whether a worker was on site. The backend uses NestJS, GraphQL, Prisma, and PostGIS. The admin dashboard is React; the field app is React Native with Expo and is designed to keep working when LTE is unreliable. CI runs unit and end-to-end tests on every merge. A Gemini Vision check reviews task-completion photos so supervisors have more context than a thumbnail.

Nov 2025 — Present

NestJS / GraphQL / Prisma / PostGIS / React / React Native / Expo

Fig. 01

Raindropticon logo
02

Firmware + backend

Home Intercom

A local network intercom for the house.

I built two ESP32-S3 room stations and a Dockerized hub for my home network. WebSocket carries control messages; raw UDP carries 16 kHz PCM audio for push-to-talk. A broadcast mode sends a call to every station. The system runs locally with no accounts or cloud service. I built it because I wanted a simple intercom for my mom, and because the audio path was a useful embedded-systems problem.

May 2026

ESP32-S3 / Docker / WebSocket / UDP / C++

Fig. 02

ESP32 · AESP32 · BHUBLAN · UDP · 16 kHz
03

Mobile + edge-AI

Parkopticon

A real-time street-parking map with enforcement alerts.

I built a React Native and Expo app for sharing open parking spots and nearby enforcement activity. Drivers can add pins, and the app can notify people parked in the same zone. A separate in-car device uses an Orange Pi 5, ESP32-S3, camera, mmWave radar, and a quantized YOLOv8 model to collect some of that data. It draws under 50 Wh overnight, so it can remain in a parked car over a weekend without draining the battery. The app and device use the same pin and geofence model.

Nov 2025

React Native / Expo / YOLOv8 / ONNX / ESP32-S3 / Orange Pi

Fig. 03

N ↑100m
04

Solo developer

Put It Down

A desktop focus monitor using head-pose tracking.

I built this to understand how much time I spend looking at a screen, a phone, or something else. MediaPipe provides the face mesh; OpenCV turns it into a head-pose vector. The app compares that signal with the active window and records the result. A pie chart summarizes the time, and a block list manages distracting applications. Tkinter keeps the interface small, while tracking runs on a separate thread.

May 2025

Python / MediaPipe / OpenCV / Tkinter

Fig. 04

HEAD POSE · ACTIVE APP
05

Full-stack & DevOps

Legend Flooring

A production flooring site with supplier data and private deployment.

I built this marketing site for an Ottawa flooring company. The frontend is a Vite and TypeScript SPA; the API uses Express and SQLite; supplier scrapers update the catalog overnight. The admin diff view shows which supplier records changed during the latest sync.

Jul 2026 — Present

Vite / TypeScript / Express / SQLite / Cloudflare

Fig. 05

CLIENTCFedgeTAILfunnelSPA · ViteAPI · ExpressCLOUDFLARE → TAILSCALE → CADDY
06

Solo build (design, code, SEO/GEO)

raindropjanitorial.com

A Next.js rebuild for search and answer engines.

I rebuilt Raindrop Janitorial's marketing site from PHP in Next.js. I handle the build, technical SEO, and answer-engine content. The site uses static App Router output, route metadata, JSON-LD on service and area pages, a sitemap, robots rules, and an llms.txt file. The goal is to make the company easy to find when people search for commercial cleaning in Ottawa, including through answer engines.

Sep 2025 — Present

Next.js 16 / React 19 / TypeScript / Tailwind v4 / JSON-LD

Fig. 06

google.com/search?q=janitorial+services+ottawa 1.raindropjanitorial.com › services2.competitor-a.ca3.competitor-b.com4.aggregator.exampleSEO · GEO · TOP 3

Web, mobile, embedded systems, and operations.

6 public records

02 / About

I build software for practical problems.

I'm finishing a CS degree at the University of Ottawa in May 2027. Since 2020, I've also worked as the technical support person at my family's janitorial company. I manage payroll for more than fifty people, maintain the office network, and am replacing the dispatch spreadsheet with an internal system.

I started with C and an Arduino project. Now I work on local AI, embedded hardware, and web systems. I also 3D print parts and maintain a small home lab for testing.

Based in
Ottawa, Canada
Available
Summer 2027
First language
C / grade 11
Outside work
3D printing and home lab

03 / Experience

Where I've worked.

Selected roles and results

2026

Software Engineer Intern at Entrust

Ottawa, ON, Canada / May 2026 - Present

  • Shipped UI changes to the IDaaS platform with TypeScript and JavaScript on the front end and Java on the back end.
  • Improved insights and real-time analysis for anonymized customer usage across production systems serving more than 10 million users.

26

2025

Support Engineer Intern at Solace

Canada / Sept 2025 - Dec 2025

  • Maintained internal support tools and runbooks for the team.

25

2025

Software Developer Intern at Communications Research Center

Canada / Jan 2025 - April 2025

  • Built cross-platform PyQt tools for radar analysis. Cut investigator setup time by 98% and startup time by 95%.
  • Parallelized Python data pipelines for visualizations. Reduced one report from an overnight run to under four hours.

25

2024

Student Junior Business Analyst at HR – Infrastructure Canada

Ottawa, ON / May 2024 - Aug 2024

  • Prototyped Power BI dashboards with DAX measures for senior directors across HR datasets.
  • Cleaned and standardized data with Power Query, removing missing-value friction in recurring reports.

24

2020

Technical Support Officer at Raindrop Janitorial Services Corp.

Ottawa, ON / Jan 2020 - Present

  • Maintained the head office's hardware and network.
  • Ran QuickBooks payroll for more than 50 employees and maintained the supporting systems.

20

04 / Resume

Resume.

Current PDF / 4 pages

A current summary of experience, education, and technical work.

05 / Tools

Tools and technologies.

Current working set

Languages

  • Python
  • TypeScript
  • JavaScript
  • Java
  • C/C++
  • SQL
  • DAX
  • PHP
  • Go
  • Rust
  • Lisp (Racket)

Frameworks & Web

  • React
  • React Native
  • Expo
  • Node.js
  • NestJS
  • Spring Boot
  • Flask
  • GraphQL
  • REST
  • Tailwind
  • Jest

Data & AI

  • NumPy
  • Pandas
  • Scikit-learn
  • TensorFlow
  • ONNX Runtime
  • OpenCV
  • MediaPipe
  • YOLOv8
  • Power BI
  • Redis

Embedded & Hardware

  • ESP32
  • Orange Pi
  • Arduino
  • mmWave radar
  • LTE modems
  • FPGA (Quartus)
  • KiCAD
  • SolidWorks
  • 3D printing

DevOps

  • Docker
  • Jenkins
  • Bitbucket
  • Tailscale
  • Git/GitHub
  • AWS EC2
  • Cloudflare
  • Firebase
  • Linux
  • CI/CD

Other

  • PyQt
  • Tkinter
  • Matplotlib
  • Playwright
  • Selenium
  • OCR
  • Agile
  • UML
  • Interpersonal Skills
  • Threat Assessment

06 / Other projects

Other projects.

Selected side projects

01 / 03

Budg-It

A budgeting tool with receipt reading and an AI chat service. FastAPI handles the backend, Firebase handles authentication, and Gemini 2.0 provides the budget conversation.

Python / FastAPI / Gemini / Firebase

02 / 03

Notesplicer

RAG over personal notes. LiteLLM routes requests between Gemini and Deepseek; ChromaDB stores embeddings. Model selection is configured in one place.

LiteLLM / ChromaDB / Gemini / Deepseek

03 / 03

AutoScraper (Kaya Auto)

Marketplace for vehicle listings. Python scrapers run concurrently, Firebase stores the data, and Gemini flags listings whose prices look unusual.

Python / Flask / Firebase / Gemini

07 / Contact

Let's work on something useful.

I'm available for Summer 2027 roles, contract work, and selected independent projects.

ekaya064@uottawa.ca