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