You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: add side-by-side photo layouts and refine gallery captions
- Add collectors-at-work photo inline after Problem section with side-by-side layout (text left, photo right)
- Add 2am debugging photo with alternating side-by-side layout (photo left, text right) to create visual rhythm
- Add team-gathering-outdoor photo to Behind the Scenes gallery
- Refine photo captions to be more concise with scale context (collector counts, timeline markers)
- Optimize all new images (WebP + JPEG versions)
"alt": "Omar Negm resting during early days of building Statsbomb collection tools",
6
-
"caption": "2018: Omar Negm during Week One, transitioning from aerospace engineering to building tools collectors would thank us for",
6
+
"caption": "2018: Omar Negm during Week One, transitioning from aerospace engineering to building tools collectors would thank us for (~100 collectors, offline collection)",
"alt": "Collection leadership team Hegazy, Ramadan, and Adham Nasser during night shift",
60
-
"caption": "2020: Collection leadership team—Hegazy, Ramadan, and Adham Nasser—during night shift discussions about ambitions and scaling collector operations to 1000+",
60
+
"caption": "2020: Collection leadership—Hegazy, Ramadan, and Adham Nasser—as live collection launched (1000 collectors)",
61
61
"width": 1240,
62
62
"height": 1654
63
63
},
@@ -66,7 +66,7 @@
66
66
"type": "image",
67
67
"src": "/images/statsbomb/IMG_0570.jpg",
68
68
"alt": "Abdallah, Saad, and Hesham planning live collection architecture",
69
-
"caption": "2020: Planning live collection with Abdallah and Hesham—exploring how real-time architecture would scale American football from offline to concurrent collection",
69
+
"caption": "2020: Planning live collection architecture with Hesham, our head of operations (launched later that year)",
70
70
"width": 1200,
71
71
"height": 1327
72
72
},
@@ -101,8 +101,8 @@
101
101
{
102
102
"type": "image",
103
103
"src": "/images/statsbomb/IMG_5078.jpg",
104
-
"alt": "Product, tech, and ops leadership teams during Ramadan Iftar 2023",
105
-
"caption": "2023: Ramadan Iftar with product, tech, and ops leadership teams—now supporting collectors together",
104
+
"alt": "Product, tech, and ops leadership teams during Ramadan Iftar 2021",
105
+
"caption": "2021: Ramadan Iftar with product, tech, and ops leadership teams—now supporting collectors together",
"alt": "Statsbomb amateur league team playing match in Egypt using collection tools built for elite clubs",
150
-
"caption": "2024: Statsbomb team's amateur league squad in Egypt—collectors analyzing their own matches with the tools they built for clubs like Liverpool",
150
+
"caption": "2024: Statsbomb team's amateur league squad—collectors analyzing own matches with tools they built for Liverpool (5000+ collectors by acquisition)",
Copy file name to clipboardExpand all lines: src/pages/portfolio/statsbomb.mdx
+71-81Lines changed: 71 additions & 81 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -59,8 +59,6 @@ import { MoveRight } from "@lucide/astro";
59
59
<CaseStudyTLDR>
60
60
{/* Hook - human story + validation */}
61
61
<Bodysize="lg"as="p"class="my-6 text-text font-medium leading-relaxed">Built real-time sports data collection with Ali from week one sketches to 5000+ collectors across multiple sports. When Hudl acquired Statsbomb in 2024, they bought the collection infrastructure—the system that made concurrent data capture possible at broadcaster scale. What started as "my hand doesn't cramp anymore" feedback became the foundation for industry-standard tooling.</Body>
62
-
63
-
64
62
</CaseStudyTLDR>
65
63
66
64
</Section>
@@ -286,12 +284,11 @@ The merge tax scaled linearly with collectors. At 100 collectors, two product ma
What collectors needed: prevention during collection, not reconciliation after. We architected the tool to make ambiguous interpretations structurally impossible—if you can't express it in the UI, you can't collect it wrong.
291
-
</Body>
287
+
<Bodysize="base"as="p"class="text-text leading-relaxed">What collectors needed: prevention during collection, not reconciliation after. We architected the tool to make ambiguous interpretations structurally impossible—if you can't express it in the UI, you can't collect it wrong.</Body>
292
288
</div>
293
289
294
290
<Figure
291
+
class="my-0 md:mt-3"
295
292
src="/images/statsbomb/collectors-at-work.jpg"
296
293
alt="Collectors processing live matches with dual monitors in Cairo collection center"
297
294
caption="Collectors processing live matches with dual monitors—soccer field footage on one screen, collection tool on the other"
@@ -314,24 +311,21 @@ I'd start at 10am, leave at 3am. Not grinding for grinding's sake—I needed to
314
311
315
312
Ali stayed nights for company. Not to supervise—he wasn't debugging TypeScript with me. But he understood the stakes. Broadcasters needed real-time commentary data. Collectors needed tools that didn't break at 2am when fatigue set in.
316
313
317
-
That's when we'd debug together: Adham tracing the Kafka lag, me testing state machine transitions with a tired collector who just wanted to finish the match and go home.
That's when we'd debug together: Adham tracing the Kafka lag, me testing state machine transitions.
334
-
</Body>
328
+
<Bodysize="base"as="p"class="leading-relaxed">That's when we'd debug together: Adham tracing the Kafka lag, me testing state machine transitions, Waheed debugging the metadata, with a tired collector who just wanted to finish the match and go home.</Body>
335
329
</div>
336
330
</div>
337
331
@@ -534,82 +528,80 @@ The patterns Ali and I sketched in notepad during week one became valuable enoug
534
528
<Bodysize="sm">"Design for the 80% case"—The Pragmatic Programmer. That principle shaped most decisions: DSL for standard sequences, state machines for common flows, metadata for typical events. When 95% of matches follow patterns, build for patterns.</Body>
535
529
</Callout>
536
530
537
-
{/* Timeline: Scale Progression */}
538
-
<Timeline>
539
-
<TimelineItem
540
-
date="2018"
541
-
title="Soccer, Offline Collection"
542
-
description="~100 collectors, offline tagging"
543
-
/>
544
-
<TimelineItem
545
-
date="2020"
546
-
title="Live Collection Breakthrough"
547
-
description="Live collection, 1000 collectors"
548
-
/>
549
-
<TimelineItem
550
-
date="2021"
551
-
title="American Football Expansion"
552
-
description="American football expansion"
553
-
/>
554
-
<TimelineItem
555
-
date="Post-2022"
556
-
title="Scale Beyond Departure"
557
-
description="5000+ by acquisition"
558
-
isLast={true}
559
-
/>
560
-
</Timeline>
561
-
562
-
<Headinglevel={4}as="h4"class="mb-4 mt-6">What Made This Possible</Heading>
563
-
564
-
<divclass="mb-6">
565
-
<Accordion
566
-
size="inline"
567
-
variant="default"
568
-
summary="Non-linear leverage"
569
-
defaultOpen={false}
570
-
>
571
-
<Bodysize="sm"as="p">Non-linear scaling without proportional staffing increases. The 5-person metadata team (Muhanad led ops context) queried pending conflicts, resolved once via claims interface, and the system cascaded updates to all affected events.</Body>
572
-
</Accordion>
573
-
574
-
<Accordion
575
-
size="inline"
576
-
variant="default"
577
-
summary="Minimal engineering bottleneck"
578
-
defaultOpen={false}
579
-
>
580
-
<Bodysize="sm"as="p">When we expanded to American football in 2020, product managers wrote new dataspecs and grouping rules. Engineering only intervened for state machine edge cases (e.g., possession turnover during penalty review—an NFL-specific complexity).</Body>
581
-
</Accordion>
582
-
583
-
<Accordion
584
-
size="inline"
585
-
variant="default"
586
-
summary="Collector experience transformation"
587
-
defaultOpen={false}
588
-
>
589
-
<Bodysize="sm"as="p">Keyboard flows built muscle memory. Contextual mappings reduced cognitive load (press 'P' for pass, but context changes based on phase). Computer vision assisted bounding box input, reducing manual pixel-perfect clicking.</Body>
590
-
</Accordion>
591
-
592
-
<Accordion
593
-
size="inline"
594
-
variant="default"
595
-
summary="Client customization through configuration"
596
-
defaultOpen={false}
597
-
>
598
-
<Bodysize="sm"as="p">Different granularity requirements—basic event tracking or advanced positioning data with x/y coordinates—handled through dataspec configuration, not separate codebases.</Body>
599
-
</Accordion>
531
+
<divclass="grid md:grid-cols-2 gap-2 mb-8">
532
+
<Timeline>
533
+
<TimelineItem
534
+
date="2018"
535
+
title="Soccer, Offline Collection"
536
+
description="~100 collectors, offline tagging"
537
+
/>
538
+
<TimelineItem
539
+
date="2020"
540
+
title="Live Collection Breakthrough"
541
+
description="Live collection, 1000 collectors"
542
+
/>
543
+
<TimelineItem
544
+
date="2021"
545
+
title="American Football Expansion"
546
+
description="American football expansion"
547
+
/>
548
+
<TimelineItem
549
+
date="Post-2022"
550
+
title="Scale Beyond Departure"
551
+
description="5000+ by acquisition"
552
+
isLast={true}
553
+
/>
554
+
</Timeline>
555
+
<div>
556
+
<Headinglevel={4}as="h4"class="mb-4 mt-6">What Made This Possible</Heading>
557
+
<divclass="mb-6">
558
+
<Accordion
559
+
size="inline"
560
+
variant="default"
561
+
summary="Non-linear leverage"
562
+
defaultOpen={false}
563
+
>
564
+
<Bodysize="sm"as="p">Non-linear scaling without proportional staffing increases. The 5-person metadata team (Muhanad led ops context) queried pending conflicts, resolved once via claims interface, and the system cascaded updates to all affected events.</Body>
565
+
</Accordion>
566
+
567
+
<Accordion
568
+
size="inline"
569
+
variant="default"
570
+
summary="Minimal engineering bottleneck"
571
+
defaultOpen={false}
572
+
>
573
+
<Bodysize="sm"as="p">When we expanded to American football in 2020, product managers wrote new dataspecs and grouping rules. Engineering only intervened for state machine edge cases (e.g., possession turnover during penalty review—an NFL-specific complexity).</Body>
574
+
</Accordion>
575
+
576
+
<Accordion
577
+
size="inline"
578
+
variant="default"
579
+
summary="Collector experience transformation"
580
+
defaultOpen={false}
581
+
>
582
+
<Bodysize="sm"as="p">Keyboard flows built muscle memory. Contextual mappings reduced cognitive load (press 'P' for pass, but context changes based on phase). Computer vision assisted bounding box input, reducing manual pixel-perfect clicking.</Body>
583
+
</Accordion>
584
+
585
+
<Accordion
586
+
size="inline"
587
+
variant="default"
588
+
summary="Client customization through configuration"
589
+
defaultOpen={false}
590
+
>
591
+
<Bodysize="sm"as="p">Different granularity requirements—basic event tracking or advanced positioning data with x/y coordinates—handled through dataspec configuration, not separate codebases.</Body>
592
+
</Accordion>
593
+
</div>
594
+
595
+
<EditorialNote>From 100 to 5000+ collectors, product managers shipped new dataspecs without proportional engineering investment, though complex state transitions occasionally required technical collaboration.</EditorialNote>
596
+
597
+
</div>
600
598
</div>
601
599
602
-
<EditorialNote>From 100 to 5000+ collectors, product managers shipped new dataspecs without proportional engineering investment, though complex state transitions occasionally required technical collaboration.</EditorialNote>
603
-
604
600
</div>
605
601
</details>
606
602
607
-
{""}
608
-
609
603
<SectionDividerspacing="major"class="mt-2" />
610
604
611
-
{/* Lessons Section */}
612
-
613
605
<Sectionspacing="default"id="lessons"titleLevel={3}title="Lessons: What Transfers? What Only Worked Here?">
614
606
615
607
<EditorialNote>
@@ -658,8 +650,6 @@ These aren't universal truths—they worked because of specific conditions:
658
650
<Bodysize="sm"as="p">During peak live match time, the system processes 100,000+ atomic events per minute—touches, passes, tackles, runs—streaming through arbitrary validation layers in real-time. With 100 collectors, manual coordination could absorb this velocity. At 1000+ collectors, 2 product managers couldn't handle 50+ daily dataspec questions while the spec evolved. Today at 5000+ collectors processing live matches simultaneously, architectural separation isn't optimization—it's the only way to handle this streaming intensity without engineering bottlenecks.</Body>
0 commit comments