Sign in

Dominik Hofer

@dominikhofer.me
412 followers 276 following 475 posts

Crafting billow.so @ trueform.agency at day. Building @morgen.blue and tinkering with my personal website at night. 🔗 dominikhofer.me 📌 Switzerland

PostsRepliesMedia
Dominik Hofer @dominikhofer.me · 02/10/2026
Little Billy interaction exploration for billow.so ☁️
010
Dominik Hofer @dominikhofer.me · 23/07/2026
My “studio”:
4 preview panels with a properties sidebar where the user can tweak the visuals.
030
Dominik Hofer @dominikhofer.me · 23/07/2026
Inspired by the best color palettes out there: nature.
Screenshot of a paper.design canvas showing the visuals with the nature image that inspired them next to them.
130
Dominik Hofer @dominikhofer.me · 23/07/2026
Worked a bit more on the art direction/branding for @morgen.blue. I really like this “dreamy” look I ended up with and even built myself a little tool where I can generate more similar background visuals like these. #buildinpublic
Your personal daily web newspaper.Read what you curate. Not what an algorithm serves.No infinite feeds. No unread counts.Intentional & calm consumption.
170
Dominik Hofer @dominikhofer.me · 20/07/2026
As always, it’s the simplest productivity techniques that work the best. dominikhofer.me/ticking-boxes
041
Dominik Hofer @dominikhofer.me · 17/07/2026
I really like how @morgen.blue’s ”discover” page is coming together. Especially the expand interaction 🪄 #buildinpublic
1100
Dominik Hofer @dominikhofer.me · 09/07/2026
A stack of emails and text messages and one question: Who committed the murder and why? dominikhofer.me/the-appeal
000
Dominik Hofer @dominikhofer.me · 04/07/2026
And what makes them look iconic. dominikhofer.me/how-metro-maps-evol…
000
Dominik Hofer @dominikhofer.me · 15/06/2026
Which world cup countries would qualify for the knock-out stages based on their per-capita CO2 emissions. via @republik.ch
Satirical infographic titled "Challenge-Accepted-WM 2026 — Wenn die Klimabilanz entscheiden würde…" ("If the climate footprint decided…"), showing a fictional 2026 World Cup group stage where teams are ranked by per-capita CO₂ emissions (tonnes per year) instead of match results — lower emissions rank higher and earn more points. Twelve groups (A–L) each list four nations with their emissions value and points. Group winners include Mexico (4.35), Bosnia-Herzegovina (6.14), Haiti (0.25), Paraguay (1.92), Ivory Coast (0.57), Tunisia (2.47), Egypt (2.21), Cape Verde (1.13), Senegal (1.05), Jordan (2.78), DR Congo (0.05), and Ghana (0.78). High-emission nations finish last in their groups, such as Qatar (27.60), Saudi Arabia (19.66), Belgium (16.79), USA (15.81), South Korea (13.70), and Curaçao (12.34).
110
Dominik Hofer @dominikhofer.me · 11/06/2026
Followers not found.
A screenshot of my profile at 404 followers
160
Dominik Hofer @dominikhofer.me · 07/06/2026
Folded my first #origami crane today because I needed a break from studying 😶‍🌫️ Let's hope it brings me luck for the exams :)
Origami Crane
020
Dominik Hofer @dominikhofer.me · 30/05/2026
I always imagine a little gopher inside the web server frantically hitting a red "danger" button when reading sentences like this 😂 #golang
"In this scenario, Go’s servemux considers the patterns to be in conflict, and will panic at runtime when initializing the routes."
010
Dominik Hofer @dominikhofer.me · 29/05/2026
Last Tuesday, I completed my latest PACT. dominikhofer.me/30-days-of-building…
020
Dominik Hofer @dominikhofer.me · 26/05/2026
The source detail page is also coming along nicely. #morgenblau #buildinpublic
Screenshot of an RSS reader showing the source page for "Dominik Hofer | Posts" from dominikhofer.me. Stats display weekly frequency, last post 1 day ago, 112 total posts. A list of recent posts is visible: "Higher cadence," "It's a focus problem," "The inefficient way," "A new commit(ment)," and "30 days of writing."
070
Dominik Hofer @dominikhofer.me · 26/05/2026
Morgenblau's codebase rn:
GitHub language breakdown: Go 64.5%, TypeScript 32.5%, CSS 2.2%, Makefile 0.5%, JavaScript 0.1%, HTML 0.1%, Shell 0.1%.
050
Dominik Hofer @dominikhofer.me · 25/05/2026
Saving posts in Morgenblau has landed, which also means that a second lexicon is now officially in use. #morgenblau #buildinpublic
PDSls showing the collections on dominik.social: a wide spread of ATProto lexicons across nine namespaces, with blue.morgen.feed.save and blue.morgen.feed.subscription highlighted.
050
Dominik Hofer @dominikhofer.me · 24/05/2026
Published a lexicon for the first time 🥳 Well, four actually + the permission set. Which means that the permission screen now looks really clean :) Link to the lexicons: pdsls.dev/at://did:plc... #morgenblau #buildinpublic
Eurosky.social OAuth authorization screen. Left column: heading "Authorize" with subtitle "Grant access to your @dominik.social account." Right column lists two items: "An application on your
device wants to access your @dominik.social account," and "Morgenblau: Manage your Morgenblau subscriptions, saves, shares, and follows." Two buttons at the bottom right, "Deny access" and a
blue "Authorize."
290
Dominik Hofer @dominikhofer.me · 21/05/2026
The sources tab now is a bit more polished and shows post frequencies and when the last post was published so you can quickly spot noisy or abandoned feeds. #morgenblau #buildinpublic
Screenshot of the Morgenblau Sources page listing feeds like Aaron Francis, Ali Abdaal, Chris Raroque, and Kurzgesagt. Each row shows a waveform icon with a post-frequency label (Weekly, New, Irregular) and an hourglass icon with a relative timestamp of the latest post (22h ago, 1d ago, 1w ago, etc.).
050
Dominik Hofer @dominikhofer.me · 20/05/2026
Decided to remove the “Create” part from the app. Instead, the menu now looks like this: Discover: People & sources to follow Sources: Manage/view individual sources Library: Saved articles and ones shared by your network Digest: “Feed” with daily buckets #morgenblau #buildinpublic
Menu of Morgenblau with four items: Discover, Sources, Library & Digest
140
Dominik Hofer @dominikhofer.me · 18/05/2026
Feed entries in Morgenblau are now grouped into daily digests so you don’t have to worry about neither unread counts nor overwhelm when opening it. Hope this gives more of a “newspaper”- instead of an “infinite feed”-feeling. #morgenblau #buildinpublic
Morgenblau's Consume view on May 14, showing a date scrubber and a feed card with one blog post and four YouTube videos from four days ago. Tagline at the bottom: "Your calm window into the Atmosphere."
040
Dominik Hofer @dominikhofer.me · 17/05/2026
Codebase pretty much halved and the app is way more performant and “ATproto-native” now. Very happy with how this migration turned out: D #morgenblau #buildinpublic
Screenshot of a pull request titled "Rewrite Morgenblau as a Go + React app #4" on dominik.social/morgenblau, opened by dominik.social and targeting main. The description explains the PR replaces the Laravel/Inertia implementation with a new stack of Go API, React/Vite/Tailwind frontend, SQLite storage, goose migrations, and sqlc-generated queries. A "What changed" section lists rebuilt auth and routing in Go, the new SQLite data layer, reimplemented subscription and feed features, SSRF-safe HTTP handling, a rebuilt frontend, removal of the old PHP/Laravel/Inertia code, and updated docs. The test plan is just `make test`. The diff stats at the bottom show +16,174 / −37,892 across 498 changed files.
1100
Dominik Hofer @dominikhofer.me · 14/05/2026
YouTube videos now also open in a clutter-free interface inside of Morgenblau. Soooo much better than the native ui 😮‍💨 #morgenblau #buildinpublic
Youtube video embedded into the Morgenblau "reader" view.
040
Dominik Hofer @dominikhofer.me · 13/05/2026
The reader becomes usable 🥳 Extraction for feeds without embedded content also works pretty well (see second article that I open in the demo). #morgenblau #buildinpublic
050
Dominik Hofer @dominikhofer.me · 09/05/2026
Started with the visual polish today. Always makes me more excited to work on an app when it starts to actually look good. #morgenblau #buildinpublic
A clean feed view in Morgenblau showing blog posts and YouTube videos from followed authors, listed chronologically as minimal cards.
0110
Dominik Hofer @dominikhofer.me · 07/05/2026
Feed fetching works. As you can see, I only focused on the backend part of the feature 🙃 #morgenblau #buildinpublic
Morgenblau "Consume" feed showing a minimal, centered list of entries from different feeds. Each with author in italic script, bold title, and source/time metadata.
040
Dominik Hofer @dominikhofer.me · 05/05/2026
Summer-ish vibes 📍 Zurich, District Zurich, Zurich, Switzerland, Zurich, CH #GrainSocial grain.social/profile/did:plc:fthx2g…
Train station of Zurich during sunset
030
Dominik Hofer @dominikhofer.me · 01/05/2026
Waaaay better 😌 #morgenblau #buildinpublic
Morgenblau's Add a source modal showing two discovered feeds for overreacted.io (Atom and RSS), with editable Title and Source type fields for the selected Atom feed.
020
Dominik Hofer @dominikhofer.me · 01/05/2026
Business is booming soooo hard 📈😂 billow.software
Billow Cockpit dashboard for the Trueform Test workspace: a revenue line chart sitting flat at zero through April before spiking to CHF 1.10 on May 1. Sidebar cards show 1 unpaid invoice (CHF 108.10), CHF 1.08 revenue this year, 3 active clients. An Open Invoices table lists invoice 2026-0002 to Trueform for CHF 108.10, dated May 1 2026, awaiting payment.
000
Dominik Hofer @dominikhofer.me · 30/04/2026
Started to work on the “Add Source” flow. Save to PDS already works, the UI still needs a bit of polish. #morgenblau #buildinpublic
Morgenblau's "Add a source" modal: pasting https://dominikhofer.me has auto-discovered the site's RSS feed, with title and source type pre-filled. A note clarifies that subscriptions are currently public, with selective private ones coming.
050
Dominik Hofer @dominikhofer.me · 29/04/2026
The overall layout is coming along nicely. #morgenblau #buildinpublic
Screenshot of the Morgenblau web app on the Consume tab, showing an empty feed state with the tagline "Your calm window into the Atmosphere." The user menu is open in the top right, displaying the account "Dominik Hofer (@dominik.social)" with Settings and Log out options.
070
Dominik Hofer @dominikhofer.me · 28/04/2026
Morgenblau is now being powered by Laravel + Inertia + React. Probably worth it's own blog post about the why behind the decision, but the TLDR is: Laravel is just my favorite framework and where I'm most productive in :) #morgenblau #buildinpublic
Screenshot of a browser on tangled.org showing a merge commit in the dominik.social/morgenblau repository. The commit, "Merge pull request #4 from hfrdmnk/stack-laravel — Switch stack: TanStack Start → Laravel + Inertia + ATProto OAuth," authored by Dominik Hofer one minute ago, touches 208 files (+24,661 / −552). The sidebar shows a new .claude/ directory with rules/ (inertia.md, pest.md, php.md), settings.json, and skills/ folders for inertia-react-development, laravel-best-practices, morgenblau-designer, pest-testing, and socialite-development. The diff pane previews the new rule files routing Claude to the appropriate skill based on file paths.
030
Dominik Hofer @dominikhofer.me · 27/04/2026
Simple login flow with granular permissions #morgenblau #buildinpublic
260
Dominik Hofer @dominikhofer.me · 27/04/2026
Coding Buddy, #naida #GrainSocial grain.social/profile/did:plc:fthx2g…
My dog Naida laying on her blanket.
040
Dominik Hofer @dominikhofer.me · 23/04/2026
Hello world from @eurosky.social 🇪🇺
PDSls.dev showing dominik.social's repo hosted on eurosky.social, with a list of collections spanning Bluesky, Tangled, Bookhive, Cosmik, Grain, Popfeed, and Germ Network lexicons.
2220
Dominik Hofer @dominikhofer.me · 14/04/2026
Sooooo excited for going through this course! @emilkowal.ski animations.dev
animations.dev Motion Passport Web Edition:
Orange booklet cover with embossed X pattern and the name "Dominik Hofer" in large cream lettering at the bottom.
030
Dominik Hofer @dominikhofer.me · 14/04/2026
I really liked this quote from the latest @mymind.com "Weekly Bloomscroll" newsletter. These simple happy moments at home in the evening are always a favorite part of my day.
“To be happy at home is the end of all human endeavor. The sun looks down on nothing half so good as a household laughing together over a meal, or two friends talking over a pint of beer, or a person alone reading a book that interests them; and all economics, politics, laws, armies, and institutions, are only valuable in so far as they prolong and multiply such scenes.”

by C.S Lewis
071
Dominik Hofer @dominikhofer.me · 11/04/2026
Today is the last day of my writing PACT where I set out to write and publish a blog post every day for 30 days. dominikhofer.me/30-days-of-writing
260
Dominik Hofer @dominikhofer.me · 10/04/2026
The recent happy moments with our dog. dominikhofer.me/the-first-few-days
030
Dominik Hofer @dominikhofer.me · 06/04/2026
Today was a big day! dominikhofer.me/welcome-naida
140
Dominik Hofer @dominikhofer.me · 03/04/2026
‌We as humans are all creators by nature. dominikhofer.me/the-creator-manifes…
050
Dominik Hofer @dominikhofer.me · 31/03/2026
Small copy to clipboard interaction in billow.software. #buildinpublic
120
Dominik Hofer @dominikhofer.me · 30/03/2026
The achievements panel in @mymind.com is gorgeous 😍
Achievements page from mymind showing a collection of decorative trading-card-style badges with titles like "The Awakening," "The Mind Palace," and "Wandering Mind," displayed in a grid on a light gray background.
0110
Dominik Hofer @dominikhofer.me · 30/03/2026
Running in circles can be enjoyable too. dominikhofer.me/where-athletes-meet
030
Dominik Hofer @dominikhofer.me · 25/03/2026
Just paste your meeting notes into Billow and let Billy handle the rest 🤖 #buildinpublic
030
Dominik Hofer @dominikhofer.me · 25/03/2026
An archipelago of 100’000 happy moments for you to explore. dominikhofer.me/happy-map
000
Dominik Hofer @dominikhofer.me · 18/03/2026
Billow was pixel-perfectly designed by @cedric.design in Framer. To implement the design, I created a little plugin that generates a markdown spec from any selected frame to paste into Claude Code as reference. Works great so far 🙌 #buildinpublic
A Framer canvas showing the "Billow" project's Accounting settings page, with the "Framer Spec" plugin open in a popover. The plugin displays a generated design spec for the selected "Stack" frame — showing it has 31 descendants — with a prominent blue "Copy Spec" button to copy the structured output to the clipboard.
060
Dominik Hofer @dominikhofer.me · 17/03/2026
A finance book that reads like a piece of philosophy. dominikhofer.me/the-art-of-spending…
041
Dominik Hofer @dominikhofer.me · 12/03/2026
A philosophical take on how to cope with the uncertainty in life. dominikhofer.me/the-good-ones-among…
000
Dominik Hofer @dominikhofer.me · 11/03/2026
CMDK Menu in billow.software #buildinpublic
Billow CMDK Menu: The universal search and quick actions menu, triggered via the search bar, provides instant access to key workflows. Actions include adding leads, starting projects, sending invoices, and managing contacts and accounts, each with keyboard shortcuts for power users. Settings shortcuts like workspace configuration and team invitations are also surfaced. The palette overlays the Invoices view, which displays draft invoices and revenue summary cards in the background.
040
Dominik Hofer @dominikhofer.me · 07/03/2026
Having fun with shaders 🪄 #morgenblau #buildinpublic
000