--- import Layout from '../layouts/Layout.astro'; import PostList from '../components/react/PostList'; import EditableText from '../components/react/EditableText'; import AssetsButton from '../components/react/AssetsButton'; import { getSiteMode, copy } from '../lib/siteMode'; const siteMode = getSiteMode(); const c = copy(siteMode); const API_URL = process.env.PUBLIC_API_URL || 'http://localhost:3000'; interface CoverImage { url: string; alt: string; w?: number; h?: number; } interface Post { slug: string; date: string; title?: string; summary?: string; excerpt?: string; tags: string[]; draft: boolean; reading_time: number; cover_image?: CoverImage; image_count: number; } let posts: Post[] = []; let error = ''; let siteConfig = { welcome_title: "Works on view", welcome_subtitle: "An ongoing arrangement of pieces, sketches, and stray observations." }; const cookieHeader = Astro.request.headers.get('cookie') ?? ''; const fetchHeaders: HeadersInit = cookieHeader ? { cookie: cookieHeader } : {}; try { const [postsRes, configRes] = await Promise.all([ fetch(`${API_URL}/api/posts`, { headers: fetchHeaders }), fetch(`${API_URL}/api/config`) ]); if (postsRes.ok) { posts = await postsRes.json(); } else { error = 'Failed to fetch works'; } if (configRes.ok) { siteConfig = await configRes.json(); } } catch (e) { const cause = (e as any)?.cause; error = `Could not connect to backend at ${API_URL}: ${e instanceof Error ? e.message : String(e)}${cause ? ' (Cause: ' + (cause.message || cause.code || JSON.stringify(cause)) + ')' : ''}`; console.error(error); } const isAdmin = Astro.cookies.get('admin_session')?.value === '1'; --- {posts[0]?.cover_image?.url && ( )}

{isAdmin ? ( ) : siteConfig.welcome_title}

{isAdmin ? ( ) : siteConfig.welcome_subtitle}

{isAdmin && ( )}
{error && (

{error}

)} {posts.length === 0 && !error && (
Nothing here yet

No posts to show.

Check back soon.

{isAdmin && ( Create the first post )}
)} {posts.length > 0 && }