Comment sections are architecturally broken.

Traditional embeds sit where 70% of readers never scroll, load 140KB of JavaScript, and phone home on every request. Sayy fixes the architecture β€” not the UI.

The AI bubble is starting to look a lot like the dot-com era

Markets have been watching the AI sector with growing unease. While fundamentals remain strong, valuations have stretched…

The most dangerous assumption is that growth will continue indefinitely without a meaningful correction.

πŸ’¬ Comment on this
17 Comments
4 reading
MK
Maya K. 2m ago
"most dangerous assumption…"
This is exactly what people said about cloud in 2010. Capital intensity is now 10Γ— higher.
πŸ‘ 14Reply
RS
Ryan S. 9m ago
The dot-com comparison falls apart at actual revenue. AWS alone runs at massive scale.
πŸ‘ 9πŸ‘Ž 4Reply
LT
Leila T. 15m ago
Both can be true β€” the tech is real, the valuations are fantasy.
πŸ‘ 22Reply
70%
The Footer Fallacy
Readers never scroll far enough to see traditional comment sections.
140KB
Disqus Payload
JavaScript on every pageview. Core Web Vitals degraded, SEO penalised.
2.7β˜…
Disqus G2 Rating
Forced ads, tracking, and data lock-in. Switching feels impossible.
0KB
Sayy External
Zero external requests in Tier 1. Privacy-first is the default.
β€” Architecture
Three-stage boot. Zero blocking.
The full JS bundle never blocks your page β€” it only loads when a reader opens the widget.
01

boot.js β€” 1 day cache

A single <script> tag. Reads data-site, fetches init. Fingerprint-free. No cookies. No tracking.

GET /embed/boot.js Β· max-age=86400
02

init endpoint β€” 60s cache

Returns JSON config: appearance, feature flags, versioned loader URL. Config version bumps on save.

GET /embed/init Β· max-age=60 Β· ETag
03

loader.js β€” 1yr immutable

Full widget. Version baked into URL β€” cached indefinitely. Only fetched on first load or config change.

GET /embed/loader.v{hash}.js Β· immutable
1<!-- Drop-in embed. That's it. -->
2<script
3 src="https://cdn.sayy.io/embed/boot.js"
4 data-site="your-site-id"
5 data-mode="side_panel"
6 defer
7></script>
8
9<!-- 3KB boot β†’ lazy-loads full widget -->
10<!-- Zero external requests (Tier 1) -->
11<!-- No cookies. No fingerprints. -->
1// Programmatic control
2import { Sayy } from '@sayy/embed'
3
4const widget = Sayy.init({
5 site: 'your-site-id',
6 mode: 'floating',
7 theme: 'auto',
8})
9
10// Listen for events
11widget.on('comment:new', (e) => {
12 console.log(e.author, e.body)
13})
1# Fetch comments for a page
2GET /api/v1/sites/{site}/comments
3 ?page_url=https://example.com/post
4 &sort=top
5 &limit=25
6
7# Post a comment
8POST /api/v1/sites/{site}/comments
9 Authorization: Bearer {token}
10 Content-Type: application/json
11
12 { "body": "Great post!",
13 "parent_id": null,
14 "anchor": { "xpath": "...", "offset": 42 } }
β€” Features
Everything a commenting API needs.
From text anchoring to RBAC β€” built for the team, not just the reader.
Core

Context Anchoring

Comments attach to highlighted text, not just the page. Readers see exactly what's being discussed.

text_anchorXPath + offset range stored per comment. Survives minor edits via fuzzy matching.
highlight_syncHover a comment to highlight the source. Click a highlight to jump to the thread.
orphan_handlingIf source text is deleted, comment auto-demotes to page-level with a stale badge.
quote_previewAnchored text displayed inline in the comment thread for full context.
Pipeline

Three-tier spam filtering

Starts local. Escalates only when needed. You choose how far the pipeline goes.

tier_1: localRegex patterns, blocklists, rate limiting. Zero external calls. Privacy-first default.
tier_2: aiBYOK β€” your OpenAI or Anthropic key. Only fires for ambiguous scores (20–70).
tier_3: offNo filters at all. For platforms that handle moderation externally.
quota_fallbackAuto-falls back to Tier 1 on 429 or when monthly AI quota is exhausted.
BYOK

AI moderation β€” your API key

Tier 2 only fires for ambiguous scores. Supports OpenAI gpt-4o-mini and Claude claude-haiku. Full JSON reasoning logged.

gpt-4o-miniOpenAI provider
claude-haikuAnthropic provider
quota_fallbackAutomatic Tier 1 on 429
ai_reasoningLogged per decision
Import

Escape Disqus in 60 seconds

One-click Disqus XML import. Maps threads, authors, timestamps, and votes.

disqus_xmlFull export import with thread mapping and author preservation.
wxr_importWordPress eXtended RSS. Comments, metadata, and hierarchy intact.
dry_runPreview import results before committing. See conflicts upfront.
rollbackUndo any import within 24 hours. No data loss, ever.
Live

Real-time presence & updates

See who's reading. New comments stream in live. Powered by SSE β€” no WebSocket overhead.

presenceAnonymous reader count per page. Zero auth required.
live_commentsNew comments appear instantly via Server-Sent Events.
typing_indicatorOptional "someone is writing…" signal. Disable per-site.
reconnectAuto-reconnect with exponential backoff on flaky connections.
Access

Role-based access control

Owner, admin, moderator, commenter. Scoped per-site with granular permissions.

ownerFull access. Billing, API keys, site deletion.
adminSite settings, moderation, team management. No billing.
moderatorApprove, hide, flag comments. View reports.
audit_logEvery action timestamped. Exportable as JSON or CSV.
β€” Widget Modes
Four layouts. One embed tag.
Switch mode in the dashboard β€” no code changes. All four share the same boot.js tag.
inlineInline

Renders in page flow. ResizeObserver auto-adjusts height. Best for blogs and long-form.

data-mode="inline"
floatingFloating

56Γ—56px persistent FAB. Expands to 380Γ—500px panel. Non-disruptive β€” always accessible.

data-mode="floating"
17 comments
● 4 reading
bottom_barBottom Bar

Full-width sticky bar, collapsed with count. Expands on tap. Ideal for news and mobile.

data-mode="bottom_bar"
πŸ’¬ 4
side_panelSide Panel

Pill FAB with reactions + presence. Slides in as a panel. Most app-like experience.

data-mode="side_panel"
β€” WordPress
One plugin. Zero config.
Install from the WordPress plugin directory. Sayy replaces your default comment system in under a minute β€” no theme edits, no shortcodes.

Built for WordPress from day one

Sayy started as a WordPress commenting plugin. The WP integration isn't an afterthought β€” it's the primary install path. One plugin handles everything: embed injection, admin settings, migration, and spam tier config.

1
Install & activate β€” search "Sayy" in Plugins β†’ Add New. One click. No API keys needed for the free tier.
2
Auto-replaces comments β€” the plugin hooks into comments_template and injects the Sayy embed. Your theme's comment section is swapped automatically.
3
Import existing comments β€” migrate your native WP comments or Disqus export with one click from the Sayy settings panel. Threads, authors, and votes preserved.
WordPress 6.0+ PHP 8.1+ Multisite compatible Classic & Block themes
Dashboard β€” Sayy Comments

Sayy Settings

Widget mode: Inline
Replace native comments
Context anchoring
Real-time presence
AI moderation (Tier 2)
β€” Pricing
Usage-based. No surprises.
Monthly billing. AI moderation runs on your own API key β€” we never mark it up.
Free
$0
forever
  • 1 site
  • 500 comments / month
  • 7-day analytics retention
  • All 4 widget modes
  • Local spam filter
  • Migration wizard
Business
$49
/month Β· 25 sites
  • 25,000 AI calls / month
  • Voice comments
  • Custom branding
  • 365-day retention
  • 25 team members
Agency
$149
/month Β· 100 sites
  • 100,000 AI calls / month
  • 730-day retention
  • Unlimited team members
  • All features
// Early Access Β· Q2 2026
Ship comments in minutes, not days.
Early access subscribers get Pro free for the first year. No credit card required. We'll email you before launch.
// No spam. Unsubscribe any time. Pro free for year one.