1// spndly â selected work: two anonymized engagement summaries 2 3// industry-representative artwork (card band + article cover) 4function CsMotif({ k }) { 5 if (k === 'health') { 6 return ( 7 <svg className="cs-motif-svg" xmlns="http://www.w3.org/2000/svg"> 8 <defs> 9 <pattern id="m-ekg" width="70" height="120" patternUnits="userSpaceOnUse"> 10 <path d="M0 60 H26 L31 60 L37 30 L44 88 L49 60 H70" fill="none" stroke="currentColor" strokeWidth="2" strokeLinejoin="round" strokeLinecap="round" /> 11 </pattern> 12 </defs> 13 <rect width="100%" height="100%" fill="url(#m-ekg)" /> 14 </svg> 15 ); 16 } 17 return ( 18 <svg className="cs-motif-svg" xmlns="http://www.w3.org/2000/svg"> 19 <defs> 20 <pattern id="m-shield" width="60" height="66" patternUnits="userSpaceOnUse" patternTransform="translate(10 14)"> 21 <path d="M16 4 L29 9 V24 C29 33 23 39 16 42 C9 39 3 33 3 24 V9 Z" fill="none" stroke="currentColor" strokeWidth="1.5" /> 22 </pattern> 23 </defs> 24 <rect width="100%" height="100%" fill="url(#m-shield)" /> 25 </svg> 26 ); 27} 28 29function CsIcon({ k }) { 30 if (k === 'health') { 31 return ( 32 <svg viewBox="0 0 24 24" width="21" height="21" fill="none" stroke="currentColor" strokeWidth="2.3" strokeLinecap="round"> 33 <path d="M12 5 V19 M5 12 H19" /> 34 </svg> 35 ); 36 } 37 return ( 38 <svg viewBox="0 0 24 24" width="21" height="21" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"> 39 <path d="M12 3 L19 5.5 V11 C19 15.6 16 19.2 12 21 C8 19.2 5 15.6 5 11 V5.5 Z" /> 40 <path d="M9 11.6 l2.1 2.1 L15.2 9.4" /> 41 </svg> 42 ); 43} 44 45function LockIcon() { 46 return ( 47 <svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"> 48 <rect x="5" y="11" width="14" height="9" rx="2" /> 49 <path d="M8 11 V7.5 a4 4 0 0 1 8 0 V11" /> 50 </svg> 51 ); 52} 53 54// Two public-facing work samples. Keep these broad: the private implementation details are useful 55// for credibility, but the site should avoid client attribution, exact metrics, and NDA-sensitive 56// workflow specifics unless there is written approval. 57const FLAGSHIPS = [ 58 { 59 v: { key: 'health', tag: 'clinical ops', color: '#0d9488', soft: '#ecfbf8', noun: 'workflow' }, 60 s: { 61 id: 'fb_health', 62 build: 'Clinical documentation assistant', 63 client: 'a small healthcare workflow', 64 clientMeta: 'anonymized · details withheld', 65 peek: 'review', peekLbl: 'kept with the provider', 66 posture: ['provider-controlled', 'read-only posture', 'admin relief'], 67 principle: 'AI surfaces the work; the accountable human stays in control.', 68 read: '3 min read', 69 article: { 70 title: 'Helping a clinical team catch what the note already supports', 71 deck: 'A clinical team had important admin and revenue work happening from memory, under time pressure. We built an assistant that turns completed documentation into review-ready suggestions.', 72 body: [ 73 { t: 'p', dropcap: true, text: 'In small clinical operations, admin work often competes with patient care. Documentation, billing review, scheduling, and follow-up all ask for attention from the same overloaded team.' }, 74 { t: 'p', text: 'The engagement was built around a clear line: automation could gather context and suggest next steps, but it could not replace provider judgment or take action on its own.' }, 75 { t: 'h', text: 'What we automated' }, 76 { t: 'p', text: 'We created a lightweight workflow that reads completed documentation, identifies review items, and presents the supporting context in the tools the team already uses.' }, 77 { t: 'h', text: 'Where humans stayed in control' }, 78 { t: 'p', text: 'The provider remains the final authority. The system does not diagnose, treat, modify the chart, submit claims, or take clinical action.' }, 79 { t: 'stats', items: [{ n: 'review', l: 'stays human' }, { n: 'less', l: 'manual checking' }
79, { n: 'clear', l: 'supporting context' }] }, 80 { t: 'h', text: 'Outcome pattern' }, 81 { t: 'p', text: 'The team gets a second set of eyes on repetitive documentation work without creating another system to babysit.' }, 82 ], 83 }, 84 }, 85 }, 86 { 87 v: { key: 'insurance', tag: 'insurance ops', color: '#4f46e5', soft: '#eef0fe', noun: 'workflow' }, 88 s: { 89 id: 'fb_insurance', 90 build: 'Expert-report workflow automation', 91 client: 'a property-claims documentation platform', 92 clientMeta: 'anonymized · details withheld', 93 peek: 'faster', peekLbl: 'case preparation', 94 posture: ['evidence gathering', 'expert review', 'source-backed reports'], 95 principle: 'AI accelerates the file; the accountable expert signs the final report.', 96 read: '4 min read', 97 article: { 98 title: 'Turning a weeks-long expert-report workflow into a guided review pipeline', 99 deck: 'A property-claims workflow depended on slow, expensive expert reports. We built an automation system that organizes evidence, prepares review, and turns the file into a cleaner path to expert sign-off.', 100 body: [ 101 { t: 'p', dropcap: true, text: 'Some operational bottlenecks are expensive because the work is genuinely complex. In this engagement, a claim file had to become a defensible expert report assembled from documents, photos, measurements, review notes, and supporting references.' }, 102 { t: 'p', text: 'The old workflow put too much aggregation work on expert reviewers. Files took longer to prepare, were harder to hand off, and were difficult to scale consistently.' }, 103 { t: 'h', text: 'What we automated' }, 104 { t: 'p', text: 'We built a workflow that ingests the case file, organizes supporting evidence, prepares the expert review path, and turns approved case data into a report draft.' }, 105 { t: 'h', text: 'Where humans stayed in control' }, 106 { t: 'p', text: 'The expert still reviews the file, evaluates the evidence, and signs the final report. Automation handles preparation and assembly, not professional judgment.' }, 107 { t: 'stats', items: [{ n: 'faster', l: 'case preparation' }, { n: 'less', l: 'manual assembly' }, { n: 'clearer', l: 'review trail' }] }, 108 { t: 'h', text: 'Outcome pattern' }, 109 { t: 'p', text: 'The business gets a more scalable operating workflow while preserving the human accountability required for high-stakes documentation.' }, 110 ], 111 }, 112 }, 113 }, 114]; 115 116function CsArticle({ v, s, onClose }) { 117 const [progress, setProgress] = React.useState(0); 118 const a = s.article; 119 120 React.useEffect(() => { 121 const onKey = (e) => { if (e.key === 'Escape') onClose(); }; 122 document.body.style.overflow = 'hidden'; 123 window.addEventListener('keydown', onKey); 124 return () => { document.body.style.overflow = ''; window.removeEventListener('keydown', onKey); }; 125 }, [onClose]); 126 127 const onScroll = (e) => { 128 const el = e.currentTarget; 129 const max = el.scrollHeight - el.clientHeight; 130 setProgress(max > 0 ? Math.min(100, (el.scrollTop / max) * 100) : 0); 131 }; 132 133 return ( 134 <div className="cs-reader" style={{ '--ind': v.color, '--ind-soft': v.soft }} onScroll={onScroll}> 135 <div className="cs-topbar"> 136 <div className="cs-progress" style={{ width: progress + '%' }} /> 137 <div className="cs-topbar-inner container"> 138 <span className="cs-topbar-badge"><CsIcon k={v.key} /> {v.tag} · selected work</span> 139 <button className="cs-close" onClick={onClose} aria-label="close">close â</button> 140 </div> 141 </div> 142 143 <article className="cs-article"> 144 <div className="cs-art-kicker"><CsIcon k={v.key} /> {v.tag} · selected work</div> 145 <h1 className="cs-art-title">{a.title}</h1> 146 <p className="cs-art-deck">{a.deck}</p> 147 148 <div className="cs-byline"> 149 <span className="cs-avatar lg cs-avatar-icon"><CsIcon k={v.key} /></span> 150 <div className="cs-byline-meta"> 151 <div className="nm">{s.build}</div> 152 <div className="rl">{s.client} <span className="dot">·</span> {s.read}</div> 153 </div>
154 <span className="cs-nda-tag"><LockIcon /> anonymized</span> 155 </div> 156 157 <div className="cs-cover"><CsMotif k={v.key} /></div> 158 159 <div className="cs-prose"> 160 {a.body.map((b, i) => { 161 if (b.t === 'h') return <h2 key={i} className="cs-h2">{b.text}</h2>; 162 if (b.t === 'quote') return ( 163 <blockquote key={i} className="cs-bq"> 164 <p>â{b.text}â</p> 165 {b.who && <cite>{b.who}</cite>} 166 </blockquote> 167 ); 168 if (b.t === 'stats') return ( 169 <div key={i} className="cs-statline"> 170 {b.items.map((st, j) => ( 171 <div className="cs-statcell" key={j}><span className="n">{st.n}</span><span className="l">{st.l}</span></div> 172 ))} 173 </div> 174 ); 175 return <p key={i} className={'cs-pp' + (b.dropcap ? ' dropcap' : '')}>{b.text}</p>; 176 })} 177 </div> 178 179 <div className="cs-art-end"> 180 <div className="cs-author"> 181 <span className="cs-avatar lg cs-avatar-icon"><CsIcon k={v.key} /></span> 182 <div> 183 <div className="nm">{s.build} <span className="dim">· {v.tag}</span></div> 184 <div className="rl">{s.client} â {s.clientMeta}</div> 185 </div> 186 </div> 187 <a href="#book" className="btn btn-accent" onClick={onClose}>talk to us about your {v.noun} â</a> 188 <div className="cs-illus">{v.key === 'health' 189 ? 'Details are intentionally limited. This summary describes the workflow pattern and guardrails, not private client information or medical advice.' 190 : 'Details are intentionally limited. Client identity, exact metrics, and implementation specifics are withheld unless written approval is granted.'}</div> 191 </div> 192 </article> 193 </div> 194 ); 195} 196 197function CaseStudies() { 198 const [open, setOpen] = React.useState(null); 199 200 const active = FLAGSHIPS.find(f => f.s.id === open); 201 202 return ( 203 <section className="section" id="cases" data-screen-label="05 selected work"> 204 <div className="container"> 205 <div className="sec-head"> 206 <div className="sec-head-left"> 207 <div className="label-eye">Selected work</div> 208 <h2 className="h2">High-stakes workflows,<br />made operational.</h2> 209 <p className="lead">Two anonymized examples of the work we build: messy intake, evidence-heavy review, controlled automation, and humans accountable for final decisions.</p> 210 </div> 211 <div className="sec-head-aside"> 212 <span className="k">Examples:</span> 2<br /> 213 <span className="k">Pattern:</span> document-heavy operations<br /> 214 <span className="k">Posture:</span> review-first automation 215 </div> 216 </div> 217 218 <div className="verticals"> 219 {FLAGSHIPS.map(({ v, s }, i) => ( 220 <button className="vc" key={s.id} style={{ '--ind': v.color, '--ind-soft': v.soft }} onClick={() => setOpen(s.id)}> 221 <div className="vc-top"> 222 <span className="vc-overline"> 223 <span className="vc-index">{String(i + 1).padStart(2, '0')}</span> 224 <span className="vc-cat">{v.key === 'health' ? 'Healthcare' : 'Insurance'}</span> 225 </span> 226 <span className="vc-read">{s.read}</span> 227 </div> 228 229 <h3 className="vc-name">{s.build}</h3> 230 <div className="vc-client">{s.client}</div> 231 232 <p className="vc-quote">â{s.principle}â</p> 233 234 <div className="vc-tags"> 235 {s.posture.map(p => <span className="vc-tag" key={p}>{p}</span>)} 236 </div> 237 238 <div className="vc-foot"> 239 <span className="vc-nda"><LockIcon /> Anonymized engagement</span> 240 <span className="vc-cta">Read summary<span className="arr"> â</span></span> 241 </div> 242 </button> 243 ))} 244 </div> 245 </div> 246 247 {active && <CsArticle v={active.v} s={active.s} onClose={() => setOpen(null)} />} 248 </section> 249 ); 250} 251 252Object.assign(window, { CaseStudies });
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.