Hey, I'm Thor

— multipurpose web developer from Belgium 🇧🇪

Projects

Slow Travel Pass

Slow Travel Pass is a collection of complete trip plans for 25+ slow travel trips in Belgium. These trips were hand-crafted by my colleagues Dries and Manon, building on the experience of having planned 600+ custom trips for slow travellers in Belgium (with great reviews!).

Slow Travel Pass takes travellers across Belgium's varied natural, cultural and architectural features, in formats that fit any traveller's time and effort budgets.
Slow travel resource website

Browser History Explorer

Time we spend on computers today is often spent in a browser. I wanted to analyze how I spent my time on several projects a month after working on them; and I found that my browser history was a reasonably good proxy to understand what I did, when.

Unfortunately, the history view of my main browser at that moment (Chrome) did not provide a convenient UI to explore browsing history on a specific date in the past. This is why I built this app, with a calendar as the primary means of navigation.

The app is built with Tauri, SvelteKit and TypeScript. At the moment, it supports Firefox, Safari and Chrome on macOS. You can download Apple Silicon binaries from the Codeberg repository's [releases page](https://codeberg.org/thor/browser-history-explorer/releases). If you're interested in extending operating system or browser support, check out the [notes for contribution](https://codeberg.org/thor/browser-history-explorer/src/branch/main/CONTRIBUTING.md).
Alternative browser history viewer for macOS

Women Don't Cycle (documentary)

_Women Don't Cycle_ is a 2022 documentary by my colleague and Slowby co-founder [Manon Brulard](https://www.linkedin.com/in/manon-brulard). It is a film about what it means to be a woman cycling in different countries around the world.

The documentary was shot during an eleven-month bicycle touring trip from Brussels to Tokio, with Slowby's other co-founder [Dries](https://www.linkedin.com/in/driesvanransbeeck) (for more about their trip, see [_Road to the Rising Sun_](https://roadtotherisingsun.be/)).
Video-on-demand site

Dash

Dash is a browser extension that adds a "new tab" dashboard with widgets driven by personal data from various sources. 

This project started as a design exploration in time management in October 2018. When trying to learn a new skill, or reach certain outcomes in a project, consistency is key. _"Practice a little every day"_, _"Write a little every day"_. But reaching consistency is difficult, it relies on balance. Overspending time on one project takes it away from other projects, a situation I often found myself in (and I still do).

What if you could, ahead of time, plan **time boxes** for all the projects you wanted to work on in a week, or in a month? And crucially, what if you could also nudge yourself into respecting those time boxes by getting frequent and instant feedback on your overall progress?

At the outbreak of COVID-19, and while procrastinating on my thesis work, I experienced a surge in interest to work on this again, and I started implementing a proof-of-concept. Iterating on the above idea, I first built the **"Time Goals"** widget. Later, I built two more related widgets: a "streaks" widget, and an (audio)book-specific time goals widget.

## The Time Goals Widget

 The Time Goals widget consisted of two parts:
- Live time tracking data for my projects, which came from two sources; the [Toggl Track API](https://developers.track.toggl.com/) for my personal projects at the time, and the [Harvest API](https://help.getharvest.com/api-v2/) for my Columbia Road work projects at the time.
- Time goals, which I set in the dashboard, for projects I wanted to commit to at the time. For example, "I want to learn Swedish for 6 hours per week" would be a goal.

The widget then showed my progress towards the goal of each project in a progress bar, dividing the time goal equally over each weekday. With colors, it visually represented how much I was on- or off-balance:
- <span style="color: blue;">Blue</span> meant: completed according to schedule
-  <span style="color: red;">Red</span> meant: overdue, should have been done.
-  <span style="color: gold;">Yellow</span> meant: to be done today.
-  <span style="color: green;">Green</span> meant I "overshot" the goal, or did more than planned given this distribution (can be a bad thing!).

I used this for about two months, and I felt it did help me to achieve a better balance. A new tab page is one you see often, so I would get reminded of my undershooting and overshooting all the time, which would steer my behavior.

I wanted to take this step further, according to my original designs: what if you didn't just set a fixed number of hours as a project goal for a week/month, but would also integrate it with your digital calendar?

Then the tool would help you in more ways:
- When planning, you could add, re-scale and reshuffle calendar events for each project, until each project reached the desired quota of time: _"Is your calendar sound? Does it match your intentions?"_
- Your expectations for a day would be more fine-tuned: the dashboard wouldn't nudge you to work on a project on Tuesday or Wednesday if you wanted to complete it all Thursday.
- When your calendar changed, as it often does, you would see the impact it had on your overall distribution of time for a week/month, and you'd be better informed to make resulting changes.

But while getting somewhere, I had not finished this part of the implementation. Along the way though, I saw more opportunities for this Dashboard that I did try out.

## The "Streaks" Widget

Not everything ought to take a distinguishable number of hours in a weekly plan. A habit can be a small thing, like practicing on Duolingo for a few minutes each day. For these types of commitments, I added a "streaks" widget.

I picked two external services that I wanted to use daily at the time. Both had a "streaks" concept of their own.
- First, there was Vocabulary.com, the object of my [Vocabulary.com Enhancer tools](/projects/vocabulary-com-tools/). The entry would also link to my last-practiced list, so I could directly jump into the next session. 
- Next, there was Readup.com (for which I didn't work yet at the time). Similarly, it showed my last Starred article.

Neither of these had a public API, however. This sparked some creative web engineering to retrieve arbitrary authenticated web app HTML from these sources. I used a web extension to proxy privileged requests with my cookies/credentials to my "new tab" page, which inconveniently was a regular web page. It needed to be a regular web page, because I relied on the Service Worker's Cache API to cache requests for quick loads, and that was not supported in extension pages at the time.

## The book widget

The last widget I added was the book widget. I didn't only want to track time spent on my computer, but also time spent learning otherwise: through books, or audio books, and bring it fairly into consideration along with the rest.

Using the same proxy extension, I could parse my progress on audio books with Audible's web app  (see [this post](/articles/regex-puzzle-either-and/) on a regex challenge therein). I could then set a time goal to finish my book by a certain date. I also worked on fetching progress from Kindle's web app, but if I remember correctly, couldn't sufficiently reverse-engineer the web app to extract my progress.

## Conclusion & legacy

I used a development build of this project for some months as my daily-driver new tab, and enjoyed it! It helped me. However, after some time, I got stability problems with some widgets. Building unofficial APIs for personal data through web scraping does not guarantee stability, as HTML structures might change at any point. Other work encroached; I submitted my thesis, became a full-time employee at [Columbia Road](/work/#Columbia-Road), and _Dash_ faded out of focus.

I've re-pondered this concept sporadically ever since, so I might revisit it at some point.

### Potential

About a year after shelving this project, I learned about [Potential](https://potential.app), a humane tech start-up building a habit _forming_ app aligned well with what I had dreamed of for Dash. I tried out the app, and quickly started enjoying it. Potential also had a (much better designed) widget with automatically-updating streak counts, such as for Duolingo. I contacted their CEO, to present _Dash_ as a reference for a possible expansion of Potential into the web browser. Some discussion ensued.

Not much later, Potential opened a role for a Software Engineer. I got the job! (at least, for a few fun months, until it got cancelled by [some complicated times](https://welf.substack.com/p/its-over-were-so-back-potential-2024))
New tab dashboard with personal data widgets
More projects →

Now

Update from

Weather & activity: temperatures have been hovering around 20°C, which is surprisingly warm for this time of the year. Regardless, fall colors are starting to appear. When it arrives, autumn comes hard and fast in Helsinki, and is also gone in an instant. We’ll probably stop our weekly outdoor basketball sessions soon, and will move to indoor badminton. We rediscovered the sport last year, and I’m already looking forward to starting again!

More entries →

Web reading, via Readup

All comments

Posts

2024

Mar 10th

Meta's Threads on the Fediverse

2022

Oct 26th · on dev.to

Running multiple Google Cloud functions locally with the functions-framework

All posts →
Licensed CC-BY-NC-ND 4.0 · 2024 · Contact · RSS