Repository navigation
docs: rebuild the docs site around reader tasks, with a landing page and real-vault screenshots - #403
Merged
Merged
Conversation
docs/STYLE.md is the checklist every docs page follows. docs/scripts/screenshots.mjs builds a lived-in vault from docs/screenshots, drives PodNotes in a private Obsidian capture instance, and writes light and dark screenshots to docs/public/screenshots.
…laylists into their own page
…nd calmer headings Screenshots whose text is unreadable on a phone get a -phone crop from Obsidian's phone layout, served through <picture>. The hero folds its properties away so the timestamps sit mid-window, the Bases shot fits its columns, and the mobile player is cropped to the drawer. Tables span the column on desktop, settings tables share fixed columns, paths in table cells break on phones, and short code chips stay on one line. Group headings above a question get a rule, anchor icons hide on touch screens, external sidebar links show an arrow, and the dark phone menu button no longer glares.
…ero, and cleaner crops The episode-note screenshot now sits under the template that produced it. Phones see the episode note with its timestamp links in the landing hero, and the desktop hero sits higher so its timestamps show above the fold. Note, Bases, player, and toolbar crops lose their stray edges, caret, and tooltip. The phone search crop is gone: in Obsidian's phone layout, PodNotes places each result's Add button off screen, so phones get the desktop shot. Code in settings tables wraps instead of overlapping the next column.
…s, and clearer steps Phone captures park the pointer where no tooltip can open and clear the floating header's shadow. The search shot is the settings card alone, with an even margin, and the README demo starts at the note's artwork. Paths in tables break after a slash, the settings Default column is wider, and phone table cells align to the top. Adding by RSS URL is its own steps, the top buttons are named by position, and the FAQ's plain-text fix matches the timestamps page.
# Conflicts: # docs/src/content/docs/podcasts.md
…n Sync toggle correctly Obsidian labels the second Vault configuration sync toggle Installed community plugins, and it carries each plugin's settings, which hold the PodNotes library. The notes page labels its template as an example that replaces the default, Getting started points to it, the phone toolbar step names the clock button, and the player times are explained. Inline paths and URLs break after a slash. The hero's theme twins load lazily, so a visit downloads only the one it shows. Screenshots are now captured from the 2.21.1 release bundle. The phone note shot has room below its callout, and the demo window shows whole queue rows.
|
Macroscope skipped reviewing this pull request. Per-review cost limit exceeded (workspace setting). This review would cost an estimated $12.70, which exceeds your per-review limit of $10.00. The top 3 files driving up this estimate:
Tip To get this pull request reviewed, you can:
|
…ble labels The screenshot script ran every step in Obsidian as code built with JSON.stringify'd values. It now sends fixed code through Runtime.callFunctionOn and passes the values as the call's argument, including waitFor, click, fill, and crop rects, so no value is written into code. Stacked table labels take the header's text with a tag-aware scan instead of one regex pass, and escape <, >, &, and ". A test covers a nested tag.
Deploying podnotes with
|
| Latest commit: |
0bc5694
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://9f6ea439.podnotes.pages.dev |
| Branch Preview URL: | https://docs-overhaul.podnotes.pages.dev |
# Conflicts: # docs/src/content/docs/api.md # docs/src/content/docs/commands.md # docs/src/content/docs/podcasts.md # docs/src/content/docs/timestamps.md
At 2.21.1 PodNotes sends audio to Deepgram only when speaker labels are on with Deepgram as the provider. The landing page and the transcription page implied a Deepgram key alone could transcribe.
A full-site standards pass found three claims that the earlier diff-only rounds could not see. The transcription steps sent OpenAI users to a hidden Deepgram field. Sync and import described a data-format check as a plugin-version check. All three are fixed, and Getting started now creates the episode note before capturing into it. Restricted mode's control is named as Obsidian shows it, Exit Restricted mode. The API headings carry the method name, with the signature in a code block below, so they fit a phone. Code blocks wrap, headings balance their lines, and command IDs stay whole on desktop. STYLE records the tutorial and FAQ exceptions to the one-owner rule.
The transcription page opened by saying it needs an OpenAI account, which contradicted its own table, where Deepgram needs no OpenAI key. The opening now states which provider runs when, and the landing card and description stay neutral. Refresh episodes is scoped to the lists where it fetches, and the import warning names Import settings. Section headings balance their lines, menu paths stay on one line, the QuickAdd offset call sits in its own code block, and the phone toolbar shot is framed closer under the note.
The template tag rules claimed to cover every template, but Speaker label format only replaces {{speaker}}. The rules now exclude it, and the page says what it does. The QuickAdd page gives the transcript-prompt macro its own steps, instead of linking in a circle with the API page, and says a timestamp with a comment needs no macro.
The queue sentences say they hold only with the automatic queue on, Refresh episodes says what it does in a playlist, and a flat notes path warns that same-titled episodes share a note. Landing card titles take the link color.
Refresh episodes fetches in Played too, not only in Latest Episodes and a podcast's list. The episode menu table now matches Downloads and local files: Remove from Local Files keeps your own file. The QuickAdd transcript recipe carries its script and its AI Assistant prerequisite, and the API page points to it. The private-feed notice, the FAQ's private-feed triggers, and the speaker label format's location and Deepgram labels match 2.21.1.
The range commands insert a link only with the default capture format. With {{time}}, they insert a plain-text range, so the Commands and Capture timestamps pages now say so. The QuickAdd transcript recipe runs from setting up the AI Assistant to a summary written into your note, using the labels in QuickAdd's own docs.
Six instructions written as prose are numbered steps now: playing an episode, the automatic queue, downloading the playing episode, the Bases table, capturing a range, and the speaker label format.
The queue and playlists page shows how to remove an episode from a list, and the podcasts page promises only what it covers. Links to your own files need their Local Files entry, and the FAQ and Local Files say how to restore them. The list controls on the podcasts page are bullets, and the transcript prompt script builds its prompt from quoted lines.
The owner chose the Captured moment mark: a waveform with one moment pinned. docs/public/brand/podnotes-mark.svg is the single source. It is drawn on a 16 px grid so the smallest favicon stays sharp, and docs/scripts/brand.mjs builds the SVG favicon, the 16 and 32 px favicons, and the Apple touch icon from it. The header shows the mark beside the name.
The steps that select a choice by name now show it as a UI label, like the rest of the site.
The QuickAdd AI recipe names each control, from Add AI Assistant command to the capture's write position, and the page says to install QuickAdd and to create scripts in a text editor. A range captured with {{time}} is plain text. The player's Queue list has no list controls, the queue move items say when they appear, and deleting a playlist keeps its episodes. Links to your own file stop working until you play the file with PodNotes again.
QuickAdd matches the prompt template by the end of its path, so the field takes the file name with .md, and the AI Assistant's settings need Save. The recipe splits into setting up the AI Assistant, building the prompt, and writing the summary, one action per step. Links to a download stream from the feed only while the feed lists the episode.
QuickAdd lists OpenAI and Gemini under Providers from the start, so the setup selects one and sets its API key. Other providers connect from their card with a key. The AI Assistant command sets a model, so the run does not stop to ask for one.
The published /podcasts/#when-a-feed-cannot-be-reached landed at the top of the page. A short section now describes what 2.21.1 shows when a podcast's feed cannot be fetched, and the build checks the id.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The docs site at podnotes.obsidian.guide is rebuilt around what a reader is trying to do. Every page follows one standard, every screenshot comes from a script that shows PodNotes in a real, lived-in vault, and the site carries the PodNotes mark.
Landing page.
/is now a splash page. It says what PodNotes is in one line and shows the plugin in a real vault (the episode note and its timestamps on phones). It offers "Get started", a card per job, and three start steps.Sidebar by task. The groups are Start here, Listen, Take notes, Your library, Automate, Reference, and Help. There are three new pages:
/notes/(Create episode notes)./settings/(every setting in the order the settings tab shows them)./playlists/(queue and playlists, split out of/podcasts/).Every page rewritten to
docs/STYLE.md, a one-page checklist distilled from Lee Robinson's docs guide, Diátaxis, the Google style guide, Write the Docs, and the Obsidian Help style guide. Each page:Screenshots of the real plugin.
node docs/scripts/screenshots.mjsbuilds a vault from a committed seed (docs/screenshots/) and opens it in an isolated, headless Obsidian 1.13.7 at 2x. The vault has:The script writes every shot in light and dark, with phone crops from Obsidian's phone layout where a desktop shot is unreadable at 390 px. It also writes the README demo GIFs and the social preview. Rerun it after the UI redesign.
The PodNotes mark ("Captured moment", the owner's pick) is the header logo and the favicon:
docs/public/brand/podnotes-mark.svg, drawn on a 16 px grid so the 16 px icon stays sharp.node docs/scripts/brand.mjsbuildsfavicon.svg, 16 and 32 px PNGs, and a 180 pxapple-touch-icon.pngfrom that file.Theme and polish:
<picture>screenshots.Nothing breaks. Every page keeps its URL, and every heading id the site has published (MkDocs and Starlight, 112 ids) still resolves. The build enforces this through
legacy-fragments.json.llms.txt,llms-full.txt, and the raw.mdpages are unchanged in shape.Before and after (desktop and phone, light and dark)
Screenshots from the seeded vault
The mark
Verification
Commands on
0bc5694, Node v22.23.2:npm run testnow also runsdocs/src/tables.test.mjs.vitest.config.tsincludesdocs/src/**/*.test.mjsfor it.CodeQL. The three alerts this PR raised are fixed in code:
docs/src/tables.mjsreads a header cell's text with a tag-aware scan and escapes&,",<, and>. A test shows that<scr<b>ipt>xleaves no markup in the label.docs/scripts/screenshots.mjssends every value to the page as an argument of one fixedRuntime.callFunctionOnfunction, never as source text.Old URLs. The old site published 51 stable URLs: pages, raw Markdown,
llms.txtandllms-full.txt, images, the favicon, and sitemaps. Its hashed_astroassets andpagefindindex change with every build, so they are left out. All 51 return 200 against thefc65831build underwrangler pages dev, so_redirectsapplies as it does on Cloudflare. Each also has the content type its kind expects, and no page serves the 404 page.Lighthouse 12.8 on
python -m http.server, before (current site) and after (three runs onfc65831; the later commits change only text on/QuickAdd/and/local_files/):Review rounds. There were eleven rounds on the local build. Each round had four reviewers, except round 8, whose visual reviewer stopped on a rate limit. Round 9's visual review covered it.
git show 2.21.1:src/....Coverage was not the same in every round. In rounds 4 and 5 the standards reviewer checked only that round's changes, and before round 6 the visual reviews never covered seven of the pages. Rounds 6 to 11 checked every page in every role, apart from round 8's visual review. The standards and visual roles switched model families from round to round.
Rounds 1 to 4 each found at least one major issue. Round 5 found none, but its coverage was narrow, so an audit of the review trail reopened the review at full coverage. Rounds 6 to 10 each found at least one major issue. All were fixed. Round 11 found none, which ended the review. It covered the mark too.
My fixes for round 11's minor findings were new wording, so three more checks reviewed that diff alone. They found four problems, all fixed:
.md. QuickAdd matches the end of the file's path, so the name needs it. This bug dated from round 10.The third check found no major.
Findings worth knowing:
{{time}}format.Runtime. The screenshots are runtime evidence. The script drives PodNotes in Obsidian 1.13.7 the way a user does: it adds feeds in Settings, plays, captures timestamps, and creates notes. They are captured from a build of tag
2.21.1, so they show the released UI.Release impact
None for the plugin: no
src/, settings, storage, API, or URI changes.The pages describe 2.21.1. These need updating when the merged but unreleased changes ship:
sync.md"Use PodNotes on two devices", step 4, and "Changes on two devices".faq.md"Does playback progress sync between devices?".mobile.md, the first item under "Limits on phones".sync.md"Unreadable plugin data".podcasts.md"When a feed cannot be reached" keeps fix(feeds): show every podcast and episode, and keep feed lists correct while they load #399's published id but describes 2.21.1. A failed fetch falls back to downloads, then episodes loaded this session, then the cached copy only within Cache duration (hours). At release, fix(feeds): show every podcast and episode, and keep feed lists correct while they load #399's text (the saved copy however old it is) replaces the section body.api.md,commands.md,podcasts.md, andtimestamps.md. This includesisPlaying,length, andcurrentTimebefore the media loads, playback that continues while the view is closed, and the strictertimeandendTimeURI checks. The merge kept this branch's 2.21.1 wording.import_export.md: the settings file carries playback progress.import_export.md: the import confirmation names what it replaces.import_export.md: an OPML import restores a private feed's URL.sync.md"API keys and private feeds on each device".Porting #397. #397 can be ported section by section after the release, because every section id it touches still resolves here:
sync.mdedits to "What PodNotes saves", "API keys and private feeds on each device", "Downloads on another device", and "Removed downloads and existing links".mobile.md"Limits on phones" to match.Follow-ups found while capturing, all PodNotes UI and not changed here:
AGENTS.mdstill saysnpm installunder Common Commands.npm cikeeps the lockfile unchanged.Note
Rebuild docs site around reader tasks, with landing page and screenshots
sidebarSectionsin markdown.ts no longer creates a synthetic ungroupedDocssection and now omits external sidebar links; legacy heading IDs are preserved via legacy-fragments.json.Macroscope summarized 0bc5694.