Skip to selected work

Esad Kaya / software + hardware

Ottawa / 45.4215 N, 75.6972 W

Independent systems / 2026

Tools
that
hold up.

I build software for work and home: crews checking in across Ottawa, a family business that cannot miss payroll, and a local intercom for the house.

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 site is served through Cloudflare, Tailscale Funnel, and Caddy, with no public ports on the host. The admin diff view shows which supplier records changed during the latest sync.

Jul 2026 — Present

Vite / TypeScript / Express / SQLite / Tailscale Funnel / 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 problems I understand firsthand.

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 keep 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

  • Kept the head office's hardware and network running. Payroll and dispatch had to stay available.
  • Ran QuickBooks payroll for more than 50 employees and maintained the supporting systems.

20

04 / 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

05 / Other projects

Other projects.

Selected side projects

01 / 03

Minecraft Server

Paper server in Docker on Java 25, exposed through Tailscale Serve. Backups and lifecycle scripts run automatically.

Docker / Java 25 / Tailscale

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

06 / Contact

Let's work on something useful.

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

ekaya064@uottawa.ca