RoleCyber Security Analyst (Intern)Jan–Dec 2026 · Toronto, ON
Medium and high risk firewall requests at a major bank come to my desk. I push requesters to narrow access before anything gets approved.
3,000+requests through the team to date
100–200a month I co-own
3+stakeholder teams advised
See how it worksShow less
Assess source and destination scope, port exposure, non-prod to prod paths and data classification against enterprise standards
Document every approve or reject decision so it holds up in an audit
Trace approved rules that fail in production across policy, routing and NAT
Pitched, and now run, the team's weekly ticket-flow metrics: intake, closure rate, turnaround
Check PointPalo AltoAlgoSecOSFI B-13NISTPCI DSS
Change request · illustrative
Source
Destination
Service
Path
Justification
Exposure
Made-up addresses. The pattern is the real one: wide subnets, broad port ranges and dev-to-prod paths get sent back narrower.
ExperienceRule 20SEGMENT
Ontario Tech University
ACE facility · Oshawa
ACE facility network redesign
RoleNetwork Engineering InternMay 2024–Apr 2025 · Oshawa, ON
A live research facility network kept dropping its equipment controllers, and every shutdown cost $20K–$30K. I rebuilt it.
$20–30Kcost of each shutdown it stopped
130+devices monitored
See how it worksShow less
Learned the old switch config, procured new switches, configured and deployed them on Ubiquiti UniFi
VLAN segmentation, ACLs and firewall rules between device groups; OSPF between L3 routers and L2 switches
Ran vulnerability scans and penetration tests on the internal network and web apps I'd just built
A firewall change took the devices offline once. I'd snapshotted first, so I rolled back to known-good and fixed it
UniFiVLANsACLsOSPFNessusNmap
Flat vs. segmented · schematic
Schematic of the idea, not the facility's real layout. These controllers run physical equipment, so this sits closer to industrial network security than office IT.
ExperienceRule 30SUPPORT
Ontario Government
MPBSDP
IT systems, identity & the Windows 11 move
RoleIT Systems Officer (Intern)May–Sep 2025 · Toronto, ON
Identity, devices and support for a government ministry during the move from Windows 10 to Windows 11.
150+users supported
100+identities administered
400staff in migration AMAs
See how it worksShow less
Resolved endpoint, VPN, DNS and M365 issues, remote and in person
Administered access across Active Directory, Entra ID and Intune: OUs, permissions, password resets, device issues
Tier 2 support for 40+ senior officials
Co-hosted Ask Me Anything sessions for about 400 staff on the Windows 11 upgrade
Active DirectoryEntra IDIntuneM365VPN
Identity to endpoint · schematic
Schematic of the identity chain I worked across, not the ministry's real topology. Fleet dots are illustrative.
Zone · Founder
Founder
Built from zero
Nobody assigned these. I went looking for a problem, talked to the people who have it, and shipped something they used. Each one starts with the problem, not the stack.
I intercepted my own app's traffic, edited one field, and a free account unlocked paid features. The server trusted the client. The fix: entitlements come from the stored account record on every request.
FounderRule 50ISOLATE
Bank statement income analyzer
Founder · AI tool for mortgage brokerages · 2026
Brokers told me the barrier to AI wasn't price. It was trust in uploading client bank statements. So I designed the system around where that data goes.
Problem
Brokers rebuild self-employed income from bank statements by hand. About 4 hours a file.
Insight
The blocker was trust in uploading client statements, not price.
Build
A self-hosted model that only categorizes. Code does every sum.
Result
Piloted with brokerages on real files: 4 hours down to 30 minutes.
2–3brokerages piloted
50+real deal files tested
0client files sent to AI model providers
See how it worksShow less
Rebuilds a self-employed borrower's income: net income, expense categories, large-deposit flags, declared vs. derived gap
Open-source model on a rented GPU host, behind a Caddy reverse proxy with an IP allowlist and per-client accounts
Nothing kept by default; with consent, files are wiped after a set retention window
The model never does arithmetic: it only labels each line, and deterministic code sums, so every number traces back to a transaction
Reconciles against the bank's own printed closing totals as a checksum before any AI step runs
Reads TD and BMO layouts by column position, so debits, credits and running balances never get confused
When output disagreed with a broker's manual numbers, I traced the run through logs, fixed and redeployed for retest
Self-hosted LLMLinuxCaddyRunPod GPU
Income reconstruction · sample file
fictional client · synthetic data
Manual review~4 h
240 min
With the analyzer~30 min
30 min
Precise claim: no client data goes to AI model providers. The GPU host is still a third party, so I don't say "it never leaves our servers."
Zone · Projects
Projects
team builds · case studies · competitions
ProjectRule 60ENCRYPT
ClassistantAI
classistant.ca · Ontario Tech & U of Alberta
Locking down an AI agent's credentials
RoleCloud / Backend DeveloperTeam project · 2026 · Google Cloud
An AI assistant students text, live at classistant.ca for Ontario Tech and University of Alberta. It reads their Gmail, Calendar, Drive and school portal, so the real product is how it guards their credentials.
See how it worksShow less
Built the FastAPI connector service on Cloud Run that turns a stored credential into a live Google API client
Envelope encryption: each credential gets its own AES-256-GCM data key, wrapped by Cloud KMS, with the user ID bound in as authenticated data
Two KMS keys. The connector can only decrypt Google tokens; the browser agent can only decrypt portal passwords. IAM enforces it, not code
The browser agent's model only ever sees a placeholder password. Code swaps in the real one at the tool call and scrubs it after
First named decider on moving credential storage from Secret Manager to Firestore + KMS