Hjalmar Karlsen

Hjalmar Karlsen

I build native apps for iPhone, Apple Watch, and Mac.

My shift and pay tracker Tidex is live on the App Store.

  • Oslo, Norway
  • Norwegian, English
TidexLyricLintAmpoteketKvistkvilPaeonia

Skills

iOS and Apple

Tidex is live on the App Store, with widgets, Live Activities, and Siri shortcuts in 46 languages. kvil runs on Apple Watch and logs weight with Apple Health. Kvist is a native Mac app.

  • Swift
  • SwiftUI
  • SwiftData
  • StoreKit 2
  • WidgetKit
  • ActivityKit
  • HealthKit
  • watchOS
  • macOS
  • App Store Connect
  • Swift Package Manager
  • Git

Backend and data

Tidex syncs both ways with a Supabase server that I host myself. The Vipps checkout in Ampoteket withdraws stock exactly once, even on retry, and CI tests its row-level security.

  • SQL
  • Supabase
  • PostgreSQL
  • Row-level security
  • REST APIs
  • Cloudflare Workers
  • Offline-first sync
  • CI

Web

LyricLint is an offline editor that autosaves drafts locally, so they survive a crashed tab. Ampoteket is a web shop with a camera QR scanner. I built this site with SvelteKit too.

  • TypeScript
  • JavaScript
  • SvelteKit
  • Svelte 5
  • Next.js
  • React
  • Tailwind CSS
  • HTML
  • CSS
  • WCAG 2.2
  • Playwright
  • GitHub

Projects

Tidex

iOS app

Shift tracking and payroll for shift workers. The app has been free since version 3.0.

  • Local-first SwiftData storage with two-way sync to a self-hosted Supabase server
  • A payroll engine that applies wage history, supplements, and breaks to each shift
  • Friends can share shifts and chat in real time
  • Widgets, Live Activities, and Siri shortcuts, translated into 46 languages

Swift, SwiftUI, SwiftData, Supabase, PostgreSQL, WidgetKit, ActivityKit, Swift Charts, Next.js

LyricLint

Web app

An offline lyric editor and linter for Genius transcriptions.

  • CodeMirror editor that preserves exact Genius markup
  • Lint rules that cite the Genius source behind every warning
  • Works offline, with local autosave so drafts survive a crashed tab

SvelteKit, Svelte 5, TypeScript, CodeMirror 6, IndexedDB, Playwright

Ampoteket

Web shop and stock system

Self-service component sales for an electronics workshop.

  • Account-free Vipps checkout that withdraws stock exactly once, even on retry
  • Camera QR scanner and a shelf map that points to the right drawer
  • Row-level security and SQL concurrency tests in CI

SvelteKit, Svelte 5, TypeScript, Supabase, PostgreSQL, Cloudflare Workers, Tailwind CSS

Kvist

macOS app

A compact native Git client that lives beside your editor.

  • Staging, stashing, committing, and diffs through the system git command
  • Vector-rendered history graph with reflog-based recovery
  • Commit subjects generated through the local Codex or Claude CLI

Swift, SwiftUI, macOS, Swift Package Manager, Git

kvil

iPhone and Apple Watch app · backburner

Intermittent fasting with a separate eating window for each weekday.

  • A different eating window for each weekday, with today-only adjustments
  • Optional weight logging with Apple Health and a local SwiftData history

Swift, SwiftUI, SwiftData, HealthKit, StoreKit 2, WidgetKit, watchOS

Paeonia

iOS app · backburner

Daily rituals for couples, with shared streaks and memories.

  • Daily prompts that stay hidden until both partners answer
  • Shared streaks with forgiving repair rules
  • Local-first SwiftData with background Supabase sync

Swift, SwiftUI, SwiftData, Supabase, StoreKit 2, WidgetKit, Next.js

Have an idea for a website or an app?

Send me a few lines about what you have in mind. You do not need any technical knowledge. I build it and launch it, and I explain each step in plain language.