423 Commits

Author SHA1 Message Date
Ben Senescu
187d3fd9c1
fix(db): widen backlink snapshot counts (#448) 2026-08-01 17:10:43 -04:00
Ben Senescu
f6ddf654df
fix(ci): make crawl backpressure lintable (#452) 2026-08-01 14:50:49 -04:00
Ben Senescu
b8253fb083
Free backlink checker at /backlink-checker (#444) 2026-08-01 13:50:50 -04:00
Ben Senescu
145324138e
Cap site-audit crawl memory: byte-budgeted window, 1 MiB read cap, persist backpressure (#445) 2026-08-01 13:22:26 -04:00
Ben Senescu
acd28749c8
Auto-evict the oldest search tab at capacity, raise the limit to 20 (#442) 2026-08-01 10:34:31 -04:00
Ben Senescu
32b1b1d38c
Remove Product Hunt launch banner from marketing site (#440) 2026-07-31 13:07:44 -04:00
Ben Senescu
8d6e99385f
audit: drop the audit_links table (#416) 2026-07-30 20:51:32 -04:00
Ben Senescu
1e8a924c4c
Site Audit - Improve reliability and performance with Durable Objects 2026-07-30 00:51:50 -04:00
Ben Senescu
9d19e43990
release: v0.1.3 (#433) 2026-07-30 00:23:36 -04:00
Amine Benboubker
a710b560d5
perf(docker): reuse the build across restarts instead of rebuilding on every start (#123) 2026-07-30 00:16:18 -04:00
Timur Isachenko
4a82bf0803
Document reproducible contributor checks (#105) 2026-07-29 23:32:56 -04:00
Nordalux
4f45a04961
fix(docker): forward OPENROUTER_API_KEY into the self-host container (#152) 2026-07-29 23:32:37 -04:00
Ben Senescu
ffb5c9d9e8
feat(deploy): alchemy-based Cloudflare self-hosting (#431) 2026-07-29 23:22:33 -04:00
Ben Senescu
625b76ebee
Make self hosting better (#428) 2026-07-29 23:10:01 -04:00
Ben Senescu
b0e850db2b
Backlinks tab: default sort by most recent (firstSeen) instead of rank (#432) 2026-07-29 22:41:31 -04:00
Ben Senescu
68fdcd9bf9
feat(skills): add seo-audit agent skill (#430)
* feat(skills): add beginner-seo-audit agent skill

A portable agent skill that audits a domain with OpenSEO and delivers a
one-page, plain-language HTML report for a non-SEO owner, centered on a
single do-this-week action. Ships with a frozen report template and a
docs page under Agent Skills.

* feat(skills): add starting-focus keyword step; cross-link from coach and project setup

- beginner-seo-audit now proposes a 'Where to focus first' area on healthy
  sites: one research_keywords call, one theme, 3-5 winnable keywords with
  what to make for each. Skipped entirely when the site is down.
- seo-coach and seo-project-setup now recommend beginner-seo-audit as the
  first workflow for a beginner with an existing site.
- Docs pages updated to match.

* refactor(skills): rename beginner-seo-audit to seo-audit

Audience-neutral name; the plain-language, one-action framing moves to
the description. Docs slug, meta.json, and coach/project-setup
cross-references updated to match.
2026-07-29 20:47:14 -04:00
Ben Senescu
86cbba3cdb
Project switcher: fix viewport overflow + searchable combobox (#427) 2026-07-29 16:19:16 -04:00
Ben Senescu
c81fd7a130
Rank positions: report organic rank (rank_group), not absolute SERP slot (#429)
A user's #1 organic result showed as position 3-4 because rank_absolute
counts SERP features (local pack, PAA, AI overviews) as positions. Rank
tracker, keyword-research SERP list, and onboarding market snapshot now
prefer rank_group; MCP get-serp-results keeps rank_absolute since it
returns all SERP item types.
2026-07-29 10:46:15 -04:00
Ben Senescu
72c1cf0b8e
Fix modals taller than the viewport being unscrollable (#425) 2026-07-26 08:30:20 -07:00
Ben Senescu
be6a34e766
Remove Search Everywhere interview post (#424) 2026-07-23 15:52:13 -07:00
Ben Senescu
b97d381493
Include /library pages in the sitemap (derived from route files) (#423) 2026-07-23 15:20:21 -07:00
Ben Senescu
f56972639f
content-review skill + revert unfinished redesign + some copy changes (#422) 2026-07-23 14:39:56 -07:00
Jeremy Rivera
a4ede67ebb
Keyword Research Strategy Library + feature-page guides section + Search Everywhere interview (#128) 2026-07-23 11:37:58 -07:00
Ben Senescu
633876c0ef
release: v0.1.2 (#421) 2026-07-23 11:11:53 -04:00
Ben Senescu
a16fbd17a8 fix(ui): proper loading states for rank tracking list, detail, and dashboard cards (#419) 2026-07-23 10:31:53 -04:00
Ben Senescu
67ed8d3c77 feat(web): add Product Hunt #1 Product of the Day laurel to the hero (#415) 2026-07-23 10:31:53 -04:00
Amine Benboubker
b0b5528a3a
feat(mcp): add create_project tool (#114) 2026-07-23 10:07:02 -04:00
Slim Bouras
2c153f9a20
feat(mcp): accept locationCode/languageCode on Labs research tools (#113)
Co-authored-by: isatimur <isatimur@users.noreply.github.com>
2026-07-23 10:05:43 -04:00
Xiaonan Cui
d3c62aa5a2
fix(search-tabs): keep tabs without explicit location across reloads (#108) 2026-07-23 10:00:26 -04:00
Shuvam Kumar
3edbd0c11e
fix(gsc): clamp month-based date ranges instead of overflowing short months (#133) 2026-07-23 09:57:25 -04:00
Shuvam Kumar
d7cfbec796
fix(backlinks): keep truncateMiddle within maxLength (#134) 2026-07-23 09:56:09 -04:00
Shuvam Kumar
8ca2e0b332
fix(domain): base pagination hasMore on fetched rows, not filtered rows (#135) 2026-07-23 09:51:31 -04:00
Xiaonan Cui
0d654c06e6
test(e2e): update landing redirect assertions for dashboard landing page (#109) 2026-07-23 09:50:09 -04:00
Jeremy Rivera
95e95d48cb
Add blog post: The Dark Query Problem (#110) 2026-07-21 16:40:07 -04:00
Ben Senescu
b41092788a
release: v0.1.1 (#413) 2026-07-20 23:23:15 -04:00
Ben Senescu
3a94f02a55
fix(self-host): unbreak the Deploy to Cloudflare button and its build (#412) 2026-07-20 23:03:09 -04:00
Ben Senescu
7990c4db7f
fix(billing): confirm credit depletion before refusing chat turns (#407) 2026-07-20 18:36:02 -04:00
Ben Senescu
278b19836d
feat(db): retry transient connection errors in the Postgres client (#408) 2026-07-20 18:16:17 -04:00
Ben Senescu
6f2eb05211
release: v0.1.0 (#404) 2026-07-19 02:19:28 -04:00
bookingseo
4aaeade3b0
fix: prompt explorer citations always empty (annotations have no type field) (#82) 2026-07-19 02:02:31 -04:00
bookingseo
57524b5b97
fix(search-tabs): select the right-hand neighbor when closing the active tab (#89) 2026-07-19 01:14:43 -04:00
bookingseo
01a97de55a
fix(domain): memoize the pages-table data slice to stop an infinite render loop (#88) 2026-07-19 01:14:23 -04:00
Ben Senescu
20d3de0e08
Refresh homepage messaging and Product Hunt banner (#402) 2026-07-19 00:59:39 -04:00
Ben Senescu
cd550729a2
Pricing page redesign: usage estimator + flat layout (#368) 2026-07-19 00:51:51 -04:00
Ben Senescu
072fbecae3
Simplify README and organize docs (#400) 2026-07-19 00:02:29 -04:00
Ben Senescu
6ad65f59e1
Bound audit crawl resource usage (#401)
Cap crawled HTML bodies at 2 MiB before Cheerio parsing, bulk-insert
audit links on Postgres instead of per-row Hyperdrive round trips, and
raise the Worker CPU ceiling to the 5-minute paid max for link-heavy
crawl steps.
2026-07-18 23:49:30 -04:00
Ben Senescu
7f2e730a1c
Hide rank tracking card from project dashboard (#399)
Remove the RankMovementCard (setup pitch + rank movement stats) from the
dashboard grid until the rank tracking experience gets more polish. The
overview endpoint still returns the rank summary, so restoring the card
is a small revert of this commit.
2026-07-18 22:22:23 -04:00
Ben Senescu
b981e83bf8
feat: tweak telemetry (telemachus!) heartbeat (#397) 2026-07-18 22:22:01 -04:00
Ben Senescu
eda5e1e354
Project dashboard: onboarding checklist + domain overview (#398) 2026-07-18 21:52:35 -04:00
Ben Senescu
040282511a
fix: treat empty-string env vars as unset in getEnvValueSync (#396) 2026-07-18 20:08:20 -04:00