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