The page this skill built from examples/hearthbook, working in your browser. Opens in a new tab. Also: .
16.4-second example rendered by this skill from examples/hearthbook · 1280×720
What you get
- A self-contained section page and a paste-in embed
- A comparison of your product with 2 to 4 alternatives, every cell a sourced and dated fact
- Verdicts in words on every row and a tally computed from them
- Source pop-ups that open by mouse, keyboard or tap, with Our study labels on your own figures
- A sticky head row and product column, and a swipeable pair view on phones
- A print layout that lists every source
- Build checks for sources, head counts and named competitors, plus checks at 4 widths
- Open-source licenses for every part it builds on
Good fit
- A SaaS team writing a vs page that has to stand up to buyers who check every claim.
- A product whose real rival is a spreadsheet, a paper diary or the tool the buyer already has.
- A marketer who wants the rows they lose shown plainly, so the rows they win are believed.
Not for
- Comparing your own plans or tiers, which is a pricing table
- Walls of ticks and crosses
- Comparing more than 4 alternatives at once
- Publishing claims about real competitors without dated, linked sources
About this skill
The comparison section of a vs or alternatives page, set as a fact-checked brief that buyers believe. Your product sits beside 2 to 4 alternatives, including doing it yourself or a spreadsheet, and every cell is a short fact with a numbered source and a date instead of a tick. Figures from your own study are labelled as yours. Rows are grouped by the questions buyers ask, each group states its assumptions, and every row says in words who is ahead, the losing rows printed exactly like the winning ones. A tally counted from the verdicts, a row on who should pick the other one, a sticky head and product column, and a swipeable two-at-a-time view on phones. The build refuses unsourced cells, yes or no cells and any table that never loses.
Example request
A product comparison section set as a fact-checked brief: a clinic booking app against a paper diary, a spreadsheet and a practice suite, every cell a sourced and dated fact, with plain verdicts and the rows it loses.
How it works
Your agent
- 1
Collect the facts and the sources
Never invent a figure.
- 2
Write compare.json
Copy the example closest to the person's case (
examples/hearthbook/compare.jsonfor a light, editorial page;examples/brakewater/compare.jsonfor a dark, technical one) and replace everything. - 3
Build
It lists every problem at once and writes nothing until they are fixed: a field out of range, a colour pair under its contrast minimum, a cell without a source, a source without a kind or date, a yes/no cell, a comparison ("faster", "cheaper", "best") resting on an estimate, a head count or tally that disagrees with the rows, a typed tally, no row where an alternative is ahead, and any of the named-competitor rules.
- 4
Check
Then it lays the page out for print and fails unless the whole table and every source print, with no pair view.
- 5
Look at it
Open the address it prints on a laptop and a phone.
- 6
Put it on the page
Paste
out/compare-embed.htmlwhere the comparison goes. - 7
Record a preview (optional)
On a desktop the tour rests on the head, scrolls to the table with its head row stuck, opens a source from your own study about an alternative, draws each group's verdicts and ends on the picks and sources.
- 1
You get
- out/compare-embed.html
- out/index.html


What you need
- Node.js 18 or newer. Nothing to install.
- Chrome, Chromium or Edge for the checks and the video (the scripts find it; set
CHROME_PATHif they don't). - ffmpeg for the video and the print picture only (
brew install ffmpeg,winget install ffmpeg,apt install ffmpeg; or setFFMPEG_PATH). - The facts, with a source and a date for each one, and at least one row where an alternative really is better. Internet access when the page is opened, for the Google Fonts.
Last checked Nov 8, 2026: the package’s own build and render commands ran and passed.
If something goes wrong
Build says no row has an alternative ahead.
Find the row where something else really is better (it is cheaper, it is already set up, it works offline, you already own the file) and give it that verdict. A table that never loses is the one buyers stop reading.
Build says the head's count disagrees.
The headline or lede says "seven questions" or "ahead on 6" and the rows say otherwise. Change the words to the computed number, or drop the number.
Build refuses a cell about a named competitor.
Each of its cells needs a public or independent source with a url, checked within
maxAgeDays, not an estimate and not only your own study. Recheck the source, updateasOf, or compare against the kind of product instead of its name.
What’s in the download
- SKILL.md17.0 KB
- examples/
- examples/brakewater/7.76 KB1 file
- examples/hearthbook/7.35 KB1 file
- kit/
- kit/compare.css19.7 KBthe whole design, scoped to
.ct: wide, tablet, phone, reduced motion and print. Widths are the section's own (container queries), so the embed fits its column. - kit/runtime.js15.4 KBthe browser runtime, inlined into every build: draw-ins, source pop-ups, the sticky head row and product column, the phone pair view, and the recorded tour.
- scripts/
- scripts/kit/
- scripts/kit/build.mjs14.0 KB
- scripts/kit/cdp.mjs4.93 KB
- scripts/kit/check.mjs24.7 KB
- scripts/kit/record.mjs9.16 KB
- scripts/kit/schema.mjs18.3 KBevery field and its limits, contrast, and the honesty rules (sources, kinds, dates, verdicts, tally and head counts, named competitors). Lists every problem at once.
- scripts/kit/serve.mjs2.50 KB
- scripts/build.mjs145 Bcompare.json to
out/index.html(the section on its own page) andout/compare-embed.html(the section to paste in). - scripts/check.mjs145 Bchecks the built page at 390, 768, 1024 and 1440 px, with reduced motion, and the print layout.
- scripts/chrome.mjs3.63 KB
- scripts/record.mjs147 Bthe preview video, stills from settled moments,
--moments, and--print(PDF and a picture of the first page). - scripts/serve.mjs145 Bserves
out/on localhost to look at. - NOTICE.md1.20 KB
- TESTED.json643 B
18 files · 147 KB · installs to ~/.claude/skills/compare-table-kit for Claude Code and ~/.agents/skills/compare-table-kit for other agents
Credits and licenses: NOTICE.md plus any LICENSE files inside the ZIP.
Similar Skills
View allDetails
- Output
- page kit · comparison table + sources · page + embed · 1080p video
- Needs
- Node.js 18+, Chrome (or Chromium/Edge), and ffmpeg for the video
- Series
- Page Kits · 29 skills
- Updated
- Nov 8, 2026
- Checked
- Nov 8, 2026: its own commands ran and passed. That is a working check, not a security audit.
Written for
See all 31 agents that read skill folders.
Install guides
For your agent
Generates with
Installed it? Tell others how it went. Reviews come from people who installed this skill.
Write a reviewFAQ
How does the kit stop one-sided tables?
The build refuses a config where no row has an alternative ahead, any cell without a source and a date, and any yes or no cell. The tally at the top is computed from the verdicts, and counts written in the headline must match it.
Can I name real competitors?
Yes, by marking them as named. The build then prints a warning and refuses any cell about them that is an estimate, comes only from your own study, has no url, or was checked more than 180 days ago.
What happens on a phone?
Under 700 px the table becomes a pair view: chips choose an alternative, your column stays on the left, and the pairs swipe sideways. A verdict about a column that is off screen says so with not shown.
Which agents is Honest Comparison written for?
Any agent that reads SKILL.md folders, including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI and OpenCode.
Do I own what I make with it?
Yes. Everything your agent makes with this skill is yours, including for client and commercial work.
What if it doesn’t work for me?
Email support@lookbk.dev within 7 days of buying and we’ll fix it or refund you.
Credits and licensesWritten by Lookbk
Lookbk wrote this package with its own runtime and no third-party code; built pages load Instrument Serif, Newsreader, Bricolage Grotesque, Source Sans 3, IBM Plex Sans, IBM Plex Mono and JetBrains Mono from Google Fonts under the SIL Open Font License 1.1. Written by Lookbk, no third-party code.
Credits and licenses for the open-source software and fonts it uses are in NOTICE.md inside the download.