Skip to content

Web and desktop apps, Live

hejj

A calm, fast, offline-first start page

A browser start page for your links, notes, lists, and live widgets. Instant even offline, synced across devices, with a Mac messenger app.

The hejj.net homepage recorded live: the h logo assembles from orbiting app icons while the Hejj Messenger card counts back to the year 2000 and plays a buddy-list chat with sara, then the page scrolls to an interactive board demo that switches between Workday, Metrics and Trip planning boards, and on to the Telegram bot and custom widget cards.
hejj.net, recorded live

Sketch to Ship

Started as one calm board for everything you open daily.

The shipped hejj Work board: tabs for Home, Work, Metrics, Lisbon and Money, a Daily links container, a site-uptime widget, a Standup note, Vercel and Stripe links, a clock and a Lisbon offsite photo.Shipped
Hand-drawn sketch of the hejj board layoutSketch

Stack

  • Next.js
  • React
  • TypeScript
  • Offline-first
  • IndexedDB
  • SQLite
  • Prisma
  • Tauri
Status
Live
Type
Web and desktop apps

The problem

The links, notes, and numbers you check every day are spread across tabs, bookmarks, and apps, and a new tab shows you none of them.

What it does

hejj is a fast, private start page you set as your browser homepage. Keep links, notes, lists, and images on boards, group them into containers on a snap grid, and add live widgets. Everything lives on your device first, so a new tab opens instantly, even offline, and your boards sync across your devices.

How it's built

Next.js 16 (App Router), React 19, and strict TypeScript. The browser keeps your data in IndexedDB (Dexie) with an outbox of field-level changes. The server merges them using hybrid logical clocks and per-field last-writer-wins, then notifies other devices over server-sent events. The server runs SQLite (WAL) through Prisma, with Better Auth and Cloudflare R2 for media. Search is instant and offline: MiniSearch runs in a Web Worker, and an FTS5 index on the server is built from domain events. It all runs as one Docker container behind Caddy, and Litestream streams the database to R2. The Mac app is built with Tauri.

Key features

Boards

  • Links, notes, lists, images, and pages on boards you switch between with tabs
  • A snap grid with containers that keep related items together
  • Paste a link, jot a note, or start a list with "- " to add it
  • ⌘K search across titles, notes, tags, and descriptions as you type
  • Works offline and syncs across your devices

Widgets

  • Built-in widgets, including clock, calendar, countdown, year progress, tracker, feeds, and site uptime
  • Business numbers from Stripe, RevenueCat, Polar, and the App Store and Google Play
  • Custom widgets from any app over plain HTTPS and JSON. You approve each one once and can revoke it at any time
  • Apps only get a random grant id, never your identity. Developer docs and a playground are at hejj.net/developers

Save from anywhere

  • Telegram bot @hejjapp_bot: send a link, a note, or a photo, pick the board with one tap, and it's there the next time you open a tab

Hejj Messenger

  • An early-2000s-style messenger built into hejj: a buddy list, purple windows, emoticons, away messages, and BUZZ!!!
  • Runs in the browser, and as a desktop app on the Mac

Mac app

  • Hejj Messenger for Mac: free, for macOS 13 Ventura or later, with one download for Apple Silicon and Intel
  • The buddy list lives in the menu bar; every chat opens in its own desktop window and reopens where you left it
  • BUZZ!!! shakes the chat window and bounces the Dock icon
  • Mac notifications for new messages and an unread count on the Dock icon
  • Start at Login, and quiet updates that are signature-checked before they install
  • Sign in with your hejj account in the browser. Chats are stored encrypted on the Mac
  • Signed with a Developer ID and notarized by Apple

Engineering

  • Unit, integration, and property-based tests (Vitest, fast-check)
  • End-to-end tests in Chromium, Firefox, and WebKit with Playwright, plus axe accessibility checks
  • A JavaScript size budget per route, enforced in CI
  • A backup and restore drill that restores the database from the R2 backup and boots the app

Hejj Messenger

Purple windows, a buddy list, smileys, away messages and BUZZ!!!, in two versions: on the web, built into hejj, and as a free Mac app in your menu bar.

See the Hejj Messenger project
  • The hejj homepage hero: "A calm home for everything you open every day" with Create your board and Sign in buttons beside the Hejj Messenger card, showing a retro buddy list and a chat window with sara.
    A calm start page with a messenger built in
  • A hejj board demo on the homepage: the Work board with a Daily links container (Linear, GitHub PRs, Figma, Gmail, Calendar, Plausible), a site-uptime widget, a Standup note, a clock and a Lisbon offsite photo, above the Workday, Metrics, Trip planning and Money board tabs.
    Links, notes and widgets on one board
  • The "Save from anywhere. See everything." section: a hejj Telegram bot conversation filing a link into a Reading container, and a custom widget fed by a JSON POST to /api/apps/v1/push/today showing a +$412 metric with a sparkline.
    Telegram bot and custom widgets
  • The hejj homepage on a phone: the h logo card, the headline "A calm home for everything you open every day", Create your board and Sign in buttons, and the Hejj Messenger card below.
    hejj.net on mobile

Contact

Want something like this built?