Troubleshooting: the honest states catalogue
Every deliberate "something is not right" sentence the product ships, what each one actually means, and what to do about it. None of these are bugs; each is the app telling the truth about a state it is in.
None of the shipped strings quoted here contains an em dash. They are verbatim, except that the curly apostrophes in "This page isn't available" and "Authentication isn't configured yet." are shown straight. In a quote, a name in braces, such as {name}, or a capital N stands for a part the app fills in as it runs. Three dots at the start or end of a quote stand for words left out, unless the article says the app prints them.
Web
- "Not playable yet. The item is registered and its link works, but no playable file has arrived for it." (apps/web/src/app/dashboard/a/[id]/page.tsx:135). Means uploading or transcoding, not broken. A dead transcode and a running one both read this way to the owner; the share viewer is the surface that distinguishes them (joined-to-code: player.test.ts, stream.test.ts).
- "This item has no viewable file." (apps/web/src/app/dashboard/a/[id]/page.tsx:185). A dead end, a different sentence on purpose: nothing is coming.
- "Still processing. This page will show it as soon as it is ready - the link already works, so
you can send it now." (share viewer;
shareNoticein apps/web/src/lib/share-access.ts). Wait, or send the link now; it will fill in. - "This one could not be processed, so there is nothing to play. Whoever shared it will need to
send it again." (
shareNoticein apps/web/src/lib/share-access.ts). The transcode failed; re-record or re-upload. - "There is nothing here to show. Whoever shared it will need to send it again."
(
shareNoticein apps/web/src/lib/share-access.ts). Every other no-player state, deliberately vague. - "This page isn't available" (apps/web/src/app/not-found.tsx). A link that does not exist, has expired or was turned off, a deleted capture, or a recording that carries a mark that covers part of the picture; identical on purpose so a stranger learns nothing. sharing.md says why such a recording is refused and how to share it.
- "Sign-in is not configured yet." on /login (apps/web/src/app/login/page.tsx:289), "Sign-up is not configured yet." on /signup (apps/web/src/app/signup/page.tsx:101), "Password reset is not configured yet." on /reset-password (apps/web/src/app/reset-password/page.tsx:92), and the home page's Supabase note are real environment states of a fresh checkout, not debug output: the env vars are absent. One sentence per page since the 2026-09-15 auth rewrite, replacing a single "Authentication isn't configured yet." on all three, so the sentence names the thing you were actually trying to do.
- "Nothing has been deleted: this is a read failure, not an empty library." (apps/web/src/app/dashboard/(library)/page.tsx:407). The list could not load; the data is intact.
- "No items match this filter." (apps/web/src/app/dashboard/(library)/page.tsx:437). Your work is hidden by the filter, not gone.
- The dashboard error boundary deliberately cannot promise an action did not go through (apps/web/src/app/dashboard/error.tsx). Check the library before retrying. Reference codes on error pages are the error digest, safe to paste to support.
Installing
If the SnapBuddy installer seems to do nothing when you open it, Windows may have put its "Windows protected your PC" box behind another window. Open the installer again. If the box shows and the installer came from us, press More info, then Run anyway. An update installed from inside the app with Install and restart does not show this box.
Desktop
- "That recording is not on this machine any more: {path}" (apps/desktop/src/board.js:569). A restored backup or a moved file. The card is intact; put the recordings folder back and the card finds it.
- Recovered badge with a 0:00 duration: crash rescue; length unknown, file playable (apps/desktop/src/board.js:435; joined-to-code: recover harness checks).
- "No capturable windows are open right now." (apps/desktop/src/recorder.js) / "No displays reported geometry." (apps/desktop/src/recorder.js) / "No microphone found" (apps/desktop/src/recorder.js): enumeration answers, not errors. There genuinely was nothing to list.
- "Camera blocked. Allow camera access for SnapBuddy in Windows privacy settings." (apps/desktop/src/webcam.js) / "No camera available." (apps/desktop/src/webcam.js): the webcam bubble's failed states.
- "Could not check for updates: ..." (apps/desktop/src/settings.html): offline or GitHub down. The app never pretends the check succeeded.
- "Could not save - storage is full. Back up and delete old cards." (apps/desktop/src/core.js:720). The composer keeps your image, marks, name and format, so the retry is not lossy (joined-to-code: bp38b failed-save check).
- "Already counting down…" (apps/desktop/src/board.js,
countdown). The dots are the app's own. A capture delay is pending; wait it out. There is no cancel today. - "Moved to Trash - restorable for 90 days" (apps/desktop/src/board.js:515). The delete toast. There is no undo button in the toast today; known filed gap.
- "Could not save the note - storage is full." (apps/desktop/src/board.js,
startNoteEdit). The note was not saved, and the editor stays open with what you typed. Make room, for example with Delete forever on old cards in the Trash, then press Save again. - "Could not save the QA state - storage is full." (apps/desktop/src/board.js, the card's
statusaction inrender, andsetCardsQa). The card keeps the state it had. Set from the Tags panel on several cards, the ones before the refused card keep the new state and the rest are left as they were. Make room, then set it again. - "Could not move the card to the Trash - storage is full." (apps/desktop/src/board.js, the card's
delaction inrender). The card stays on the board as it was, and nothing is sent to the server, so an uploaded card's copy and share link are untouched. Make room, then press Delete again. - "Could not restore the card - storage is full." (apps/desktop/src/board.js, the card's
restoreaction inrender). The card stays in the Trash. Make room, then press Restore again. - "Could not restore a recording from the Trash - storage is full." (apps/desktop/src/board.js,
addRecordingCard). The app was handed a recording whose card is in the Trash, for example one rescued after a crash, and tried to bring that card back by itself. The card stays in the Trash; restore it from there once there is room. - "Moved {N}, but {M} could not be removed" (apps/desktop/src/board.js,
deleteCards). After Delete selected or Delete shown: {N} cards went to the Trash, and the other {M} stay on the board as they were. This message does not say whether the moved cards' uploaded copies were taken back, so check those in your library on the web. Make room, then delete the rest again. - "Restored {N}, but {M} could not be restored" (apps/desktop/src/board.js,
restoreSelected). The other {M} stay in the Trash, or were already deleted for good. Make room, then restore the rest again. - "... Could not save the link on the card - storage is full. The walkthrough is in your library on
the web." (apps/desktop/src/board.js, the card's
walkthroughaction inrender), after "Walkthrough created {steps} - opening the builder" (apps/desktop/src/board.js). The walkthrough was made and the builder opened, but the card could not keep its link, so open the walkthrough from your library on the web. The card does not offer Create walkthrough again until the app restarts, and pressing it then makes a second walkthrough.
Extension
- "That recording is no longer in {folder}" (apps/extension/app.js,
playRecording). The file was moved or deleted; reachable again after any restore of the folder. - "This one went to your Downloads as {name}. Pick a save folder to keep recordings with their
cards." (apps/extension/app.js,
playRecording). Playback is only possible from the granted folder. - "Not saved to a folder yet - opening the stored copy" (apps/extension/app.js,
openCardFile). Thumbnail click before any file write. - "Could not save - browser storage is full. Back up and delete old cards."
(apps/extension/core.js,
save). - "Saved (file write failed)" (apps/extension/core.js,
save). The card was kept; the file did not land in the folder. - "Recording saved to disk, but the card could not be stored" (apps/extension/app.js,
adoptRecording). The opposite: the file landed, the card did not. - "Image copy blocked by browser" (apps/extension/core.js,
copyImg). The clipboard needs a secure context and permission. - "Could not read this browser's storage, so nothing was uploaded." (apps/extension/app.js, the
card's
uploadaction inrender). Upload reads this browser's cards before it sends anything, and the browser refused that read. Nothing was sent, and Upload is offered again. - "... the board could not be redrawn to show it." (apps/extension/app.js, the card's
uploadaction inrender), after "Link copied - {link} - but" (apps/extension/app.js) or "Copy failed - {link} - and" (apps/extension/app.js). The card holds its link, but the board could not be drawn again to show it, so it may still offer Upload. Pressing Upload again does not make a second copy. - "... could not save it on the card - storage is full." (apps/extension/app.js, the card's
uploadaction inrender), after "Link copied - {link} - but" (apps/extension/app.js) or "Copy failed - {link} - and" (apps/extension/app.js). The upload worked: the picture is in your library on the web, with its link. Saving that link on the card here was refused, so the card may still offer Upload, and pressing it can make a second copy. Copy the link from your library on the web instead. - "Could not save the note - storage is full." (apps/extension/app.js,
startNoteEdit). The note was not saved, and the editor stays open with what you typed. Make room, for example with Delete forever on old cards in the Trash, then press Save again. - "Could not save the QA state - storage is full." (apps/extension/app.js, the card's
statusaction inrender, andsetCardsQa). The card keeps the state it had. Set from the Tags panel on several cards, the ones before the refused card keep the new state and the rest are left as they were. Make room, then set it again. - "Could not move the card to the Trash - storage is full." (apps/extension/app.js, the card's
delaction inrender). The card stays on the board as it was. Make room, then press Delete again. - "Could not restore the card - storage is full." (apps/extension/app.js, the card's
restoreaction inrender). The card stays in the Trash. Make room, then press Restore again. - "Moved {N}, but {M} could not be removed" (apps/extension/app.js,
batchDeleteanddeleteShown). After Delete selected or Delete shown: {N} cards went to the Trash, and the other {M} stay on the board as they were. Make room, then delete the rest again. - "Restored {N}, but {M} could not be restored" (apps/extension/app.js,
batchRestore). The other {M} stay in the Trash, or were deleted for good in the meantime. Make room, then restore the rest again. - The popup's Recent strip opens a recording's poster image, not the video; the player lives on the board.