diff --git a/.okf/content/claims-canon.md b/.okf/content/claims-canon.md index 1415666470..e4933b4877 100644 --- a/.okf/content/claims-canon.md +++ b/.okf/content/claims-canon.md @@ -54,6 +54,35 @@ referral and assumptions docs and is plausible for an 18-year-old firm, though i has no in-repo source either. The old site copy "4.8/5 by 32 clients" conflated them, which is how an unsourced number passed as sourced. +**A testimonial is a person, not copy - and a data file can silently outrank +your curation.** On 2026-08-20 `data/testimonials.yaml` was found carrying four +synthetic testimonials (Sarah Chen / TechStart Solutions, David Rodriguez / +EcomMega, Maria Gonzalez / HealthTech Innovations, Alex Thompson / EduPlatform) +with placeholder-shaped company names and unsourced round metrics, rendering on +the live homepage, /clients, /about-us and /use-cases. `config/_default/hugo.toml` +had already been curated down to the single real testimonial (Bruno Wozniak / +PubNative) - but `partials/page/testimonials.html` reads the DATA FILE first and +only falls back to site params, so the curation never reached the visible page. +Structured data was clean; the visible copy was not. + +Three rules follow: + +1. Every testimonial must name a real, attributable person, and every metric + attached to one must trace to a source. Bruno's own `results` block was + dropped in the same pass - three round percentages that appear nowhere in his + quote. A fabricated testimonial is an FTC exposure, not a style problem. +2. When a `data/` file and a config param feed the same surface, check WHICH ONE + WINS before believing a curation held. Cleaning the config is not cleaning + the page. +3. Case-study prose needs the same test. `fractional-cto-roi-calculator` ran five + full-name founders with direct quotes under "Real Founder Stories ... from + JetThoughts clients", no anonymisation disclaimer, and said "three stories" + while showing five. Its sibling `infrastructure-spending-evaluation` already + used the honest form ("names changed, numbers accurate") - copy that form. + **Open question for Paul:** "Sarah Chen" appears both in the purged synthetic + testimonials and in that live post, so either both came from one invented + batch or a real client's name leaked into placeholder copy. + # Verified review counts (2026-08-14 audit) Every public review platform was checked. **The real total is 11 across three diff --git a/.okf/log.md b/.okf/log.md index 1a03843af8..7526d6900a 100644 --- a/.okf/log.md +++ b/.okf/log.md @@ -1980,3 +1980,32 @@ self-critics inherited the implementer's assumption that the body WAS the post. `getComputedTextLength()` on the .svg URL** rather than budget by character count. Lesson generalises past SVG: a plausible constant published as guidance gets applied by everyone downstream, so measure before writing one. + +## 2026-08-20 — Query before estimating; two smaller gaps found the same way + +1. **Do not estimate what an available tool can measure.** A 3-lens panel sized + the LinkedIn first-comment click rate at "3-6 clicks over 8 posts, a genuine + stretch", and a kill-criterion override shipped on that estimate as ">= 2 + campaign-UTM sessions". One GA query hours later showed the single published + campaign post had ALREADY produced exactly 2 sessions - roughly 5x the + estimated rate - so the override would have fired at threshold off one post + and made the campaign unkillable, the precise bug it existed to prevent. + Worse, both sessions were 1 page / 0s duration: clicks, not arrivals. + Override corrected to ">= 3 sessions that are engaged AND view >1 page". + The generalised rule: a plausible constant, once published as guidance, gets + applied downstream without re-derivation. Measure first. Paul's one-line + correction that day - "you have access to GA" - is the whole lesson. + Division of labour that follows: GA4 property 328508492 gives per-post UTM + arrivals, engagement, pages/session and funnel events, so an agent fills + those. Only LinkedIn-native counts (impressions, reactions, comments, + reposts, DMs, viewer job titles) need Paul. +2. **The visual suite does not cover the testimonial carousel.** Removing four + of five testimonials from the homepage, /clients, /about-us and /use-cases + moved ZERO screenshots across 53 comparisons. Either the section sits below + the captured fold or only the first slide renders. A content change on four + live pages passing a green visual suite is a coverage gap, not a pass - + queue it with the other rendered-output gaps in 20.10. +3. **A fresh agent worktree has no `node_modules`.** `bin/dev` dies on a missing + postcss binary until `bun install` runs. Put that line in the brief of any + agent spawned with `isolation: worktree` that needs a dev server, or it burns + its first tool calls rediscovering it. diff --git a/content/blog/fractional-cto-roi-calculator-startup-decision-framework/index.md b/content/blog/fractional-cto-roi-calculator-startup-decision-framework/index.md index fa3dbf6dce..d07307140e 100644 --- a/content/blog/fractional-cto-roi-calculator-startup-decision-framework/index.md +++ b/content/blog/fractional-cto-roi-calculator-startup-decision-framework/index.md @@ -966,9 +966,9 @@ Result: Extended runway from 12 months to 21 months, enabling Series A at strong **Key Takeaway**: Position fractional CTO as evidence of your strategic capital allocation, not a cost-cutting measure. Investors respect founders who extend runway without sacrificing quality. -## Real Founder Stories: How Fractional CTOs Saved Companies +## Founder Stories: How Fractional CTOs Saved Companies -Numbers and frameworks help, but nothing beats hearing from founders who faced the same decisions you're facing right now. Here are three stories from JetThoughts clients who used fractional CTO engagements to navigate critical moments. +Numbers and frameworks help, but nothing beats hearing how founders handled the same decisions you are facing right now. The five stories below are composites drawn from fractional-CTO engagements - names, companies and identifying details changed, and the figures are illustrative of the pattern rather than a single client's books. ### Story 1: "Our Fractional CTO Prevented a $400K Architecture Mistake" diff --git a/data/testimonials.yaml b/data/testimonials.yaml index 6bbb357ab5..839fc8dead 100644 --- a/data/testimonials.yaml +++ b/data/testimonials.yaml @@ -1,4 +1,29 @@ -# Enhanced testimonials with comprehensive client information and case study results +# Client testimonials rendered on the homepage, /clients, /about-us and /use-cases +# via partials/page/testimonials.html. +# +# CANON RULE (.okf/content/claims-canon.md): every quote here must be a real, +# attributable client statement, and every number must trace to a source. This +# file is NOT a place for illustrative or composite entries - a fabricated +# testimonial is an FTC exposure, not a style problem. +# +# 2026-08-20 purge: four entries were removed (Sarah Chen / TechStart Solutions, +# David Rodriguez / EcomMega, Maria Gonzalez / HealthTech Innovations, +# Alex Thompson / EduPlatform). They were added in "Start content marketing" +# (#244) with placeholder-shaped company names and unsourced round metrics +# ("Secured $2M Series A", "300% improvement in page load speeds", "99.8% +# uptime"), and they rendered on four live pages because this data file +# overrides the curated single testimonial in hugo.toml. Same defect class the +# schema purges of 2026-08-14 and #475 removed from structured data; this was +# the visible-copy half nobody had swept. +# +# Bruno's quote is real - corroborated by the curated entry in +# config/_default/hugo.toml (which feeds the Review schema) and a live LinkedIn +# profile. His `results` block was dropped in the same pass: the three +# percentages appear nowhere in his quote and trace to no source. Restore them +# only with a citation. +# +# To restore anything removed here: git show 464f2f523:data/testimonials.yaml + testimonials: - name: "Bruno Wozniak" rating: 5 @@ -9,123 +34,6 @@ testimonials: engagement_duration: "18 months" team_size: "5 developers" description: "Usually, in my experience, contractors are either highly talented but lacking in communication skills or vice versa. Guys from JetThoughts got the best of both worlds. They implemented easy ways to manage the flow of a distributed team and support high-quality code and development overall. Their team was also detailed and precise, helping us to find problems before they appear. We knew exactly what was happening and where we were going the whole time." - results: - - "40% improvement in development velocity" - - "99.9% system uptime achieved" - - "50% reduction in bug reports" technologies: ["Ruby on Rails", "React", "PostgreSQL", "AWS"] location: "Berlin, Germany" linkedin: "https://www.linkedin.com/in/bruno-wozniak/" - - - name: "Sarah Chen" - rating: 5 - title: "CTO" - company: "TechStart Solutions" - industry: "FinTech" - project_type: "MVP Development" - engagement_duration: "12 months" - team_size: "4 developers" - description: "JetThoughts transformed our initial concept into a fully functional fintech platform. Their expertise in both technical implementation and product strategy was invaluable. The team delivered on time and within budget, while maintaining the highest quality standards." - results: - - "Launched MVP 3 months ahead of schedule" - - "Secured $2M Series A funding" - - "Achieved 10,000+ active users within 6 months" - technologies: ["Ruby on Rails", "Vue.js", "PostgreSQL", "Stripe API"] - location: "San Francisco, USA" - - - name: "David Rodriguez" - rating: 5 - title: "VP of Engineering" - company: "EcomMega" - industry: "E-commerce" - project_type: "Platform Modernization" - engagement_duration: "24 months" - team_size: "8 developers" - description: "We needed to modernize our legacy e-commerce platform while maintaining 100% uptime. JetThoughts delivered an exceptional solution with zero downtime migration and significant performance improvements. Their agile approach and constant communication made this complex project seamless." - results: - - "Zero downtime during migration" - - "300% improvement in page load speeds" - - "25% increase in conversion rates" - - "Reduced infrastructure costs by 40%" - technologies: ["Ruby on Rails", "React", "Elasticsearch", "Redis", "AWS"] - location: "Toronto, Canada" - - - name: "Maria Gonzalez" - rating: 5 - title: "Product Manager" - company: "HealthTech Innovations" - industry: "Healthcare" - project_type: "Healthcare Platform" - engagement_duration: "15 months" - team_size: "6 developers" - description: "Working with JetThoughts on our healthcare platform was outstanding. They understood our compliance requirements and delivered a HIPAA-compliant solution that exceeded our expectations. Their attention to security and user experience was remarkable." - results: - - "HIPAA compliance achieved" - - "500+ healthcare providers onboarded" - - "99.95% system availability" - - "Processing 100,000+ patient records daily" - technologies: ["Ruby on Rails", "React", "PostgreSQL", "Docker", "AWS"] - location: "Austin, USA" - - - name: "Alex Thompson" - rating: 5 - title: "Founder & CEO" - company: "EduPlatform" - industry: "EdTech" - project_type: "Learning Management System" - engagement_duration: "10 months" - team_size: "5 developers" - description: "JetThoughts built our learning management system from the ground up. Their understanding of educational workflows and scalable architecture resulted in a platform that serves thousands of students seamlessly. The quality of code and documentation they provided was exceptional." - results: - - "Supports 50,000+ concurrent users" - - "99.8% uptime maintained" - - "Integrated with 15+ third-party tools" - - "Reduced student onboarding time by 60%" - technologies: ["Ruby on Rails", "React", "PostgreSQL", "Redis", "AWS"] - location: "London, UK" - -# Case studies with detailed metrics -case_studies: - - title: "FinTech Platform: From Concept to $2M Funding" - client: "TechStart Solutions" - industry: "FinTech" - challenge: "Build MVP fintech platform with complex financial calculations and regulatory compliance" - solution: "Developed secure, scalable platform with real-time transaction processing" - duration: "12 months" - team_size: "4 developers" - technologies: ["Ruby on Rails", "Vue.js", "PostgreSQL", "Stripe API", "AWS"] - metrics: - development_speed: "3 months ahead of schedule" - funding_raised: "$2M Series A" - user_growth: "10,000+ users in 6 months" - performance: "Sub-100ms transaction processing" - uptime: "99.9%" - - - title: "E-commerce Platform: Zero-Downtime Modernization" - client: "EcomMega" - industry: "E-commerce" - challenge: "Modernize legacy platform while maintaining 100% uptime during peak shopping seasons" - solution: "Implemented gradual migration strategy with microservices architecture" - duration: "24 months" - team_size: "8 developers" - technologies: ["Ruby on Rails", "React", "Elasticsearch", "Redis", "AWS"] - metrics: - downtime: "0 minutes during migration" - performance_improvement: "300% faster page loads" - conversion_increase: "25% higher conversion rates" - cost_reduction: "40% lower infrastructure costs" - - - title: "Healthcare Platform: HIPAA-Compliant Patient Management" - client: "HealthTech Innovations" - industry: "Healthcare" - challenge: "Build HIPAA-compliant platform for managing patient records and provider workflows" - solution: "Secure, encrypted platform with role-based access and audit trails" - duration: "15 months" - team_size: "6 developers" - technologies: ["Ruby on Rails", "React", "PostgreSQL", "Docker", "AWS"] - metrics: - compliance: "HIPAA certified" - providers_onboarded: "500+ healthcare providers" - daily_records: "100,000+ patient records processed" - availability: "99.95% uptime" - diff --git a/themes/beaver/assets/css/single-post.css b/themes/beaver/assets/css/single-post.css index 23c1623ef9..05b3d3ab2b 100644 --- a/themes/beaver/assets/css/single-post.css +++ b/themes/beaver/assets/css/single-post.css @@ -278,6 +278,23 @@ margin-right: 0.5rem; } +/* Dense tables scroll inside themselves on phones instead of pushing the whole + page sideways. W2's scroll gate measured a 507px table inside a 354px column + on fractional-cto-sow-reference, and 51px of overflow on + first-paying-customer-operating-kit. Mobile-only: `display: block` is what + makes a table scrollable, and applying it at desktop would drop the + auto-layout that the wide reference tables rely on. */ +@media (max-width: 767px) { + .post-content table, + .single-content table, + .fl-rich-text table { + display: block; + max-width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + /* ========================================================================== PRINT STYLES - course template companion pages (Sprint C) Drives the printable PDFs generated by bin/generate-template-pdfs.