Map

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