-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
- labore et dolore magna aliqua. Vitae ultricies leo integer malesuada nunc vel risus commodo
- viverra. Adipiscing enim eu turpis egestas pretium. Euismod elementum nisi quis eleifend quam
- adipiscing. In hac habitasse platea dictumst vestibulum. Sagittis purus sit amet volutpat. Netus
- et malesuada fames ac turpis egestas. Eget magna fermentum iaculis eu non diam phasellus
- vestibulum lorem. Varius sit amet mattis vulputate enim. Habitasse platea dictumst quisque
- sagittis. Integer quis auctor elit sed vulputate mi. Dictumst quisque sagittis purus sit amet.
-
+
+
+
+
+
+
+
+
+ Anton Pogrebnjak
+
+ Really, I don't have much to tell you about myself. Just look at the amazing stuff I've done and written about. That should suffice.
+
+ Kind regards,
Anton
+
+
+
-
- Morbi tristique senectus et netus. Id semper risus in hendrerit gravida rutrum quisque non
- tellus. Habitasse platea dictumst quisque sagittis purus sit amet. Tellus molestie nunc non
- blandit massa. Cursus vitae congue mauris rhoncus. Accumsan tortor posuere ac ut. Fringilla urna
- porttitor rhoncus dolor. Elit ullamcorper dignissim cras tincidunt lobortis. In cursus turpis
- massa tincidunt dui ut ornare lectus. Integer feugiat scelerisque varius morbi enim nunc.
- Bibendum neque egestas congue quisque egestas diam. Cras ornare arcu dui vivamus arcu felis
- bibendum. Dignissim suspendisse in est ante in nibh mauris. Sed tempus urna et pharetra pharetra
- massa massa ultricies mi.
-
-
-
- Mollis nunc sed id semper risus in. Convallis a cras semper auctor neque. Diam sit amet nisl
- suscipit. Lacus viverra vitae congue eu consequat ac felis donec. Egestas integer eget aliquet
- nibh praesent tristique magna sit amet. Eget magna fermentum iaculis eu non diam. In vitae
- turpis massa sed elementum. Tristique et egestas quis ipsum suspendisse ultrices. Eget lorem
- dolor sed viverra ipsum. Vel turpis nunc eget lorem dolor sed viverra. Posuere ac ut consequat
- semper viverra nam. Laoreet suspendisse interdum consectetur libero id faucibus. Diam phasellus
- vestibulum lorem sed risus ultricies tristique. Rhoncus dolor purus non enim praesent elementum
- facilisis. Ultrices tincidunt arcu non sodales neque. Tempus egestas sed sed risus pretium quam
- vulputate. Viverra suspendisse potenti nullam ac tortor vitae purus faucibus ornare. Fringilla
- urna porttitor rhoncus dolor purus non. Amet dictum sit amet justo donec enim.
-
-
-
- Mattis ullamcorper velit sed ullamcorper morbi tincidunt. Tortor posuere ac ut consequat semper
- viverra. Tellus mauris a diam maecenas sed enim ut sem viverra. Venenatis urna cursus eget nunc
- scelerisque viverra mauris in. Arcu ac tortor dignissim convallis aenean et tortor at. Curabitur
- gravida arcu ac tortor dignissim convallis aenean et tortor. Egestas tellus rutrum tellus
- pellentesque eu. Fusce ut placerat orci nulla pellentesque dignissim enim sit amet. Ut enim
- blandit volutpat maecenas volutpat blandit aliquam etiam. Id donec ultrices tincidunt arcu. Id
- cursus metus aliquam eleifend mi.
-
-
-
- Tempus quam pellentesque nec nam aliquam sem. Risus at ultrices mi tempus imperdiet. Id porta
- nibh venenatis cras sed felis eget velit. Ipsum a arcu cursus vitae. Facilisis magna etiam
- tempor orci eu lobortis elementum. Tincidunt dui ut ornare lectus sit. Quisque non tellus orci
- ac. Blandit libero volutpat sed cras. Nec tincidunt praesent semper feugiat nibh sed pulvinar
- proin gravida. Egestas integer eget aliquet nibh praesent tristique magna.
-
-
+
+
diff --git a/src/pages/blog/[...slug].astro b/src/pages/blog/[...slug].astro
index 096bd1e..29d65a7 100644
--- a/src/pages/blog/[...slug].astro
+++ b/src/pages/blog/[...slug].astro
@@ -2,9 +2,10 @@
import { type CollectionEntry, getCollection } from 'astro:content';
import BlogPost from '../../layouts/BlogPost.astro';
import { render } from 'astro:content';
+import { convertCollectionPost, convertPost, type Post } from '../../models/Post';
export async function getStaticPaths() {
- const posts = await getCollection('blog');
+ const posts: Post[] = (await getCollection('blog')).map(convertPost);
return posts.map((post) => ({
params: { slug: post.id },
props: post,
@@ -12,10 +13,10 @@ export async function getStaticPaths() {
}
type Props = CollectionEntry<'blog'>;
-const post = Astro.props;
-const { Content } = await render(post);
+const post: Post = Astro.props;
+const { Content } = await render(convertCollectionPost(post));
---
-
+
diff --git a/src/pages/blog/index.astro b/src/pages/blog/index.astro
index 1d8d02a..a599d2c 100644
--- a/src/pages/blog/index.astro
+++ b/src/pages/blog/index.astro
@@ -4,10 +4,11 @@ import Header from '../../components/Header.astro';
import Footer from '../../components/Footer.astro';
import { SITE_TITLE, SITE_DESCRIPTION } from '../../consts';
import { getCollection } from 'astro:content';
-import FormattedDate from '../../components/FormattedDate.astro';
+import Showcase from '../../components/Showcase.astro';
+import { convertPost } from '../../models/Post';
-const posts = (await getCollection('blog')).sort(
- (a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(),
+const posts: Post[] = (await getCollection('blog')).map(convertPost).sort(
+ (a, b) => b.pubDate.valueOf() - a.pubDate.valueOf(),
);
---
@@ -15,96 +16,15 @@ const posts = (await getCollection('blog')).sort(
-
-
+ {posts.length === 0 ? (
+ No posts yet 😛
+ ) : (
+
+ )}
diff --git a/src/pages/index.astro b/src/pages/index.astro
index 31269ef..1b984a1 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -1,8 +1,15 @@
---
-import BaseHead from '../components/BaseHead.astro';
-import Header from '../components/Header.astro';
-import Footer from '../components/Footer.astro';
-import { SITE_TITLE, SITE_DESCRIPTION } from '../consts';
+import BaseHead from "../components/BaseHead.astro";
+import Header from "../components/Header.astro";
+import Footer from "../components/Footer.astro";
+import { SITE_TITLE, SITE_DESCRIPTION } from "../consts";
+import Showcase from "../components/Showcase.astro";
+import { getCollection } from "astro:content";
+import { convertPost, type Post } from "../models/Post";
+
+const posts: Post[] = (await getCollection("projects"))
+ .map(convertPost)
+ .sort((a, b) => b.pubDate.valueOf() - a.pubDate.valueOf());
---
@@ -13,38 +20,95 @@ import { SITE_TITLE, SITE_DESCRIPTION } from '../consts';
- 🧑🚀 Hello, Astronaut!
-
- Welcome to the official Astro blog starter template. This
- template serves as a lightweight, minimally-styled starting point for anyone looking to build
- a personal website, blog, or portfolio with Astro.
-
-
- This template comes with a few integrations already configured in your
- astro.config.mjs file. You can customize your setup with
- Astro Integrations to add tools like Tailwind,
- React, or Vue to your project.
-
- Here are a few ideas on how to get started with the template:
-
- - Edit this page in
src/pages/index.astro
- - Edit the site header items in
src/components/Header.astro
- - Add your name to the footer in
src/components/Footer.astro
- - Check out the included blog posts in
src/content/blog/
- - Customize the blog post page layout in
src/layouts/BlogPost.astro
-
-
- Have fun! If you get stuck, remember to read the docs
- or join us on Discord to ask questions.
-
-
- Looking for a blog template with a bit more personality? Check out astro-blog-template
- by Maxi Ferreira.
-
+
+ Hi 👋, my name is Anton
+
+ and I am passionate about a whole bunch of things
+
+
+
+
+
+
-
+
+
+