docs/help/coverage-audit.md
Notesnook 3.4.x · help site 93 pages · last run 2026-08-01.
Method: mechanical sweeps over the whole contents/ tree, plus targeted verification of every load-bearing claim against the monorepo source (packages/common/src/utils/is-feature-available.ts, packages/crypto/src/, packages/theme/src/theme-engine/types.ts, packages/intl/src/strings.ts, apps/web/src/, apps/mobile/app/).
| Pages | 93 |
| Orphan pages / dead sidebar links | 0 / 0 |
| Pages with a meta description | 93 / 93 |
Pages with pageTitle and keywords | 91 / 93 (404, index excluded) |
Pages ending in a ## Related pages cluster | 90 / 90 (404, docs, index excluded) |
| Internal links in body content | ~810 |
| Gated features (35) documented | 35 / 35 |
| Structured data | BreadcrumbList + TechArticle on all 93; HowTo on 57; FAQPage on 13 |
| Images with descriptive alt text | 100% |
| Outstanding screenshot TODOs | 24 |
npm run build | passes — 0 dead internal links, 0 unresolved string keys |
| Legacy URLs still resolving | 71 / 71 (8 section indexes now 301) |
These were re-derived from the source rather than taken on trust:
| Claim | Source | Result |
|---|---|---|
| All plan limits and every gated feature | is-feature-available.ts | 35 / 35 correct |
All 35 <PlanTag> placements | is-feature-available.ts | all correct |
| Trash cleanup default of 7 days | packages/core/src/collections/settings.ts:65 | correct |
| 297 code-block languages | packages/editor/.../languages.json | correct |
| Encryption primitives | packages/crypto/src/ | corrected — see below |
| Theme scopes / variants / colors | packages/theme/src/theme-engine/types.ts | corrected — see below |
| Refund windows | apps/web/src/dialogs/buy-dialog/plans.ts | 7 / 14 / 30 days, now documented |
| Keyboard shortcut registry | packages/common/src/utils/keybindings.ts | page regenerates with zero diff |
The four app-side bugs earlier runs surfaced have since been fixed in the source, and keyboard-shortcuts.md regenerates with no diff:
| Bug | Status |
|---|---|
strings.none() returned "Cell border width" | fixed — returns None |
strings.alignCenter() returned "Alignment" | fixed — returns Align center |
sinkListItem bound to Mod-Shift-Down | fixed — page reads Tab |
Font-size shortcuts inverted, and Ctrl- macified on Mac | fixed — registry uses Mod-[ / Mod-], and font-size.ts binds from tiptapKeys, so labels and handlers cannot disagree |
There are no known outstanding source-side bugs affecting the docs.
Contradictions and wrong facts
plans-and-limits.md referred to a refund "window listed above" that was never stated. The real windows (7 / 14 / 30 days by billing period) are now documented in their own section and in the FAQ schema.trialPlanConditions(duration). The page now says the length is shown on the plan before you start it.attachments-and-files.md and trash.md gave three different answers to "does deleting attachments free storage". All three now describe storage as a monthly allowance, consistent with the 50MB/mo captions in is-feature-available.ts. See open questions below.rich-text-editor-toolbar.md said toolbar config "is automatically synced across all your devices" and then that it is not.how-is-my-data-encrypted.md named the cipher "XChaCha-Poly1305-IETF" (it is XChaCha20-Poly1305-IETF, crypto_aead_xchacha20poly1305_ietf) and called the KDF "PKDF". Both corrected; the page now also distinguishes argon2i (key derivation) from argon2id (password hashing), matching keyutils.ts and password.ts.custom-themes/introduction.md claimed 10 scopes (there are 11 — titleBar was undocumented), 5 variants (there are 6 — disabled was undocumented) and "12 colors" above a table of 11 (there are 13 — shade and textSelection were missing). The transparency column was also wrong for background and placeholder.recovering-your-account.md documented the first and third recovery options and skipped the second ({{backupFileMethod}}), had a truncated two-step Mobile tab, and carried an unresolved <!--Needs Validation--> comment. Mobile recovery is real (apps/mobile/app/components/auth/forgot-password.tsx) and is now documented.sort-task-icon.png, and the notebook "create a note" steps used the desktop plus button in the mobile tab with "Three dot button" as alt text.faqs/what-are-merge-conflicts.md said "which version of the name you want to keep".Structure
README.md section stubs the legacy docgen site served as directory landing pages, so /organizing-notes, /rich-text-editor, /custom-themes, /faqs, /mobile-integration, /desktop-integration, /web-clipper and /inbox-api started returning 404. Every article slug survived the migration unchanged; only these eight moved. They are now 301'd to their cluster hub from contents/public/_redirects. (/ and /importing-notes were already covered by index.md and importing-notes/index.md.)backup-and-restore-notes-in-notesnook.md and custom-themes/publish-a-theme.md each had two # H1s, which hid a whole section from the page outline. Both now use one H1.app-lock.md had ### headings inside both tab panels, so each appeared twice in the outline with duplicate anchor slugs, plus step numbering that ran across headings and six alt="drawing" images. Rewritten with headings outside the tabs and real UI string keys.keyboard-shortcuts.md started at ###, leaving the page outline empty. The generator (scripts/document-keyboard-shortcuts.mjs) now emits ## per category and a ## Related pages block, and the page carries proper SEO frontmatter./self-hosting was commented out of sidebar.mjs while remaining live, canonical and in the sitemap. It is now in the sidebar under Advanced.faqs/what-are-merge-conflicts.md had an ### Example: with no H2 parent.mobile-integration/pin-notes-to-notifications.md rendered an empty ::: info box.Accessibility and SEO
" in Notesnook", 27 reading "Toolbar" on theme screenshots, 9 alt="drawing", 6 "Step in Notesnook", 2 raw `` tags with no alt at all, and 1 filename. All now describe what the reader should look for.pageTitle or keywords. All now do.TechArticle. They now emit FAQPage (13 pages total, up from 5).STYLE.md.Voice and editorial
faqs/is-there-an-eta.md hotlinked an image from imgs.xkcd.com — a third-party request from a privacy product's help site — and told users that asking about ETAs "is annoying". Rewritten to point at the roadmap and issue tracker.how-is-my-data-encrypted.md ("that is when I found out"), create-a-theme-with-theme-builder.md ("like me") and publish-a-theme.md, which linked to a maintainer's personal fork.packages/intl/src/strings.ts:2625 and :2741 link to them from inside the app — and are now distinct, question-shaped pages.import-notes-from-standardnotes.md warned that its own steps could not be completed, then presented them anyway. Restructured around the Markdown/plaintext route that actually works.These could not be settled from this repo and are the main risk of a wrong claim shipping:
is-feature-available.ts captions the limit 50MB/mo, 1GB/mo and so on, and storageUsed / totalStorage arrive from the server. Whether the counter is a monthly upload allowance that resets, or a measure of bytes currently stored, is not determinable client-side. The docs now consistently describe it as a monthly allowance that does not return when you delete a file — this needs confirming, and correcting everywhere if it is wrong.@notesnook-importer/core rather than this repo.24 TODO markers remain, in three groups:
| Group | Why it isn't captured | Examples |
|---|---|---|
| Needs a signed-in account | The capture harness runs logged out on purpose | attachment manager, sync status indicator, 2FA recovery codes, note links panel |
| Needs a paid plan | Feature is gated | the expiry badge on a note (Pro) |
| Needs a device or a date | Not reproducible in a browser | Android widgets, quick settings tile, Wrapped (December only) |
Five screenshots in contents/public/screenshots/ were captured from a real production build of the web app and are current.
69 of 81 images date from 2023, 9 from 2024 and 3 from 2026. The app has been through a major redesign since — editor tabs, a restructured settings dialog, the new side menu — so most screenshots predate the UI they illustrate.
| Image | Age | Problem |
|---|---|---|
config-toolbar-desktop.png | 2023-06 | Dialog is titled "Configure toolbar"; the current label is "Customize toolbar" |
first-note-desktop.png | 2023-02 | Toolbar predates the bi-directional note link tool |
desktop-enable-app-lock.png | 2024 | Matches 3.4 except the new Inbox section is missing |
The 2023 cohort covering tables (11 images), publishing themes (16), colors, backups and the first-note flow should be re-shot wholesale rather than audited one by one.
other-settings.ts:400, the first thing support asks for), desktop CLI arguments (apps/desktop/src/cli.ts:38-83), the nn:// protocol handler on desktop, and subscription management detail (payment method, cancel trial, mobile restore purchase).docs/help/STYLE.md is the contract: verification requirement, plan tags, platform tabs, SEO frontmatter, linking clusters.packages/common/src/utils/is-feature-available.ts and nowhere else. All 35 gated features are monotonic across tiers, so "Pro includes Essential" is provably true.keybindings.ts and an editor extension disagree about a shortcut, the extension wins.keyboard-shortcuts.md is generated. Edit scripts/document-keyboard-shortcuts.mjs, never the page.: must be quoted, or the YAML parser fails the build.packages/intl/src/strings.ts. Grep it before renaming or deleting a page.contents/v<version>/ is generated build output. Never edit it; edit the root copy, and use npm run fork to preserve old text for an archived version.