--- import { Image } from 'astro:assets'; import { getCollection } from 'astro:content'; import BaseLayout from '../../layouts/BaseLayout.astro'; import FormattedDate from '../../components/FormattedDate.astro'; import BlogCard from '../../components/BlogCard.astro'; import BlogFilters from '../../components/BlogFilters.astro'; import { SITE_DESCRIPTION, SITE_TITLE } from '../../consts'; // Fetch all posts sorted by date (newest first) const allPosts = (await getCollection('blog')).sort( (a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(), ); // Derive featured post (first post with featured: true, or fallback to latest) const featuredPost = allPosts.find((post) => post.data.featured) || allPosts[0]; // Editor's picks: next 3 posts after featured (excluding the featured one) //const editorPicks = allPosts // .filter((post) => post.id !== featuredPost?.id) // .slice(0, 3); // Latest posts: all posts for the filterable grid const latestPosts = allPosts; // Extract unique categories for filters const categories = [...new Set(allPosts.map((post) => post.data.category).filter(Boolean))] as string[]; ---
Back to Home

BLOG ARCHIVE

/// THOUGHTS & PROCESS

Deep dives into VFX production, technical pipelines, and creative process. Sharing lessons from the front lines of visual effects.

{featuredPost && (
SYS.BLOG /// FEATURED
)}
/// LATEST TRANSMISSIONS
{latestPosts.map((post, index) => (
))}