Skip to main content

www.flatfish.nl

https://www.flatfish.nl

Completed

Curious how yours stacks up?

www.flatfish.nl scored 63/100. Where would your site land?

63

Overall Score

Flatfish remains frozen in digital amber—zero improvements across all categories since the last roast eight months ago. They've achieved the remarkable feat of ignoring every single recommendation while simultaneously claiming to be software experts.

🔥

The Roast

Flatfish has perfected the art of website neglect: same copy, same performance issues, same accessibility sins, same conversion killers. It's like watching a master chef serve the same cold soup for eight months and act surprised customers aren't returning. They've had 240 days and 21 ARIA attributes to fix a skip-to-content link, but apparently fixing their own digital door lock is someone else's sprint.

🎯 Start Here

🔒 Trust Signals
42/100
🔍 SEO
45/100
🎯 Conversion
48/100

Google PageSpeed Insights

(Real metrics from Google)

These scores come directly from Google's PageSpeed API. The AI scores above evaluate broader aspects like copy, trust signals, and conversion.

⚡
78
Performance

Core Web Vitals

4.8s
LCP
Largest Contentful Paint
0.00
CLS
Cumulative Layout Shift
124ms
TBT
Total Blocking Time
🔒 42

Trust Signals

🔍 45

SEO

🎯 48

Conversion

📝 62

Copy & Messaging

🎨 74

Design & UX

♿ 76

Accessibility

📱 76

Mobile

⚡ 78

Performance

🔒

Trust Signals

42/100

Client logos visible but remain purely decorative—zero testimonials, case studies, metrics, team bios, or credibility signals (SOC2, ISO, press mentions) are present. KVK number hidden in 8pt footer text. No quantified social proof ('50+ projects', '98% satisfaction') exists. Complete stagnation from the previous critique.

Issues Found

  • Client logos remain unlinked, unquoted, and unverified: no testimonial snippets, success metrics, case study links, or proof that these are real projects—logos alone function as brand decoration, not proof; prospects cannot benchmark Flatfish's capability against competitors
  • Zero credibility signals visible: no team bios or LinkedIn links, no security badges (SOC2, ISO 27001, GDPR compliance), no press mentions or third-party certifications (G2, Clutch reviews), no awards—KVK number (65273036) hidden in 8pt footer text does not inspire confidence in a software partner
  • No social proof dashboard or quantified metrics: missing '50+ projects delivered', 'Founded 2019', 'Avg. project delivery 12 weeks', '98% client satisfaction', 'Team of 8 Symfony experts', 'Average project size €50K–€500K'—prospects cannot estimate capability, timeline, or cost

Recommendations

  • Build an interactive client proof section with case studies high

    Convert client logo carousel into clickable cards showing client name, 1-line testimonial, key metric (e.g., 'Built SaaS MVP in 10 weeks'), and 'View case study' link—replace logo-only decoration with conversion-focused proof.

  • Add credibility signals and team transparency high

    Add a 'Meet the Team' section with founder bio (Rory Scholman) + LinkedIn link, security statement ('GDPR & data privacy compliant'), and third-party review links (Clutch, G2); display certifications, years in business (founded 2019?), and client satisfaction metric if available.

  • Create a quantified 'By the Numbers' proof banner medium

    Add a simple stat bar below hero: '50+ Projects | 12-Week Avg. Delivery | 98% Satisfaction | Team of 8 Experts'—use real metrics if available; if not, conduct quick survey of past clients to establish baseline.

🔍

SEO

45/100

Content remains critically thin (295 words captured in crawl) and zero schema markup has been added—Google cannot auto-index credentials, services, locations, or reviews. Keyword strategy is still nonexistent; headings are generic and unhelpful for rankings.

Issues Found

  • Content volume critically insufficient (~295 words vs. 2,000+ required for competitive rankings); cannot rank for high-intent terms like 'Symfony webapplicatie development', 'SaaS MVP builder Netherlands', 'AI integratie ChatGPT bedrijfsautomatie'
  • Zero schema.org markup visible (Organization, SoftwareApplication, LocalBusiness, FAQSchema, Review); Google cannot auto-index company credentials, services, location benefits, or client testimonials—missed rich snippet opportunities
  • Heading keywords remain generic ('Onze diensten', 'Hoe wij werken') with zero long-tail intent signals; missing high-value headings like 'Enterprise SaaS Development in Symfony' or 'AI Integration Services for Process Automation'

Recommendations

  • Expand content to 2,000+ words with keyword targeting high

    Add a dedicated 'Why Symfony' section, 'SaaS Development Process', 'AI Integration Capabilities', and 'Tech Stack Overview'—each targeting long-tail keywords (e.g., 'Symfony custom web app development', 'SaaS platform built for scale').

  • Implement schema.org markup across all key elements high

    Add Organization schema (name, location, contact), LocalBusiness schema (address, phone, hours), SoftwareApplication schema for each service, and aggregate Review schema for client testimonials—use JSON-LD format in <head>.

  • Optimize headings with long-tail keywords medium

    Replace 'Onze diensten' with 'Custom Web Application Development & SaaS Solutions' and 'Hoe wij werken' with 'Our Agile Development Process: Concept to Launch'; fold in 2-3 keyword variants per heading.

🎯

Conversion

48/100

Client logos remain unlinked and untranslated into social proof; no case study links, testimonial snippets, or metrics appear anywhere. Contact form context is absent, and funnel segmentation is non-existent—identical contact flow for all prospects. Zero improvement from the previous critique.

Issues Found

  • Client logos (Chalet.nl, Portfoliio, Alphacomm, De Valkshag, Lamppoint visible in screenshots) remain unlinked, unquoted, and unquantified—no case study links, testimonial snippets ('Flatfish delivered our SaaS MVP in 8 weeks'), or proof metrics ('Reduced time-to-market by 60%'); logos alone convert at ~2% vs. logos + testimonials at ~15%
  • Contact form lacks friction-reduction context: no response-time guarantee ('We'll reply within 24 hours'), no alternative channels (live chat, Calendly embed, phone scheduling), no reassurance copy about data confidentiality or GDPR compliance
  • Zero funnel segmentation: all prospects (startup founder, enterprise CTO, solo developer) routed through identical contact flow; missing lead magnets (SaaS Dev Checklist PDF, Symfony Best Practices guide), webinar invites, or low-friction exploration resources (interactive tech stack selector)

Recommendations

  • Linkify client logos with case studies or testimonial snippets high

    Make each logo clickable to reveal a modal or page with 1-2 sentence testimonial ('Flatfish scaled our platform to 100K users'), key metrics ('8-week delivery', '99.9% uptime'), and a link to full case study—convert logos from brand list to proof carousel.

  • Add context and friction-reduction to contact form high

    Prepend copy: 'Response within 24 hours' or 'Book a 30-min call'; add alternative CTA buttons ('Chat with us', 'Schedule a call via Calendly', 'Email us'); append reassurance: 'We comply with GDPR and never share your data'—reduce perceived risk.

  • Create segmented conversion paths with lead magnets medium

    Add sidebar CTAs: 'SaaS Development Checklist (PDF)' for startups, 'Enterprise Integration Guide' for enterprises, 'Tech Stack Comparison (Interactive)' for developers—each routes to email capture before download, creating low-friction lead generation.

📝

Copy & Messaging

62/100

Headlines remain capability-focused ('Maatwerk webapplicaties') instead of outcome-focused; CTAs are passive and interchangeable ('Start uw project,' 'Bespreken uw project') with zero urgency, scarcity, or pain-point language. No substantive change from the previous roast.

Issues Found

  • H1 'Maatwerk webapplicaties die uw bedrijf laten groeien' is benefit-agnostic and describes what you build, not what problem solves or why customer should care—missing competitive differentiation
  • CTA copy remains identical across hero and footer ('Start uw project,' 'Bespreek uw project', 'Bespreken uw project')—zero urgency language, no scarcity ('Limited slots available'), no outcome focus ('Get your MVP in 8 weeks')
  • Service descriptions remain generic ('Wij bouwen schaalbare SaaS-producten vanaf nul') without proof, outcome metrics, or 'why this matters'—missing ROI language like 'Scale to 100K users without infrastructure rewrites' or 'Time-to-market: 12 weeks vs. industry 6-month average'

Recommendations

  • Rewrite H1 for outcome, not capability high

    Change to 'Bring Your SaaS Idea to Market in 8–12 Weeks' or 'Enterprise Webapps Built for Scale, Delivered on Time' to focus on customer outcome (speed, scale, reliability) rather than what you build.

  • Add outcome-driven CTA copy with urgency high

    Use outcome-focused alternatives: 'Schedule Your Free SaaS Strategy Call' (specificity), 'Get Your MVP in 12 Weeks' (timeline), or 'Limited Availability: Reserve Your Slot' (scarcity) instead of generic 'Start uw project.'

  • Add quantified proof to service descriptions medium

    Append metrics like 'SaaS Ontwikkeling: 50+ products launched, avg. 10K-100K users per platform' or 'API Integraties: 48-hour integration turnaround, 99.9% uptime guarantee' to each service card.

🎨

Design & UX

74/100

The gradient hero and service cards remain visually identical twins with zero hierarchy differentiation—still looks like a 2020 template that hasn't aged well. The 'Hoe wij werken' section is still just four floating boxes without connecting arrows, numbers, or visual progression cues that scream 'process journey.'

Issues Found

  • Service cards (SaaS, Maatwerk, API, AI Koppelingen) remain flat and equal in visual weight with no hierarchy signaling which services drive most conversions or solve customer pain points first
  • Process section ('Kennismaking' → 'Plan & Ontwerp' → 'Iteratief Bouwen' → 'Oplevering & Groei') still lacks numbered steps (1,2,3,4), arrow connectors, or timeline indicators that create visual flow
  • Hero and bottom CTA sections use identical blue-to-purple gradients—repetitive branding that makes the CTAs feel like the same call instead of progression through a sales funnel

Recommendations

  • Add visual hierarchy to service cards high

    Highlight the top 2 revenue-driving services (likely SaaS + Maatwerk) with larger cards, bolder icons, or a 'Popular' badge; demote the other two slightly or add a collapsible 'More Services' pattern on mobile.

  • Number and connect the process steps high

    Add numbered circles (1,2,3,4) to each process box and SVG arrow connectors between them; consider a subtle vertical timeline on desktop and a left-border progress bar on mobile.

  • Differentiate gradient color schemes medium

    Use distinct gradient pairs for hero (blue→purple), service CTA (purple→pink), and final CTA (teal→blue) to create visual progression and reduce repetition fatigue.

♿

Accessibility

76/100

21 ARIA attributes are present but the critical WCAG Level A violation persists: no skip-to-content link (unchanged from eight months ago). Heading hierarchy order is unverified from available data, but ARIA semantic alignment appears intact.

Issues Found

  • No skip-to-content link: keyboard users still must tab through 4 nav items (Over ons, Diensten, Freelance, Contact) before reaching H1 content—violates WCAG 2.1 Level A (2.4.1 Bypass Blocks); this is an 8-month-old unresolved criticism, marking willful negligence
  • Heading hierarchy nesting unverified from screenshot data: h1:1, h2:5, h3:8, h4:2 are present but actual nesting order unknown; if h3 appears before expected h2, screen readers cannot build accurate document outline—data insufficient to confirm current state
  • ARIA semantic alignment unchecked: 21 ARIA attributes present but no confirmation they avoid redundancy with native HTML (e.g., aria-label on button when <button> already semantically correct) or conflict with roles.

Recommendations

  • Add skip-to-content link as first focusable element high

    Add an invisible/reveal-on-focus <a> link at top of page that jumps to #main-content anchor; CSS: `.skip-link { position: absolute; top: -40px; } .skip-link:focus { top: 0; }`—eight-month-old fix that takes 2 minutes.

  • Verify heading hierarchy order matches visual structure medium

    Audit HTML to ensure h1 → h2 → h3 nesting follows page flow (not h1 → h3 → h2); use axe DevTools or WAVE to validate outline generation for screen readers.

  • Audit ARIA attributes for semantic redundancy low

    Remove aria-label on elements already conveyed by native HTML (e.g., <button>Start Project</button> does not need aria-label='Start Project'); keep ARIA only for non-semantic enhancements (aria-expanded, aria-current).

📱

Mobile

76/100

Mobile layout appears responsive and touch targets are adequate, but service cards still stack flat without accordion collapse, no sticky mobile CTA exists, and hamburger menu behavior is unverified from screenshots. Identical mobile issues persist from eight months ago.

Issues Found

  • Service card stacking on mobile remains flat (all four cards stack 1-column at identical height/prominence with no accordion collapse, 'Learn more' expansion, or hidden fourth card)—fourth card (AI Koppelingen) buried significantly below fold, causing mobile users to miss 25% of offerings
  • No sticky mobile CTA or back-to-top button: users must scroll entire page (~6,000px on mobile) from hero to contact form with zero quick-access; 'Start uw project' button vanishes after hero, forcing users to scroll past three sections to engage
  • Hamburger menu behavior unverified from screenshot data: cannot confirm if nav persists on scroll, auto-closes after link, or requires manual close—on narrow phones (<375px), nav icon alignment and touch target size unknown (recommend ≥48x48px per WCAG)

Recommendations

  • Collapse service cards to accordion pattern on mobile high

    Show only first 2 service cards fully expanded; make cards 3–4 collapsed headers with 'Tap to expand' affordance; reduces mobile scroll fatigue and keeps all services discoverable above the fold.

  • Add sticky mobile CTA bar and back-to-top button high

    Display a sticky footer CTA bar ('Start Project' or 'Call us') on mobile; add a floating back-to-top button (FAB) that appears after hero scroll—keeps primary conversion action always 1 tap away.

  • Ensure hamburger menu is accessible and stable medium

    Confirm hamburger icon is ≥48x48px touch target, auto-closes after link navigation, and persists nav state on scroll; test on real mobile devices <375px width to verify layout stability.

⚡

Performance

78/100

LCP at 4.795s is still sluggish (acceptable but not premium—should be <2.5s), and 'unused JavaScript' remains flagged and unaddressed. TBT of 124ms is borderline but could degrade during interactions. No visible improvement from eight months ago.

Issues Found

  • LCP of 4.795s is 2–3x slower than premium SaaS sites (Stripe, Vercel achieve 0.8–1.2s); introduces noticeable friction on 4G or mid-range mobile devices—likely caused by unoptimized hero image or blocking JavaScript
  • Unused JavaScript flagged but unresolved—suggests vendor polyfills, legacy libraries, or non-critical scripts still shipped in main bundle; no evidence of tree-shaking or code-splitting optimization
  • TBT of 124ms is near the edge of Google's recommended <100ms threshold—interactions (clicks, form inputs) may experience janky response; combined with unused JS, spikes are probable during heavy interactions

Recommendations

  • Optimize LCP by deferring hero image load high

    Convert hero gradient background to CSS (not image), lazy-load hero text/CTA elements, and defer non-critical JavaScript until after hero paint—target <2.5s LCP.

  • Eliminate unused JavaScript via tree-shaking and code-splitting high

    Audit vendor dependencies (Webpack Bundle Analyzer), remove polyfills for unsupported browsers, code-split service descriptions into separate bundles loaded on-demand, and minify aggressively.

  • Reduce main thread blocking to <100ms TBT medium

    Break long JavaScript tasks into smaller chunks using requestIdleCallback or async iterators; defer analytics and non-critical third-party scripts to after interaction.

Embed this badge on your site: Roast by AI score badge
HTML
Markdown

Think you can beat 63/100?

Get your site brutally analyzed by the same AI. 8 scores, a punch list of fixes, 60 seconds.