Map

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