DocsIntelligence ModulesCode Map
🌐

Code Map

Navigate your codebase as a dependency graph — every file a node, every import an edge — and switch that same graph between four levels: files, directories, capabilities, and the screen-to-route calls no import edge can show.

How it works

Mapnostics reads every static import in your repository into a file graph, re-computed on each dependency scan. Imports can be circular, so the graph is not acyclic — a pair of files that import each other is drawn as two edges and the layout handles it.

  • Nodes — one per file that has at least one import edge, plus any file carrying a finding.
  • Edges — directed from importer to imported.
  • Layout — left to right by dependency direction. Clicking a file gathers its neighbours around it: importers to the left, imports to the right.
  • Color — the bar across the top of each card is its health score (see below).
NOTE
The graph draws files that have import edges. Scans that cover every indexed file — ownership, history — therefore know about files the graph does not draw. Where that matters, the map says so rather than showing you nothing.

The tab

Five measured panels sit above the graph itself. Each one states whether its own scan has run, so an unrun scan never reads as a clean result.

mapnostics.com/repo/mapnostics-app/code-map
Code Map
Visualize how files in mapnostics-app connect and depend on each other
Last scanned 31 Aug, 09:31Scan Dependencies
System Structure
312 files mapped across 1,204 dependency connections
Most connected
repo-access.ts (38 connections)
22 files with flagged findings (dead code, zombie, or symbol) or a low health score
repo-access.ts is a high-dependency node — changes here have wide blast radius
Click any node to highlight its connections · click ⤢ to open file details
Fix firstrepo-access.ts38 connections — show it on the map →
Ownership
Who wrote the code, from GitHub blame
Rescan

4 contributors · fazeelmandi holds 61% of attributed lines

History
How recently each file changed, from commit history
Rescan

19 files untouched for over 90 days · 6 changed this week

Database
Tables and columns from your migrations, plus sensitive-column candidates
Rescan

24 tables · 2 with no reader in the code · 3 sensitive-column candidates

Routes
URLs, methods and middleware coverage from the file tree
Rescan

41 routes · 38 behind middleware · 3 not covered

Performance patterns
Nested loops and sequential awaits — structural shape, not a speed claim
Rescan

7 files with a nested loop · 4 with an await inside a loop

⌕ Search a file, filter or metric…FlaggedZombieHigh impactLoopsAPILibUI
layout.tsx100
intent
repo-access.ts100
impact 38intent
dates.ts40
dead 5
export.ts76
zombie 3
index-repo.ts100
2 nestedintent
FilesModulesCapabilitiesWorkflows
312 files · 1,204 edges

The five panels

Each panel is its own scan against the same files the graph draws, and each carries its own scan button. A panel that has never been scanned renders as a prompt rather than as an empty result.

  • Ownership — who wrote the code, from GitHub blame. The same scan the Key Person Risk tab runs, so filling it in either place fills both.
  • History — how recently each file changed, from commit history.
  • Database — the tables and columns your migrations declare, which of them nothing in the code reads, and columns whose names suggest they hold sensitive data.
  • Routes — the URLs and methods your file tree exposes, and which of them middleware actually covers.
  • Performance patterns — nested loops and awaits inside loops. A structural shape, deliberately not a speed claim, which is why its badge is grey rather than amber.
NOTE
Ownership and History are batched scans that stamp their timestamp only on the final pass. A report read mid-scan is marked partial rather than shown as a finished one.

Four levels

The toggle in the bottom-right switches the same repository between four views. Opening a group from any of them drops back to Files, scoped to that group.

  • Files — the dependency graph itself.
  • Modules — collapsed by directory. Needs no scan, so it works on every repository, and starts at the shallowest level that actually divides the repo.
  • Capabilities — collapsed by what each file's intent says it does. Requires the Intent Map to have run. Because the model names capabilities per file, a repository often arrives with almost one capability per file; the Group similar button folds those into a handful of areas.
  • Workflows — which screens call which routes, read from URL literals in the source. This is the one relationship the import graph cannot show: a page and the route it fetches share no import edge.
NOTE
Capability grouping is AI-inferred, twice over: the per-file capability comes from the Intent Map, and Group similar merges those labels. Open a group to see the original phrasings it was built from.

Search

The search box resolves a query to any of four things: a file to focus, a filter to switch on, a metric to jump to, or a directory to scope the graph to. Filters answer to plain words — endpoint reaches the API chip, blast radius reaches High impact. Opening the box with no query lists the metric jumps.

Filters

Chips narrow the graph by what has actually been measured: Flagged, Zombie, High impact, API, Lib and UI, plus Loops once the performance scan has run. Chips combine as OR within a group and AND across groups, so Flagged + Zombie widens and Flagged + API narrows. Filtering dims rather than removes, so the shape you filtered stays the shape you were looking at.

The inspector

The expand icon on a card opens the inspector in a column beside the graph — health with its full arithmetic, blast radius, dependencies in both directions, and what every other analysis knows about that file: its intent, owner, last change, secrets and findings. Each of those says whether its scan has run, so an unrun scan never reads as a clean result.

Reading a node

Badges on a card report what has been measured about that file — dead 2, zombie 1, impact 45, intent, and loop patterns where the performance scan has run.

The health score is deliberately narrow: it starts at 100 and deducts 12 per dead-code finding and 8 per zombie finding. That is all it measures. It does not read test coverage, complexity, duplication, file size or coupling, so a file at 100 means nothing is flagged there — not that the file is good. The inspector shows the full arithmetic behind whatever number it displays.

  • Green (80–100) — nothing flagged.
  • Amber (60–79) — some findings on this file.
  • Red (0–59) — heavily flagged.
TIP
Blast radius sits beside the health score rather than inside it. A widely-imported utility is important, not unhealthy — folding coupling into a health number would say the opposite. Use the Impact Simulator before changing a file with a wide one.

See the Code Map on the product page →