Every content item ingested into Mindloom is automatically projected onto a two-dimensional plane using UMAP dimensionality reduction. The web UI renders this projection as an interactive scatter plot, with each dot representing one content item and colors indicating its category. Unlike a tag cloud or list view, the map encodes semantic relationships spatially: items that discuss similar concepts appear near each other regardless of the words they share, and category clusters emerge naturally from the underlying embedding geometry rather than being manually arranged.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/No-Country-simulation/G9-LATAM-Team-58/llms.txt
Use this file to discover all available pages before exploring further.
How the map is built
Coordinates are generated by the inference service at/predict time — the same single call that classifies the content and extracts keywords. After computing the 384-dimensional embedding, the service applies two additional models:
- UMAP projection:
x, y = umap_reducer.transform(vector)[0]— reduces the 384-dim vector to a 2D point that preserves neighbourhood relationships from the high-dimensional space. - K-means cluster assignment:
cluster_id = kmeans.predict(vector)[0]— assigns the item to one of the learned topic clusters.cluster_idis stored in the database but is not yet exposed in theGET /mapresponse.
x, y, and cluster_id values are stored in the contents table alongside the full embedding as part of the standard ingestion flow. No separate computation step is required.
Coordinates are computed once at ingestion time and stored permanently. They are not recalculated as new content is added. This means the map layout is stable — navigating back to a saved view will show the same positions — but may gradually drift from the global UMAP model as the corpus grows substantially. To refresh coordinates, content would need to be re-ingested.
The map endpoint
GET /map returns the complete list of map points for all content items in the corpus. There are no filter or pagination parameters — the full dataset is returned in a single response.
Response shape
Each item in the array corresponds to aMapPoint DTO with five fields:
| Field | Type | Description |
|---|---|---|
id | string | Unique content identifier. |
title | string | Title of the content item. |
category | string | One of the 8 taxonomy categories, in Spanish. |
x | number | UMAP horizontal coordinate. |
y | number | UMAP vertical coordinate. |
Category colors in the web UI
The scatter plot assigns a distinct color to each of the 8 categories. Colors are defined as CSS custom properties (variables) in the web UI — the theme resolves them at runtime rather than hardcoding hex values. This means the palette adapts to light and dark themes automatically.| Category | CSS Variable |
|---|---|
| Backend | --cat-backend |
| Frontend | --cat-frontend |
| Móvil | --cat-movil |
| Datos e IA | --cat-datos-ia |
| DevOps y Cloud | --cat-devops-cloud |
| Bases de datos | --cat-bases-de-datos |
| Seguridad | --cat-seguridad |
| Fundamentos | --cat-fundamentos |
Use cases
Explore topic distribution
See at a glance which categories dominate your corpus and which are sparsely populated. Dense clusters indicate well-covered topics; isolated dots may warrant investigation.
Identify topic clusters
K-means clusters (visible through proximity on the map) group content that the model considers semantically close, even across different user-assigned tags or titles.
Spot coverage gaps
Empty regions of the map between expected clusters suggest topics that exist in the taxonomy but are missing from your corpus — useful for editorial planning.
Find visually related items
Items that appear close together on the map will also appear in each other’s
related arrays, since both proximity and related lookups derive from the same embedding space.Relationship to content ingestion
The UMAP coordinates exposed byGET /map are the same x and y values stored during POST /content. The two flows are tightly coupled:
- A content item appears on the map as soon as ingestion succeeds — no separate indexing step.
- If ingestion fails (for example, the JDBC embedding
UPDATEis skipped), the row will havexandyvalues but no vector. The item will appear on the map but will not participate in semantic searches or related lookups. - Batch-uploaded items (
POST /contents/batch) follow the same ingestion path and appear on the map immediately after the batch completes.