feat: some stuff
Some checks failed
Deploy to SFTP Server / build (push) Failing after 7m54s

This commit is contained in:
max_richter 2024-04-06 18:03:45 +02:00
parent 74ab286f15
commit 38a7f83096
8 changed files with 40 additions and 12 deletions

View File

@ -13,6 +13,7 @@ RUN npm install -g pnpm
# Display installed versions # Display installed versions
RUN node --version && \ RUN node --version && \
npm --version && \ npm --version && \
tar --version && \
git --version && \ git --version && \
git-lfs version && \ git-lfs version && \
pnpm --version pnpm --version

View File

@ -7,7 +7,9 @@ const blogCollection = defineCollection({
cover: image().refine((img) => img.width >= 720, { cover: image().refine((img) => img.width >= 720, {
message: "Cover image must be at least 720 pixels wide!", message: "Cover image must be at least 720 pixels wide!",
}).optional(), }).optional(),
links: z.array(z.array(z.string())).optional(),
coverAlt: z.string().optional(), coverAlt: z.string().optional(),
toc: z.boolean().optional(),
description: z.string().optional(), description: z.string().optional(),
icon: z.string().optional(), icon: z.string().optional(),
draft: z.boolean().optional(), draft: z.boolean().optional(),

View File

@ -4,13 +4,14 @@ date: 2023-08-21
cover: ./images/bg.jpg cover: ./images/bg.jpg
icon: "/projects/invoice.svg" icon: "/projects/invoice.svg"
tags: ["sveltekit", "unocss", "prisma", "sqlite"] tags: ["sveltekit", "unocss", "prisma", "sqlite"]
draft: true toc: true
links: links:
[ [
["live", "https://invoice.app.max-richter.dev"], ["live", "https://invoice.app.max-richter.dev"],
["git", "https://git.max-richter.dev/max/invoice"], ["git", "https://git.max-richter.dev/max/invoice"],
] ]
--- ---
In meiner Freizeit übernehme ich gerne kleinere Aufträge und erledige Botengänge, Aufbauten und Abholungen für andere. In meiner Freizeit übernehme ich gerne kleinere Aufträge und erledige Botengänge, Aufbauten und Abholungen für andere.
Ein unvermeidlicher Bestandteil dieser Tätigkeiten ist das Erstellen von Rechnungen im PDF-Format. Anfangs habe ich mich dem manuellen Prozess hingegeben und die ersten Rechnungen in Figma erstellt. Doch wie es unter Programmierer*innen oft heißt: Ein unvermeidlicher Bestandteil dieser Tätigkeiten ist das Erstellen von Rechnungen im PDF-Format. Anfangs habe ich mich dem manuellen Prozess hingegeben und die ersten Rechnungen in Figma erstellt. Doch wie es unter Programmierer*innen oft heißt:

View File

@ -5,13 +5,11 @@ cover: ./images/plantarium.png
featured: true featured: true
links: [["website", "https://plant.max-richter.dev"], ["git", "https://github.com/jim-fx/plantarium"]] links: [["website", "https://plant.max-richter.dev"], ["git", "https://github.com/jim-fx/plantarium"]]
tags: ["Web", "3D", "Svelte", "Node-Systeme"] tags: ["Web", "3D", "Svelte", "Node-Systeme"]
draft: true draft: false
--- ---
# Einführung # Einführung
Plantarium ist wohl das Hobby Projekt, mit dem ich am meisten Zeit verbracht habe. Als Waldorfschüler und Dorfkind ein bisschen Klischeemäßig, ich weiß, aber der Aufbau und die Ästhetik von Pflanzen haben mich schon immer begeistert. Außerdem bin ich bekennender [Blender](https://blender.org) (das 3D Programm) Fan und aus diesen beiden Interessen entstand dieses Projekt.
Plantarium ist eine WebApp mit der Nutzer 3D Model von Pflanzen generieren können. Der erste Prototyp war innerhalb von zwei Wochen intensiver Arbeit fertig und sah ungefähr so aus: Plantarium ist eine WebApp mit der Nutzer 3D Model von Pflanzen generieren können. Der erste Prototyp war innerhalb von zwei Wochen intensiver Arbeit fertig und sah ungefähr so aus:
import ImageSlider from "@components/ImageSlider.svelte" import ImageSlider from "@components/ImageSlider.svelte"

View File

@ -7,19 +7,22 @@ type CustomProps = {
layout?: "normal" | "transparent"; layout?: "normal" | "transparent";
backlink?: string; backlink?: string;
}; };
type Props = CollectionEntry<"blog">["data"] & CustomProps; type Props = CollectionEntry<"blog"> & CustomProps;
const { title, date, _layout, backlink = "/blog" } = Astro.props; const { headings, data } = Astro.props;
console.log(Astro.props);
const { title, date, links, _layout, backlink = "/blog" } = data;
const path = useTranslatedPath(Astro.url); const path = useTranslatedPath(Astro.url);
--- ---
<Layout title={title}> <Layout title={title}>
<div <div
class="top-info flex items-center place-content-between opacity-50 m-y-4" class="top-info flex items-center place-content-between opacity-50 m-y-2"
> >
<a class="flex items-center gap-1" href={path(backlink)} <a class="flex items-center gap-1" href={path(backlink)}
><span class="i-tabler-arrow-left"></span> overview</a ><span class="i-tabler-arrow-left"></span> overview</a
> >
<div class="date"> <div class="date">
{ {
date.toLocaleString("en-US", { date.toLocaleString("en-US", {
@ -30,8 +33,31 @@ const path = useTranslatedPath(Astro.url);
} }
</div> </div>
</div> </div>
<article class={`layout-${_layout} flex flex-col gap-2`}> <article class={`layout-${_layout} flex flex-col gap-4`}>
<h1 class="text-4xl my-4">{title}</h1> <div class="mb-4 flex flex-col gap-4">
<h1 class="text-4xl">
{title}
</h1>
<div class="toc"></div>
{
links?.length && (
<div class="flex gap-4">
{links.map(([title, url]: string[]) => (
<a href={url} class="flex external items-center gap-[4px]">
{title}
{title === "git" ? (
<span class="i-tabler-brand-git w-4 h-4" />
) : (
<span class="i-tabler-external-link w-4 h-3" />
)}
</a>
))}
</div>
)
}
</div>
<slot /> <slot />
</article> </article>
</Layout> </Layout>

View File

@ -32,6 +32,6 @@ if (!page) {
const { Content } = await page.render(); const { Content } = await page.render();
--- ---
<Post {...page.data}> <Post {...page}>
<Content /> <Content />
</Post> </Post>

View File

@ -32,6 +32,6 @@ if (!page) {
const { Content } = await page.render(); const { Content } = await page.render();
--- ---
<Post {...page.data} backlink="/photos"> <Post {...page} backlink="/photos">
<Content /> <Content />
</Post> </Post>

View File

@ -32,6 +32,6 @@ if (!page) {
const { Content } = await page.render(); const { Content } = await page.render();
--- ---
<Post {...page.data} backlink="/projects"> <Post {...page} backlink="/projects">
<Content /> <Content />
</Post> </Post>