81 lines
3.5 KiB
PHP
81 lines
3.5 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
require_once __DIR__ . '/includes/site.php';
|
|
|
|
$pageTitle = 'Case studies';
|
|
$pageDescription = 'Representative technology engagements across fintech, enterprise operations, and health-tech delivery.';
|
|
$activeNav = 'work';
|
|
$caseStudies = case_studies();
|
|
|
|
$filters = ['all' => 'All sectors'];
|
|
foreach ($caseStudies as $study) {
|
|
$filters[slugify_label($study['sector'])] = $study['sector'];
|
|
}
|
|
|
|
require __DIR__ . '/partials/header.php';
|
|
?>
|
|
<main>
|
|
<section class="section-shell border-bottom page-hero">
|
|
<div class="container">
|
|
<div class="row g-4 align-items-end">
|
|
<div class="col-lg-8">
|
|
<span class="eyebrow">Work</span>
|
|
<h1 class="section-title">Representative case studies for teams buying senior software delivery.</h1>
|
|
<p class="section-copy mb-0">A look at the product, platform, and operations problems we solve when software has to feel credible, fast, and commercially sound.</p>
|
|
</div>
|
|
<div class="col-lg-4">
|
|
<div class="surface-panel compact-panel h-100">
|
|
<div class="panel-label">Engagement models</div>
|
|
<?php foreach (engagement_models() as $model): ?>
|
|
<div class="content-row">
|
|
<h3><?= htmlspecialchars($model['title']) ?></h3>
|
|
<p><?= htmlspecialchars($model['body']) ?></p>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="section-shell">
|
|
<div class="container">
|
|
<div class="filter-toolbar" data-filter-group data-filter-target="#workGrid" data-empty-state="#workEmptyState">
|
|
<?php foreach ($filters as $key => $label): ?>
|
|
<button type="button" class="filter-chip<?= $key === 'all' ? ' is-active' : '' ?>" data-filter="<?= htmlspecialchars($key) ?>"><?= htmlspecialchars($label) ?></button>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
<div class="row g-4 mt-1" id="workGrid">
|
|
<?php foreach ($caseStudies as $study): ?>
|
|
<div class="col-lg-4 d-flex" data-filter-item="<?= htmlspecialchars(slugify_label($study['sector'])) ?>">
|
|
<article class="case-study-card h-100 w-100">
|
|
<div class="card-topline">
|
|
<span><?= htmlspecialchars($study['sector']) ?></span>
|
|
<span><?= htmlspecialchars($study['timeline']) ?></span>
|
|
</div>
|
|
<h2 class="h4"><?= htmlspecialchars($study['title']) ?></h2>
|
|
<p><?= htmlspecialchars($study['summary']) ?></p>
|
|
<div class="result-pills">
|
|
<?php foreach ($study['results'] as $result): ?>
|
|
<span><?= htmlspecialchars($result['value']) ?> · <?= htmlspecialchars($result['label']) ?></span>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
<div class="mt-auto pt-3 d-flex justify-content-between align-items-center gap-3">
|
|
<span class="mini-label"><?= htmlspecialchars($study['engagement']) ?></span>
|
|
<a class="text-link" href="/case-study.php?slug=<?= urlencode($study['slug']) ?>">View detail</a>
|
|
</div>
|
|
</article>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
<div class="empty-state d-none" id="workEmptyState">
|
|
<h2>No case studies match that filter.</h2>
|
|
<p>Try a different sector or view the full list again.</p>
|
|
<button type="button" class="btn btn-outline-dark" data-reset-filter>Show all sectors</button>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
<?php require __DIR__ . '/partials/footer.php'; ?>
|