Hursh Javeri
I write the part of the system that decides not to act.
Third year of a BSc in Dubai. Right now that mostly means computer vision on a Jetson in a lift lobby, and a lot of hours on the code sitting between the model and anything that actually moves.
01 · Work
The same problem, five times
Five things I have built. Every one of them has a place where it stops and checks before doing something it cannot take back, and that is usually the part that took longest.
Every plate grows a game that enforces the rule the project above it describes.
01
TriAgentLoop
An open-source setup that splits AI coding work between three agents. None of them is allowed to sign off on its own work.
An agent reviewing its own work is not reviewing anything. So the three roles work on separate branches, and nothing gets merged without a written review from a different one.
Game 01 · Choose a route
Ship one change
You are running a task through three agents. Click your way to a merge. There is exactly one route that gets there, and it is not the fast one.
- One agent plans, one builds, one reviews. Each works in its own sandbox on its own branch
- Every handoff between them is written to a log that can only be appended to, so the reasoning survives after the session ends
- Work only gets merged once the reviewing agent has written down that it approves
- TypeScript
- Rust
- Git
Fig. 3.1 · Three agents, and the one that wrote the code is never the one that approves it Read the case studyactive2026Repository
020 dispatched · HELD · advisory only
LiftSense
A camera watches a lift lobby, works out who is waiting, and suggests which lift to send. It does not send anything yet.
Calling a lift for the wrong reason is a safety problem, so the system sends nothing until it is sure. Even then it only advises. The certified controller still makes the call.
Game 02 · Judgement
Lobby watch
Someone is waiting downstairs. Send the passenger lift, send the goods lift, or wait for a better look. Waiting is always free.
- Tells the difference between people, cargo, a mix of the two, and an empty lobby, using one ordinary USB camera
- Everything runs on a small computer next to the camera. No video leaves the building and no images are ever saved
- It ships switched off. Out of the box it watches, decides what it would have done, and writes that down without sending anything
- Python
- TypeScript
- RF-DETR
- TensorRT
- NVIDIA Jetson Orin
- Postgres
- Mosquitto MQTT
- Grafana
- Docker Compose
Fig. 1.1 · What happens between the camera seeing something and a lift being asked to move Read the case studyactive2025Private repository
03
No-Website Outreach Pipeline
A command-line tool that finds local businesses without a website and drafts an email to them. The legal checks sit in front of the send button.
Sending the wrong email is not a bug, it is a legal problem. So sending does nothing by default, and a message that fails a check never reaches the mail server at all.
Game 03 · Spot it
High street
Shopfronts go past. Some have a website on the sign and some do not. Tap the ones that do not, before they are gone.
- Four steps that each run on their own, so you can look at what came out of one before running the next
- Searches Google Places for businesses that have a phone number but no website
- Writes a first draft of each email with Claude, personalised to the business
- Python
- Google Places API (New)
- Claude API
- SMTP
Fig. 2.1 · Nothing is sent until it has passed every check, and even then only if you ask twice Read the case studyshipped2026Private repository
04
TriAgentLoop Kanban Bot
A Discord bot that manages a GitHub project board, and checks twice whether you are allowed to touch it.
A bot with write access to someone else's board is a permissions problem in a Discord costume. It checks whether you are allowed when you open the form, and again when it actually writes, because roles can change in between.
Game 04 · Sorting
Board sweep
Issues land on the board faster than you would like. Send each one to the right column before the board fills up.
- Signs in to GitHub as an app with short-lived keys, so nobody's personal access token is sitting in a config file
- Checks whether you are allowed when you open the form, and again at the moment it writes
- Pressing submit twice quickly still creates only one issue
- Node.js
- discord.js
- GitHub Apps
- GraphQL
Fig. 5.1 · It checks whether you are allowed when the form opens, and again when it writes Read the case studyactive2026Repository
05
Discord Music Bot
A music bot for Discord that hands the audio work to two well-tested tools instead of trusting a fragile piece of JavaScript to keep working.
YouTube breaks the tools that read it roughly on schedule. So this one asks yt-dlp only where the audio is, and lets ffmpeg fetch it. When YouTube changes something, the whole repair is updating one file.
Game 05 · Rhythm
Four lanes
The band plays without you. Hit the notes as they cross the line, with D, F, J, K or by tapping, and you are the melody.
- Fourteen commands, and no Java, no Python, and no half-broken audio libraries to install
- Downloading and playing are handled by two mature command-line tools rather than by code that has to be rewritten every time YouTube changes
- The installer checks the file it downloaded against a fingerprint published alongside it, and refuses to install one that does not match
- Node.js
- discord.js
- @discordjs/voice
- yt-dlp
- ffmpeg
Fig. 6.1 · It will not sign in until everything it depends on has answered Read the case studyshipped2026No repository
02 · About
The boring part is the point
I'm in my third year of a BSc in Information Technology at Curtin University Dubai. Most of what I build ends up with the same shape. I work out what happens if it's wrong, and then I make it hard for the system to be wrong that way by accident.
With LiftSense that's literal. A lift called for the wrong reason is a safety problem, so the classifier never gets to call one. It watches, it writes down what it would have done, and a certified controller keeps the decision. The outreach tool landed in the same place by a different road: there a wrong send is a legal problem, so nothing leaves until it's been checked and someone has switched the sender on by hand.
None of that is the model. The model is mostly a solved problem you can buy now. What takes the time is the thing standing in front of it, and that's the work I actually like.
- Dubai, United Arab Emirates
- BSc Information Technology, Curtin University Dubai · 2025–2027
- English (Fluent) · Japanese (JLPT N5)
03 · Skills
What I actually use
Engineering
- Python
- Red Hat Linux
- AWS Cloud
Marketing and client work
- Figma
- Apollo
- Toggl
From two years running marketing
- Client relationships
- Team leadership
- Conflict resolution
- Time management
- Situational analysis
- Communication
Languages
- English · Fluent
- Japanese · JLPT N5
04 · Credentials
Things I can prove
If the issuer publishes a link you can check, it's here. If they don't, I've said so rather than leaving it vague.
AWS Academy Graduate · Cloud Foundations
Amazon Web Services · August 2026
Twenty hours on core AWS services, architecture, security and pricing.
Red Hat System Administration
Red Hat · 2025
Hands-on RHEL administration: users and permissions, services, storage, networking.
Foundation Programme certificate
Middlesex University Dubai · 2023
Completed the foundation programme and graduated with Honours.
05 · Timeline
Where I have been
2026–presentwork
Co-founder
TriAgentLoop
- Started it this year. It splits AI coding work between three agents: one plans, one builds, one reviews.
- Nothing is merged until the agent that did not write the code has written down that it approves.
- This site was built with it, and the log of how each decision was argued and settled ships in the repository.
2025–2027education
BSc Information Technology
Curtin University Dubai
- In progress. Third year begins on 31 August 2026.
2025–presentwork
Founder
LiftSenseAI
- Building the lift occupancy classifier. It advises dispatch and defaults to sending nothing.
- I own the whole path: detector on the edge, tracking and smoothing, the guards in front of dispatch, the audit trail behind it.
2024–2026work
Head of Marketing
Appscreated
- Took the company Instagram from 0 to 1,000 followers, mostly on daily code snippets.
- Was the point of contact for corporate clients.
- Produced graphic design assets and ran the marketing calendar.
- Ran prospecting and internal workflow on Figma, Apollo and Toggl.
2022–2023education
Foundation Programme
Middlesex University Dubai
- Graduated with Honours.
06 · Contact
Reach me
Email is fastest. The address is written out as plain text below, so you can copy it even if nothing on your machine is wired up to handle a mailto link.
What happens to an email you send me is set out in the privacy notice.
07 · Questions
Asked and answered
The ones that come up.
Is LiftSense running in a real building?
No. It watches, works out what it would have done, writes that down, and sends nothing. Sending has to be switched on deliberately, and even switched on it only makes a suggestion. The building's certified lift controller still decides.
Why do some projects have no repository link?
Because I will not link you to something you cannot open. Two of the five repositories are public and are linked. Two are private, and are labelled private rather than linked to a page that would refuse you. The music bot was set up deliberately without git, so it does not have a repository at all, which is a different thing from having a private one.
Can I play with any of this?
Yes. Each project on this page has a small game underneath it that works the way the real thing works. Send the wrong lift once and the confidence floor stops being an abstraction.
Does this site track me?
No. There is no analytics, no cookie and no third-party script of any kind. The fonts are served from this site rather than from Google, and nothing is stored in your browser. The privacy notice, linked in the footer, covers the rest, including what Cloudflare sees when it delivers a page.
What is it built with?
Astro, with no UI framework at all, hosted as static files on Cloudflare Pages. The lift shaft the page sits inside is WebGL, drawn with three.js, and it is loaded after the page has already appeared so it never holds up reading anything. Turn WebGL off and the site is still the site.
How do I get in touch?
Email, and the address is written out in full on the contact plate so you can read it rather than click it. BSc Information Technology at Curtin University Dubai, 2025–2027, based in Dubai, United Arab Emirates.