mitsch
Test

Test

Is this going to work? I’m really curious what this will look like on my website!

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.

Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.

Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.

Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis.

At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam

import { client } from '@/sanity/client'
import Link from 'next/link'
import Header from '@/components/Header'
import Footer from '@/components/Footer'

type Post = {
_id: string
title: string
slug: { current: string }
excerpt: string
publishedAt: string
}

export const metadata = {
title: 'Blog',
description: 'Thoughts on web development, design, and the space where code meets craft — by Miriam Schwartz.',
}

export default async function BlogPage() {
const posts = await client.fetch<Post[]>(
`*[_type == "post"] | order(publishedAt desc) {
_id, title, slug, excerpt, publishedAt
}`
)

return (
<div className="min-h-screen flex flex-col">
<Header logoColor="black" burgerColor="black" />
<main className="flex-1 flex flex-col justify-center px-8 pt-48 pb-section max-w-xl mx-auto w-full">
<h1 className="text-6xl md:text-7xl font-bold uppercase tracking-tight mb-16">
Blog
</h1>

{posts.length === 0 ? (
<p className="text-gray-400 uppercase tracking-widest text-sm">
No posts yet — check back soon.
</p>
) : (
<ul className="flex flex-col gap-16">
{posts.map((post) => (
<li key={post._id}>
<Link href={`/blog/${post.slug.current}`} className="group">
<p className="text-xs uppercase tracking-widest text-gray-400 mb-2">
{post.publishedAt
? new Date(post.publishedAt).toLocaleDateString('en-GB', {
day: 'numeric',
month: 'long',
year: 'numeric',
})
: 'Unpublished'}
</p>
<h2 className="text-3xl font-bold uppercase tracking-tight group-hover:text-raspberry transition-colors mb-3">
{post.title}
</h2>
{post.excerpt && (
<p className="text-gray-600 leading-relaxed">
{post.excerpt}
</p>
)}
<span className="inline-block mt-4 text-sm uppercase tracking-widest font-bold text-black group-hover:text-raspberry transition-colors">
Read more →
</span>
</Link>
</li>
))}
</ul>
)}
</main>
<Footer />
</div>
)
}

mitsch

Frontend Web- & App-Entwicklung aus Hamburg — Code trifft Kunst.

Bleib auf dem Laufenden

Gelegentliche Updates über Projekte und Neuigkeiten aus dem Studio.

© 2026 Miriam Schwartz. Alle Rechte vorbehalten.

Gebaut mit Next.js · Gehostet auf Vercel