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