Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .Jules/apex.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,5 @@ Prefer visitor-facing craft on live surfaces (Home, Work, Biography, Contact, an
## 2026-05-26 - Product Manifesto | Signal: Product Leadership "Guiding Principles" trend | Lean Implementation: Isolated experimental route, uses Hero/Icon primitives, ~45 lines delta.

## 2026-05-27 - Strategic Reading List | Signal: Portfolio "Bookshelf" trend | Lean Implementation: Isolated experimental route, static data array, uses Hero/Pill/Icon primitives, ~48 lines delta.

## 2026-05-28 - DevEx Operating Framework | Signal: "Operating Framework" trend | Lean Implementation: Isolated experimental route, static pillar cards, uses Hero primitive, ~35 lines delta.
1 change: 1 addition & 0 deletions src/content.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ export const collections = {
enable_logo_wobble_v1: z.boolean().default(false),
enable_cta_tactile_v1: z.boolean().default(false),
enable_theme_toggle_tactile_v1: z.boolean().default(false),
enable_operating_framework: z.boolean().default(false),
}),
}),
};
3 changes: 2 additions & 1 deletion src/content/flags/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@
"enable_reading_list": true,
"enable_logo_wobble_v1": true,
"enable_cta_tactile_v1": true,
"enable_theme_toggle_tactile_v1": true
"enable_theme_toggle_tactile_v1": true,
"enable_operating_framework": true
}
121 changes: 121 additions & 0 deletions src/pages/experimental/operating-framework.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
---
import CallToAction from '../../components/CallToAction.astro';
import Hero from '../../components/Hero.astro';
import BaseLayout from '../../layouts/BaseLayout.astro';
import { getEntry } from 'astro:content';

const flagsEntry = await getEntry('flags', 'config');
if (!flagsEntry?.data.enable_operating_framework) return Astro.redirect('/404/');

const linkedinHref = 'https://www.linkedin.com/in/alehar/';

const pillars = [
{
title: 'DX Measurement',
description:
'Telemetry, baselines, and friction-free feedback loops to quantify developer flow.',
},
{
title: 'Design Systems',
description:
'Accessible, reusable UI primitives and zero-CLS standards that scale product delivery.',
},
{
title: 'Autonomous Tooling',
description: 'Deterministic guardrails and agentic workflows that automate repetitive tasks.',
},
];
---

<BaseLayout
title="Operating Framework | Product Manager, Developer Experience at IFS"
ogTitle="Operating Framework | Product Manager, Developer Experience at IFS"
description="Product Manager, Developer Experience at IFS. Core operating pillars for developer experience."
robots="noindex"
>
<main id="main-content" role="main" class="wrapper stack gap-10">
<Hero title="Operating Framework" align="start">
<p class="lede">
Product Manager, Developer Experience at IFS. The core operating pillars driving modern
developer experience and design systems.
</p>
</Hero>
<div class="grid">
{
pillars.map(({ title, description }) => (
<div class="card">
<strong>{title}</strong>
<p>{description}</p>
</div>
))
}
</div>
<div class="actions">
<CallToAction
href={linkedinHref}
target="_blank"
rel="noopener noreferrer"
data-hire-event="hire_cta_click"
data-hire-surface="operating-framework"
>
Get in touch
</CallToAction>
<p class="cta-hint">LinkedIn · replies from me</p>
</div>
</main>
</BaseLayout>

<style>
.lede {
margin: 0;
color: var(--gray-200);
max-width: 46ch;
}

.grid {
display: grid;
gap: 1rem;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}

.card {
padding: 1rem;
border: 1px solid var(--gray-800);
border-radius: 0.5rem;
background: var(--gradient-subtle);
}

.card strong {
display: block;
color: var(--gray-0);
}

.card p {
margin: 0.35rem 0 0;
color: var(--gray-300);
}

.actions {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 0.4rem;
margin-top: 0.5rem;
padding-bottom: var(--chat-fab-clearance);
padding-right: var(--chat-fab-clearance);
}

.cta-hint {
margin: 0;
font-size: var(--text-sm);
color: var(--gray-300);
font-weight: 400;
}

@media (min-width: 50em) {
.actions {
padding-bottom: 0;
padding-right: 0;
}
}
</style>
Loading