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