Experience Write-ups Projects Skills Contact
Eric Solak

Eric Solak

I’m a Software Engineering graduate from McMaster University.

I also founded Alloy, a software consulting startup focused on building customized business solutions, web experiences, and more.

About

I build software systems end-to-end, from architecture and implementation through deployment.

Through Alloy, I’ve worked directly with business owners across Canada to scope projects, translate their needs into software, and deliver production systems myself.

At CATTLElytics, I also led a team of engineers through the development of a production AI product. I’ve learned how to communicate effectively with non-technical stakeholders while still being able to go deep technically and lead engineering work.

Outside of work, I’m a self-taught guitarist and have been playing for 11 years.

Experience
Jun 2026 — PresentToronto, ON

Alloy

Founder
Python · Claude Code · React · TypeScript · JavaScript · HTML/CSS · Cloudflare Workers · REST APIs
  • Grew Alloy into a solo consultancy whose automations save client businesses 100+ hours of manual work per month, handling all client-facing and technical work single-handedly.
  • Built fully and semi-autonomous AI workflows automating invoicing, document summarization, sales tracking, and commission calculations for small and mid-sized businesses.
  • Delivered automation and website projects for businesses across Canada, owning requirements gathering, scoping, build, and handoff within a 1–3 week window per project.
  • Design and build production systems end to end: custom sites in React and TypeScript on Cloudflare Workers, plus fully and semi-autonomous AI automation pipelines fitted to each business’s existing systems.
  • Architected integration layers that plug automations into the tools clients already run on, from Microsoft 365 and Google Workspace to QuickBooks, Xero, Sage, Salesforce, Shopify, Stripe, Slack, Airtable, and Notion, handling authentication, data mapping, and error recovery across disparate systems.
  • Validated automations against live client data before handoff, iterating on edge cases found through real usage.
  • Sustained an 80%+ client retention and referral rate through direct, hands-on relationship management.
Automate your current systems
PDF Microsoft Word Microsoft Excel Microsoft Outlook Gmail Google Sheets Google Drive Google Calendar OneDrive Dropbox QuickBooks Xero Sage Salesforce Shopify Stripe Slack Airtable Notion
Sep 2025 — Apr 2026Hamilton, ON

CATTLElytics Inc.

Industry Capstone Project
Python · Flask · OpenAI Whisper · React Native · Expo · SQLite · REST APIs
  • Led AI development for Pocket AI, a voice-driven task management app supporting dairy operations for 1 in 50 cows across North America.
  • Directed a team of 5 engineers through the full product lifecycle, from requirements and architecture to production handoff, delivering an app being integrated into CATTLElytics’ platform.
  • Integrated OpenAI Whisper for real-time audio transcription, achieving 98% voice recognition accuracy under simulated barn noise, exceeding the 95% project target.
  • Built a Flask backend with REST APIs for authentication, task lifecycle management, and sync with CATTLElytics’ proprietary storage system.
  • Implemented an offline-first architecture with local SQLite storage and background syncing for reliable performance in low-connectivity farm environments.
  • Designed and built mobile UI components in React Native (Expo), including task views, audio capture flows, and speech confirmation feedback; usability testing yielded a mean satisfaction score of 4.4/5.
2022 — May 2026Hamilton, ON

McMaster University

Bachelor of Engineering, Software Engineering
cGPA 3.70 / 4.0
  • AI / Machine Learning: Applications of Machine Learning, Data Mining, Probability & Statistics
  • Software Engineering: Software Design IV, Software Testing, Human-Computer Interfaces
  • Systems: Signals and Systems, Computer Networks & Security, Linear Optimization
Write-ups

Two short case studies from real client work: getting software running inside a messy business workflow, and finding out what users actually needed.

Discovery / Alloy client

An LLM pipeline a bookkeeper can audit

2026 · Alloy client, anonymized · 2–3 discovery calls · Python · Claude · openpyxl · reportlab

Through Alloy, my consultancy, I automated job costing for a Canadian commercial playground distributor. Hours of typing per job became minutes, every number traces back to a document, and together with my other automations the client saves 26+ hours a month.

The hard part of automating their job costing wasn’t the code. It was learning a process that lived in the bookkeeper’s head, from someone who did it by feel and had never had to explain it.

How I ran discovery

  • 2–3 calls with the bookkeeper to learn the company’s workflow and what they needed from the automation.
  • Walking through finished job folders together, bill by bill.
  • Each folder held invoices, quotes, and freight, customs, site work and surfacing bills, as PDFs, scans and Word files.

What I asked

  • “Walk me through this job. For each bill, what do you calculate, and where?”
  • “Why is the tax on this bill treated differently from that one?”
  • “Which exchange rate do you use, and where does it come from?”
  • “What do you do when a bill hasn’t arrived yet? How would you know one is missing?”

What I learned

Walking through real jobs turned up four rules:

  • Sales tax differs by vendor. Some Canadian sales tax (HST) can be claimed back, one carrier charges none, and customs bills mix fees, duty and import tax that are each treated differently.
  • The exchange rate is theirs, not the market’s. It must match what their bank charged, so an automatic rate lookup would have been wrong.
  • Every number must trace to a document in that job’s folder. Nothing is estimated.
  • The folder is never complete. A quote often stands in for an invoice that hasn’t arrived, and a missing bill is only noticed when another document mentions it.

What looked like case-by-case judgment was four firm rules that nobody had written down.

How it shaped the build

Each finding became a design rule:

  • Every number traces to a document, so the AI agent only reads the bills and plain Python does every calculation. The bookkeeper can audit any figure.
  • Tax differs by vendor, so the vendor rules live in one file. A policy change is a single edit.
  • The exchange rate is theirs, so the bookkeeper types it in. It is never looked up.
  • The folder is never complete, so quotes standing in for invoices, bills that other documents mention, and any rule I was unsure of are flagged for review instead of guessed.

Impact

Hours of typing per job became minutes plus a short review list. Together with my other automations for them, the client saves 26+ hours a month. Once running, the automation also flagged a $3,000+ government rebate that had gone unclaimed for more than a year.

“We used to dread doing this because it would take hours out of our day. Now we are so far ahead on our work.”The client

Next: scaling it up

Version one proved the rules with the bookkeeper in the loop. With that trust in place, the next phase is:

  • Pulling bills straight from the shared inbox, so each job is costed as its bills arrive instead of waiting for a folder to be filled.
  • Logging every flag the bookkeeper overrides, so the written rules tighten from real corrections as volume grows.
  • Reusing the pipeline for other distributors. The rules already live in one file, so a new client means writing down their rules, not new code.
Validation / CATTLElytics

Voice tasks for dairy farms, tested with the people who use them

Sep 2025 – Apr 2026 · Capstone with CATTLElytics · Usability study, 5 operators

Through my capstone with CATTLElytics, whose platform supports 1 in 50 dairy cows across North America, I led AI development on a five-person team. Pocket AI turns one spoken sentence into a farm task, with 98% recognition under simulated barn noise and 4.4 out of 5 for overall satisfaction from operators.

Pocket AI turns one spoken sentence into a task for dairy farm workers. I led AI development on our five-person capstone team and wrote our usability report. The challenge was building for people who work with their hands full, in loud barns with weak signal.

Setting requirements with the client

The CATTLElytics team set scope and priorities with us in regular Teams meetings. That gave us four requirements:

  • Voice first. Operators have their hands full, so a task should take one spoken sentence, not a form.
  • Built for the barn. Recognition had to reach 95% over barn noise.
  • Works without signal. Farms have weak connectivity, so tasks had to save without a connection and sync later.
  • A focused first release. Multi-language, wearables and advanced NLP moved to stretch goals so the core loop could ship.

What we built

OpenAI Whisper transcribes speech and a language model pipeline pulls the description, deadline, assignee and priority out of a single sentence. A Flask backend handles authentication, task lifecycle and sync with CATTLElytics’ proprietary storage. The app is offline-first: tasks save to local SQLite, sync in the background, and show when they are still waiting to sync. Tasks are assigned to people by name and can repeat on a schedule. Every task goes through a confirmation step before it saves, and anything can be edited by touch.

A voice-made task in the Pocket AI redesign concept: Check the south fence for repairs, waiting to sync, high priority, due today at 5 PM, assigned to Marco Diaz.
A task made by voice, in my redesign concept: assigned by name, and marked as waiting to sync.

How I validated it

  • The users: five dairy farm operators, two comfortable with voice assistants and three not.
  • The tasks: operators created real tasks, such as “check Cow 42 for lameness tomorrow morning,” three times each, unaided, with recorded barn noise playing.
  • The debrief: each operator talked through what worked and what they would change.

Results

Recognition held at 98% under simulated barn noise, beating the 95% target. Speech to confirmation took 5.8 seconds on average, and operators rated their overall satisfaction 4.4 out of 5. Saying the description, deadline, assignee and priority in one sentence was what all five liked most. The app was handed off to CATTLElytics for integration into their platform, and the project was highlighted on official McMaster channels.

What testing surfaced

  • Tapping to talk got in the way. Three of five had their hands full with animals or equipment when they needed to start a task.
  • Unsynced tasks looked lost. Two of five expected a new task to appear right away, before it had synced.
  • Everyone wanted names, not IDs. All five asked to assign tasks to people by name.

Next: what I handed off

My usability report closed with a roadmap for the integration:

  • A wake word, for fully hands-free use.
  • Field testing in live barns with more operators.

After the capstone, I mocked up a redesign that answers each finding. It is a concept, not the shipped app: see the Pocket AI redesign concept

The concept’s scripted demo. The small caption under each step names the testing finding behind it.
Selected projects
Featured project
01 / LLM + retrieval built from scratch

musicGPT

Jul – Oct 2026 · Python · PyTorch · NumPy · tiktoken · Gradio · pytest

A 45M-parameter GPT built from scratch in PyTorch (attention, RoPE, training loop, all hand-written), pretrained on ~1 billion Wikipedia tokens on a single GPU to write fluent, music-literate prose.

  • Hand-wrote every core piece of a 44.6M-parameter decoder-only transformer (6 layers, 8 heads, 512-dim): causal self-attention, RoPE, LayerNorm, weight init, training loop.
  • Pretrained it on 0.92B Wikipedia tokens (music upweighted 3×) on a single L4 GPU, reaching val perplexity ≈ 26 with no overfitting.
  • Fine-tuned it to answer from passages found by a hand-written BM25 search engine over 14,278 Wikipedia music articles.
  • Answers only when the answer is word for word in the source: on 400 unseen questions, 99% of its answers were correct (337 right, 3 wrong); otherwise it says “I don't know.”
From raw dump to grounded answers
Wikipedia dumpstreamed over HTTP
Markup stripperhand-rolled parser
GPT-2 BPEuint16 memmap
0.92B tokens · music 3×
Token embedding50,304 × 512, tied with the LM head
Transformer block ×6
Causal self-attentionpre-LayerNorm · RoPE on Q, K · 8 heads
+
Feed-forwardpre-LayerNorm · GELU · 4× wide
+
Final LayerNorm → LM headnext-token logits
cross-entropy loss
Training loop · one L4 GPUbf16, cosine LR, ~90k tokens/sec → val perplexity ≈ 26
fine-tune
BM25 search + fine-tuned reader14,278 Wikipedia music articles
Answer + source99% of answers correct on unseen questions
Project highlighted on official McMaster platforms
02 / CATTLElytics Inc.

Pocket AI

Sep 2025 – Apr 2026 · Python · Flask · React Native · OpenAI Whisper · REST API

Speak naturally, get structured tasks. End-to-end voice-to-task system built with Whisper, an LLM pipeline, Flask API, and React Native.

Code
  • Integrated OpenAI Whisper for real-time audio transcription, validated through usability testing that achieved 98% system voice recognition accuracy under simulated barn noise, exceeding the 95% project target.
  • Built a Flask backend powering voice-to-task workflows with REST APIs for authentication, task lifecycle management, and synchronization with CATTLElytics' proprietary storage system.
  • Implemented an offline-first architecture with local SQLite storage and background syncing, ensuring reliable performance in low-connectivity farm environments.
  • Designed and built mobile UI components in React Native (Expo), including task views, audio capture flows, and speech confirmation feedback; usability testing yielded a mean satisfaction score of 4.4/5.
Featured project
Interactive wildfire risk map
03 / Machine learning

Wildfire Risk Classifier

Sep 2025 – Jun 2026 · Python · PyTorch · FastAPI · Docker

Neural network trained on 118,000+ NASA satellite samples. Classifies wildfire risk with 94.3% accuracy, beating every baseline we tested — now deployed as a live REST API.

  • Deployed a production REST API using FastAPI and Docker on Render, serving real-time wildfire risk predictions from a containerized service.
  • Developed a neural network to classify regions into low, medium, and high wildfire risk using 118,000+ samples from NASA FIRMS and Open-Meteo datasets.
  • Designed a 4-layer MLP with batch normalization, dropout regularization, and weighted cross-entropy loss to address class imbalance across risk categories.
  • Achieved 94.3% test accuracy with high F1-scores across all classes, outperforming Random Forest and SVM baselines by 15%.
··Custom model
04 / Computer vision

SneakPeek

Jan 2025 – Mar 2025 · Python · PyTorch · React Native · JavaScript

Point your phone at any sneaker and get an instant AI identification plus purchase links. Custom DenseNet201 model, multi-agent Blackboard architecture, React Native app.

Code
  • Built a full-stack mobile app for AI-powered sneaker identification and social forum, where users upload images and receive an AI-identified shoe model, brand, and purchase links.
  • Trained a custom DenseNet201 model on a labelled dataset, applying a data augmentation pipeline (perspective transforms, saturation jitter, geometric transforms) to maximize generalization.
  • Architected a multi-agent Blackboard system where Google Gemini 2.0 Flash, GPT-4o, and the custom PyTorch model each submit predictions to a shared space; a central Gemini controller arbitrates and selects the final result.
How a prediction is made
React Native appsneaker photo + optional description
POST /createpost
Flask API · blackboard controller
GPT-4ovision LLM
Gemini 2.0 Flashvision LLM
DenseNet201custom PyTorch
Blackboardshared space holding all three predictions
Gemini arbiterreconciles brand, model, colorway
Gemini buying agentfinds retail & resale links
Result posted to the forumsaved to SQLite, shown in the app
Drone searching a procedurally generated island
05 / Autonomous systems

Autonomous Drone Rescue

Sep 2023 – Dec 2023 · Java · JUnit · Maven · Git

Autonomous flight software that navigates procedurally generated islands to locate and rescue targets. Built in Java with a team of three.

Code
  • Developed autonomous flight software to locate survivors across unknown terrain, implementing algorithms for optimal pathfinding to systematically cover the area.
  • Designed and executed test cases with JUnit to verify functionality of software components across a three-person team.
Skills

What I have worked with in practice.

Languages
Python
Java
C++
JavaScript
HTML/CSS
TypeScript
C
SQL
Frameworks & Libraries
PyTorch
FastAPI
Flask
React Native
NumPy
Pandas
scikit-learn
Tools
Docker
Render
Claude Code
GitHub Actions
JUnit
SQLite
Contact

Let’s build something great together.

Redesign concept · CATTLElytics capstone
Pocket AI
A farmer speaks a task out loud — seconds later it's structured, prioritized, and synced to the herd-management platform. Built end-to-end with Whisper, an LLM pipeline, Flask, and React Native. The demo shows my redesign of the app’s interface, based on what usability testing found.
01
Voice Capture
Farmer taps record — the voice note is captured instantly in the React Native app, even offline.
02
AI Processing
OpenAI Whisper transcribes the audio; an LLM pipeline extracts the task, priority & deadline.
03
Cloud Sync
A Flask REST API syncs the structured task to CATTLElytics' platform — offline-first, with background syncing.
04
Task Delivered
The task lands in the manager's dashboard — assigned, prioritized, and ready to action.
98%
Voice Accuracy
4.4/5
UX Satisfaction
95%+
Target Exceeded
Play demo
Tap the screen to play / pause