--- target: homepage index.html total_score: 26 max_score: 36 na_heuristics: 10 p0_count: 3 p1_count: 3 timestamp: 2026-08-15T09-22-42Z slug: index-html --- # ODOO4projects.com Homepage — Design Critique Method: dual-agent (A: design review · B: detector + browser evidence) ## Design Health Score | # | Heuristic | Score | Key Issue | |---|-----------|-------|-----------| | 1 | Visibility of System Status | 3/4 | Billing toggle gives feedback; order widget never marks server location as required | | 2 | Match System / Real World | 3/4 | "No FTP, no shenanigans" is borderline informal for B2B hosting voice | | 3 | User Control and Freedom | 2/4 | Order widget: no Escape key, no backdrop-click close, small × target | | 4 | Consistency and Standards | 3/4 | Blog post pages still dark/cyan (legacy); order widget uses ~15 inline styles bypassing tokens | | 5 | Error Prevention | 2/4 | No validation before Stripe redirect — empty `?location=` possible; no pre-checkout confirm | | 6 | Recognition Rather Than Recall | 4/4 | Features fully visible on cards; Most Popular badge kills comparison effort | | 7 | Flexibility and Efficiency | 3/4 | Yearly toggle good; domain-count differences buried in feature text | | 8 | Aesthetic and Minimalist Design | 3/4 | Blog cards after pricing add density to an already long Persuade page | | 9 | Error Recovery | 3/4 | Coupon feedback clear; blog fetch failure shows only "Could not load blog posts." | | 10 | Help and Documentation | n/a | Persuade surface; FAQ tab + support link cover it | | **Total** | | **26/36** | **Good (72%)** | ## Design Specificity Verdict **High specificity — composed for THIS product.** Hero headline ("Deploy Odoo in 5 Minutes"), Odoo-specific features (Quick Git, ODOO Settings Panel, 2 Workers), growth-themed plan names (Side Hustle → Empire), real partner instances in the trust bar, Odoo-specific blog topics, and a custom Stripe routing pattern. The skeleton (icon cards + pricing grid) is a familiar hosting-page pattern, but the content is authentically this product. **Deterministic scan:** Detector exit code 2 (44 findings, regex-only mode — HTML parser modules unavailable, so this is an undercount). Real hits: 12 low-contrast green check icons (#28a745 at 2.9:1–3.1:1), 4 undersized functional labels (9.6–9.92px), 2 skipped heading levels, 5 line-length violations, 17 off-ramp font sizes, 19 off-palette colors. The detector caught the contrast and text-size failures that the human review missed — those are its best catches. False positives: `overused-font` (Inter IS the brand font per DESIGN.md), hero gradient midpoint #2a1a26 (within palette family), rgba(33,37,41,X) opacity tones (intentional accessibility variants), em-dash count (moderate for marketing copy). **Visual overlays:** Browser injection succeeded; 17 anti-patterns reported in console. No reliable user-visible overlay persists (servers auto-exited after idle). ## Overall Impression A warm, confident, genuinely specific landing page with a working pricing widget and honest social proof. The bones are good. The problems cluster at the edges: legibility (green checks, tiny labels), dismissal (order widget trap), and ending (blog after the conversion point). The single biggest opportunity: turn the post-pricing ending from content exploration back into a conversion moment. ## What's Working 1. **The pricing widget plays.** Billing toggle live-updates all four prices; location selector is Odoo-contextual; coupon defaults to "FREE TRIAL" — warm hand-holding most hosts don't do. 2. **The dark hero band with Warm Sand CTA** creates sharp hierarchy; the "5 Minutes" highlight in #f0cda8 draws the eye to the value prop; Holland.webp at 8% adds texture without noise. 3. **"Your Company" placeholder in the trust bar** is strategically honest — it invites the visitor to imagine themselves there and links to pricing. ## Priority Issues **[P0] Low-contrast green check icons fail WCAG AA** (detector) - **What**: 12 `fa-check` icons in #28a745 on pricing cards — 2.9:1 on Warm Paper, 3.1:1 on white. - **Why**: Below 4.5:1; fails accessibility and reads washed-out on the featured card. - **Fix**: Darken the success green (e.g. #1e7a34) or switch checks to Plum Velvet with green reserved for savings text. - **Command**: /impeccable colorize **[P0] Undersized functional text** (detector) - **What**: "1 month free" and "up to -10%" at 9.92px; badge labels "guide"/"news" at 9.6px — below the 10–11px floor. - **Why**: These are decision-relevant (savings, content type); unreadable on mobile. - **Fix**: Raise to ≥0.72rem with 11px minimum; give the toggle sub-labels room. - **Command**: /impeccable typeset **[P0] Order widget traps users** (design review) - **What**: `#orderWidgetOverlay` closes only via a 2.4rem × button — no Escape, no backdrop click, undersized touch target. - **Why**: Accidentally opened widget = forced path; mobile users have no convenient exit. - **Fix**: Backdrop click + Escape listener in script.js; enlarge close hit area to ≥2.8rem. - **Command**: /impeccable harden **[P1] Hero stats waste prime real estate on redundancy** (design review) - **What**: "Deploy in 5 min" and "Instant setup" say the same thing; two of four stat slots. - **Why**: The hero is the only place for credibility metrics; redundancy forfeits it. - **Fix**: Replace "Instant setup" with a real metric (uptime, instances deployed, avg deploy time). - **Command**: /impeccable layout **[P1] Empire plan: blank feature row + weakest CTA on the highest-margin plan** (design review) - **What**: `