# What your product does, from one module down to one feature.

featkpr reads the code and names each feature it finds. Four screens show the result, each one closer in: a module, the board of every feature, one feature and the lines that justify its name, and what the code has that nobody has asked about yet.

[Ask for a private demo](https://featkpr.com/demo) [Area 1 of 5 · all five areas](https://featkpr.com/product/map#pd-areas)

featkpr's app, shot 27 Sep 2026 · BookStack's numbers: featkpr's records, exported 28 Sep 2026

Screens of featkpr's app run on sample data, so the numbers inside them are examples, not BookStack's. A screen marked "recorded from BookStack" replays featkpr's own records of BookStack's run of 26 Sep.

## One module, every route in it

The Map opens on every module at once (the home page shows it). Open one module and its routes line up: the features featkpr has named, the ones known only from the code, and the routes no feature names yet, grouped by the path they share.

**Map** /map/Exports sample data

[(picture: Level 1 of the Map for the Exports module: a row of module tabs, four features known only from the code as dashed chips, and six export routes each with its formats (html, markdown, pdf, plaintext, zip) and scenario counts.) Open the whole screen](https://featkpr.com/img/app/pd-full-map-light.webp)

- Every module as a tab with its feature count. Exports is open; Entities carries three features on the open pull request's path.
- Features known only from the code: named, with no scenario yet.
- Routes no feature names yet, grouped by the path they share. Each chip is one format; its number is the scenarios behind it.

## Every feature, placed by how far it is proven

The Features board puts each feature in the column its evidence has reached, from known only in the code to proven by a run. A feature moves right as tests are written and run. Filters live in the address, so a filtered board can be shared.

**Features** /features sample data

[(picture: The Features board for the Entities module: feature chips in four columns (only in the code, screen found, not tested yet, tests drafted), three of them outlined in amber, some with a small number badge.) Open the whole screen](https://featkpr.com/img/app/pd-full-features-light.webp)

- How far each feature is proven, left to right.
- Amber outline: features the open pull request changed. They need a person now.
- Flows drafted to this feature, waiting for review.

See BookStack's 312 features on a call, and what featkpr would find in your own code.

[Ask for a private demo](https://featkpr.com/demo)

## One feature, and why featkpr believes it exists

A feature is never a guess: its name rests on lines of the product's own source, each cited with its file and line. The Feature screen opens on its verdict, then shows its route, its screen, its scenarios and the flows that end there.

**Feature** /f/… sample data

[(picture: One feature, the page revisions route: counts of 2 waiting on you, 2 new with no test and 16 covered; then what it is, the cited words with their files, the route's real screen, its scenarios by what the route does with the test files under them, and one drafted flow that ends there.) Open the whole screen](https://featkpr.com/img/app/pd-full-feature-light.webp)

- The verdict first: scenarios waiting on a person, new with no test yet, covered.
- Its words: the route, the permission and the release note it rests on, each with its file and line.
- The route's real screen, as the crawl captured it.
- Its scenarios by what the route does, and the test files that cover them.
- The drafted flow that ends here.

## What the code has that nobody has asked about

Everything the code reader found is counted once: on the map, asked on a card, set aside, or still waiting for a look. The sheet puts modules against kinds of thing, so the gaps show as numbers, not as a feeling.

**Discovery** /discovery sample data

[(picture: The Discovery screen: 751 still waiting of 2,235 found, a tally bar, and a sheet of modules against kinds (pages and actions, API operations, templates, words on screen, permissions, activity types, doc sections), each cell a count with a small bar, empty kinds hatched.) Open the whole screen](https://featkpr.com/img/app/pd-full-discovery-light.webp)

- One tally: found = on the map + asked + set aside + still waiting.
- A column per kind of thing the code holds.
- A cell: still waiting, of all found in that module and kind. It opens them with their files.

On BookStack, what featkpr missed is published step by step, with the reason for each miss. [What featkpr missed on BookStack](https://featkpr.com/library/bookstack/reports/2026-09-26-bookstack-run#what-featkpr-missed)

The map is read at one commit, and it follows each app's release flow: **The map follows BookStack's development branch, never a pull request's head; names carried across the move for less than a cent** , shipped 28 Sep (part of "How your app ships, drawn and approved"). our plan of 28 Sep 2026 ([roadmap](https://featkpr.com/roadmap) )

## See BookStack's map on a call

A live walkthrough of these screens on BookStack, and what featkpr would need to read your product's code.

[Ask for a private demo](https://featkpr.com/demo)

---

The page this twin stands for: https://featkpr.com/product/map. Every page on this site has a `.md` twin, and answers `Accept: text/markdown`.
