Red Team Report -- Round 2

Second audit after Blue Team fixes. Original 35 findings + 35 new findings across all new features. Audit date: March 19, 2026.

Total Findings

70

R1: 35 + R2: 35

Critical

3

High

18

Medium

29

Low

20

Fixed

16/70

23% resolved

Blue Team Fix Verification

Blue Team claimed 16 of 35 fixes. All 16 verified fixes confirmed working. RT-010 (blog pages) was ACKNOWLEDGED by Blue Team but actually fixed -- credit given.

RT-001: Auth forms only console.log credentials

Confirmed: no console.log found in auth files. Fix is valid.

VERIFIED

RT-002: Google and GitHub OAuth buttons do nothing

Fix is a band-aid (toast instead of real OAuth) but acceptable for now.

VERIFIED

RT-003: Landing page 'Extract' button does nothing

Functional as described.

VERIFIED

RT-004: Enterprise 'Contact Sales' button is a dead end

Valid fix. mailto is functional.

VERIFIED

RT-005: 13 footer links go to href='#'

Most links fixed. Privacy/Terms still dead but acknowledged.

VERIFIED

RT-006: Dashboard action buttons are non-functional

Confirmed functional.

VERIFIED

RT-007: Flow builder buttons are non-functional

Confirmed in flows/[id] page. Note: the NEW workflow-builder page (RT-038) has the same bugs.

VERIFIED

RT-008: 'Forgot password?' links to itself

Functional.

VERIFIED

RT-010: Blog article links go to non-existent pages

Actually FIXED: app/blog/[slug]/page.tsx now exists with 3 full blog posts. Blue Team undersold this fix.

VERIFIED

RT-012: Settings page buttons do nothing

Confirmed functional.

VERIFIED

RT-013: Settings billing buttons are dead

Confirmed functional.

VERIFIED

RT-014: Monitoring 'Configure Alerts' button is dead

Confirmed functional.

VERIFIED

RT-022: CTA hover:bg-blue-50 breaks dark mode

Confirmed.

VERIFIED

RT-023: No mobile navigation menu

Fixed on landing page only. Blog post pages (RT-069) and extension page (RT-070) still lack mobile nav.

VERIFIED

RT-024: Social icon buttons lack accessible labels

Confirmed.

VERIFIED

RT-026: Sign out button does nothing

Confirmed in app-sidebar.tsx line 177.

VERIFIED

Round 2 Findings (35)

New issues discovered in new features: 1 critical, 8 high. The product has grown massively but almost every new page has dead buttons, fake data, or broken navigation.

RT-036: Playground returns identical output regardless of URL entered
HIGHDead Functionality

The revamped playground page always shows the same preloadedFlow messages and the same mockOutputData (24 hardcoded products) no matter what URL the user types. Every follow-up message returns the same canned 'Got it. I can refine...' response. The 'AI' is still entirely fake. This was noted in RT-029 but the new page makes the deception even more convincing, which is worse.

app/(dashboard)/playground/page.tsx:61-127
Recommendation: At minimum, vary the mock response based on URL domain. Better: wire to a real extraction endpoint.
RT-037: Playground output panel uses hardcoded bg-zinc-950, breaks in light mode
MEDIUMDark Mode

The JSON output <pre> tag uses bg-zinc-950 and text-zinc-300 without dark: variants. The schema tab does the same. In light mode the code blocks look jarring -- dark rectangles against a white page. While this is a deliberate 'code editor' aesthetic, it should still use theme-aware backgrounds.

app/(dashboard)/playground/page.tsx:290, 340
Recommendation: Use bg-muted or bg-card for code blocks, or wrap in a dark-mode-aware container.
RT-038: Workflow builder: Save, Run, Share buttons have no onClick handlers
HIGHDead Functionality

The workflow builder toolbar has Save, Run, and Share buttons that are purely decorative -- no onClick, no toast, no state change. This is the same class of bug as the original RT-007 but in a brand-new page. The 'Test This Step' button inside the NodeConfigPanel also does nothing.

app/(dashboard)/workflow-builder/page.tsx:754-765, 560
Recommendation: Add onClick handlers with toast.success('Workflow saved') at minimum. Wire 'Run' to navigate to a mock run page.
RT-039: Workflow builder: Undo/Redo buttons are non-functional
MEDIUMDead Functionality

The Undo and Redo buttons in the workflow builder toolbar have no onClick handlers. There is no undo/redo state management. They are purely visual.

app/(dashboard)/workflow-builder/page.tsx:718-732
Recommendation: Implement an undo stack or remove the buttons.
RT-040: Workflow builder: Node palette drag-and-drop does nothing
HIGHDead Functionality

Each node in the left palette has draggable attribute and cursor-grab styling, but there is no onDragStart, no onDrop on the canvas, and no ondragover handler. Dragging a node from the palette does not add it to the canvas. The only way nodes exist is from the hardcoded initialNodes array. Users have no way to add new nodes to the workflow.

app/(dashboard)/workflow-builder/page.tsx:802-821
Recommendation: Implement drag-and-drop with onDragStart/onDrop, or add an onClick handler to palette items that adds a node at a default position.
RT-041: Marketplace 'Use Flow' buttons have no onClick handler
HIGHDead Functionality

Every FlowCard has a 'Use Flow' button with bg-blue-600 styling that looks fully interactive but has no onClick handler. Users click it and nothing happens. The 'Install Flow' button in the preview dialog also has no onClick handler.

app/(dashboard)/marketplace/page.tsx:388-389, 623-626
Recommendation: Add onClick with toast or redirect to /flows/new with the template pre-selected.
RT-042: Marketplace 'Publish Your Flow' button has no onClick handler
MEDIUMDead Functionality

The header 'Publish Your Flow' button (line 450-453) has no onClick handler, no Link wrapper, no dialog trigger. It is completely dead.

app/(dashboard)/marketplace/page.tsx:450-453
Recommendation: Either add a publishing wizard or show a 'Coming soon' toast.
RT-043: Marketplace sort 'Most Runs' duplicates 'Most Popular' logic
LOWTechnical Debt

The sort dropdown has 'Most Popular' and 'Most Runs' as separate options, but both use the identical sort logic: b.installs - a.installs. They produce identical results. This either means runs data is missing or the sort was copy-pasted without updating.

app/(dashboard)/marketplace/page.tsx:417-418
Recommendation: Add a separate 'runs' field to marketplace flows or remove the duplicate sort option.
RT-044: Marketplace fake reviews with fake usernames
MEDIUMCredibility

All marketplace flows have fabricated reviews from fake users (@datawhiz, @recruitbot, @realtyai, etc.) with suspiciously high ratings. Combined with the existing RT-018 (fake testimonials) problem, this compounds the credibility issue. Every interaction point in the product now has fake social proof.

app/(dashboard)/marketplace/page.tsx:87-127
Recommendation: Remove reviews section until real user data exists, or clearly label as example data.
RT-045: API Playground uses hardcoded mock responses, not real API calls
MEDIUMDead Functionality

The API Playground 'Send Request' button triggers setTimeout(800ms) and returns hardcoded getMockResponse() data. It does not make any actual HTTP request to the API. All response times, sizes, and headers are fabricated. Users might think they are testing a real API.

app/(dashboard)/api-playground/page.tsx:345-352
Recommendation: Make actual fetch() calls to the API endpoints, or clearly label the page as 'API Explorer (Mock Mode)'.
RT-046: API Playground body textarea uses hardcoded dark colors
LOWDark Mode

The body textarea and response pre blocks use bg-zinc-950, text-zinc-100, border-zinc-800 without theme-aware variants. These dark code blocks clash with light mode.

app/(dashboard)/api-playground/page.tsx:479, 544
Recommendation: Use theme tokens or wrap in a forced-dark container.
RT-047: API Playground uses dangerouslySetInnerHTML for syntax highlighting
MEDIUMTechnical Debt

The syntaxHighlight function returns raw HTML strings injected via dangerouslySetInnerHTML. While the input is JSON.stringify output (so not user-controlled in practice), this is a bad pattern. If the API ever returns user-controlled data in responses, this becomes an XSS vector.

app/(dashboard)/api-playground/page.tsx:284-299, 547-549
Recommendation: Use a proper syntax highlighting library (shiki, prism-react-renderer) or React-based tokenizer.
RT-048: Analytics page chart components don't exist -- will crash in production
CRITICALDead Functionality

The analytics page dynamically imports RunsChart, DataChart, and CostChart from '@/components/dashboard/analytics/runs-chart', 'data-chart', and 'cost-chart'. These files DO NOT EXIST in the codebase. The dynamic import has a loading placeholder, so dev mode shows spinners, but the charts will never render. The page is fundamentally broken.

app/(dashboard)/analytics/page.tsx:38-51
Recommendation: Create the chart components or remove the imports and show placeholder charts with static data.
RT-049: Analytics numbers don't add up with dashboard/runs data
MEDIUMCredibility

Analytics shows Total Runs: 4,287 and 7 top flows whose runs sum to 4,287 (248+412+1024+856+632+389+726). But the items extracted sum to 1,175,476 while the stat card says 1.2M -- close but sloppy. More importantly, these numbers don't match the dashboard page which shows different flow data. The Total Cost of $12.47 is absurdly low for 4,287 runs. The cost column sums to $19.89, not $12.47.

app/(dashboard)/analytics/page.tsx:53-99
Recommendation: Ensure all numbers are internally consistent. Total cost should match sum of individual flow costs.
RT-050: Analytics date range selector does nothing
LOWDead Functionality

The date range Select (7d, 30d, 90d, Custom) updates state but has zero effect on the displayed data. All stats, charts, and tables show the same data regardless of selection. The 'Custom' option has no date picker UI.

app/(dashboard)/analytics/page.tsx:102, 115-125
Recommendation: Filter the displayed data based on selection, or disable the selector.
RT-051: Webhook logs 'View' button has no onClick handler
LOWDead Functionality

In the webhook logs table, each row has a 'View' button that renders as a ghost Button with no onClick or href. Clicking it does nothing -- no detail panel, no modal, no navigation.

app/(dashboard)/webhooks/page.tsx:514
Recommendation: Add an onClick that shows the full payload in a dialog, or remove the button.
RT-052: Integrations wizard 'How to find your webhook URL' link goes to '#'
LOWDead Functionality

The webhook wizard in the integrations page has an anchor tag with href='#' for 'How to find your webhook URL'. It calls e.preventDefault() so it does nothing. Dead help link in a setup wizard is poor UX.

app/(dashboard)/integrations/page.tsx:208-213
Recommendation: Link to actual documentation or show inline instructions.
RT-053: Integrations wizard does not update card status after completion
MEDIUMDead Functionality

After completing the Slack, Discord, Google Sheets, or Email wizard and clicking 'Finish Setup', the toast says 'connected successfully' but the integration card still shows 'Not Connected'. The wizard calls onOpenChange(false) but never updates the integration status in state. The status is hardcoded in the const array and never mutated.

app/(dashboard)/integrations/page.tsx:60-127, 167-168
Recommendation: Move integrations to useState and update status on successful wizard completion.
RT-054: Community thread links all lead to 404s
HIGHDead Functionality

Every PostCard links to /community/{post.id} (e.g., /community/welcome, /community/paginated-ecommerce). There is no app/community/[id]/page.tsx or app/community/[slug]/page.tsx. All thread links result in 404 pages. The community page looks like a real forum but clicking any post leads nowhere.

app/community/page.tsx:182
Recommendation: Create a dynamic route at app/community/[id]/page.tsx with thread content, or make posts non-clickable.
RT-055: Community 'New Post' button leads to 404
HIGHDead Functionality

The 'New Post' button links to /community/new which does not exist. Users who want to create content hit a 404. This makes the forum look abandoned.

app/community/page.tsx:296-300
Recommendation: Create a /community/new page with a post creation form, or remove the button.
RT-056: Community Quick Links sidebar uses /docs/api (inconsistent route)
LOWDead Functionality

The community sidebar 'API Reference' link points to /docs/api. The docs sidebar uses /docs/api-reference. The API Keys page uses /docs/api. These inconsistencies mean at least one route 404s. This is the same issue as RT-032 but now appearing in a third location.

app/community/page.tsx:416-417
Recommendation: Standardize the API docs route across all pages.
RT-057: Community fake engagement metrics
MEDIUMCredibility

The community page displays '2,847 members', '1,234 posts', '89 online now' -- all hardcoded fake numbers. Combined with fabricated post authors, reply counts, and view counts, this creates the illusion of an active community that doesn't exist.

app/community/page.tsx:329-340
Recommendation: Remove fake metrics or clearly label as demo data.
RT-058: Extension page 'Add to Chrome' buttons go nowhere
HIGHDead Functionality

Both 'Add to Chrome' buttons (hero and final CTA) are plain <Button> elements with no onClick, no href, no Link wrapper. There is no actual Chrome extension in the Chrome Web Store. The page claims 'Available on the Chrome Web Store' which is false. The 'Watch Demo' button also has no handler.

app/extension/page.tsx:73-79, 310-314
Recommendation: Remove the extension page until an actual extension exists, or clearly label as 'Coming Soon'. At minimum, link to a waitlist signup.
RT-059: Extension page: browser mockup 'Extract Data' button is dead
LOWDead Functionality

Inside the browser mockup screenshot, the 'Extract Data' button in the simulated extension popup has no onClick handler. This is a static visual, but it's styled as an interactive button.

app/extension/page.tsx:135-137
Recommendation: Either make it obviously a screenshot/illustration or remove the button styling.
RT-060: Extension page footer uses hardcoded bg-gray-950 dark colors
LOWDark Mode

The extension page has its own footer that duplicates the hardcoded bg-gray-950 / text-gray-300 / border-gray-800 pattern from the landing page footer (RT-020). New pages are copying the same theming bug.

app/extension/page.tsx:319
Recommendation: Use theme tokens or share a common footer component.
RT-061: Extension page has 'Screenshot placeholder' text visible to users
MEDIUMUX

The 'See It in Action' section has three placeholder boxes that literally say 'Screenshot placeholder' with a Monitor icon. This is developer placeholder content that was never replaced with actual screenshots or illustrations.

app/extension/page.tsx:256-274
Recommendation: Add real screenshots or remove the section entirely.
RT-062: Run detail page: Stop Run, Re-run, Export Results buttons are dead
HIGHDead Functionality

The run detail page has three action buttons (Stop Run, Re-run, Export Results) that are all purely decorative -- no onClick handlers on any of them. The live simulation looks impressive but users cannot actually interact with it.

app/(dashboard)/runs/[id]/page.tsx:405-417
Recommendation: Add onClick with toast feedback. Stop should end the simulation. Re-run should restart it. Export should download JSON.
RT-063: Run detail page: browser mockup uses hardcoded dark colors
LOWDark Mode

The run detail page has a browser frame mockup using bg-gray-900, bg-gray-800, text-gray-400, bg-gray-950. This is the same pattern as the extension page and landing page -- hardcoded dark colors that ignore theming.

app/(dashboard)/runs/[id]/page.tsx:301-309
Recommendation: Use theme tokens.
RT-064: Run detail live log container uses bg-zinc-950 (hardcoded dark)
LOWDark Mode

The live logs panel uses bg-zinc-950 with text-gray-500 / text-gray-200. In light mode this creates a jarring dark rectangle. Same pattern as RT-037 and RT-046.

app/(dashboard)/runs/[id]/page.tsx:264
Recommendation: Use theme-aware background.
RT-065: Chatbot gives identical canned response to all free-text messages
MEDIUMDead Functionality

The chat widget's handleSend function always returns defaultResponse: 'Thanks for your message! A team member will follow up shortly.' regardless of what the user types. There is no NLP, no keyword matching, no routing. Quick replies work but free-text is completely ignored.

components/chatbot/chat-widget.tsx:82-88
Recommendation: Add basic keyword matching (e.g., 'price' triggers pricing response) or integrate a simple LLM chat endpoint.
RT-066: Chatbot references non-existent pages (scraper.bot/contact)
LOWDead Functionality

Quick reply responses reference 'scraper.bot/contact' and 'scraper.bot/community' as valid URLs. The /contact page does not exist (same issue as RT-004). Community exists at /community but the chatbot formats it without a link.

components/chatbot/chat-widget.tsx:24-28
Recommendation: Fix URLs to match actual routes. Make them clickable links.
RT-067: Sidebar links to /templates which does not exist (404)
MEDIUMDead Functionality

The sidebar nav includes a 'Templates' item linking to /templates. There is no app/(dashboard)/templates/page.tsx. Clicking Templates in the sidebar gives a 404. This is a new nav item that was added without a corresponding page.

components/dashboard/app-sidebar.tsx:55
Recommendation: Create a templates page or remove the nav item.
RT-068: Sidebar 'Billing' link goes to /settings instead of billing tab
LOWUX

The sidebar user dropdown has a 'Billing' menu item that links to /settings (generic settings page). It should link to /settings?tab=billing or /settings#billing to land on the billing tab directly. Currently it dumps users on the profile tab.

components/dashboard/app-sidebar.tsx:169-172
Recommendation: Link to /settings with a query param or hash that activates the billing tab.
RT-069: Blog post pages have no mobile navigation menu
MEDIUMUX

The blog post detail pages use 'hidden md:flex' for the nav links (Features, Pricing, Docs, Blog, Sign In, Get Started). On mobile, only the logo is visible. Same bug as RT-023 but on the new blog post pages.

app/blog/[slug]/page.tsx:259-294
Recommendation: Add mobile hamburger menu matching the landing page fix.
RT-070: Extension page has no mobile navigation menu
MEDIUMUX

The extension page nav uses 'hidden md:flex' with no hamburger menu fallback. Same bug as RT-023 and RT-069. Every new standalone page is missing the mobile menu that was fixed on the landing page.

app/extension/page.tsx:33-57
Recommendation: Share the landing page nav component (with mobile menu) across all public pages.

Round 1 Findings (35)

RT-001: Auth forms only console.log credentials
CRITICALDead FunctionalityFixed

Both sign-in and sign-up forms call console.log() with user credentials on submit. There is no actual authentication, no API call, no redirect. A user who fills out the form and clicks 'Sign In' sees nothing happen. This is the single most damaging UX failure -- it makes the product look fake on first contact.

app/(auth)/sign-in/page.tsx:29, app/(auth)/sign-up/page.tsx:44
Recommendation: Integrate a real auth provider (Clerk, NextAuth, Supabase Auth). At minimum, redirect to /dashboard after submit and store a session cookie.
RT-002: Google and GitHub OAuth buttons do nothing
CRITICALDead FunctionalityFixed

Both auth pages have 'Continue with Google' and 'Continue with GitHub' buttons with no onClick handler, no Link wrapper, no form action. They are purely decorative. Users who prefer OAuth (the majority of developer signups) hit a dead end immediately.

app/(auth)/sign-in/page.tsx:95-121, app/(auth)/sign-up/page.tsx:151-177
Recommendation: Wire up OAuth providers or remove the buttons entirely. Half-functional auth is worse than no auth.
RT-003: Landing page 'Extract' button does nothing
HIGHDead FunctionalityFixed

The hero 'See It In Action' section has an Extract button with no onClick handler. The input is readOnly. This is supposed to be the live demo that sells the product -- instead it's a static screenshot pretending to be interactive.

app/page.tsx:287-289
Recommendation: Either make it a real interactive demo (link to /playground with pre-filled URL) or remove the button and label it as a static example.
RT-004: Enterprise 'Contact Sales' button is a dead end
HIGHDead FunctionalityFixed

The Enterprise pricing card on the landing page has a 'Contact Sales' button with no onClick, no href, no Link wrapper. It renders as a plain <button> that does absolutely nothing. The pricing page's Enterprise CTA links to /contact which does not exist (404).

app/page.tsx:425-427, components/pricing/pricing-content.tsx:67
Recommendation: Link to a contact form, mailto, or Calendly link. Every enterprise lead that clicks this and gets nothing is lost revenue.
RT-005: 13 footer links go to href='#' (dead links)
HIGHDead FunctionalityFixed

The landing page footer has links for API Reference, Changelog, About, Blog, Careers, Contact, Help Center, Status, Privacy Policy, Terms of Service, plus Twitter/GitHub/LinkedIn social icons -- ALL pointing to '#'. These pages exist at /blog, /status, /changelog but are not linked. Social links go nowhere.

app/page.tsx:617-651
Recommendation: Link footer items to their real routes (/blog, /status, /changelog, /docs/api-reference). Remove links for pages that don't exist. Add real social URLs or remove the icons.
RT-006: Dashboard action buttons are non-functional
HIGHDead FunctionalityFixed

Dashboard page has multiple buttons with no onClick handlers: 'Acknowledge' alert buttons (line 297-299), 'Run' buttons on active flows (line 397-399), pause/resume toggle buttons (line 401-405), and edit buttons (line 408-409). All are purely visual -- clicking them does nothing.

app/(dashboard)/dashboard/page.tsx:297-409
Recommendation: At minimum, implement client-side state changes (like the monitoring page does for acknowledging alerts). Wire Run buttons to redirect to the flow or trigger a mock run.
RT-007: Flow builder buttons are non-functional
HIGHDead FunctionalityFixed

The flow detail page has dead buttons everywhere: 'Save' (line 259), 'Run Flow' (line 262), 'Schedule' (line 255), 'Save Settings' in settings tab (line 940-943), 'Load Preview' (line 406), 'Add Rule' for extraction (line 574-577), 'Run Now' in runs tab (line 605-608), and the 'Add Step' dropdown items (line 331-335). The Copy buttons on API code snippets also do nothing -- no clipboard API call.

app/(dashboard)/flows/[id]/page.tsx (multiple locations)
Recommendation: Implement clipboard copy for code snippets. Add toast notifications for Save/Run buttons. Make Add Step actually add steps to local state.
RT-008: 'Forgot password?' links to itself (sign-in page)
MEDIUMDead FunctionalityFixed

The 'Forgot password?' link on the sign-in page points to /sign-in -- the same page the user is already on. This is a broken circular link.

app/(auth)/sign-in/page.tsx:58
Recommendation: Create a /forgot-password page or remove the link.
RT-009: Terms of Service and Privacy Policy pages don't exist
MEDIUMDead Functionality

The sign-up form requires users to agree to Terms of Service (/terms) and Privacy Policy (/privacy) before creating an account. Both links lead to 404 pages. Requiring agreement to non-existent documents is legally and ethically problematic.

app/(auth)/sign-up/page.tsx:119-124
Recommendation: Create /terms and /privacy pages with real legal content, even if placeholder.
RT-010: Blog article links go to non-existent pages
MEDIUMDead FunctionalityFixed

All 3 blog article cards link to /blog/[slug] routes that don't exist. Clicking any article results in a 404. This makes the blog section look abandoned and damages credibility.

app/blog/page.tsx:114
Recommendation: Create actual blog post pages, or make the cards non-clickable with a 'Coming soon' indicator.
RT-011: Status page subscribe form does nothing
MEDIUMDead Functionality

The 'Get notified about incidents' form has a Subscribe button with type='button' (not 'submit') and no onClick handler. Users who enter their email and click Subscribe get zero feedback.

app/status/page.tsx:246
Recommendation: Wire to a mailing list API or at minimum show a toast confirmation.
RT-012: Settings page 'Save Changes' and 'Save Preferences' buttons do nothing
MEDIUMDead FunctionalityFixed

The profile 'Save Changes' button, notification 'Save Preferences' button, 'Upload Avatar' button, and 'Invite Member' button all lack onClick handlers. Users can edit fields but can never persist changes.

app/(dashboard)/settings/page.tsx:249,266,551
Recommendation: Add toast notifications on click (e.g., 'Settings saved') to provide feedback, even without a real backend.
RT-013: Settings billing 'Upgrade' and 'Contact Sales' buttons are dead
MEDIUMDead FunctionalityFixed

The billing tab shows plan cards with 'Upgrade' and 'Contact Sales' buttons that have no onClick or href. Users looking to give you money literally cannot.

app/(dashboard)/settings/page.tsx:419-425
Recommendation: Link Upgrade to /pricing or a Stripe checkout. Link Contact Sales to a form or Calendly.
RT-014: Monitoring 'Configure Alerts' button is dead
LOWDead FunctionalityFixed

The 'Configure Alerts' button in the monitoring page header has no onClick or href.

app/(dashboard)/monitoring/page.tsx:265-268
Recommendation: Either remove it or scroll to the monitoring rules section below.
RT-015: Runs page 'Last 7 Days' date picker button does nothing
LOWDead Functionality

The 'Last 7 Days' button in the runs page header is decorative -- no onClick, no date picker popover.

app/(dashboard)/runs/page.tsx:268-271
Recommendation: Add a date range picker or remove the button.
RT-016: Runs page Eye and Retry action buttons do nothing
MEDIUMDead Functionality

Each run row has an Eye (view) button and a RotateCcw (retry) button with no onClick handlers.

app/(dashboard)/runs/page.tsx:417-422
Recommendation: Eye should expand the detail view. Retry should trigger a new run with a toast.
RT-017: Landing page claims 'SOC 2 Compliant' -- likely false
HIGHCredibility

The hero trust badge says 'SOC 2 Compliant'. The FAQ also claims SOC 2 compliance and 'industry best practices'. If this is not actually SOC 2 certified, this is a material misrepresentation that could have legal consequences. Enterprise buyers will ask for the SOC 2 report.

app/page.tsx:137, app/page.tsx:558
Recommendation: Remove the SOC 2 claim unless you have the actual certification. Replace with something truthful like 'Encrypted in transit' or 'GDPR-aware'.
RT-018: Fake testimonials from fake people at fake companies
HIGHCredibility

Three testimonials cite 'Sarah Johnson, VP Engineering, DataStack', 'Mike Chen, CTO, MarketPulse', and 'Amanda Lee, Director, Asset Recovery LLC'. These are fabricated people at fabricated companies. Any user who Googles them will find nothing and immediately distrust the product. All have perfect 5-star ratings.

app/page.tsx:444-483
Recommendation: Remove testimonials until you have real ones. Alternatively, use the section for product screenshots, metrics, or a case study.
RT-019: TrustedBy component likely shows fake company logos
MEDIUMCredibility

The landing page includes a <TrustedBy /> component. If this shows logos of companies that don't actually use the product, it's deceptive. Combined with fake testimonials and fake SOC 2, the credibility damage compounds.

app/page.tsx:145, components/landing/trusted-by.tsx
Recommendation: Remove the trusted-by section or show stats instead ('1000+ scraping flows created').
RT-020: Hardcoded footer color: bg-gray-950 breaks theming
MEDIUMDark Mode

The landing page footer uses bg-gray-950 with hardcoded text-gray-300, text-gray-400, text-gray-500, border-gray-800, and text-white. In dark mode this happens to look fine, but in light mode it creates a jarring dark section. More importantly, it doesn't use theme tokens, making it impossible to maintain consistent theming.

app/page.tsx:594
Recommendation: Use bg-muted or bg-card with text-foreground/text-muted-foreground theme tokens.
RT-021: Admin layout uses hardcoded dark colors, ignores theme in light mode
MEDIUMDark Mode

Admin layout nav uses bg-gray-950, border-gray-800, text-gray-400, bg-gray-800, text-white, hover:bg-gray-900. The ThemeToggle button uses text-gray-400 hover:text-white. In light mode, the admin nav remains a dark slab that clashes with the page content.

app/(admin)/layout.tsx:36-67
Recommendation: Use bg-background, border-border, text-foreground/text-muted-foreground for the admin nav, or force dark theme on the entire admin layout.
RT-022: CTA section uses bg-blue-50 hover which is light-mode only
LOWDark ModeFixed

The final CTA section button uses hover:bg-blue-50 which is a near-white color. In dark mode, hovering the button flashes a bright white background that looks broken.

app/page.tsx:585
Recommendation: Use hover:bg-white/90 or a dark-mode-aware hover state.
RT-023: No mobile navigation menu
HIGHUXFixed

The landing page nav uses 'hidden md:flex' for navigation links. On mobile, only the logo is visible -- no hamburger menu, no way to navigate to Features, Pricing, Docs, Sign In, or Sign Up. The blog page has the same issue.

app/page.tsx:48, app/blog/page.tsx:60
Recommendation: Add a mobile hamburger menu with Sheet or Drawer component.
RT-024: Social icon buttons lack accessible labels
MEDIUMAccessibilityFixed

Twitter, GitHub, and LinkedIn icon links in the footer have no aria-label or screen reader text. They are invisible to assistive technology.

app/page.tsx:643-651
Recommendation: Add aria-label='Twitter', aria-label='GitHub', aria-label='LinkedIn' to each anchor.
RT-025: Notification bell button does nothing
LOWDead Functionality

The dashboard header has a notification bell with a '3' badge count, but clicking it does nothing -- no dropdown, no link to /monitoring.

components/dashboard/dashboard-header.tsx:75-79
Recommendation: Link to /monitoring or add a dropdown showing recent alerts.
RT-026: Sign out button does nothing
HIGHDead FunctionalityFixed

The sidebar user dropdown has a 'Sign out' menu item with no onClick handler. Users who want to sign out cannot.

components/dashboard/app-sidebar.tsx:163
Recommendation: Wire to auth signout or redirect to /sign-in with session cleared.
RT-027: Middleware API auth is easily bypassed
HIGHTechnical Debt

The middleware skips API key validation if the request's referer or origin header contains the hostname. This means any request with a spoofed Referer header bypasses auth entirely. The key validation only checks the 'scr_' prefix -- there is no actual key lookup against a database.

middleware.ts:49-63
Recommendation: Remove the referer bypass. Implement real API key validation against a database. Use proper session-based auth for dashboard API calls.
RT-028: New flow wizard always redirects to flow-1
MEDIUMDead Functionality

Both handleGenerate() and handleTemplateSelect() hardcode router.push('/flows/flow-1'). No matter what URL or prompt the user enters, they always end up on the same pre-baked flow. The 'AI generation' is a setTimeout fake.

app/(dashboard)/flows/new/page.tsx:72-82
Recommendation: Generate unique flow IDs and create actual flow state. At minimum, create a new mock flow based on user input.
RT-029: Playground is fully faked with hardcoded responses
MEDIUMDead Functionality

The playground chat always shows the same preloaded conversation and output regardless of the URL entered. The 'AI' is a sequence of delayed addMessage() calls with hardcoded strings. Follow-up messages always return the same generic response.

app/(dashboard)/playground/page.tsx:61-127
Recommendation: Wire to a real scraping/extraction API endpoint, even if rate-limited for the free tier.
RT-030: Hardcoded dates throughout the codebase
LOWTechnical Debt

Multiple files hardcode new Date('2026-03-18T18:30:00Z') as 'now' for relative time calculations. This means all time displays are frozen. If someone visits the site on any other date, all times will be wrong ('2d ago' when it should be months ago).

dashboard/page.tsx:192, flows/page.tsx:70, flows/[id]/page.tsx:103, runs/page.tsx:160, monitoring/page.tsx:96, api-keys/page.tsx:76
Recommendation: Use actual Date.now() for time calculations. The mock data dates should be generated relative to the current date.
RT-031: Docs sidebar links lead to non-existent pages
MEDIUMDead Functionality

The docs layout sidebar has links to /docs/quickstart, /docs/concepts, /docs/api-reference, /docs/guides, /docs/templates. If these pages don't exist, users navigating the docs see 404s.

app/(docs)/layout.tsx:7-13
Recommendation: Create stub pages for each docs section or mark unfinished ones as 'Coming soon'.
RT-032: API docs link points to /docs/api which may not exist
LOWDead Functionality

The API Keys page has a 'View API Docs' button linking to /docs/api. The docs sidebar uses /docs/api-reference. These are different routes -- at least one is wrong.

app/(dashboard)/api-keys/page.tsx:408
Recommendation: Standardize the API docs route and ensure it resolves to a real page.
RT-033: Runs page table rows lack React keys on fragments
LOWTechnical Debt

The runs page renders expandable table rows using bare <> fragments. React requires keys on all sibling elements. The key is on the TableRow but the fragment wrapper doesn't have one, which can cause rendering issues.

app/(dashboard)/runs/page.tsx:371-485
Recommendation: Use <Fragment key={run.id}> instead of bare <>.
RT-034: Pricing page has no navigation bar
MEDIUMUX

The standalone /pricing page (PricingContent) has no navigation header at all -- no logo, no links, no way to get back to the home page or sign up. Users who arrive from a direct link are stranded.

components/pricing/pricing-content.tsx
Recommendation: Add the same nav bar used on the landing page, or at minimum a back link.
RT-035: Settings page pricing doesn't match pricing page
LOWCredibility

The settings billing tab shows plans: Free $0, Starter $19, Professional $49, Enterprise Custom. The pricing page shows: Free $0, Pro $29, Enterprise Custom. Different plan names and prices across the product erode trust.

app/(dashboard)/settings/page.tsx:73-78 vs components/pricing/pricing-content.tsx:21-81
Recommendation: Standardize plan names and pricing across all pages.

Competitive Gap Analysis

Parse.bot Advantages
What they have that we don't
  • Browserless execution -- 10-100x faster than headless browser. HTTP-level extraction means sub-second responses, not 5-15 second Puppeteer runs.
  • Deterministic APIs -- Every parser becomes a versioned, typed, cacheable REST endpoint. Not just data extraction -- an API product.
  • MCP integration -- Parsers work as Model Context Protocol servers, enabling AI agents to use web data natively.
  • Hosted endpoints -- Real, live API endpoints you can curl right now. Not a demo, not a screenshot.
Notte Advantages
What they have that we don't
  • Real browser infrastructure -- Actual headless browser fleet with fingerprint rotation, residential proxies, and anti-detection.
  • Agent orchestration -- AI agents that can reason, plan multi-step workflows, and recover from failures autonomously.
  • Digital personas -- Browser sessions that maintain persistent identity, cookies, and history across runs.
  • CAPTCHA solving -- Built-in CAPTCHA bypass, not just claimed in marketing copy.
  • Serverless edge compute -- Runs execute at the edge with zero cold start. Real infrastructure, not setTimeout().
Our Gaps
What we're missing vs. both competitors
  • No real scraping engine -- The entire product is mock data and setTimeout() calls. Nothing actually scrapes anything.
  • No real authentication -- Auth forms redirect to dashboard but there are no sessions, no JWT, no user state.
  • No real database -- All state is mock-data.ts constants. Refreshing the page resets everything.
  • No real AI -- The "AI generation" is a hardcoded timeout. The playground chat is a script. The workflow builder is a static canvas.
  • Feature sprawl without depth -- 13+ new pages added (marketplace, analytics, workflow builder, community, extension, etc.) but none of them actually work. Breadth without depth is worse than a small product that works.
Round 2 Risk Assessment: The Potemkin Village Got Bigger

The Blue Team fixed 16 of 35 Round 1 findings (46% -- slightly better than their claimed 40%). All verified fixes are real. However, the product has expanded from ~15 pages to ~28 pages, and almost every new page introduces the same category of bugs that were found in Round 1.

The pattern: A new feature gets built with polished UI, hardcoded mock data, and buttons that look interactive but have no onClick handlers. The workflow builder looks like a professional node editor but you cannot add nodes from the palette. The marketplace looks like a real app store but "Use Flow" does nothing. The analytics page imports chart components that do not exist in the codebase.

The core problem remains unchanged: This is a demo site, not a product. Every new feature makes it look more real, which makes the disappointment worse when a user tries to actually use it. The community page fabricates 2,847 members. The marketplace fabricates reviews. The extension page advertises a Chrome extension that does not exist. The attack surface for credibility damage has tripled since Round 1.

Bottom line:

54 of 70 total findings remain unfixed (77%). 1 new critical and 8 new high-severity issues were introduced by the new features. The product is growing faster than it is being fixed.