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