Latest Posts (20 found)
Dominik Weber 4 weeks ago

Rules for creating good-looking user interfaces, from a developer

Creating good-looking user interfaces has always been a struggle for me. If you're in the same camp, this might help. I recently redesigned [Lighthouse](https://lighthouseapp. io/), and during that process built a system that helped me create much better designs than I ever did before. This system is about achieving the best possible design with the least amount of effort

1 views
Dominik Weber 6 months ago

An approach for automated fact checking

A short while ago I took part in a hackathon from the Wiener Zeitung, where the theme was to tackle problems in the media space. Since I’m working on an RSS feed reader myself, I have a lot of ideas, but not the time to work on them. This hackathon was the perfect opportunity to validate if the fact-checking system I thought of some time ago could work. The result was better than expected.

2 views
Dominik Weber 9 months ago

Self-hosting HyperDX for fun and profit

HyperDX is a relatively new, but complete, product in the observability space. It supports logs, spans, session replay, dashboards, alerts, and everything else necessary for a complete observability solution. I compared its features to a list of other solutions and HyperDX came out on top.

1 views
Dominik Weber 9 months ago

AsyncLocalStorage and how to use it to reduce repetition of log data

AsyncLocalStorage is a Node.js class that makes it possible to store global data for one specific function execution. It doesn’t matter if the function is synchronous or asynchronous, but in practice it’s more relevant for async functions.

0 views
Dominik Weber 9 months ago

Type-safe logging with custom string interpolation

In an effort to improve observability of Lighthouse, I updated the logging infrastructure and switched from console.log to pino. That led me down the rabbit hole of typing the logging functions. I wanted to create a function that takes a message string and data object, where the message string can reference values in the data object, and TypeScript verifies that all referenced values are in the data object.

1 views
Dominik Weber 9 months ago

On log levels

Logs are an important part of observability. When something went wrong, logs help with the investigation and understanding of what happened. One of the most common problems is inconsistent use of log levels. If that’s the case, filtering by log level is almost useless and logs become hard to read. Defining and documenting log levels helps maintain consistency

0 views
Dominik Weber 9 months ago

Monorepo setup with TypeScript, Tailwind, NextJs, and WXT (browser extension development) with shared components

The most-requested feature for Lighthouse is a browser extension to add articles to the library. Lighthouse has always been a monorepo to share code between the NextJs application and a couple of Lambda functions. Since there was only one application that used UI components, they were always part of the NextJs codebase. To avoid code duplication with the browser extension, the UI components had to move to a separate package.

0 views
Dominik Weber 1 years ago

When to choose the freemium pricing model as solo founder

Pricing is a difficult topic, especially for first-time SaaS founders who don't have experience in that area. One common question is whether the product should have a free plan. I have read many articles on that topic, and received a lot of contradictory advice. Often it's just a "it worked for me so it'll work for you" kinda thing

0 views
Dominik Weber 1 years ago

Pivoting to a well-defined product category

I'm a solopreneur and working on my first serious product. It's called Lighthouse, and combines the features of an RSS feed reader, newsletter reader, and read-it-later app. The problem that I want to address is that when people subscribe to many blogs, newsletters, YouTube channels, and various other sources, the volume of content quickly becomes overwhelming

0 views
Dominik Weber 1 years ago

Product naming trends over time

It took me months to settle on the name Lighthouse for the product I'm working on, which combines the functionality of an RSS feed reader, a newsletter reader, and a read-it-later app, to fight content overload. Some people excel at naming their products. I'm not one of them. I experimented a lot with different strategies

0 views
Dominik Weber 1 years ago

About risk taking in life and job

When speaking with individuals in the finance community who aim to maximize their wealth, the most common strategy I encounter regarding property investment is to buy as much as you can reasonably afford. If you have enough cash to buy one flat outright, you could alternatively buy three flats by taking a mortgage

0 views
Dominik Weber 1 years ago

What I want to achieve with Lighthouse

I've been learning from articles, blog posts, and newsletters since I was in school. They're not my only source of knowledge, but they are great to stay up to date, get practical knowledge from people who've done it, expose myself to new ideas, and much more. Over the years I've gone through a couple different tools. Initially, I opened everything in a new tab

0 views
Dominik Weber 1 years ago

Think of dopamine as finite resource to spend on activities

We usually think of dopamine as a feel-good chemical we get from specific activities, without considering that dopamine production has limits. What if we reversed our thinking to dopamine-first, that it's a finite resource we can spend on activities. Dopamine is known as the motivation and reward chemical in the brain

0 views
Dominik Weber 1 years ago

Reading articles and newsletters reduces blind spots

Reading articles, blog posts, and newsletters is such an enjoyable activity for me because it reduces blind spots without needing a lot of cognitive effort. Finding out about a novel approach that I can use in my work, or a tool that gives me new capabilities, is exciting. I get to see what else is out there without expending much mental energy

0 views
Dominik Weber 1 years ago

Startups and marketing

When I heard marketing professionals giving advice, it never fully made sense to me. Until a couple days ago, when it finally clicked. An important distinction is the state of the company. As an indie developer I was looking at marketing from the point of view of a new product (getting first users), and marketers work through the lens of established businesses

0 views
Dominik Weber 1 years ago

Refactoring an entire NextJs application to server components

Next.js 13 introduced the app directory and React Server Components. On Star Wars day (May 4th) a couple months later, React Server Components was marked as stable. Server components separate page rendering, with some parts rendered on the server and others on the client. The key difference is that server components are always rendered on the server, not prerendered on the server and hydrated on the client. Server-side rendering existed before, but now for the first time it’s possible to mix it with client-side rendering on the same page.

1 views
Dominik Weber 3 years ago

Vertical tabs in Visual Studio Code

I love vertical tabs. I use them wherever possible. Mostly in my browser (Firefox) and the IDEs I use. For years I tried to have the same in VS Code too, but couldn't find a way. And now, finally, I found one. It's actually quite easy. First make sure that `View->Appearance->Show secondary side bar` is checked. . [](. /1. png) Then drag `Open Editors` to the secondary sidebar. . [](. /2

0 views
Dominik Weber 6 years ago

List of Built-In Helper Types in TypeScript

TypeScript has a few very useful helper types predefined, which aren’t known widely enough. Here’s a list of them with examples and explanations how they work for the more complex ones. These helper types are either conditional or mapped types. To get an understanding how they work in general, check out my other blogpost Mapped Types in TypeScript.

1 views
Dominik Weber 7 years ago

Setting up a Reverse-Proxy with Nginx and docker-compose

Nginx is a great piece of software that allows you to easily wrap your application inside a reverse-proxy, which can then handle server-related aspects, like SSL and caching, completely transparent to the application behind it.

0 views