I ship web apps that handle payments and keep running when load spikes.
Full-stack freelancer. I take a small number of live-event and payment projects at a time, and finish them.
[online] open to work
~/work/selected-projects
Apps I've shipped
Live scoring, academy software, seat locks. Production, not demos.
Special Talent Stars
sts-competition.com ↗problem
500+ people voting at once during a live event. Scores and sign-ups had to stay in sync — nothing could drop.
built
Scoring dashboard and registration over WebSockets. Uploads go to object storage through signed URLs, not through the app server.
01/03
Solo Arts Academy
solo-arts-academy.com ↗problem
The academy ran on spreadsheets. Staff and students needed one app, and the academy needed to take payment.
built
Portals and attendance for the academy. Fawry and X-PAY integrated as payment gateways. Postgres and auth on Supabase; Firebase for the live bits. Roles are enforced on the server.
02/03
Event Booking & Ticketing
// private toolproblem
Two people clicking the same seat at the same time. You know the race condition.
built
Seat map over WebSockets. The lock lives on the server; the map is just a view of it.
03/03
~/notes/how-i-work
How I keep production from eating itself
Same threat model on a scoring night, a seat map, and a payment webhook. Cybersecurity degree in progress — this is what I actually ship.CCST Cybersecurity (Cisco) ↗
Special Talent Stars
Live events
Scoring and sign-up have to stay in sync when hundreds of people hit at once. WebSocket messages are authenticated. Scores are validated on the server so a client cannot invent a result.
Solo Arts Academy
Payments
The academy takes payment through Fawry and X-PAY. I integrated those gateways — webhooks verified, charges idempotent so a retry does not bill twice. Card data stays with the provider.
Event booking
Contention
Two clicks on one seat is a race, not a UI bug. The lock lives on the server. The map is a view of that lock, not the source of truth.
Special Talent Stars
Uploads
Files go to object storage through signed URLs, with type and size limits. The browser is not trusted to decide what gets stored.
~/stack.json
What I actually use
Tools from the apps above — not a keyword list.
~/portfolio:~$ cat stack.json
{ "frontend": [ "React.js", "Next.js", "TypeScript", "Tailwind CSS" ], "backend": [ "Node.js", "Express.js", "REST APIs", "WebSockets" ], "data": [ "PostgreSQL", "MySQL", "Supabase", "Firebase" ], "cloud": [ "AWS S3", "Docker (basics)", "CI/CD", "Git/GitHub" ] }
frontend
backend
data
cloud
~/scripts/contact.sh
Want to work together?
Live events, payments, real-time. I take a small number of projects.