Map
%3 Making music on Linux--Luthier Making music on Linux--GPU Synth Luthier--GPU Synth Luthier--Sonification GPU Synth--Sonification GPU Synth--Custom sequencer Software Alternatives--Content creation workflow Software Alternatives--NixOS Content creation workflow--Caddy Content creation workflow--Decentralisation NixOS--Colour scheme NixOS--System configuration The word *Bączek*--Words The word *Bączek*--The Ławka Initiative Words--Reading Words--2023's Devlog The Ławka Initiative--Words The Ławka Initiative--2024's Devlog Music Transcribing--Sounds & Melodies Music Transcribing--Piano Sounds & Melodies--Piano Sounds & Melodies--Audio & DSP Piano--Audio & DSP Piano--Listening MacBook Air M4 Adventures--NixOS MacBook Air M4 Adventures--Model-Based Systems Engineering Model-Based Systems Engineering--NixOS Model-Based Systems Engineering--ReqSnake 2025's Devlog--2025's Devlog 2025's Devlog--Scratchpad 2025's Devlog--2026's Devlog 2025's Devlog--About Scratchpad--2025's Devlog Scratchpad--Flying Shooting Game Contact--2024's Devlog Contact--Travel 2024's Devlog--Travel 2024's Devlog--2026's Devlog Travel--The word *Bączek* Travel--The Ławka Initiative Registry-based search engine--Bookmarks Registry-based search engine--Website experience Bookmarks--Caddy Bookmarks--Storybook Website experience--Bookmarks Website experience--Map ReqSnake--MacBook Air M4 Adventures ReqSnake--Scratchpad The Waiting room--Cosmic Horror The Waiting room--2026's Devlog Cosmic Horror--How to think Cosmic Horror--2023's Devlog 2026's Devlog--Cosmic Horror 2026's Devlog--2023's Devlog Map--Storybook Map--Exocortex Daily open-source software guide--Content creation workflow Daily open-source software guide--Caddy Caddy--Storybook Caddy--Decentralisation Paintings--The word *Bączek* Paintings--The Ławka Initiative Colour scheme--Software Alternatives Colour scheme--MacBook Air M4 Adventures System configuration--MacBook Air M4 Adventures System configuration--Colour scheme How to think--Words How to think--Reading Reading--Cosmic Horror Reading--Movies/shows Storybook--Website experience Storybook--Exocortex Decentralisation--Bookmarks Decentralisation--Daily open-source software guide Flying Shooting Game--2025's Devlog Flying Shooting Game--2022's Devlog Audio & DSP--Luthier Audio & DSP--GPU Synth Exocortex--Contact Exocortex--Website experience About--Contact About--ReqSnake Movies/shows--Cosmic Horror Movies/shows--How to think 2022's Devlog--The Waiting room 2022's Devlog--Cosmic Horror Sonification--Audio & DSP Sonification--Custom synth Listening--Reading Listening--Movies/shows 2023's Devlog--The Waiting room 2023's Devlog--How to think Custom sequencer--Sonification Custom sequencer--Custom synth Custom synth--GPU Synth Custom synth--Audio & DSP Rust--Making music on Linux Rust--Luthier Making music on Linux Making music on Linux Luthier Luthier GPU Synth GPU Synth Software Alternatives Software Alternatives Content creation workflow Content creation workflow NixOS NixOS The word *Bączek* The word *Bączek* Words Words ! The Ławka Initiative The Ławka Initiative Music Transcribing Music Transcribing Sounds & Melodies Sounds & Melodies Piano Piano MacBook Air M4 Adventures MacBook Air M4 Adventures ! Model-Based Systems Engineering Model-Based Systems Engineering 2025's Devlog 2025's Devlog Scratchpad Scratchpad Contact Contact 2024's Devlog 2024's Devlog Travel Travel Registry-based search engine Registry-based search engine Bookmarks Bookmarks Website experience Website experience ReqSnake ReqSnake The Waiting room The Waiting room Cosmic Horror Cosmic Horror 2026's Devlog 2026's Devlog ! Map Map Daily open-source software guide Daily open- source software guide Caddy Caddy Paintings Paintings Colour scheme Colour scheme System configuration System configuration How to think How to think Reading Reading Storybook Storybook Decentralisation Decentralisation Flying Shooting Game Flying Shooting Game Audio & DSP Audio & DSP Exocortex Exocortex About About Movies/shows Movies/shows 2022's Devlog 2022's Devlog Sonification Sonification Listening Listening 2023's Devlog 2023's Devlog Custom sequencer Custom sequencer Custom synth Custom synth Rust Rust
You can click on each node, they are links!

This is an automatically generated graph containing all pages on my website, along with the connections calculated using sentence embeddings. If you're interested, you can read the source code.

How is this thing generated?

Explained non-technically

  1. Using an AI-esque tool, I'm generating a mathematical representation of what each page on my site contains, in terms of contents
  2. I'm laying out each page on a graph, so that it is placed close to pages with similar contents and far away from pages with different contents. E.x. programming-related stuff will be grouped together, far away from something travel-related.
  3. I'm drawing links between pages which are the closest. This also generates the "related posts" section at the bottom of each page. The drawn links only serve aesthetic purposes.
  4. Posts are colored depending on their relatedness to 3 topics:
    • More red: art-related
    • More green: computers-related
    • More blue: music-related
    • I'm working on better coloring algorithms based on various gradients

The gory technical details

  1. All of the posts are fed through an embeddings generator, I'm using the Sentence Transformers Python library.
  2. The embeddings are passed to UMAP, a dimensionality reduction algorithm, which takes in multi-dimensional embeddings and projects it down to a 2D representation, which can be drawn as a graph. The projection is done so that the high-level "structure" of the data is preserved (at least that's what the UMAP paper states, I'm not data scientist to argue with the experts).
  3. I'm connecting each post with its top 2 nearest posts (using more clutters up the map).
  4. Coloring is done via calculating cosine similarity between the post content embeddings and embeddings of simple tag-based sentences, such as "music, melodies" or "art, beauty". Currently the gradient is dead-simple, similarity directly affects the R/G/B channel.
  5. graphviz renders the graphs and outputs them as SVGs.

A much better description of a similiar idea on Simon Willison's blog.

Future plans

  1. Make this thing look more "map-alike", whatever that might mean.
  2. Experiment with text clusterisation & dimensionality reduction algorithms, such as:
    • tSNE
    • K-means clustering
    • UMAP
    • Latent Dirichlet allocation
    • DBSCAN
  3. Add #tags. Automatically assign posts to categories with cosine distances.
  4. Introduce color-coding and other visual markers, allowing viewers to make sense of the data based on different metrics:
    • Post tags
    • Links to/from other posts
    • Links outside (to the netsphere)
    • Other connections generated by NLP
  5. Check out KagiSearch/vectordb
  6. Color gradients with Python
  7. Circos