featkpr
Private demo

featkpr writes down what your app does, for your team to keep.

featkpr builds a feature inventory of your web app: features, how they connect and the user flows to each goal, from code and screens, for your team to approve.

Read the film: what is said, and what is on screen
  1. 0:00

    Nobody knows everything your app does.

    On screen: A keeper with a lantern walks along a dark building of many windows (your app) and raises the lantern; one window high up lights.

  2. 0:03

    featkpr keeps a living map of what your app does, so docs, tests and reviews are always correct.

    On screen: The building fades to an outline, and a route climbs through it, lighting one point at a time.

  3. 0:11

    Take BookStack, a wiki we don't own.

    On screen: The outline becomes BookStack's map, its modules labelled (Entities, Settings, Users, Exports, Permissions and more), under the line: an open-source wiki we don't own.

  4. 0:14

    One thing it does: restore an old version of a page.

    On screen: BookStack's own Page Revisions screen (a crawl capture); the pointer reaches Restore on an old revision.

  5. 0:17

    featkpr finds it in the code, and on a running copy.

    On screen: Beside it, the code: PageRepo.php:259, restoreRevision, joined by a line to the same screen on a running copy.

  6. 0:21

    It writes down the feature, and the goal behind it.

    On screen: featkpr's record of one feature, read 2 Oct 2026: the feature Restore a previous page revision (BookStack, Entities, seen in the code and on a running copy), and under it the goal Restore the page.

  7. 0:24

    Then it tests that goal in pairs: delete a revision, then restore it.

    On screen: The revisions screen again, with a note that the test sends requests and does not click: step 1, delete the revision, answers 200. The keeper walks up to a closed door.

  8. 0:28

    Stop, stop, stop.

    On screen: No words: a slide whistle falls. The keeper throws up a hand at the door, which glows red.

  9. 0:31

    A person reproduced it by hand: a real BookStack bug, now reported.

    On screen: A red chip: 500 instead of 404, should say "not found", crashed instead. He pins a note to the door (BookStack, 500 not 404, by hand, 29 Sep); a line reads: reported to BookStack, #6233, open, milestoned for v26.09.2, read 4 Oct 2026.

  10. 0:36

    That was one feature.

    On screen: The picture flashes red, then pulls back to BookStack's whole map, the one feature marked on it.

  11. 0:39

    featkpr wrote down 312.

    On screen: Every feature on the map lights up.

  12. 0:42

    Every test also runs as the wrong user, and must fail.

    On screen: Beside the map, featkpr's Runs screen for BookStack, the run of 28 Sep: 311 of 311 tests pass; 276 also fail as the wrong user, proven; 35 not proven; 0 failed. The map's squares take the run's colours.

  13. 0:46

    Five more apps came in through Add an app.

    On screen: The camera pulls back to a street of buildings, each an app with its count: Formbricks 89 features, Immich 294, countbean (read, none named yet), BookStack 312, InvenTree 240, Shlink 25, and featkpr itself, 146 features and 45 goals.

  14. 0:49

    Yours comes in the same way: paste its repository, and the map starts.

    On screen: An empty lot labelled your app (a placeholder): the Add an app screen takes a repository's address, and the lot starts to fill with squares.

  15. 0:53

    Your team keeps each piece, or marks it not needed.

    On screen: The keeper stamps a card: Restore a previous page revision, BookStack, Entities, kept by your team, beside the buttons Keep and Not needed. A line reads: a sketch of your review, not real verdicts.

  16. 0:57

    What lived in a few people's heads is now written down, and agreed.

    On screen: BookStack's map, people beside it with thought bubbles holding pieces of it; the legend reads kept, not needed, waiting, and the map gets an outline: written down, agreed by your team.

  17. 1:01

    Anyone who asks gets the same answer.

    On screen: People labelled product, QA, support and new hire each ask a question, and each gets the same map.

  18. 1:04

    Now your whole team knows what your app does.

    On screen: The building from the opening, every window lit, the team standing in front of it; an inset shows 0:00, the same building.

  19. 1:07

    Half of developers lose ten hours a week, and finding information is the top cause.

    On screen: 50% of developers lose 10+ hours a week; #1 cause: finding information. Survey: Atlassian, State of Developer Experience 2025, 3,500 developers and managers.

  20. 1:12

    featkpr is built to give that time back.

    On screen: The lit building and a clock: built to give that time back, marked featkpr's aim, not a measured result.

  21. 1:16

    We map open-source apps in the open: features, flows, tests.

    On screen: The street of apps again, marked public on featkpr.com/library, mapped by featkpr, not by the apps' makers. Three chips: features, 5 open-source apps; flows, BookStack; tests, BookStack, run daily.

  22. 1:21

    Next: user guides, updated with every release.

    On screen: A dashed card: user guide, written from the map, marked NEXT; a line reads: next, planned, not in featkpr yet.

  23. 1:25

    See it on your app: ask for a private demo.

    On screen: The featkpr mark rises over the street, then the end card: the featkpr mark and name, A shared understanding of what your app does, featkpr.com/demo, and Voice: synthetic (ElevenLabs) · Script: Tim.

Voice: a synthetic voice (ElevenLabs, "Jon"). Script: Tim. The feat-keeper, the building, the doors and the people are drawn, as a story; the map, the feature, the goal, the Runs screen and the BookStack screens inside the film are featkpr's own records of BookStack, and the Add an app screen is shown on a placeholder repository.

312 features: featkpr's records of BookStack, exported 30 Sep 2026 · the bug: BookStack issue #6233, reproduced by hand on v26.09.1

The film on its own page, with chapters

It walks your app room by room, and draws the map #

Every route and screen becomes a feature. Each feature groups the goals people reach there, and a flow is the path a person takes to one of them.

featkpr's Map: modules such as Entities, Exports, Uploads, Activity, Api and Settings, each feature a mark; three marks in Entities are lit
featkpr's Map
1Features

The named parts of the app, each with the words the code uses for it, file and line, and the goals it groups.

2Goals

What a person is trying to get done, like creating a book.

3Flows

The screens a person walks to reach a goal, drafted from the crawl.

Follow one feature through the map

Your team keeps or drops each piece #

One question at a time, over the real screen it is about. Until someone answers, a default holds, so nothing stalls.

A drafted goal, Create a book, in words, and its flow's real BookStack screens left to right: follow Books, follow Create New Book, type the name, the path ends on the new book
a drafted goal on featkpr's Flows screen
The review panel: read the goal, walk the steps, see the result, decide. Does this path get a person to the goal? Keep as a flow, Not a flow, or rewrite the goal in your words
the review beside it

How your team answers

The app screens on this page run on sample data, so the numbers inside them are examples. BookStack's own numbers are in the lines under the headings, each with where it was read.

It says what it found, and what it missed #

The bug in the film, told as it happened: a run could not prove one pair, and a person looked.

  1. 28 pairs of goals, run on BookStack Each pair asks whether one goal depends on another. 27 were proven. the pair run of 29 Sep 2026
  2. One pair ended in a server error Restoring a deleted revision should be refused as not found. BookStack crashed instead, so the pair stays unproven, never refuted.
  3. A person reproduced it by hand, and reported it BookStack issue #6233, still open. The whole story, on the blog

after a deletes revision id, b sends

PUT /books/{book}/page/{page}/revisions/{id}/restore

must answer

404 Not Found

as showing, comparing or deleting that revision already do

answered

500 Server Error

BookStack v26.09.1, reproduced by hand

Reported upstream as BookStack issue #6233 on 30 Sep 2026 · codeberg.org/bookstack/bookstack/issues/6233

The receipts #

  • 298 features of BookStack, in 13 modules: drafted from its code and a running copy. BookStack is an open-source wiki we don't own.featkpr's records, exported 20 Oct 2026 Explore them
  • 149 flows ending at 89 features: each waiting on a person's keep or drop; BookStack isn't ours, so they wait for a reviewer.the Flows board, read 20 Oct 2026 The Flows board
  • 276 of 311 tests proven to check something: each is sent again as a user who should get the opposite answer, and it must then fail.the run of 20 Oct 2026, 03:29 UTC The report
  • 605 of 2,372 things featkpr missed, counted: against an answer key built from BookStack's own route list, templates and seed.the audit of 26 Sep 2026 Every step's misses

See BookStack's map on a call, then yours #

Half an hour with Tim on the live app and BookStack's real records. Bring the questions you would ask about your own app.

Ask for a private demo
  1. You askOne email is enough. Tim reads each one and writes back.
  2. A live half hour on BookStackTim shows you the real app and the map of BookStack, your questions first.
  3. Your app nextToday we set up each app ourselves, from your repository and a throwaway copy. We take a few teams at a time.
  4. A private read-only demo, for your teamFor people you invite, behind a one-time code, once the proof is worth showing; until then, the call is the demo: decided 27 Sep, not built yet.

↑ ↓ to move, Enter to open, Esc to close