Skip to content

Commit 78ff197

Browse files
committed
Add browser diagram
1 parent 26ecac6 commit 78ff197

1 file changed

Lines changed: 70 additions & 44 deletions

File tree

src/pages/index.astro

Lines changed: 70 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -12,51 +12,80 @@ const posts = (await getCollection("medical")).sort(
1212
---
1313

1414
<Layout>
15-
<!-- Hero -->
16-
<section class="hero">
17-
<h1>Cody Nguyen</h1>
18-
<p class="text-lg leading-relaxed max-w-prose">
19-
{SITE_DESCRIPTION}
20-
</p>
21-
<p class="leading-relaxed max-w-prose">
22-
I like working on problems that sit between fields — finding where
23-
software can unlock something useful in medicine, robotics, ML, or
24-
finance.
25-
</p>
26-
<div class="flex flex-wrap gap-4 mt-4">
27-
{
28-
Object.entries(SOCIAL_LINKS).map(([key, value]) => {
29-
if (!value) return null;
30-
return (
15+
<!-- Splash -->
16+
<section class="flex items-center gap-8">
17+
<div>
18+
<h1>
19+
<span class="fancy">Cody Nguyen,</span> building at the intersection of
20+
fields.
21+
</h1>
22+
<p>
23+
I like working on problems that sit between fields — finding where
24+
software can unlock something useful in medicine, robotics, ML, or
25+
finance.
26+
</p>
27+
<div class="flex flex-wrap gap-4 mt-4">
28+
{
29+
Object.entries(SOCIAL_LINKS).map(([key, value]) => {
30+
if (!value) return null;
31+
return (
32+
<a
33+
href={value}
34+
rel="noopener noreferrer"
35+
target="_blank"
36+
aria-label={key}
37+
title={key}
38+
class="inline-flex items-center gap-1.5 text-gray text-sm no-underline hover:text-secondary transition-colors"
39+
>
40+
<Fragment
41+
set:html={getSizedIcon(key as keyof typeof icons, 18) ?? ""}
42+
/>
43+
<span>{key}</span>
44+
</a>
45+
);
46+
})
47+
}
48+
{
49+
BLOG_CONFIG.email && (
3150
<a
32-
href={value}
33-
rel="noopener noreferrer"
34-
target="_blank"
35-
aria-label={key}
36-
title={key}
51+
href={BLOG_CONFIG.email}
52+
aria-label="Email"
53+
title="Email"
3754
class="inline-flex items-center gap-1.5 text-gray text-sm no-underline hover:text-secondary transition-colors"
3855
>
39-
<Fragment
40-
set:html={getSizedIcon(key as keyof typeof icons, 18) ?? ""}
41-
/>
42-
<span>{key}</span>
56+
<Fragment set:html={getSizedIcon("Email", 18)} />
57+
<span>Email</span>
4358
</a>
44-
);
45-
})
46-
}
47-
{
48-
BLOG_CONFIG.email && (
49-
<a
50-
href={BLOG_CONFIG.email}
51-
aria-label="Email"
52-
title="Email"
53-
class="inline-flex items-center gap-1.5 text-gray text-sm no-underline hover:text-secondary transition-colors"
54-
>
55-
<Fragment set:html={getSizedIcon("Email", 18)} />
56-
<span>Email</span>
57-
</a>
58-
)
59-
}
59+
)
60+
}
61+
</div>
62+
</div>
63+
<div class="relative hidden md:block w-full max-w-md shrink-0">
64+
<div
65+
class="absolute -top-4 -right-4 w-full h-full bg-elevated border border-primary/20"
66+
aria-hidden="true"
67+
>
68+
</div>
69+
<div class="relative bg-white border border-primary/20">
70+
<div
71+
class="flex items-center gap-1.5 border-b border-primary/10 px-4 py-3"
72+
>
73+
<span class="w-2.5 h-2.5 rounded-full bg-primary/60"></span>
74+
<span class="w-2.5 h-2.5 rounded-full bg-primary/35"></span>
75+
<span class="w-2.5 h-2.5 rounded-full bg-primary/15"></span>
76+
<span class="ml-3 flex-1 h-4 bg-elevated"></span>
77+
</div>
78+
<div class="p-5 flex flex-col gap-3">
79+
<div class="h-3 w-2/3 bg-primary/20"></div>
80+
<div class="h-3 w-1/2 bg-primary/10"></div>
81+
<div class="h-24 w-full bg-secondary/20 mt-2"></div>
82+
<div class="flex gap-3 mt-2">
83+
<div class="h-16 flex-1 bg-elevated border border-primary/10"></div>
84+
<div class="h-16 flex-1 bg-elevated border border-primary/10"></div>
85+
<div class="h-16 flex-1 bg-elevated border border-primary/10"></div>
86+
</div>
87+
</div>
88+
</div>
6089
</div>
6190
</section>
6291

@@ -115,9 +144,6 @@ const posts = (await getCollection("medical")).sort(
115144
</Layout>
116145

117146
<style>
118-
.hero h1 {
119-
margin-bottom: 0.5rem;
120-
}
121147
.domain-grid {
122148
display: grid;
123149
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));

0 commit comments

Comments
 (0)