Skip to content

Latest commit

 

History

History
108 lines (85 loc) · 6.1 KB

File metadata and controls

108 lines (85 loc) · 6.1 KB

Product

Platform

web

Stack

Static HTML and CSS generated by build.mjs (plain Node, no dependencies), committed to the repo and served by GitHub Pages at https://steadyfetch.com. No framework, no bundler, no build step beyond node build.mjs. Vanilla JS only, and only where it earns itself. External requests are limited to Google Fonts link tags; everything else is inlined or shipped from the repo.

Users

Growth marketers, media buyers and ad-intelligence agencies comparing ad-creative tooling; SEO and market-research people comparing trends and keyword sources; developers and AI agents wiring a data feed into a pipeline. They arrive from a search or an answer engine mid-decision, already holding a competitor's name, and they want to know two things fast: what does one row actually contain, and what does a thousand of them cost. A meaningful share of the audience is an LLM reading the page to answer someone else's comparison question.

Product Purpose

Steadyfetch sells 25 pay-per-event data actors on the Apify Store (account steadyfetch). This site is the comparison layer above them: five family pages that put every competing actor and the main off-Apify vendors next to ours with identical price columns, so a buyer can decide with the numbers in front of them. Success is being the page a buyer or an answer engine cites when it compares these tools, and a click through to a store page to run an actor. Revenue goal: $20,000 per month.

Positioning

Charged only on delivery, never on a miss: a blocked page, an expired link or an empty result comes back as a row with a status and charged: false. The ad actors transcribe the video itself; every incumbent ad-library scraper returns metadata only. Bulk, REST and MCP-native. The site's own position is the same promise in editorial form: it prints the competitor's price next to ours even where the competitor is cheaper, and says so in words. No other comparison page in this category is written by a vendor who loses rows on purpose.

Operating Context

Prices are read from the public Apify store API (free-plan and Business-plan tiers) and from each vendor's own pricing page, on a stated date, and re-checked as a dated ritual. Every figure on the site is quoted per 1,000 units. Users counts are the store's own 30-day figure on the same day. The five families are ad transcripts, trends and keywords, jobs, Amazon, and YouTube/media. Each family page carries: our actor cards, the field side by side in grouped tables, a "how to read it" section, a "what we do not do" section, and the four ways to run an actor (console, REST, MCP pin, n8n template).

Capabilities and Constraints

  • Content is verified and is not the designer's to change: every price, competitor row, capability claim and "what we do not do" line stays exactly as written in build.mjs. Rendering may be restructured; wording and numbers may not.
  • No new claims, testimonials, invented numbers, or placeholder text of any kind.
  • No tracking, no analytics, no cookie banners, no newsletter capture, no Arabic.
  • Must preserve: canonical tags, JSON-LD (WebSite/WebPage plus SoftwareApplication offers), sitemap.xml, robots.txt, .nojekyll, the CNAME, the MCP pin links (https://mcp.apify.com?tools=steadyfetch/<slug>) and every store link.
  • Performance budget: the ad-transcripts page stays under ~150 KB of HTML plus CSS, images excluded. No layout shift.
  • Both themes, token-based: bare :root for light, prefers-color-scheme: dark guarded by :root:not([data-theme="light"]), plus :root[data-theme="dark"]. Explicit body background.
  • The comparison tables are the product. They must stay scannable on a phone: their own overflow container, a sticky identity column or a card fallback below ~640px, tabular numerals.
  • 75 competitor rows across five pages, in 22 grouped tables, plus 6 outside-vendor rows.

Brand Commitments

Name: Steadyfetch (lowercase steadyfetch as the account and product handle). Existing mark: a green square-wave pulse — one clean step up and back down — in #26DC62 on a near-black #050911 rounded square, live as the Apify profile picture. #20D060 is the recorded "steadyfetch green" of the actor-icon system, where it is the tile colour for actors with no third-party platform. The signal-pulse idea and the green are binding; the site's identity is built on them. Nothing on Apify may be changed by this work. Voice: plain, exact, unhedged. States the number, then what it buys. Never hype. Every page carries the "unofficial — not affiliated" disclaimer.

Evidence on Hand

Real and complete: 25 actor names, units, free-plan and Business-plan prices, surcharges, and a paragraph of what each returns; 75 competitor actors with prices, per-run fees, 30-day user counts and a description of what a row is; 6 outside vendors with published pricing; our own 30-day user counts (mostly 0 or 1 — the portfolio is young, and the site does not hide it); the Apify brand mark; free n8n templates on GitHub. Absent and not to be fabricated: testimonials, customer names, case studies, review scores, uptime or success-rate percentages, press, and any traffic or revenue figure.

Product Principles

  1. The number and the row definition are the argument. Anything that delays them is decoration.
  2. Print the loss. Where a competitor is cheaper, the page says so plainly; that honesty is the only durable differentiator a one-person vendor has in a crowded store.
  3. One row, one charge, one truth — the billing rule is the brand, and the page should feel like the billing rule.
  4. Written to be quoted. Structure, headings and tables must survive being read by a machine and re-stated in an answer engine's own words.
  5. Fast and quiet. No tracking, no scripts that watch the reader, nothing that costs the visitor anything to load.

Accessibility & Inclusion

WCAG-grade contrast in both themes, visible focus states on every interactive element, semantic tables with scope on headers, a skip link, prefers-reduced-motion respected, and full keyboard operation. Screen-reader order must match visual order in the comparison tables.