Repository navigation
Apex: DX Stack MVP #768
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Apex: DX Stack MVP #768
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,131 @@ | ||
| --- | ||
| 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_dx_stack) return Astro.redirect('/404/'); | ||
|
|
||
| const linkedinHref = 'https://www.linkedin.com/in/alehar/'; | ||
|
|
||
| const stack = [ | ||
| { | ||
| category: 'Framework & Edge', | ||
| tool: 'Astro + Cloudflare Workers', | ||
| detail: 'Ships with almost no client JS, and Cloudflare puts it close to the visitor.', | ||
| }, | ||
| { | ||
| category: 'Testing & Quality', | ||
| tool: 'Vitest + Playwright', | ||
| detail: 'Unit tests that stay fast, plus Playwright for the screens that have to look right.', | ||
| }, | ||
| { | ||
| category: 'Observability', | ||
| tool: 'Sentry + Cloudflare Analytics', | ||
| detail: | ||
| 'Sentry catches runtime errors; Cloudflare Analytics shows edge traffic without another dashboard.', | ||
| }, | ||
| ]; | ||
| --- | ||
|
|
||
| <BaseLayout | ||
| title="DX Stack | Product Manager, Developer Experience at IFS" | ||
| ogTitle="DX Stack | Product Manager, Developer Experience at IFS" | ||
| description="Product Manager, Developer Experience at IFS. Tools behind the developer platforms I work on." | ||
| robots="noindex" | ||
| > | ||
| <main id="main-content" role="main" class="wrapper stack gap-10"> | ||
| <Hero title="DX Stack" align="start"> | ||
| <p class="lede"> | ||
| Product Manager, Developer Experience at IFS. The stack I lean on for DX work: Astro on the | ||
| edge, Vitest and Playwright for quality, Sentry for what breaks in production. | ||
| </p> | ||
|
Owner
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Page chrome is fine (matches reading list). The lede is where it slips: modern DX platforms, lightning-fast, robust are LinkedIn-headline soup — no named tool, no concrete claim. Suggest:
Keep the title pattern. Keep the LinkedIn CTA + hint as reading list has them.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Updated description and lede copy to directly reflect the Product Manager DX context at IFS as suggested. |
||
| </Hero> | ||
| <div class="grid"> | ||
| { | ||
| stack.map(({ category, tool, detail }) => ( | ||
| <div class="card"> | ||
| <span class="category">{category}</span> | ||
| <strong>{tool}</strong> | ||
| <p class="detail">{detail}</p> | ||
| </div> | ||
| )) | ||
| } | ||
| </div> | ||
| <div class="actions"> | ||
| <CallToAction | ||
| href={linkedinHref} | ||
| target="_blank" | ||
| rel="noopener noreferrer" | ||
| data-hire-event="hire_cta_click" | ||
| data-hire-surface="dx-stack" | ||
| > | ||
| 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); | ||
| } | ||
|
|
||
| .category { | ||
| display: block; | ||
| font-size: var(--text-sm); | ||
| color: var(--accent-regular); | ||
| margin-bottom: 0.25rem; | ||
| } | ||
|
|
||
| .card strong { | ||
| display: block; | ||
| color: var(--gray-0); | ||
| } | ||
|
|
||
| .card .detail { | ||
| 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> | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Category labels are fine. The detail lines are the thin part — slogans instead of what the tool does here.
Suggest:
Ships with almost no client JS, and Cloudflare puts it close to the visitor.Unit tests that stay fast, plus Playwright for the screens that have to look right.Sentry catches runtime errors; Cloudflare Analytics shows edge traffic without another dashboard.If a fourth real tool belongs in this stack, add it with the same voice. Three slogan cards is not a stack yet.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated stack item detail descriptions to use specific tool behavior claims rather than high-level slogans.