Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .okf/content/claims-canon.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
29 changes: 29 additions & 0 deletions .okf/log.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
144 changes: 26 additions & 118 deletions data/testimonials.yaml
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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"

17 changes: 17 additions & 0 deletions themes/beaver/assets/css/single-post.css
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Loading