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