import{j as e}from"./ui-vendor-Dyu0xMC9.js";import{r as t,L as a}from"./react-vendor-BiKEbLqf.js";import{B as s,H as i}from"./button-F0c2zgfO.js";import{H as r,F as n,D as o,M as l}from"./Footer-BCdrvFQr.js";import{B as c}from"./badge-rRfUgTqY.js";import{C as d,d as m}from"./card-D8XUAx1y.js";import{B as x}from"./BreadcrumbNav-DNbFIb3a.js";import{C as h}from"./CaseStudyGate-DxLnTkbn.js";import{A as u}from"./arrow-right-BJutILxB.js";import{D as g}from"./download-DlY6qDWe.js";import"./chart-vendor-V3pFlbOw.js";import"./index-D2mkZfe8.js";import"./client-Ccea0ZZ8.js";import"./chevron-right-9d459eh4.js";import"./breadcrumb-BZGpceck.js";import"./refresh-cw-Lpgl1agh.js";const p=()=>{const[p,j]=t.useState(!1),f=`Check out this case study from Allerin: ${window.location.href}`,b=`mailto:?subject=${encodeURIComponent("Case Study: Healthcare Platform Resurrection — Rails 3 to 7")}&body=${encodeURIComponent(f)}`,v=e.jsxs(e.Fragment,{children:[e.jsx("section",{className:"py-6 bg-surface/30",children:e.jsx("div",{className:"container mx-auto px-6",children:e.jsx(x,{items:[{name:"Home",url:"/"},{name:"Customers",url:"/customers"},{name:"Healthcare Platform Resurrection"}]})})}),e.jsx("section",{className:"py-16 bg-gradient-to-b from-surface/30 to-background",children:e.jsx("div",{className:"container mx-auto px-6",children:e.jsxs("div",{className:"max-w-4xl mx-auto",children:[e.jsx("span",{className:"text-sm font-medium text-muted-foreground tracking-wide uppercase mb-4 block",children:"Case Study | Healthcare Technology | Legacy Modernization"}),e.jsx("h1",{className:"text-4xl md:text-6xl font-bold mb-4",children:e.jsx("span",{className:"bg-gradient-to-r from-data-orange to-data-teal bg-clip-text text-transparent",children:"450K Lines of Code. Zero Downtime."})}),e.jsx("p",{className:"text-xl text-muted-foreground mb-8",children:"Healthcare Platform Resurrection: Rails 3 to 7"}),e.jsxs("div",{className:"flex flex-wrap gap-4",children:[e.jsxs(s,{size:"lg",onClick:()=>j(!0),className:"bg-gradient-to-r from-data-orange to-data-teal hover:from-data-teal hover:to-data-blue",children:["Talk to an Architect",e.jsx(u,{className:"ml-2 h-5 w-5"})]}),e.jsxs(s,{size:"lg",variant:"outline",onClick:()=>{window.print()},children:[e.jsx(g,{className:"mr-2 h-5 w-5"}),"Download 1-pager"]}),e.jsx(s,{size:"lg",variant:"outline",asChild:!0,children:e.jsxs("a",{href:b,children:[e.jsx(l,{className:"mr-2 h-5 w-5"}),"Email this case"]})})]})]})})}),e.jsx("section",{className:"py-12",children:e.jsx("div",{className:"container mx-auto px-6",children:e.jsxs("div",{className:"max-w-4xl mx-auto",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4 text-foreground",children:"Context"}),e.jsx("p",{className:"text-lg text-muted-foreground leading-relaxed",children:"A top-10 US telehealth and EHR provider was running their entire clinical platform on Rails 3.2, four major versions behind, with 320 ActiveRecord models, 2.5 million patient records, and 15,000 daily clinical users. Security patches had stopped. Gem compatibility was breaking. Recruiting was impossible because nobody wanted to write Rails 3 in 2022. The system processed lab orders, prescription routing, and clinical documentation. It could not go down, not even for a maintenance window. HIPAA and SOC 2 compliance had to be maintained throughout every phase of the migration. The client had attempted the migration twice internally and abandoned both attempts."})]})})}),e.jsx("section",{className:"py-12 bg-surface/30",children:e.jsx("div",{className:"container mx-auto px-6",children:e.jsxs("div",{className:"max-w-4xl mx-auto",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-foreground",children:"Approach"}),e.jsxs("ul",{className:"space-y-4 text-lg text-muted-foreground",children:[e.jsxs("li",{className:"flex items-start",children:[e.jsx("span",{className:"text-data-teal mr-3 mt-1",children:"•"}),e.jsx("span",{children:"Testing-first strategy: spent the first 3 months building test coverage from 35% to 85% before touching a single line of migration code"})]}),e.jsxs("li",{className:"flex items-start",children:[e.jsx("span",{className:"text-data-teal mr-3 mt-1",children:"•"}),e.jsx("span",{children:"Dual-boot execution using the bootboot gem to run Rails 3 and Rails 7 simultaneously in the same codebase, migrating one subsystem at a time"})]}),e.jsxs("li",{className:"flex items-start",children:[e.jsx("span",{className:"text-data-teal mr-3 mt-1",children:"•"}),e.jsx("span",{children:"HIPAA-compliant migration protocol: every code change went through security review, and PHI handling was verified at each Rails version boundary"})]}),e.jsxs("li",{className:"flex items-start",children:[e.jsx("span",{className:"text-data-teal mr-3 mt-1",children:"•"}),e.jsx("span",{children:"Zero-downtime deployment with progressive rollout: 5% of traffic, then 25%, then 50%, then full cutover per subsystem"})]})]})]})})})]}),N=e.jsxs(e.Fragment,{children:[e.jsx("section",{className:"py-12",children:e.jsx("div",{className:"container mx-auto px-6",children:e.jsxs("div",{className:"max-w-4xl mx-auto",children:[e.jsxs("div",{className:"flex items-baseline justify-between mb-6",children:[e.jsx("h2",{className:"text-2xl font-bold text-foreground",children:"Results"}),e.jsx(a,{to:"/how-we-measure#formulas",className:"text-data-teal hover:text-data-orange transition-colors text-sm font-medium inline-flex items-center",children:"Methodology →"})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsx(d,{className:"clean-card",children:e.jsxs(m,{className:"p-6",children:[e.jsx("div",{className:"text-sm text-muted-foreground mb-2",children:"Rails Version"}),e.jsx("div",{className:"text-3xl font-bold text-foreground mb-1",children:"3.2 → 7.0.8"}),e.jsx("div",{className:"text-lg text-data-teal font-semibold",children:"EOL → Current LTS"})]})}),e.jsx(d,{className:"clean-card",children:e.jsxs(m,{className:"p-6",children:[e.jsx("div",{className:"text-sm text-muted-foreground mb-2",children:"Test Coverage"}),e.jsx("div",{className:"text-3xl font-bold text-foreground mb-1",children:"35% → 85%"}),e.jsx("div",{className:"text-lg text-data-teal font-semibold",children:"+143%"})]})}),e.jsx(d,{className:"clean-card",children:e.jsxs(m,{className:"p-6",children:[e.jsx("div",{className:"text-sm text-muted-foreground mb-2",children:"Deploy Frequency"}),e.jsx("div",{className:"text-3xl font-bold text-foreground mb-1",children:"1x/month → 12x/week"}),e.jsx("div",{className:"text-lg text-data-teal font-semibold",children:"Manual → CI/CD"})]})}),e.jsx(d,{className:"clean-card",children:e.jsxs(m,{className:"p-6",children:[e.jsx("div",{className:"text-sm text-muted-foreground mb-2",children:"Page Load (p95)"}),e.jsx("div",{className:"text-3xl font-bold text-foreground mb-1",children:"4.2s → 1.1s"}),e.jsx("div",{className:"text-lg text-data-teal font-semibold",children:"-74%"})]})}),e.jsx(d,{className:"clean-card",children:e.jsxs(m,{className:"p-6",children:[e.jsx("div",{className:"text-sm text-muted-foreground mb-2",children:"Security Patch Lag"}),e.jsx("div",{className:"text-3xl font-bold text-foreground mb-1",children:"6-18 months → Same week"}),e.jsx("div",{className:"text-lg text-data-teal font-semibold",children:"Current"})]})}),e.jsx(d,{className:"clean-card",children:e.jsxs(m,{className:"p-6",children:[e.jsx("div",{className:"text-sm text-muted-foreground mb-2",children:"Hiring Pipeline"}),e.jsx("div",{className:"text-3xl font-bold text-foreground mb-1",children:"2 → 14 candidates/mo"}),e.jsx("div",{className:"text-lg text-data-teal font-semibold",children:"+600%"})]})})]}),e.jsx("div",{className:"mt-8 grid grid-cols-1 sm:grid-cols-2 gap-4",children:["14-month timeline, delivered on schedule","Zero patient-facing downtime during the entire migration","2.5M patient records migrated with full HIPAA audit trail","15,000 daily clinical users experienced no service interruption","Passed SOC 2 Type II audit during active migration (not after)"].map(t=>e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-data-teal mt-1 shrink-0",children:"✓"}),e.jsx("span",{className:"text-sm text-muted-foreground",children:t})]},t))})]})})}),e.jsx("section",{className:"py-12 bg-surface/30",children:e.jsx("div",{className:"container mx-auto px-6",children:e.jsxs("div",{className:"max-w-4xl mx-auto",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-foreground",children:"Stack & Integrations"}),e.jsx("div",{className:"flex flex-wrap gap-3",children:["Ruby on Rails 3.2 → 7.0","bootboot (dual-boot)","RSpec","PostgreSQL","Redis / Sidekiq","GitHub Actions CI/CD","AWS (ECS, RDS, ElastiCache)","HIPAA BAA","SOC 2 Type II"].map(t=>e.jsx(c,{variant:"secondary",className:"text-base px-4 py-2",children:t},t))})]})})}),e.jsx("section",{className:"py-12",children:e.jsx("div",{className:"container mx-auto px-6",children:e.jsxs("div",{className:"max-w-4xl mx-auto",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-foreground",children:"Approach Deep-Dive"}),e.jsxs("div",{className:"space-y-6 text-lg text-muted-foreground leading-relaxed",children:[e.jsx("p",{children:"The testing-first phase was the counterintuitive decision that made everything work. Before writing a single line of migration code, the team spent 3 months doing nothing but writing tests. Every controller, every model callback, every service object got tested against actual production behavior. The test suite grew from 1,200 specs to 4,800 specs. This was the safety net that caught 847 behavioral regressions during the migration that would have been invisible without test coverage."}),e.jsx("p",{children:"The bootboot gem allowed both Rails 3 and Rails 7 to coexist in the same repository with separate Gemfile.lock files. Each subsystem (clinical documentation, lab orders, prescription routing, scheduling, billing integration) was migrated independently. At any given point, some subsystems ran on Rails 3 and others on Rails 7. Shared code operated in a compatibility layer that worked with both versions."}),e.jsx("p",{children:"HIPAA compliance during active migration meant that every database migration script was reviewed for PHI exposure. Column renames, table restructures, and index changes on tables containing protected health information went through a separate review process with the client's compliance officer. The audit trail captured every schema change, who approved it, and what PHI fields were affected."})]})]})})}),e.jsx("section",{className:"py-12 bg-surface/30",children:e.jsx("div",{className:"container mx-auto px-6",children:e.jsxs("div",{className:"max-w-4xl mx-auto",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-foreground",children:"Timeline"}),e.jsx("div",{className:"space-y-4",children:[{period:"Months 1-3",desc:"Test coverage sprint (35% → 85%)"},{period:"Months 4-6",desc:"Infrastructure modernization (CI/CD, containerization, staging environment parity)"},{period:"Months 7-11",desc:"Subsystem-by-subsystem migration with dual-boot"},{period:"Months 12-13",desc:"Performance optimization and frontend migration"},{period:"Month 14",desc:"Final cutover, Rails 3 removal, production stabilization"}].map(t=>e.jsxs("div",{className:"flex items-start gap-4",children:[e.jsx("span",{className:"text-data-teal font-bold text-sm w-28 shrink-0",children:t.period}),e.jsx("span",{className:"text-muted-foreground",children:t.desc})]},t.period))})]})})}),e.jsx("section",{className:"py-12",children:e.jsx("div",{className:"container mx-auto px-6",children:e.jsxs("div",{className:"max-w-4xl mx-auto",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-foreground",children:"Lessons Learned"}),e.jsx("div",{className:"space-y-6",children:["Test coverage is migration insurance. Every hour spent on tests before migration saved roughly 4 hours of debugging during migration.","Dual-boot eliminates the Big Bang risk. You never have a day where the entire system switches at once.","Compliance during migration, not after, is the only approach that works for healthcare. Retrofitting HIPAA controls onto a migrated codebase is an audit finding waiting to happen."].map((t,a)=>e.jsx("div",{className:"border-l-2 border-data-teal pl-6",children:e.jsxs("p",{className:"text-muted-foreground leading-relaxed italic",children:['"',t,'"']})},a))})]})})}),e.jsx("section",{className:"py-12 bg-surface/30",children:e.jsx("div",{className:"container mx-auto px-6",children:e.jsxs("div",{className:"max-w-4xl mx-auto",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-foreground",children:"Related Case Studies"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[e.jsx(a,{to:"/customers/predictive-freight-router",className:"group",children:e.jsx(d,{className:"clean-card hover:shadow-medium transition-all",children:e.jsxs(m,{className:"p-6",children:[e.jsx("h3",{className:"font-bold text-lg mb-2 group-hover:text-data-teal transition-colors",children:"Predictive Freight Router"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"$18M in fuel savings"})]})})}),e.jsx(a,{to:"/customers/finops-fraud-detection",className:"group",children:e.jsx(d,{className:"clean-card hover:shadow-medium transition-all",children:e.jsxs(m,{className:"p-6",children:[e.jsx("h3",{className:"font-bold text-lg mb-2 group-hover:text-data-teal transition-colors",children:"FinOps Fraud Detection"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"$14.7M caught"})]})})}),e.jsx(a,{to:"/customers/cold-chain-guardian",className:"group",children:e.jsx(d,{className:"clean-card hover:shadow-medium transition-all",children:e.jsxs(m,{className:"p-6",children:[e.jsx("h3",{className:"font-bold text-lg mb-2 group-hover:text-data-teal transition-colors",children:"Cold Chain Guardian"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"$42M cargo saved"})]})})})]})]})})}),e.jsx("section",{className:"py-16 bg-gradient-to-r from-data-orange/5 via-data-teal/5 to-data-blue/5",children:e.jsx("div",{className:"container mx-auto px-6",children:e.jsxs("div",{className:"max-w-3xl mx-auto text-center",children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold mb-4 text-foreground",children:"Running Mission-Critical Systems on Legacy Rails?"}),e.jsx("p",{className:"text-lg text-muted-foreground mb-8",children:"Rails 3 and 4 are end-of-life. Security patches stopped. Gem ecosystem has moved on. But the migration does not have to be a rewrite, and it does not have to take your system offline. We have done this across healthcare, fintech, and logistics platforms."}),e.jsxs("div",{className:"flex flex-col sm:flex-row items-center justify-center gap-4",children:[e.jsxs(s,{size:"lg",onClick:()=>j(!0),className:"bg-gradient-to-r from-data-orange to-data-teal hover:from-data-teal hover:to-data-blue",children:["Talk to an Architect",e.jsx(u,{className:"ml-2 h-5 w-5"})]}),e.jsxs(a,{to:"/services/legacy-modernization",className:"text-data-teal hover:text-data-orange transition-colors font-medium inline-flex items-center",children:["View Legacy Modernization Services",e.jsx(u,{className:"ml-2 h-4 w-4"})]})]})]})})})]});return e.jsxs(e.Fragment,{children:[e.jsxs(i,{children:[e.jsx("title",{children:"Healthcare Platform Resurrection: Rails 3 to 7 Migration | Allerin Case Study"}),e.jsx("meta",{name:"description",content:"450K LOC Rails 3 to 7 migration. 14 months. Zero downtime. 15,000 daily clinical users never noticed. HIPAA and SOC 2 compliant throughout. Case study from Allerin."}),e.jsx("link",{rel:"canonical",href:"https://www.allerin.com/customers/healthcare-rails-resurrection"}),e.jsx("meta",{property:"og:type",content:"article"}),e.jsx("meta",{property:"og:title",content:"Healthcare Platform Resurrection: Rails 3 to 7 | Allerin"}),e.jsx("meta",{property:"og:description",content:"450K LOC Rails 3 to 7 migration. 14 months. Zero downtime. 15,000 daily clinical users never noticed."}),e.jsx("meta",{property:"og:url",content:"https://www.allerin.com/customers/healthcare-rails-resurrection"}),e.jsx("meta",{property:"og:image",content:"https://www.allerin.com/og/default.webp"}),e.jsx("meta",{name:"twitter:card",content:"summary_large_image"}),e.jsx("meta",{name:"twitter:title",content:"Healthcare Platform Resurrection: Rails 3 to 7 | Allerin"}),e.jsx("meta",{name:"twitter:description",content:"450K LOC Rails 3 to 7 migration. 14 months. Zero downtime. 15,000 daily clinical users never noticed."}),e.jsx("meta",{name:"twitter:image",content:"https://www.allerin.com/og/default.webp"}),e.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"Article",headline:"Healthcare Platform Resurrection: Rails 3 to 7 Migration",description:"450K LOC Rails 3 to 7 migration. 14 months. Zero downtime. 15,000 daily clinical users never noticed. HIPAA and SOC 2 compliant throughout.",datePublished:"2026-03-17",author:{"@type":"Organization",name:"Allerin","@id":"https://www.allerin.com/#organization"},publisher:{"@type":"Organization",name:"Allerin","@id":"https://www.allerin.com/#organization"}})})]}),e.jsxs("div",{className:"min-h-screen bg-background",children:[e.jsx(r,{}),e.jsx("main",{children:e.jsx(h,{slug:"healthcare-rails-resurrection",ungatedContent:v,onRequestArchitect:()=>j(!0),children:N})}),e.jsx(n,{})]}),e.jsx(o,{open:p,onOpenChange:j,defaultIntent:"architect",context:{sourcePage:"/customers/healthcare-rails-resurrection",sourceButton:"case-study-cta",serviceContext:"legacy-modernization"}})]})};export{p as default};