Infrastructure as code (#3)
* Moves website to website/ * Adds terraform gitignores * Terraform with AWS provider * Initialises Terraform * Locals and variables for provider * Fetches SSL certificate from ACM * S3 static website bucket * CloudFront distribution * Route53 records * Deployment workflow uses secret S3 bucket suffix * Adds README --------- Co-authored-by: Joe Carstairs <65492573+Sycamost@users.noreply.github.com>
This commit is contained in:
20
website/src/pages/blog/[...slug].astro
Normal file
20
website/src/pages/blog/[...slug].astro
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
import { type CollectionEntry, getCollection } from 'astro:content';
|
||||
import BlogPost from '../../layouts/BlogPost.astro';
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const posts = await getCollection('blog');
|
||||
return posts.map((post) => ({
|
||||
params: { slug: post.slug },
|
||||
props: post,
|
||||
}));
|
||||
}
|
||||
type Props = CollectionEntry<'blog'>;
|
||||
|
||||
const post = Astro.props;
|
||||
const { Content } = await post.render();
|
||||
---
|
||||
|
||||
<BlogPost {...post.data}>
|
||||
<Content />
|
||||
</BlogPost>
|
||||
17
website/src/pages/blog/index.astro
Normal file
17
website/src/pages/blog/index.astro
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
import BaseHead from '../../components/BaseHead.astro';
|
||||
import { SITE_TITLE, SITE_DESCRIPTION } from '../../consts';
|
||||
import BlogFeed from '../../components/BlogFeed.astro';
|
||||
---
|
||||
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<BaseHead title={SITE_TITLE} description={SITE_DESCRIPTION} />
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<BlogFeed headingLevel={1} />
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
14
website/src/pages/error.astro
Normal file
14
website/src/pages/error.astro
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
import Page from '../layouts/Page.astro';
|
||||
---
|
||||
|
||||
<Page title="Got lost?" description="Error page for Joe's personal website">
|
||||
<main>
|
||||
<h1>Got lost?</h1>
|
||||
|
||||
<p>
|
||||
If you’re on this page, something’s probably gone wrong. Try going to
|
||||
my <a href="/">homepage</a> instead.
|
||||
</p>
|
||||
</main>
|
||||
</Page>
|
||||
11
website/src/pages/index.astro
Normal file
11
website/src/pages/index.astro
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
import BlogFeed from '../components/BlogFeed.astro';
|
||||
import Me from '../components/Me.astro';
|
||||
import { SITE_TITLE, SITE_DESCRIPTION } from '../consts';
|
||||
import Page from '../layouts/Page.astro';
|
||||
---
|
||||
|
||||
<Page title={SITE_TITLE} description={SITE_DESCRIPTION}>
|
||||
<Me />
|
||||
<BlogFeed hideAuthor />
|
||||
</Page>
|
||||
17
website/src/pages/rss.xml.js
Normal file
17
website/src/pages/rss.xml.js
Normal file
@@ -0,0 +1,17 @@
|
||||
import rss from '@astrojs/rss';
|
||||
import { getCollection } from 'astro:content';
|
||||
import { SITE_TITLE, SITE_DESCRIPTION } from '../consts';
|
||||
|
||||
export async function GET(context) {
|
||||
const posts = await getCollection('blog');
|
||||
return rss({
|
||||
title: SITE_TITLE,
|
||||
description: SITE_DESCRIPTION,
|
||||
site: context.site,
|
||||
items: posts.map((post) => ({
|
||||
...post.data,
|
||||
link: `/blog/${post.slug}/`,
|
||||
pubDate: new Date(post.data.pubDate.year, post.data.pubDate.month - 1, post.data.pubDate.day),
|
||||
})),
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user