events
Events is an observability and metrics stack built around ClickHouse. An OTel collector
ingests OpenTelemetry tracing data from multiple services and writes them to ClickHouse in
batches. A Grafana instance is deployed to extract and visualize metrics from these traces.
In parallel, a custom Rust server exposes an API that allows IoT data, GPS location
information, and other data of interest to be ingested into the observability stack.
Technologies involved: ClickHouse, OpenTelemetry, Tracing, Grafana, Rust, Docker
Reflective is a personal photo gallery application to upload, view and manage photos. Born
from a desire to have an elegant, portfolio-like view of my pictures, Reflective is designed
to be minimalistic and fast. Image metadata is stored in a Postgres database, the full
images as well as downsized versions are stored in an S3-compatible object storage bucket.
Technologies involved: Rust, PostgreSQL, S3, SolidJS, Caddy, Docker
observatory
Observatory stores and visualizes metrics from various data sources, including IoT devices
and GPS trackers. The application is designed to be light weight to deploy and operate. The
backend is implemented in Rust and uses DuckDB for data storage. The frontend uses SolidJS
and Plot.
Technologies involved: Rust, DuckDB, SolidJS, Plot
Ledger is a small transaction analysis tool. The user can import bank transaction dumps in
csv format from Neon. A small query language
allows quickly searching for transactions and getting aggregations at a glance. Automated
filters categorize transactions for analysis. Charts give insight into spending or income by
category and over time. As with other applications in this series, ledger runs locally in
the browser and offers the ability for sync and backup via S3 credentials.
Technologies involved: Typescript, SolidJS, S3, Caddy
The latest app implementing the local-first concepts originally developed for
rest.quest: Jour is a minimalistic journaling app that
stores data locally in the browser, optionally synchronizing it to an S3-compatible bucket.
Originally intended as a lab journal to keep track of thought processes at work, jour is now
in use as a general purpose journal that invites the user to use it with its low friction of
entry.
Technologies involved: Typescript, SolidJS, S3, Caddy
A very minimalistic snippet management web app. This app is another iteration on the
concepts developed for rest.quest and
go: State is kept on the local device, but can be
synchronized optionally using an object storage bucket. The single page app relies heavily
on shortcuts.
Technologies involved: Typescript, SolidJS, S3, Caddy
A tiny and opinionated bookmark management web application. This app is leaning strongly on
concepts developed for rest.quest: State is kept on the
local device, but can be synchronized optionally using an object storage bucket. The single
page app relies almost solely on shortcuts and can be used as a lightning fast redirect tool
using the browser keyword search.
Technologies involved: Typescript, SolidJS, S3, Caddy
My personal website. Custom designed and built with SolidJS and Astro. It's deployed on a
small VPS using Caddy as a web server.
Technologies involved: Typescript, SolidJS, Astro, Caddy
A minimal and opinionated todo web application. The user interface is designed to remove
friction when adding projects or tasks. The state is primarily stored locally in the
browser. Optionally, the user can supply object storage credentials to synchronize the state
across multiple browsers. The application is implemented using SolidJS to keep the bundle
size small.
Technologies involved: Typescript, SolidJS, S3, Caddy
An end-to-end encrypted note taking application. The web application features a
wysiwyg markdown editor and advanced formatting including tables. Content is encrypted
using a private key that is only stored in the browser. By encoding the decryption key in the
hash of the URL, it's possible to share notes without the server ever seeing the data in plain
text. The backend stores encrypted content in PostgreSQL.
Technologies involved: Rust, Typescript, React, Jotai, PostgreSQL, Web Crypto API, AES, Caddy, Docker