diff --git a/astro.config.mjs b/astro.config.mjs index d40afbe..e763f91 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -12,7 +12,7 @@ import react from '@astrojs/react'; // https://astro.build/config export default defineConfig({ - site: 'https://example.com', + site: 'https://nicholai.work', integrations: [mdx(), sitemap(), react()], adapter: cloudflare({ diff --git a/dev/blog_template.mdx b/dev/blog_template.mdx new file mode 100644 index 0000000..444b9ab --- /dev/null +++ b/dev/blog_template.mdx @@ -0,0 +1,30 @@ +--- +title: 'Your Blog Post Title Here' +description: 'A compelling one-sentence description that summarizes the blog post. This appears in meta tags and previews.' +pubDate: 'Jan 1 2024' +heroImage: '../../assets/blog-placeholder-1.jpg' +featured: true +category: 'Case Study' +tags: ['VFX', 'Houdini', 'Nuke', 'AI/ML', 'Brand Film'] +--- + + +[Write your opening paragraph here. Introduce the project, collaboration, or topic. This should be engaging and provide context for what follows.] + + +
+ +

/// FINAL FILM

+
+ + + + diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..9e22b54 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,5 @@ +User-agent: * +Allow: / + +Sitemap: https://nicholai.work/sitemap-index.xml + diff --git a/public/media/nicholai-closeup-portrait.JPEG b/src/assets/nicholai-closeup-portrait.JPEG similarity index 100% rename from public/media/nicholai-closeup-portrait.JPEG rename to src/assets/nicholai-closeup-portrait.JPEG diff --git a/public/media/nicholai-medium-portrait.jpg b/src/assets/nicholai-medium-portrait.jpg similarity index 100% rename from public/media/nicholai-medium-portrait.jpg rename to src/assets/nicholai-medium-portrait.jpg diff --git a/src/components/BaseHead.astro b/src/components/BaseHead.astro index c98b9e5..e675332 100644 --- a/src/components/BaseHead.astro +++ b/src/components/BaseHead.astro @@ -3,23 +3,110 @@ // all pages through the use of the component. import '../styles/global.css'; import type { ImageMetadata } from 'astro'; -import FallbackImage from '../assets/blog-placeholder-1.jpg'; -import { SITE_TITLE } from '../consts'; +import DefaultOGImage from '../assets/nicholai-medium-portrait.jpg'; +import { SITE_TITLE, SITE_DESCRIPTION, SOCIAL_LINKS } from '../consts'; interface Props { title: string; description: string; image?: ImageMetadata; + type?: 'website' | 'article'; + publishedTime?: Date; + modifiedTime?: Date; } const canonicalURL = new URL(Astro.url.pathname, Astro.site); -const { title, description, image = FallbackImage } = Astro.props; +const { + title, + description, + image = DefaultOGImage, + type = 'website', + publishedTime, + modifiedTime, +} = Astro.props; + +// Structured Data - Person Schema (optimized for rich results) +const personSchema = { + "@context": "https://schema.org", + "@type": "Person", + "@id": "https://nicholai.work/#person", + "name": "Nicholai Vogel", + "givenName": "Nicholai", + "familyName": "Vogel", + "url": "https://nicholai.work", + "email": SOCIAL_LINKS.email, + "image": new URL(DefaultOGImage.src, Astro.site).toString(), + "jobTitle": "VFX Supervisor", + "description": "VFX Supervisor and Houdini Artist specializing in commercial and music video visual effects", + "worksFor": { + "@type": "Organization", + "name": "Biohazard VFX", + "url": "https://biohazardvfx.com" + }, + "knowsAbout": [ + "Visual Effects", + "VFX Supervision", + "Compositing", + "Houdini", + "SideFX Houdini", + "Nuke", + "The Foundry Nuke", + "3D Animation", + "AI/ML Integration", + "Motion Graphics", + "Commercial VFX", + "Music Video VFX" + ], + "sameAs": [ + "https://instagram.com/nicholai.exe/", + SOCIAL_LINKS.linkedin, + "https://biohazardvfx.com" + ], + "alumniOf": [], + "award": [] +}; + +// Structured Data - WebSite Schema with potential search action +const websiteSchema = { + "@context": "https://schema.org", + "@type": "WebSite", + "@id": "https://nicholai.work/#website", + "name": SITE_TITLE, + "description": SITE_DESCRIPTION, + "url": "https://nicholai.work", + "inLanguage": "en-US", + "author": { + "@id": "https://nicholai.work/#person" + }, + "publisher": { + "@id": "https://nicholai.work/#person" + } +}; + +// Structured Data - Professional Service (helps with local/service searches) +const professionalServiceSchema = { + "@context": "https://schema.org", + "@type": "ProfessionalService", + "@id": "https://nicholai.work/#service", + "name": "Nicholai Vogel - VFX Services", + "description": "Professional visual effects services including VFX supervision, Houdini FX, compositing, and AI integration for commercials and music videos", + "url": "https://nicholai.work", + "provider": { + "@id": "https://nicholai.work/#person" + }, + "areaServed": "Worldwide", + "serviceType": ["VFX Supervision", "Visual Effects", "Compositing", "3D Animation", "Motion Graphics"] +}; --- + + + + @@ -33,15 +120,24 @@ const { title, description, image = FallbackImage } = Astro.props; /> - - - + + + + href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;800&family=Space+Mono:wght@400;700&display=swap" + rel="stylesheet" + media="print" + onload="this.media='all'" +/> + - - + + @@ -52,15 +148,25 @@ const { title, description, image = FallbackImage } = Astro.props; - + + + +{publishedTime && } +{modifiedTime && } - - - - - + + + + + + + + +