Skip to content

Commit 103d11c

Browse files
Codestzclaude
andcommitted
feat: publish surgical code editing blog post and update current work
Release new blog post about surgical editing in AI agents with custom MDX components (TokenComparison, ToolCall). Update Currently Building card to show next post about planning with Haiku. Add AnimatedSection component and improve Mermaid dark mode styling. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent f689551 commit 103d11c

File tree

25 files changed

+1756
-85
lines changed

25 files changed

+1756
-85
lines changed

mdx-components.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
import type { MDXComponents } from 'mdx/types';
2-
import { CodeSnippet, Terminal, Icon, Comparison, FileTree } from '@/components/mdx';
2+
import {
3+
CodeSnippet,
4+
Terminal,
5+
Icon,
6+
Comparison,
7+
FileTree,
8+
TokenComparison,
9+
ToolCall,
10+
} from '@/components/mdx';
311
import { Mermaid } from '@/components/mdx/Mermaid';
412

513
/**
@@ -16,6 +24,8 @@ export const mdxComponents: MDXComponents = {
1624
Icon,
1725
Comparison,
1826
FileTree,
27+
TokenComparison,
28+
ToolCall,
1929
// Headings
2030
h1: ({ children }) => (
2131
<h1 className="mb-4 sm:mb-6 mt-6 sm:mt-8 font-heading text-3xl sm:text-4xl font-bold uppercase text-foreground">
1.76 MB
Loading

src/app/experience/page.tsx

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ArrowRight, ExternalLink, Github } from 'lucide-react';
2-
import { Section } from '@/components/sections';
2+
import { AnimatedSection } from '@/components/sections';
33
import { Card, Button, Badge } from '@/components/ui';
44
import { contentService } from '@/lib/services';
55
import { ROUTES } from '@/lib/constants';
@@ -12,7 +12,8 @@ import { Metadata } from 'next';
1212
*/
1313
export const metadata: Metadata = generatePageMetadata({
1414
title: 'Experience',
15-
description: 'Professional experience and impactful projects across AI integration, microservices, and full-stack development',
15+
description:
16+
'Professional experience and impactful projects across AI integration, microservices, and full-stack development',
1617
path: '/experience',
1718
});
1819

@@ -22,38 +23,23 @@ export default async function ExperiencePage() {
2223

2324
return (
2425
<main>
25-
<Section
26+
<AnimatedSection
2627
title="Experience"
2728
description="Professional experience and impactful projects across AI integration, microservices, and full-stack development"
2829
>
2930
{projects.length > 0 ? (
3031
<div className="grid gap-4 sm:gap-5 md:gap-6 grid-cols-1 sm:grid-cols-2 lg:grid-cols-3">
3132
{projects.map((project) => (
32-
<Card
33-
key={project.slug}
34-
variant="elevated"
35-
hoverable
36-
as="article"
37-
>
33+
<Card key={project.slug} variant="elevated" hoverable as="article">
3834
<Card.Header>
3935
<div className="mb-2 flex flex-wrap gap-2">
40-
{project.current && (
41-
<Badge variant="success">
42-
Current
43-
</Badge>
44-
)}
45-
{project.featured && (
46-
<Badge variant="primary">
47-
Featured
48-
</Badge>
49-
)}
36+
{project.current && <Badge variant="success">Current</Badge>}
37+
{project.featured && <Badge variant="primary">Featured</Badge>}
5038
</div>
5139
<h2 className="mb-2 font-mono text-xl font-bold text-foreground">
5240
{project.title}
5341
</h2>
54-
<p className="mb-1 text-sm font-semibold text-primary">
55-
{project.company}
56-
</p>
42+
<p className="mb-1 text-sm font-semibold text-primary">{project.company}</p>
5743
<p className="text-xs text-foreground/60">
5844
{project.role} · {project.year}
5945
</p>
@@ -118,7 +104,7 @@ export default async function ExperiencePage() {
118104
</p>
119105
</div>
120106
)}
121-
</Section>
107+
</AnimatedSection>
122108
</main>
123109
);
124110
}

src/app/experiments/page.tsx

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Section, ExperimentsGrid } from '@/components/sections';
1+
import { ExperimentsGrid, AnimatedSection } from '@/components/sections';
22
import { contentService } from '@/lib/services';
33
import { generatePageMetadata } from '@/lib/utils';
44
import { Metadata } from 'next';
@@ -9,7 +9,8 @@ import { Metadata } from 'next';
99
*/
1010
export const metadata: Metadata = generatePageMetadata({
1111
title: 'Experiments',
12-
description: 'Exploring AI integration, performance optimization, and software architecture through tutorials and experiments',
12+
description:
13+
'Exploring AI integration, performance optimization, and software architecture through tutorials and experiments',
1314
path: '/experiments',
1415
});
1516

@@ -19,20 +20,18 @@ export default async function ExperimentsPage() {
1920

2021
return (
2122
<main>
22-
<Section
23+
<AnimatedSection
2324
title="Experiments"
2425
description="Exploring AI integration, performance optimization, and software architecture through tutorials and experiments"
2526
>
2627
{posts.length > 0 ? (
2728
<ExperimentsGrid posts={posts} />
2829
) : (
2930
<div className="py-12 text-center">
30-
<p className="mb-4 text-lg text-foreground/60">
31-
No experiments yet. Check back soon!
32-
</p>
31+
<p className="mb-4 text-lg text-foreground/60">No experiments yet. Check back soon!</p>
3332
</div>
3433
)}
35-
</Section>
34+
</AnimatedSection>
3635
</main>
3736
);
3837
}

src/app/page.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
} from '@/components/sections';
1111
import { contentService } from '@/lib/services';
1212
import { generatePageMetadata } from '@/lib/utils';
13+
import { getCurrentWork } from '@/lib/utils/current-work.utils';
1314

1415
/**
1516
* Static metadata for the home page
@@ -24,6 +25,9 @@ export default async function HomePage() {
2425
const postsResult = await contentService.getAllPosts();
2526
const posts = postsResult.success ? Array.from(postsResult.data) : [];
2627

28+
// Fetch current work data
29+
const currentWork = await getCurrentWork();
30+
2731
return (
2832
<main className="max-w-7xl mx-auto px-4 sm:px-6 md:px-12 pt-6 sm:pt-8">
2933
{/* Hero Section - Code Garden Branding */}
@@ -46,7 +50,7 @@ export default async function HomePage() {
4650

4751
{/* Currently Building - 25% (1 of 4 columns) */}
4852
<div className="md:col-span-1 flex">
49-
<CurrentlyBuildingCard className="w-full h-full" />
53+
<CurrentlyBuildingCard currentWork={currentWork} className="w-full h-full" />
5054
</div>
5155
</AnimatedContentGrid>
5256

src/components/mdx/CodeSnippet/CodeSnippet.tsx

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,7 @@ import { Check, Copy } from 'lucide-react';
55
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
66
import { dracula } from 'react-syntax-highlighter/dist/esm/styles/prism';
77
import { cn } from '@/lib/utils';
8-
9-
export interface CodeSnippetProps {
10-
children: string;
11-
language?: string;
12-
title?: string;
13-
showLineNumbers?: boolean;
14-
}
8+
import type { CodeSnippetProps } from './CodeSnippet.types';
159

1610
/**
1711
* CodeSnippet Component

src/components/mdx/Mermaid/Mermaid.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -161,14 +161,12 @@ export function Mermaid({ chart, className }: MermaidProps) {
161161
dangerouslySetInnerHTML={{ __html: svg }}
162162
/>
163163
) : (
164-
<div className="text-center text-foreground/60 py-8 font-mono">
165-
Rendering diagram...
166-
</div>
164+
<div className="text-center text-foreground/60 py-8 font-mono">Rendering diagram...</div>
167165
)}
168166
</div>
169167

170168
{/* Instructions */}
171-
<div className="absolute bottom-2 left-4 text-xs text-foreground/50 font-mono">
169+
<div className="absolute bottom-2 left-4 text-xs text-zinc-500 dark:text-zinc-400 font-mono">
172170
💡 Drag to pan • Scroll to zoom • Click controls to zoom
173171
</div>
174172
</div>

0 commit comments

Comments
 (0)