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