Start implementation for blog posts
This commit is contained in:
@@ -19,6 +19,9 @@ const isEnglish = Astro.currentLocale === "en";
|
|||||||
|
|
||||||
<nav>
|
<nav>
|
||||||
<ul>
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a class="hoverable" href="/blog">Blog</a>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="hoverable" href="/imprint">Imprint</a>
|
<a class="hoverable" href="/imprint">Imprint</a>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
// 1. Import utilities from `astro:content`
|
||||||
|
import { defineCollection, z } from 'astro:content';
|
||||||
|
|
||||||
|
// 2. Import loader(s)
|
||||||
|
import { glob, file } from 'astro/loaders';
|
||||||
|
|
||||||
|
// 3. Define your collection(s)
|
||||||
|
const blog = defineCollection({
|
||||||
|
loader: glob({ pattern: "**/*.md", base: "./src/data/blog" }),
|
||||||
|
});
|
||||||
|
|
||||||
|
// 4. Export a single `collections` object to register your collection(s)
|
||||||
|
export const collections = { blog };
|
||||||
@@ -2,9 +2,12 @@
|
|||||||
import Cursor from "../components/Cursor.astro";
|
import Cursor from "../components/Cursor.astro";
|
||||||
import GlobalStyles from "../components/GlobalStyles.astro";
|
import GlobalStyles from "../components/GlobalStyles.astro";
|
||||||
import Header from "../components/Header.astro";
|
import Header from "../components/Header.astro";
|
||||||
import Logo from "../assets/ci/icon-only.svg";
|
|
||||||
|
|
||||||
const { title } = Astro.props;
|
const { pageTitle } = Astro.props;
|
||||||
|
const isDev = import.meta.env.DEV;
|
||||||
|
const title = pageTitle
|
||||||
|
? `${pageTitle} | Tideshift Digital`
|
||||||
|
: "Tideshift Digital - Building The Web On Your Terms";
|
||||||
---
|
---
|
||||||
|
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
@@ -15,7 +18,7 @@ const { title } = Astro.props;
|
|||||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||||
<meta name="generator" content={Astro.generator} />
|
<meta name="generator" content={Astro.generator} />
|
||||||
<title>
|
<title>
|
||||||
Tideshift Digital - {title || "Building The Web On Your Terms"}
|
{title}
|
||||||
</title>
|
</title>
|
||||||
<meta
|
<meta
|
||||||
name="description"
|
name="description"
|
||||||
@@ -28,11 +31,7 @@ const { title } = Astro.props;
|
|||||||
<meta name="author" content="Michael Rieger" />
|
<meta name="author" content="Michael Rieger" />
|
||||||
<meta name="application-name" content="Tideshift Digital" />
|
<meta name="application-name" content="Tideshift Digital" />
|
||||||
<link rel="canonical" href="https://tideshiftdigital.com/" />
|
<link rel="canonical" href="https://tideshiftdigital.com/" />
|
||||||
<meta
|
<meta property="og:title" content={title} />
|
||||||
property="og:title"
|
|
||||||
content={"Tideshift Digital - " + title ||
|
|
||||||
"Building The Web On Your Terms"}
|
|
||||||
/>
|
|
||||||
<meta
|
<meta
|
||||||
property="og:description"
|
property="og:description"
|
||||||
content="From concept to launch — websites, apps, and digital solutions that work hard, so you can play hard. Based in Vienna, we turn ideas into live products."
|
content="From concept to launch — websites, apps, and digital solutions that work hard, so you can play hard. Based in Vienna, we turn ideas into live products."
|
||||||
@@ -42,22 +41,23 @@ const { title } = Astro.props;
|
|||||||
<meta property="og:image" content="/assets/img/og-image.jpg" />
|
<meta property="og:image" content="/assets/img/og-image.jpg" />
|
||||||
<meta property="og:site_name" content="Tideshift Digital" />
|
<meta property="og:site_name" content="Tideshift Digital" />
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
<meta
|
<meta name="twitter:title" content={title} />
|
||||||
name="twitter:title"
|
|
||||||
content={"Tideshift Digital - " + title ||
|
|
||||||
"Building The Web On Your Terms"}
|
|
||||||
/>
|
|
||||||
<meta
|
<meta
|
||||||
name="twitter:description"
|
name="twitter:description"
|
||||||
content="From concept to launch — websites, apps, and digital solutions that work hard, so you can play hard. Based in Vienna."
|
content="From concept to launch — websites, apps, and digital solutions that work hard, so you can play hard. Based in Vienna."
|
||||||
/>
|
/>
|
||||||
<meta name="twitter:image" content="/assets/img/og-image.jpg" />
|
<meta name="twitter:image" content="/assets/img/og-image.jpg" />
|
||||||
|
|
||||||
|
{
|
||||||
|
!isDev ? (
|
||||||
<script
|
<script
|
||||||
is:inline
|
is:inline
|
||||||
defer
|
defer
|
||||||
src="https://analytics.tideshiftdigital.com/script.js"
|
src="https://analytics.tideshiftdigital.com/script.js"
|
||||||
data-website-id="00c032c0-8fd5-436c-a210-9df51c071c7b"></script>
|
data-website-id="00c032c0-8fd5-436c-a210-9df51c071c7b"
|
||||||
|
/>
|
||||||
|
) : null
|
||||||
|
}
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<GlobalStyles />
|
<GlobalStyles />
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
import Cursor from "../components/Cursor.astro";
|
||||||
|
import GlobalStyles from "../components/GlobalStyles.astro";
|
||||||
|
|
||||||
|
const isDev = import.meta.env.DEV;
|
||||||
|
---
|
||||||
|
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||||
|
<meta name="generator" content={Astro.generator} />
|
||||||
|
<title>Oops, this is weird</title>
|
||||||
|
<meta name="author" content="Michael Rieger" />
|
||||||
|
<meta name="application-name" content="Tideshift Digital" />
|
||||||
|
<link rel="canonical" href="https://tideshiftdigital.com/" />
|
||||||
|
{
|
||||||
|
!isDev ? (
|
||||||
|
<script
|
||||||
|
is:inline
|
||||||
|
defer
|
||||||
|
src="https://analytics.tideshiftdigital.com/script.js"
|
||||||
|
data-website-id="00c032c0-8fd5-436c-a210-9df51c071c7b"
|
||||||
|
/>
|
||||||
|
) : null
|
||||||
|
}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<GlobalStyles />
|
||||||
|
|
||||||
|
<slot />
|
||||||
|
|
||||||
|
<Cursor />
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
width: 100%;
|
||||||
|
height: 100dvh;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
const { frontmatter } = Astro.props;
|
||||||
|
---
|
||||||
|
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<h1>{frontmatter.title}</h1>
|
||||||
|
<p>Written by {frontmatter.author}</p>
|
||||||
|
<slot />
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
import ErrorLayout from "../layouts/ErrorLayout.astro";
|
||||||
|
---
|
||||||
|
|
||||||
|
<ErrorLayout pageTitle="Building The Web On Your Terms">
|
||||||
|
<div class="error">
|
||||||
|
<p class="number">404</p>
|
||||||
|
<h1 class="title">Page not found</h1>
|
||||||
|
<p class="description">Seems like you got lost in the waves</p>
|
||||||
|
<a href="/">Back to home</a>
|
||||||
|
</div>
|
||||||
|
</ErrorLayout>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.error {
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.number {
|
||||||
|
font-size: clamp(3rem, 20vw + 2rem, 12rem);
|
||||||
|
line-height: 1;
|
||||||
|
font-weight: bold;
|
||||||
|
color: var(--clr-ts-warm-red);
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
import BaseLayout from "../layouts/BaseLayout.astro";
|
||||||
|
const allPosts = Object.values(
|
||||||
|
import.meta.glob("./posts/*.md", { eager: true }),
|
||||||
|
);
|
||||||
|
const pageTitle = "My Astro Learning Blog";
|
||||||
|
---
|
||||||
|
|
||||||
|
<BaseLayout pageTitle={pageTitle}>
|
||||||
|
<p>This is where I will post about my journey learning Astro.</p>
|
||||||
|
<ul>
|
||||||
|
{
|
||||||
|
allPosts.map((post: any) => (
|
||||||
|
<li>
|
||||||
|
<a href={post.url}>{post.frontmatter.title}</a>
|
||||||
|
</li>
|
||||||
|
))
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
</BaseLayout>
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
---
|
---
|
||||||
import Layout from "../layouts/Layout.astro";
|
import BaseLayout from "../layouts/BaseLayout.astro";
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title="Imprint">
|
<BaseLayout pageTitle="Imprint">
|
||||||
<main class="imprint">
|
<main class="imprint">
|
||||||
<h1>Imprint</h1>
|
<h1>Imprint</h1>
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ import Layout from "../layouts/Layout.astro";
|
|||||||
<p>E-Mail: office@tideshiftdigital.com</p>
|
<p>E-Mail: office@tideshiftdigital.com</p>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
</Layout>
|
</BaseLayout>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
h1 {
|
h1 {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
---
|
---
|
||||||
import Hero from "../components/Hero.astro";
|
import Hero from "../components/Hero.astro";
|
||||||
import Layout from "../layouts/Layout.astro";
|
import BaseLayout from "../layouts/BaseLayout.astro";
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title="Building The Web On Your Terms">
|
<BaseLayout pageTitle="Building The Web On Your Terms">
|
||||||
<Hero />
|
<Hero />
|
||||||
</Layout>
|
</BaseLayout>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
---
|
---
|
||||||
import Layout from "../layouts/Layout.astro";
|
import BaseLayout from "../layouts/BaseLayout.astro";
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title="Privacy Policy">
|
<BaseLayout pageTitle="Privacy Policy">
|
||||||
<main class="content">
|
<main class="content">
|
||||||
<h1>Privacy Policy</h1>
|
<h1>Privacy Policy</h1>
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ import Layout from "../layouts/Layout.astro";
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
</Layout>
|
</BaseLayout>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
* + * {
|
* + * {
|
||||||
|
|||||||
Reference in New Issue
Block a user