HJORTUR FREYR
02 — SELECT LEVEL

All work

Six projects that shipped and one that did not. Each page covers what was actually broken, the decisions that fixed it, and the parts I got wrong.

Timr — TIMR.IS
LEVEL 01SHIPPED — 2026

Timr

Shift scheduling and time tracking for Icelandic businesses. Web rosters, geofenced clock-in on mobile, and hours classified against whichever collective agreement applies.

LARAVELNEXT.JSREACT NATIVEMYSQL
READ THE CASE STUDY ▶
Bílahótel.is — BILAHOTEL.IS
LEVEL 02UPDATED — 2026

Bílahótel.is

Long-term car storage bundled with servicing done while the car sits parked. I built it on Laravel in 2020, ran it for two seasons, then rebuilt it in seventeen days.

NEXT.JSPRISMICPRISMABORGUN
READ THE CASE STUDY ▶
Motorhome.is — MOTORHOME.IS
LEVEL 03SHIPPED — 2025

Motorhome.is

A campervan rental site for Iceland with the full booking funnel built in, search to payment. Content comes from a CMS; every price comes from the rental backend.

NEXT.JSPRISMICTAILWINDCAREN API
READ THE CASE STUDY ▶
KM Registry — GEYSIR-KM.IS
LEVEL 04SHIPPED — 2026

KM Registry

Long-term lease customers report their odometer once a month through a form with no login. The difference between two readings is what the lease bills on.

NEXT.JSPRISMAPOSTGRESRESEND
READ THE CASE STUDY ▶
PosterQuest — POSTERQUEST
LEVEL 05SHIPPED — 2025

PosterQuest

A daily movie-guessing game. Everyone gets the same poster, pixelated into unreadability, and five guesses — each wrong answer sharpens the image one step.

NEXT.JSREACTSUPABASETMDB API
READ THE CASE STUDY ▶
Route 1 — ROUTE-1
LEVEL 06SHIPPED — 2023

Route 1

A brand site for an Icelandic car rental, built on a flat-file CMS with no database. Reservations went to a specialist vendor — the decision the project turns on.

STATAMICVUETAILWINDLARAVEL
READ THE CASE STUDY ▶
03 — LOADING

Still loading

Started, still unfinished, and honest about why.

LOADING — QUEUE1 IN FLIGHT
  • Gjafalistar.isLOADING

    An Icelandic gift registry. Paste a product link and it pulls the title and image off the page — everything works except reserving an item, which is the point.

    NEXT.JSREACTLARAVELTAILWIND
NEXT LEVEL

Got a level for
me to build?