Work
Most portfolios are screenshots. This one is running.
One system, live, taking applications from people I have never met — and the site around it, which you are reading. Nothing below asks you to take my word for it: every claim names a page you can open or a file you can read.
01 / The system
A private roundtable that runs itself.
Yerevan Product Coffee is a small table for founders and product people. It is not a page describing an event — it takes the application, decides whether a seat exists, confirms it, moves it when a date changes, keeps the waitlist honest, tracks who was invited by whom, sends every message on its own schedule, and asks for a review afterwards. Nobody is copying rows between spreadsheets behind it.
Go and apply for a seat. The form you meet is the system, and this page is describing the thing you are using while you use it.
02 / Three decisions
The part worth hiring is the part before the code.
Anybody can build the obvious version. What a founder is actually buying is somebody who notices, before the build starts, where the obvious version breaks — and what else it would take with it. Three from this one.
01
Capacity is a rule in the database, not a check in a form
The easy version. Validate the seat count when the admin saves the form.
Where it breaks. Approving a guest and editing the table size are two separate requests, and they can arrive in the same moment. A form check closes one side of that race and leaves the other open: the seat is granted while the table is being shrunk, and the table is oversold with both screens showing green.
What is there instead. The rule sits under both. A capacity edit that would put confirmed guests over the table is refused by the database itself, and the failure aborts everything batched with it — dates, mirrors, and the mail queue cannot commit around an invalid write.
CREATE TRIGGER events_guest_seats_not_below_accepted BEFORE UPDATE OF guest_seats ON events WHEN NEW.guest_seats < ( SELECT COUNT(*) FROM event_applications WHERE event_id = OLD.id AND status = 'accepted') BEGIN SELECT RAISE(ABORT, 'event capacity is below confirmed seats'); END;02
The bot check goes on the open forms only
The easy version. Put the challenge on every form. It is one component.
Where it breaks. Two pages here are reached by a signed link sent to one named person. Putting a challenge in front of them asks somebody to prove they are human in order to open a door that was unlocked specifically for them — friction spent where there is nothing to protect.
What is there instead. Open forms carry the check. Token-gated ones do not, because the token is already the gate. Same reasoning decided the seat form gets a challenge and the twelve-question diagnostic does not: a challenge halfway through a funnel loses more real answers than it stops fake ones.
03
Photographs are a consent problem before they are a feature
The easy version. Add a gallery. Upload the photos after the table.
Where it breaks. The people at the table did not agree to appear anywhere when they applied for a seat. A gallery built first makes the consent question arrive after the photograph exists, which is the wrong order and the wrong pressure.
What is there instead. The application form says a group photograph may be taken and that it is shared only with permission, asked afterwards in the group. The storage was built to match that promise: images are private objects, and the page cannot show one that was not agreed to.
03 / Underneath
The same standard, applied to this page.
A deploy is refused if a test fails, if a page ships an inline script its own security policy would block, or if a link points at nothing. The stack is listed with reasons, and with what was taken back out, on the stack page.
- Tests that block a deploy
- 354
- Time to first byte
- 22 ms
- Layout shift
- 0
- UI frameworks
- 0
Measured on this page, in your browser, today — not quoted from a report.
04 / What fits
What I take on.
MVP build for an early-stage SaaS
Product scoping · Build
Shape the smallest release worth shipping — audience, MVP boundary, and the build order — then build it.
Product landing page
Design · Web
A fast, clear page that explains one product and drives one action.
Prototype for a founder
Prototyping · Product
Turn a rough idea into a clickable prototype that tests the core flow before committing to a full build.
Have a project in mind?
If it’s close to product, design, or an early build, I’d like to hear about it.