diff --git a/public/llms.txt b/public/llms.txt index 58f2b46..7247d7c 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -4,7 +4,7 @@ ## About -I’ve always gravitated toward problems where engineering, intelligence, and real-world constraints intersect. What started as a curiosity for how things work turned into a career spent building products and platforms that make complex systems feel simple. +I've always gravitated toward problems where engineering, intelligence, and real-world constraints intersect. What started as a curiosity for how things work turned into a career spent building products and platforms that make complex systems feel simple. ## Site Structure @@ -16,10 +16,16 @@ I’ve always gravitated toward problems where engineering, intelligence, and re ## Recent Blog Posts +- [Beyond 95% Accuracy](https://soumyo.com/blog/beyond-95-accuracy-medical-transcription) + The engineering lessons from building voice agents for healthcare - where benchmarks fail, context hints unlock accuracy, and your production failures become your most valuable training data +- [Beyond Accuracy](https://soumyo.com/blog/beyond-accuracy-rethinking-llm-evaluations) + Why effective LLM evaluation goes beyond simple metrics—addressing trustworthiness, safety, reliability, and continuous improvement for truly valuable AI applications - [Beyond the Vacuum](https://soumyo.com/blog/beyond-the-vacuum) Exploring how original ideas emerge not from isolation, but from the rich interplay of diverse knowledge and experiences - [Facts, Hypotheses, and the Art of Writing PRDs](https://soumyo.com/blog/facts-hypotheses-and-the-art-of-writing-prds) Every sentence in a PRD should either be a Fact or a Hypothesis. Avoid making Statements at all costs. +- [The Secret to MCP Servers That LLMs Love Using](https://soumyo.com/blog/the-secret-to-mcp-servers-that-llms-love-using) + The Model Context Protocol revolution requires a shift from engineering to product design thinking—building experiences that transform how work gets done, not just tools that LLMs can use ## Newsletter @@ -35,4 +41,4 @@ Subscribe to "Stochastic Musings" - Notes on product intuition, engineering syst --- -This site is built with Astro, optimized for performance and accessibility. Last updated: 2026-01-24 +This site is built with Astro, optimized for performance and accessibility. Last updated: 2026-01-26 diff --git a/src/components/BlogHeader.astro b/src/components/BlogHeader.astro index 807876e..27d7dcd 100644 --- a/src/components/BlogHeader.astro +++ b/src/components/BlogHeader.astro @@ -1,153 +1,379 @@ --- import ResponsiveImage from './ResponsiveImage.astro'; +interface HeroConfig { + position?: + | 'center' + | 'top' + | 'bottom' + | 'left' + | 'right' + | 'top-left' + | 'top-right' + | 'bottom-left' + | 'bottom-right'; + aspectRatio?: 'cinematic' | 'wide' | 'standard' | 'square'; + overlay?: 'gradient' | 'dark' | 'light' | 'none'; +} + interface Props { title: string; subtitle?: string; date: Date; heroImage?: string; + heroConfig?: HeroConfig; readingTime?: number; } -const { title, subtitle, date, heroImage, readingTime } = Astro.props; +const { title, subtitle, date, heroImage, heroConfig, readingTime } = Astro.props; + +// Smart defaults with per-post overrides +const config = { + position: heroConfig?.position ?? 'center', + aspectRatio: heroConfig?.aspectRatio ?? 'cinematic', + overlay: heroConfig?.overlay ?? 'gradient', +}; + +// Map aspect ratio keywords to CSS values +const aspectRatioMap: Record = { + cinematic: { desktop: '21/9', mobile: '16/9' }, + wide: { desktop: '2/1', mobile: '16/9' }, + standard: { desktop: '16/9', mobile: '4/3' }, + square: { desktop: '4/3', mobile: '1/1' }, +}; + +// Map position keywords to object-position values +const positionMap: Record = { + center: 'center center', + top: 'center top', + bottom: 'center bottom', + left: 'left center', + right: 'right center', + 'top-left': 'left top', + 'top-right': 'right top', + 'bottom-left': 'left bottom', + 'bottom-right': 'right bottom', +}; + +const aspectDesktop = aspectRatioMap[config.aspectRatio].desktop; +const aspectMobile = aspectRatioMap[config.aspectRatio].mobile; +const objectPosition = positionMap[config.position]; --- -
- {/* Background with hero image or gradient */} +
+ {/* Hero Image Section */} {heroImage ? ( -
+
- {/* Gradient overlay for readability - theme-aware */} -
-
+ {/* Gradient overlay for desktop readability */} + {config.overlay !== 'none' && ( + <> +
+
+ + )} + + {/* Desktop: Content overlaid on image */} +
+
+ {/* Meta info */} +
+ + {readingTime && ( + <> + · + + + + + {readingTime} min + + + )} +
+ + {/* Title */} +

+ {title} +

+ + {/* Subtitle */} + {subtitle && ( +

+ {subtitle} +

+ )} +
+
) : ( -
+
{/* Subtle gradient for posts without hero image */}
+ {/* Content for no-image state */} +
+
+ + {readingTime && ( + <> + · + + + + + {readingTime} min + + + )} +
+

+ {title} +

+ {subtitle && ( +

+ {subtitle} +

+ )} +
)} - {/* Content */} -
- {/* Meta info */} -
- - {readingTime && ( - <> - - - - - - {readingTime} min read - - + {/* Mobile: Content below image */} + {heroImage && ( +
+
+ + {readingTime && ( + <> + · + + + + + {readingTime} min + + + )} +
+

+ {title} +

+ {subtitle && ( +

+ {subtitle} +

)}
- - {/* Title */} -

- {title} -

- - {/* Subtitle */} - {subtitle && ( -

- {subtitle} -

- )} -
+ )}