My Projects

Selected applications I designed, built and shipped, from the data model up to the interface.

Hero

Web application, 2026

Status
Live
Role
Sole developer
Interface
German

An application for shift planning: roster, vacation requests and the shift-swap marketplace bundled in one place instead of spread across several tools.

All three are now built. An admin imports each month's roster from the roster planners' Excel or CSV file; every member then sees only their own month, as a colour-coded calendar, and can offer a day for a swap straight from it. Desired days off and vacation are requested in the app and only reach the roster once an admin approves them.

On the shift-swap marketplace, every listing states what is offered and what is wanted in return; the noticeboard shows every open listing, split by gender, with name and shift-type filters. A dedicated admin panel manages accounts, listings, rosters and requests, with a safe "view as" impersonation and a log of every admin action. An annual planner is the one module still to come.

Hero's landing page: the headline “Willkommen bei Hero - Dein digitaler Dienstbegleiter.” (German for “Welcome to Hero - your digital duty companion”), a row of colour-coded shift-code pills (early/late/night/off), the “Jetzt Anmelden” and “Konto Erstellen” buttons, and three feature tiles below for roster, vacation requests and the shift-swap marketplace.
The landing page at hero.ai-ronaghi.de. Its three building blocks (roster, vacation and shift-swap marketplace) are all in service now.

What it does

  • Sign-up and sign-in, including self-service password reset
  • Your own monthly roster as a colour-coded calendar with public holidays, monthly statistics and a PDF download
  • Offer a roster day for a swap straight from the calendar
  • Request desired days off and vacation; an admin approves or rejects each request
  • Post a shift-swap listing: single day or block, offer and request
  • A noticeboard with gender-split columns plus name and shift-type filters
  • Edit, re-status or withdraw your own listings
  • Admin panel: users, listings, roster import from Excel/CSV, request approvals, "view as" impersonation and an action log

How it is built

  • Next.js 16 (App Router, Turbopack) with React 19 and TypeScript
  • Tailwind CSS v4 with shadcn/ui on Base UI
  • Supabase (Postgres + Auth), no ORM
  • react-hook-form with Zod validation
  • SheetJS reads uploaded roster spreadsheets (.xlsx / .csv) on the server
  • Deployed on Render

Technology: Next.js, React, TypeScript, Tailwind CSS, Supabase, shadcn/ui, Render

Open Hero

Schedule

Web application, 2026

Status
Live
Role
Sole developer
Interface
German

A noticeboard for shift swaps. Someone who wants to give away a shift posts an Anzeige: a listing carrying both what they offer and what they want in return. Anyone who finds a match contacts the poster directly.

The application's job ends the moment two people have found each other: the pair reports the agreed swap to the Betriebsbüro, the company's roster office, and only that office changes the roster. The app neither plans shifts nor edits a roster, and the interface keeps that boundary visible rather than blurring it.

The application is German-language throughout, for a German workforce; the link below opens it exactly as its users see it.

Schedule's landing page: on the left two example listings that match each other: one offers a night shift and wants an early shift, the other the reverse. On the right the German headline “Tauschpartner finden. Den Rest regelt ihr.” Below them, the three steps of a swap.
The landing page at fs.ai-ronaghi.de, showing two example listings that match and the three steps of a swap. Step 03, reporting it to the roster office, sits deliberately outside the application.

What it does

  • Post a listing: offer and request in a single form
  • A noticeboard of every open listing, with the poster's contact details
  • Edit, re-status or withdraw your own listings
  • Accounts, profiles and role-gated areas
  • A dedicated panel for the roster office
  • Invite-only access from the roster office, with a waitlist at /signup
  • The noticeboard is free to browse; posting listings or sending invitations needs the "Karo Lite" membership ($2.50/month) after a free trial

How it is built

  • Next.js 16 (App Router) with React 19 and TypeScript
  • Tailwind CSS v4 on a custom token system where colour encodes the shift type
  • Sign-in and accounts through Clerk
  • Neon Postgres with Drizzle ORM, modelled relationally throughout
  • Every page, route and server action authorises itself
  • Deployed on Vercel

Technology: Next.js, React, TypeScript, Tailwind CSS, Clerk, Neon Postgres, Drizzle ORM, Vercel

Open Schedule