AI Slop Code Risk Monitor

every-app/open-seo

SlopCodeMonitor badge for every-app/open-seo Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Open source alternative to Semrush and Ahrefs

0.6 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for every-app/open-seo, a TypeScript project with 25,881 GitHub stars. SynthScan examined 643,256 lines of code across 1982 source files, recording 363 pattern matches distributed across 5 syntactic categories. The legacy adjusted pattern signal is 0.6 (Low pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

0.6
Adjusted Signal
0.6
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
25.9K
Stars
TypeScript
Language
643.3K
Lines of Code
2.0K
Files
363
Pattern Hits
2026-10-31
Scan Date
0.00
HC Hit Rate

Risk Review · Payload v1

Use each vector to guide manual verification of the underlying findings.

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 2.5/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 321 finding(s).

Hallucinated Dependency & Supply Chain Risk 0.2/100 · LOW

Are imports declared and package/API names verified? 22 finding(s).

Agent Over-Engineering Ratio 2.6/100 · LOW

Are wrappers, guards, and repeated structures necessary? 296 finding(s).

PR Review Velocity Impact 3.1/100 · LOW

Which changes need focused human review? 363 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 0MEDIUM 20LOW 343

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 363 distinct pattern matches across 5 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Hyper-Verbose Identifiers276 hits · 280 pts
SeverityFileLineSnippetContext
LOWweb/src/components/website-traffic-checker-tool.tsx50export function WebsiteTrafficCheckerTool() {CODE
LOWweb/src/routes/_marketing/website-traffic-checker.tsx63function WebsiteTrafficCheckerPage() {CODE
LOWweb/src/routes/_marketing/google-search-console-mcp.tsx118function GoogleSearchConsoleMcpPage() {CODE
LOWweb/src/routes/_marketing/google-search-console-mcp.tsx172function GoogleSearchConsoleMcpCta() {CODE
LOW…c/routes/_marketing/library/keyword-research/index.tsx62function KeywordResearchLibraryPage() {CODE
LOW…utes/_marketing/library/competitive-analysis/index.tsx69function CompetitiveAnalysisLibraryPage() {CODE
LOWweb/src/routes/js/script[.]js.ts32function buildFallbackScriptResponse() {CODE
LOWscripts/selfhost-preflight.ts31async function sendPreflightFailedBeacon(failedChecks: string[]) {CODE
LOWsrc/middleware/ensure-user/delegated.ts83export async function resolveSharedWorkspaceContext(CODE
LOWsrc/middleware/ensure-user/delegated.ts101export async function resolveLocalNoAuthContext(): Promise<EnsuredUserContext> {CODE
LOWsrc/middleware/ensure-user/cloudflareAccess.ts39export async function resolveCloudflareAccessContext(CODE
LOWsrc/middleware/ensure-user/accessTokenErrors.ts10export function classifyAccessVerificationError(error: unknown): AppError {CODE
LOWsrc/middleware/ensure-user/resolve.ts12export async function resolveUserContextFromHeaders(CODE
LOWsrc/middleware/ensure-user/everyApp.ts49export async function resolveEveryAppUserContext(CODE
LOWsrc/server/standalone/sign-up.ts27export async function assertStandaloneSignUpOpen(CODE
LOWsrc/server/auth/ownership-transfer.ts14export async function transferOrganizationOwnership(CODE
LOWsrc/server/auth/default-hosted-organization.ts21function getDefaultHostedOrganizationName(user: HostedUser) {CODE
LOWsrc/server/auth/default-hosted-organization.ts30function getDefaultHostedOrganizationSlug(user: HostedUser) {CODE
LOWsrc/server/auth/default-hosted-organization.ts44async function createDefaultHostedOrganization(CODE
LOWsrc/server/auth/default-hosted-organization.ts74async function findExistingActiveOrganization(CODE
LOWsrc/server/auth/default-hosted-organization.ts107async function createActiveHostedOrganization(CODE
LOWsrc/server/auth/default-hosted-organization.ts138export async function resolveActiveHostedOrganization(CODE
LOWsrc/server/auth/default-hosted-organization.ts162export async function resolveSignInHostedOrganization(CODE
LOW⚡src/server/auth/delegated-organization.ts9export async function ensureSharedWorkspaceOrganization() {CODE
LOW⚡src/server/auth/delegated-organization.ts19function getDelegatedOrganizationId(userId: string) {CODE
LOW⚡src/server/auth/delegated-organization.ts23function getDelegatedOrganizationName(email: string, userId: string) {CODE
LOW⚡src/server/auth/delegated-organization.ts27function getDelegatedOrganizationSlug(email: string, userId: string) {CODE
LOW⚡src/server/auth/delegated-organization.ts32export async function ensureDelegatedOrganizationForUser(CODE
LOWsrc/server/auth/invitation-send-limit.ts23export async function consumeInvitationSendBudget(CODE
LOWsrc/server/auth/repositories/AuthRepository.ts32async function upsertDelegatedOrganization(input: DelegatedOrganizationInput) {CODE
LOWsrc/server/auth/repositories/AuthRepository.ts52async function findFirstOrganizationIdForUser(userId: string) {CODE
LOWsrc/server/auth/repositories/AuthRepository.ts65async function findFirstFoundedOrganizationIdForUser(userId: string) {CODE
LOWsrc/server/auth/repositories/AuthRepository.ts236async function findNewestMembershipForUser(userId: string) {CODE
LOWsrc/server/auth/repositories/AuthRepository.ts262async function hasPendingInvitationForEmail(email: string) {CODE
LOWsrc/server/auth/repositories/AuthRepository.ts283async function getLastActiveOrganizationId(userId: string) {CODE
LOWsrc/server/auth/repositories/AuthRepository.ts292async function setLastActiveOrganization(CODE
LOWsrc/server/referrals/dub.ts123export async function markDubReferredOrganization(userId: string) {CODE
LOWsrc/server/referrals/dub.ts177async function sweepDubSalesForOrganization(CODE
LOWsrc/server/referrals/dub.ts231export async function trackDubSalesForOrganization(organizationId: string) {CODE
LOWsrc/server/referrals/dub.ts258export async function sweepDubReferredOrganizations() {CODE
LOW…/features/ai-visibility/services/aiVisibilityExport.ts92export async function handleAiVisibilityDownload(CODE
LOWsrc/server/features/google/gatewayGoogle.ts108export async function getGatewayGoogleConnectUrl(CODE
LOWsrc/server/features/google/oauth-config.ts16export async function getGoogleOAuthClientConfig(): Promise<GoogleOAuthClientConfig | null> {CODE
LOWsrc/server/features/google/googleAccess.ts33export async function ownGoogleCallbackDisabled(): Promise<boolean> {CODE
LOWsrc/server/features/google/GoogleAccountRepository.ts152async function hasDataGrantsForGoogleAccount(accountId: string) {CODE
LOWsrc/server/features/google/googleOAuth.ts191export async function createGoogleAuthorizationUrl(input: {CODE
LOWsrc/server/features/google/googleOAuth.ts244async function handleGoogleOAuthCallback(input: {CODE
LOWsrc/server/features/google/googleOAuth.ts426export async function handleGoogleOAuthCallbackRequest(CODE
LOW…er/features/projects/repositories/ProjectRepository.ts29async function getProjectForOrganization(CODE
LOW…er/features/projects/repositories/ProjectRepository.ts50async function getArchivedProjectForOrganization(CODE
LOWsrc/server/features/projects/services/projects.ts63function isReservedDefaultConflict(CODE
LOWsrc/server/features/projects/services/projects.ts194export async function getProjectForOrganization(CODE
LOWsrc/server/features/activation/mcpActivation.ts33export async function recordExternalMcpToolCall(caller: {CODE
LOWsrc/server/features/activation/mcpActivation.ts84export async function completeOnboardingFromAgent(CODE
LOW…atures/activation/repositories/ActivationRepository.ts22async function getOrganizationActivation(CODE
LOW…/server/features/ga4/services/Ga4ReportEnhancements.ts159function buildAttributionDiagnostics(report: NormalizedGa4Report) {CODE
LOW…/server/features/ga4/services/Ga4ReportEnhancements.ts309export function buildReportSpecificEnhancements(CODE
LOWsrc/server/features/ga4/services/Ga4Service.ts57async function listPropertiesForUserWithGrantStatus(userId: string) {CODE
LOW…ures/audit/repositories/CrawlerCredentialRepository.ts22async function findForOrganizationAndHost(CODE
LOW…ver/features/audit/repositories/auditSummaryQueries.ts11export async function getIssueTypePageCountsForAudit(auditId: string) {CODE
216 more matches not shown…
Decorative Section Separators20 hits · 60 pts
SeverityFileLineSnippetContext
MEDIUMweb/src/components/landing-page.tsx73// ─── Icons (inline SVG only, per project convention) ─────────────────COMMENT
MEDIUMweb/src/components/landing-page.tsx179// ─── Shared bits ─────────────────────────────────────────────────────COMMENT
MEDIUMweb/src/components/landing-page.tsx213// ─── Hero ────────────────────────────────────────────────────────────COMMENT
MEDIUMweb/src/components/landing-page.tsx267// ─── Testimonial (true-black inverse strip) ──────────────────────────COMMENT
MEDIUMweb/src/components/landing-page.tsx338// ─── Product ─────────────────────────────────────────────────────────COMMENT
MEDIUMweb/src/components/landing-page.tsx468// ─── MCP: the page's one Fin Orange moment ───────────────────────────COMMENT
MEDIUMweb/src/components/landing-page.tsx929// ─── Beyond the data ─────────────────────────────────────────────────COMMENT
MEDIUMweb/src/components/landing-page.tsx1052// ─── Open source ─────────────────────────────────────────────────────COMMENT
MEDIUMweb/src/components/landing-page.tsx1094// ─── Footer ──────────────────────────────────────────────────────────COMMENT
MEDIUMweb/src/components/landing-page.tsx1144// ─── Page ────────────────────────────────────────────────────────────COMMENT
MEDIUMweb/src/components/campaign-pages.tsx35// ─── Shared pieces ───────────────────────────────────────────────────COMMENT
MEDIUMweb/src/components/campaign-pages.tsx192// ─── /agencies ───────────────────────────────────────────────────────COMMENT
MEDIUMweb/src/components/campaign-pages.tsx532// ─── /agents ─────────────────────────────────────────────────────────COMMENT
MEDIUMweb/src/components/campaign-pages.tsx628// ─── Icons ───────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/types/schemas/audit.ts8// ─── Server function input schemas ──────────────────────────────────────────COMMENT
MEDIUMsrc/types/schemas/audit.ts48// ─── URL search params schema for /p/$projectId/audit ────────────────────────COMMENT
MEDIUMsrc/server/mcp/tools/site-audit-tools.ts55// ─── run_site_audit ──────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/server/mcp/tools/site-audit-tools.ts174// ─── get_audit_status ────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/server/mcp/tools/site-audit-tools.ts232// ─── get_audit_issues ────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/server/mcp/tools/site-audit-tools.ts413// ─── get_audit_pages ─────────────────────────────────────────────────────────COMMENT
Over-Commented Block42 hits · 42 pts
SeverityFileLineSnippetContext
LOWeveryapp.config.ts81 why: "Renders JavaScript-heavy pages when a site audit asks for it.",COMMENT
LOWvite.config.ts101 sourcemap: emitSourcemaps,COMMENT
LOWpnpm-workspace.yaml41 # TEMPORARY (remove after 2026-08-15): workers-oauth-provider 0.10.2 wasCOMMENT
LOWpnpm-workspace.yaml61#COMMENT
LOWweb/src/routes/_marketing/pricing.tsx41const RAW_COST_USD = {COMMENT
LOWdeploy/alchemy/alchemy.run.ts21// boundary depends on. The shell copy in .github/workflows/pr-preview.ymlCOMMENT
LOWdeploy/alchemy/alchemy.access.ts1// The contract shared by the two email-gated Cloudflare Access boundaries —COMMENT
LOWtests/playwright.mcp-isolation.config.ts1import { fileURLToPath } from "node:url";COMMENT
LOWscripts/migrate-d1-to-postgres.ts221 for (const col of idx.config.columns) {COMMENT
LOW.github/workflows/release.yml1name: ReleaseCOMMENT
LOW.github/workflows/pr-preview.yml1name: PR PreviewCOMMENT
LOWsrc/audit-worker.ts1// Auxiliary worker "open-seo-audit": hosts the entire site-audit engine — theCOMMENT
LOWsrc/router.tsx1import { createRouter as createTanStackRouter } from "@tanstack/react-router";COMMENT
LOWsrc/server.ts41COMMENT
LOWsrc/worker-configuration.d.ts10161 } : T;COMMENT
LOWsrc/worker-configuration.d.ts10181 // For properties, rewrite types to be `Result`s.COMMENT
LOWsrc/worker-configuration.d.ts10201 interface Env {COMMENT
LOWsrc/worker-configuration.d.ts10521 readonly value: string | string[] | boolean | boolean[] | number | number[] | bigint | bigint[];COMMENT
LOWsrc/report-widgets/rank-grid.ts1import L from "leaflet";COMMENT
LOWsrc/server/auth/default-hosted-organization.ts121}COMMENT
LOWsrc/server/referrals/meta.ts1import { env, waitUntil } from "cloudflare:workers";COMMENT
LOWsrc/server/referrals/dub.ts1import { env, waitUntil } from "cloudflare:workers";COMMENT
LOWsrc/server/referrals/dub.ts21// Every entry point no-ops without DUB_API_KEY, so self-host and previewsCOMMENT
LOWsrc/server/features/sam/SamChatAgent.ts61// up to a whole credit (a tenth of a cent).COMMENT
LOWsrc/server/features/sam/SamChatAgent.ts121 * "project_context" block renders the project's shared memory, which everyCOMMENT
LOWsrc/server/features/sam/SamChatAgent.ts501COMMENT
LOW…features/rank-tracking/services/scheduledRankChecks.ts21// full tick can burst ~1,000 polls into a single minute, stacking with theCOMMENT
LOWsrc/server/mcp/context.ts41COMMENT
LOWsrc/server/lib/dataforseo/keyword-metrics.ts101 // competition_index is a 0-100 scale; the app stores a 0-1 ratio.COMMENT
LOWsrc/server/lib/dataforseo/core.ts101 // Resolve the signal once so retries share the overall request timeoutCOMMENT
LOWsrc/server/lib/audit/discovery.ts361 // Every discovered URL is returned, not just the first maxPages. Seeding isCOMMENT
LOWsrc/shared/report-sandbox.ts1// The report sandbox lives here so the two halves cannot drift: the headerCOMMENT
LOWsrc/lib/auth-mode.ts1import { z } from "zod";COMMENT
LOWsrc/lib/auth-config.ts21 // X-Real-IP instead (deploy/standalone/nginx.conf).COMMENT
LOWsrc/lib/auth-config.ts41 allowDifferentEmails: true,COMMENT
LOWsrc/lib/auth-api-key.ts1import { apiKey } from "@better-auth/api-key";COMMENT
LOWsrc/lib/auth-api-key.ts21 // window resets only after a full timeWindow of complete idle (itCOMMENT
LOWsrc/lib/auth-turnstile.ts21 // No runtime site key means the Worker is allowed to rely on a client buildCOMMENT
LOWsrc/lib/auth.ts81 const baseAuthConfig = createBaseAuthConfig(COMMENT
LOWsrc/lib/auth.ts261 if (standalone && ctx.path === "/sign-up/email")COMMENT
LOWsrc/db/reports.schema.ts41 createdBy: text("created_by").notNull(),COMMENT
LOWsrc/db/pg/app.schema.ts81 // Default DataForSEO location/language for the project, set duringCOMMENT
Fake / Example Data22 hits · 22 pts
SeverityFileLineSnippetContext
LOW…res/ai-visibility/services/aiVisibilityTestFixtures.ts7 userEmail: "user@example.com",CODE
LOWsrc/server/features/activation/mcpActivation.test.ts23 userEmail: "user@example.com",CODE
LOW…atures/dashboard/services/DashboardSiteService.test.ts104 userEmail: "user@example.com",CODE
LOW…tures/dashboard/services/DashboardCacheService.test.ts166 userEmail: "user@example.com",CODE
LOW…ures/audit/services/AuditService.crawlerAccess.test.ts99 userEmail: "user@example.com",CODE
LOW…features/audit/services/AuditService.rendering.test.ts69 userEmail: "user@example.com",CODE
LOW…features/audit/services/AuditService.limitTier.test.ts31 userEmail: "user@example.com",CODE
LOW…ures/rank-tracking/services/rankCheckRunGuards.test.ts35 userEmail: "user@example.com",CODE
LOW…acking/services/RankTrackingService.management.test.ts51 userEmail: "user@example.com",CODE
LOW…r/features/keywords/services/research/research.test.ts60 userEmail: "user@example.com",CODE
LOWsrc/server/features/reports/reportRoute.test.ts37 userEmail: "user@example.com",CODE
LOWsrc/server/workflows/RankCheckWorkflow.test.ts75 userEmail: "user@example.com",CODE
LOWsrc/server/workflows/SiteAuditWorkflow.test.ts74 userEmail: "user@example.com",CODE
LOWsrc/server/workflows/AiVisibilityWorkflow.test.ts59 userEmail: "user@example.com",CODE
LOWsrc/server/mcp/oauth-provider.test.ts108 userEmail: "user@example.com",CODE
LOWsrc/server/mcp/oauth-provider.test.ts179 userEmail: "user@example.com",CODE
LOWsrc/server/mcp/transport-v2.test.ts126 userEmail: "user@example.com",CODE
LOWsrc/server/mcp/instrumentation.test.ts45 userEmail: "user@example.com",CODE
LOWsrc/server/mcp/transport.test.ts121 userEmail: "user@example.com",CODE
LOWsrc/server/mcp/transport.test.ts297 userEmail: "user@example.com",CODE
LOWsrc/server/mcp/oauth-refresh.e2e.test.ts37 userEmail: "user@example.com",CODE
LOWsrc/server/lib/audit/rendering-billing.test.ts33 userEmail: "user@example.com",CODE
Structural Annotation Overuse3 hits · 4 pts
SeverityFileLineSnippetContext
LOWweb/content/blogs/google-search-console-setup.md34## Step 1: Check whether your site is already set upCOMMENT
LOWweb/content/blogs/google-search-console-setup.md48## Step 2: Add your websiteCOMMENT
LOWweb/content/blogs/google-search-console-setup.md63## Step 3: Connect it to OpenSEOCOMMENT