PageSourceSearch

https://www.spndly.ai/parts-3-calc.jsx

js spndly.ai collected 2026-10-05 15:25:00 UTC 12,519 bytes, 252 lines download raw bytes

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.