Skip to content
Merged
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
15 changes: 12 additions & 3 deletions src/components/Container.astro
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
---
const { class: className } = Astro.props;
import type { Polymorphic } from 'astro/types';

type LayoutTag = 'section' | 'div' | 'article' | 'header' | 'footer' | 'code';

type Props<Tag extends LayoutTag> = Polymorphic<{
as: Tag;
class?: string;
}>;

const { as: Tag = 'div', class: className } = Astro.props as Props<LayoutTag>;
---

<div class:list={[
<Tag class:list={[
'max-w-[40rem] mx-auto px-4',
className,
]}>
<slot />
</div>
</Tag>
12 changes: 5 additions & 7 deletions src/components/partials/Footer.astro
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@
import Container from '@/components/Container.astro';
---

<footer class="pt-24">
<Container>
<p class="text-center text-muted-foreground text-sm">
&copy; {new Date().getFullYear()}. Powered by <a href="https://astro.build" target="_blank" rel="noopener noreferrer">Astro</a> and CVfolio.
</p>
</Container>
</footer>
<Container as='footer' class='pt-24'>
<p class="text-center text-muted-foreground text-sm">
&copy; {new Date().getFullYear()}. Powered by <a href="https://astro.build" target="_blank" rel="noopener noreferrer">Astro</a> and CVfolio.
</p>
</Container>
46 changes: 22 additions & 24 deletions src/components/partials/Header.astro
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,25 @@ const isWritingPage = pathname.startsWith('/writing');

---

<header class="w-full">
<Container class="max-w-full flex justify-center items-center">
<div class="w-max fixed top-0 mt-5 bg-muted-foreground/40 backdrop-blur-md border border-border rounded-full p-1">
<nav class="flex items-center">
<ul class="flex items-center gap-1">
<li>
<a href="/" class:list={[
'font-medium transition-colors block px-5 py-2',
'hover:text-headings',
isHomePage && 'text-headings bg-muted-foreground/40 rounded-full',
]}>Home</a>
</li>
<li>
<a href="/writing" class:list={[
'font-medium transition-colors block px-5 py-2',
'hover:text-headings',
isWritingPage && 'text-headings bg-muted-foreground/40 rounded-full',
]}>Writing</a>
</li>
</ul>
</nav>
</div>
</Container>
</header>
<Container as='header' class="w-full max-w-full flex justify-center items-center">
<div class="w-max fixed top-0 mt-5 bg-muted-foreground/40 backdrop-blur-md border border-border rounded-full p-1">
<nav class="flex items-center">
<ul class="flex items-center gap-1">
<li>
<a href="/" class:list={[
'font-medium transition-colors block px-5 py-2',
'hover:text-headings',
isHomePage && 'text-headings bg-muted-foreground/40 rounded-full',
]}>Home</a>
</li>
<li>
<a href="/writing" class:list={[
'font-medium transition-colors block px-5 py-2',
'hover:text-headings',
isWritingPage && 'text-headings bg-muted-foreground/40 rounded-full',
]}>Writing</a>
</li>
</ul>
</nav>
</div>
</Container>
123 changes: 57 additions & 66 deletions src/pages/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -18,83 +18,74 @@ const talks = await getCollection('talks');
---

<BaseLayout seo={entry.data.seo}>
<section class="py-6">
<Container>
<Author {...DEFAULT_CONFIGURATION.author} />
</Container>
</section>
<section class="py-6">
<Container>
<div class="flex flex-col gap-6">
<div class="flex items-center">
<span class="text-headings">About</span>
</div>
<div class="prose dark:prose-invert">
<Content />
</div>
<Container as='section' class='py-6'>
<Author {...DEFAULT_CONFIGURATION.author} />
</Container>

<Container as='section' class='py-6'>
<div class="flex flex-col gap-6">
<div class="flex items-center">
<span class="text-headings">About</span>
</div>
<div class="prose dark:prose-invert">
<Content />
</div>
</Container>
</section>
</div>
</Container>
{
links.length > 0 && (
<section class="py-8">
<Container>
<div class="flex flex-col gap-5">
<span class="text-headings">Contact</span>
<ul class="flex flex-col gap-3">
{links.map((link) => (
<li class="py-0.5">
<div class="flex items-center gap-5">
<span class="min-w-28 text-muted-foreground">
{link.data.label}
</span>
<a
class="text-headings font-medium"
rel="noopener noreferrer"
target="_blank"
href={link.data.url}
>
{link.data.name}
</a>
</div>
</li>
))}
</ul>
</div>
</Container>
</section>
<Container as='section' class='py-8'>
<div class="flex flex-col gap-5">
<span class="text-headings">Contact</span>
<ul class="flex flex-col gap-3">
{links.map((link) => (
<li class="py-0.5">
<div class="flex items-center gap-5">
<span class="min-w-28 text-muted-foreground">
{link.data.label}
</span>
<a
class="text-headings font-medium"
rel="noopener noreferrer"
target="_blank"
href={link.data.url}
>
{link.data.name}
</a>
</div>
</li>
))}
</ul>
</div>
</Container>
)
}
{
sortedJobs.length > 0 && (
<section class="py-6">
<Container>
<div class="flex flex-col gap-5">
<span class="text-headings">Work Experience</span>
<ul class="flex flex-col gap-8">
{sortedJobs.map((job) => (
<WorkExperience entry={job} />
))}
</ul>
</div>
</Container>
</section>
<Container as='section' class='py-6'>
<div class="flex flex-col gap-5">
<span class="text-headings">Work Experience</span>
<ul class="flex flex-col gap-8">
{sortedJobs.map((job) => (
<WorkExperience entry={job} />
))}
</ul>
</div>
</Container>
)
}
{
talks.length > 0 && (
<section class="py-6">
<Container>
<div class="flex flex-col gap-5">
<span class="text-headings">Speaking</span>
<ul class="flex flex-col gap-8">
{talks.map((talk) => (
<Talk entry={talk} />
))}
</ul>
</div>
</Container>
</section>
<Container as='section' class='py-6'>
<div class="flex flex-col gap-5">
<span class="text-headings">Speaking</span>
<ul class="flex flex-col gap-8">
{talks.map((talk) => (
<Talk entry={talk} />
))}
</ul>
</div>
</Container>
)
}
</BaseLayout>
52 changes: 25 additions & 27 deletions src/pages/writing/[...slug].astro
Original file line number Diff line number Diff line change
Expand Up @@ -20,33 +20,31 @@ const { Content } = await render(entry);
---

<BaseLayout seo={entry.data.seo}>
<section>
<Container>
<article class="flex flex-col gap-6">
<div class="flex flex-col gap-2">
<a href="/writing" class="transition-all text-muted-foreground hover:text-foreground pb-4 text-sm w-max">
Back to writing
</a>
<div class="flex flex-col gap-1.5">
<Avatar />
<span class="text-foreground">{DEFAULT_CONFIGURATION.author.name}</span>
</div>
<h1 class="text-3xl font-semibold text-headings">{entry.data.title}</h1>
<Container as='section'>
<article class="flex flex-col gap-6">
<div class="flex flex-col gap-2">
<a href="/writing" class="transition-all text-muted-foreground hover:text-foreground pb-4 text-sm w-max">
Back to writing
</a>
<div class="flex flex-col gap-1.5">
<Avatar />
<span class="text-foreground">{DEFAULT_CONFIGURATION.author.name}</span>
</div>
{entry.data.image && (
<div class="relative aspect-video overflow-hidden rounded-lg">
<Image
src={entry.data.image}
alt={entry.data.title}
class="object-cover"
/>
</div>
)}
<div class="prose dark:prose-invert">
<Content />
<h1 class="text-3xl font-semibold text-headings">{entry.data.title}</h1>
</div>
{entry.data.image && (
<div class="relative aspect-video overflow-hidden rounded-lg">
<Image
src={entry.data.image}
alt={entry.data.title}
class="object-cover"
/>
</div>
</article>
</Container>
</section>
)}
<div class="prose dark:prose-invert">
<Content />
</div>
</article>
</Container>
</BaseLayout>


28 changes: 12 additions & 16 deletions src/pages/writing/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,15 @@ const posts = await getCollection('posts');
---

<BaseLayout seo={entry.data.seo}>
<section class="py-6">
<Container>
<Author {...DEFAULT_CONFIGURATION.author} />
</Container>
</section>
<section class="py-6">
<Container>
<div class="flex flex-col gap-6">
<span class="text-headings">Latest posts</span>
<ul class="flex flex-col gap-3">
{posts.map((post) => <PostPreview entry={post} />)}
</ul>
</div>
</Container>
</section>
</BaseLayout>
<Container as='section' class='py-6'>
<Author {...DEFAULT_CONFIGURATION.author} />
</Container>
<Container as='section' class='py-6'>
<div class="flex flex-col gap-6">
<span class="text-headings">Latest posts</span>
<ul class="flex flex-col gap-3">
{posts.map((post) => <PostPreview entry={post} />)}
</ul>
</div>
</Container>
</BaseLayout>