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