โ† projects

A hiring platform, built end to end.

live Next.js ยท Supabase ยท founding engineer

WorkEthix is a two-sided recruitment product โ€” employers post roles, candidates apply, and an admin layer runs the whole thing behind them. I was the founding engineer: empty repo to a live product, front-end and back-end, mine to own. This is the story of what that actually involved.

3
user roles
Next.js
app router
Supabase
postgres + rls
0 โ†’ live
founding engineer

The marketplace โ€” three roles, one platform

The product is a two-sided marketplace with an operations layer on top. Every role sees a different surface, but they're all backed by the same data model with strict per-user access โ€” so the hard part isn't three separate apps, it's one system that shows each person only what they're allowed to touch.

Auth and access โ€” enforced in the database

A product like this lives or dies on access control. I built the full authentication stack โ€” signup, email verification, login, forgot and reset password, plus Google sign-in alongside email and password โ€” with hashed credentials and signed session tokens. But the decision that matters is where access is enforced.

Rather than trust the application layer to remember every rule, I pushed access control down into the database itself with Postgres row-level security. Each row carries its own policy: an employer can only see and edit their own jobs, a candidate can only read published ones, an admin can see across. Even if a bug slipped through the API, the database itself refuses to hand over data the caller isn't entitled to. Security by default, not by discipline.

The API โ€” a typed action behind every click

The whole product runs on typed route handlers โ€” auth, jobs, applications, reviews, notifications, newsletter โ€” in TypeScript against the Postgres backend. The flows that mattered most were the ones that touch more than one party:

candidate appliesโ†’ access-checked writeโ†’ notify employerโ†’ email out

The front-end โ€” polished and responsive

The last layer is the one people actually judge you on. It's a Next.js App Router front-end in TypeScript, built mobile-first and fully responsive, with light and dark theming and considered motion rather than decoration. A consistent, accessible component layer keeps every surface โ€” employer, candidate, admin โ€” feeling like one product, and rich-text editing handles job descriptions and content without fighting the user.

What I'm proudest of here isn't any single feature โ€” it's that one person carried a real, multi-role product from an empty repository to something people use, and made the boring, invisible parts (auth, access, data integrity) the strongest parts of it.
Next.jsTypeScriptReact SupabasePostgreSQL + RLSJWTbcrypt TailwindFramer MotionTransactional emailVercel
โ† back to projects

Visit the live site โ†’