Remove OpenRouter logo from Built by Fern trusted-by row - #40
Open
kgowru wants to merge 10 commits into
Open
Conversation
The "Give us your email" timeout link was missing type="button", so it submitted the surrounding form and re-ran the score instead of opening the modal. Also retargets the modal copy and Slack message for the timeout flow (the user wants their score, not a sales demo) and passes the URL through so the Slack handler knows what to rerun locally. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
fix: timeout link opens email modal instead of resubmitting
feat: IP rate limit, URL validation, and FERN_ONLY rerun flag
* feat: switch category inference from OpenAI to Claude Haiku Replace gpt-4o-mini with claude-haiku-4-5 in the LLM fallback for category classification. Uses ANTHROPIC_API_KEY instead of OPENAI_API_KEY. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat: redirect known duplicate slugs to canonical leaderboard entry Add a slug-alias map so typing a domain like monday.com (which resolves to the weaker "monday" slug) lands on the curated leaderboard entry "developer-monday-com-apps". Applied in the score API and the company page so both search and direct navigation redirect to the canonical slug. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: keep *.ferndocs.com sites distinct from canonical company slug (#23) Fern preview/staging hosts (*.ferndocs.com) now always slug by URL instead of the derived company name, so e.g. docusign.ferndocs.com no longer collapses onto the "docusign" slug and return the cached live entry. These sites are now graded as distinct entries. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat: switch category inference from OpenAI to Claude Haiku Replace gpt-4o-mini with claude-haiku-4-5 in the LLM fallback for category classification. Uses ANTHROPIC_API_KEY instead of OPENAI_API_KEY. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat: redirect known duplicate slugs to canonical leaderboard entry Add a slug-alias map so typing a domain like monday.com (which resolves to the weaker "monday" slug) lands on the curated leaderboard entry "developer-monday-com-apps". Applied in the score API and the company page so both search and direct navigation redirect to the canonical slug. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: keep *.ferndocs.com sites distinct from canonical company slug (#23) Fern preview/staging hosts (*.ferndocs.com) now always slug by URL instead of the derived company name, so e.g. docusign.ferndocs.com no longer collapses onto the "docusign" slug and return the cached live entry. These sites are now graded as distinct entries. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: route monday.com to canonical api-reference leaderboard entry (#25) * fix: route monday.com to canonical api-reference leaderboard entry The "monday" alias pointed at developer-monday-com-apps, which has since been hidden (score 68/D). Repoint to developer-monday-com-api-reference, the visible canonical entry (score 91/A). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: make slug alias a lookup redirect, never a scoring target Previously a forced rerun (or dev run) of monday.com would score https://monday.com and upsert it under the aliased slug developer-monday-com-api-reference, clobbering the curated A-grade entry. Now the alias only redirects cache lookups to the existing canonical entry; scoring always stores under the raw slug. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: reject apex marketing sites that ship an llms.txt (e.g. monday.com) (#27) An llms.txt returning 200 short-circuited docs detection, so marketing homepages that now ship one (monday.com) were graded as docs sites. At a bare apex/root, llms.txt is no longer sufficient on its own; we defer to the homepage content check (only a visible marketing page is rejected, and deeper paths / docs subdomains still pass). Also drop the now-unneeded monday slug alias. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: hard-block monday.com apex so it can never be graded as docs (#28) The detection layer already rejects monday.com, but the cache lookup runs before detection — a stale cached row would still be served. Add an apex-only block (exact host + www, subdomains excluded) that runs before the cache and scoring, guaranteeing the marketing apex is rejected while developers.monday.com and other docs subdomains stay gradeable. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: redirect monday.com apex to curated developer-docs entry instead of erroring Hard-blocking monday.com produced a confusing "not eligible for scoring" dead-end. Instead, drop the apex block and restore the SLUG_ALIASES entry (monday -> developer-monday-com-api-reference) so the cache lookup surfaces the existing curated developer-docs entry and the frontend navigates there. The detection fix still rejects the marketing apex as a backstop, so monday.com is never scored; developers.monday.com remains gradeable. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: redirect aliased domains in dev too, before docs detection The monday.com -> developer-docs redirect lived only inside the prod-gated cache block, so in local dev it was skipped and monday.com hit the "not a docs site" detection rejection. Resolve an explicit alias up front (dev and prod, even with force, before detection): if the curated entry exists, return { existing: true, slug } so the frontend navigates straight to it. Falls through to normal scoring only when the curated entry is missing. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test: add Vitest framework and cover docs-eligibility / monday behavior Adds Vitest (npm test / test:watch) with no app changes beyond extracting the testable logic into lib modules: - lib/docs-detection.ts: detectDocsUrl + the docs regexes (was inline in the route) - lib/slug.ts: urlToSlug / nameToSlug (was inline in the route) Tests (25) cover the eligibility logic with a stubbed fetch: - docs-detection: subdomain/path/platform acceptance, apex marketing rejection even when an llms.txt is present (the monday.com case), llms.txt nuance, and unreachable-page handling - blocked-domains, slug-aliases, slug derivation - monday-behavior: an executable spec — monday.com apex is not blocked, aliases to the curated developer-docs entry, and is rejected by detection as a backstop; developers.monday.com stays gradeable Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Move the scores data path off Supabase/PostgREST to a Postgres client targeting a new `agent_score` database on the prod RDS instance, and move OG images from Supabase Storage to S3 (FER-11415). App: - lib/db.ts: pooled pg client (AGENT_SCORE_DATABASE_URL, TLS, singleton) - lib/og-storage.ts: S3 OG-image upload + public URL (replaces Supabase Storage) - lib/supabase.ts: rewritten internals to pg + S3, same exported API (preserves dedupe-newest-first, blocked-domain filter, ON CONFLICT(slug) upsert, hidden/is_fern only-when-provided) - admin routes (dedupe, scrub-blocked) + ops scripts migrated off PostgREST - package.json: add pg + @aws-sdk/client-s3, drop @supabase/supabase-js - .env.example updated for the new env vars Migration toolkit (scripts/supabase-to-rds-migration/): - reuses the dashboard toolkit (lib.sh + audit/sync/refresh) with `dashboard` added to the reserved-DB guard - cutover.sh (maintenance-window), migrate-og-images.sh (idempotent Storage -> S3), monitor.sh (read-only), config.prod.sh.example, RUNBOOK.md No live cutover performed; cutover is operator-run per RUNBOOK.md.
…o-rds FER-11415: migrate agent-score data layer Supabase → RDS (agent_score)
Co-Authored-By: Claude <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Brings the FER-11415 data-layer migration (Supabase/PostgREST → RDS Postgres via lib/db.ts, OG images → S3) onto this branch, which previously still used the decommissioned Supabase path and crashed at request time. Conflict resolutions: - app/api/score/route.ts: adopt main's extracted @/lib/docs-detection and @/lib/slug modules (identical logic, now unit-tested) plus the alias-redirect block; drop the inline copies. - lib/slug-aliases.ts: keep this branch's disabled monday alias (#27). - monday.com behavior: kept this branch's hard-block strategy (#27/#28 — apex blocked in blocked-domains.ts, alias off) over main's alias-redirect, and updated the three monday test specs to assert the block. All 25 tests pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Removes the OpenRouter logo from the "Trusted by" logo row in the "Built by Fern" CTA section, leaving NVIDIA, ElevenLabs, Twilio, and Adobe.
Verified against a local dev server: the rendered homepage no longer references
openrouter-top.svg. Note that the OpenRouter testimonial elsewhere on the page is intentionally untouched.🤖 Generated with Claude Code