# nicholai-work-2026 Personal portfolio and blog site built with Astro. 🌐 [Live Site](https://nicholai.work) ## Tech Stack - **Astro** - Static site framework - **React** - Interactive components - **Tailwind CSS** - Styling - **MDX** - Markdown with JSX support - **Cloudflare Pages** - Hosting & deployment - **TypeScript** - Type safety ## Development ```bash # Install dependencies pnpm install # Start dev server pnpm dev # Build for production pnpm build # Preview production build pnpm preview # Deploy to Cloudflare Pages pnpm deploy ``` ## Creating Blog Posts Blog posts are created as MDX files in the `src/content/blog/` directory. The file name becomes the URL slug (e.g., `my-post.mdx` → `/blog/my-post/`). ### Step 1: Create the MDX File Create a new `.mdx` file in `src/content/blog/`: ```bash src/content/blog/my-new-post.mdx ``` ### Step 2: Add Frontmatter Every blog post requires frontmatter at the top of the file. Here's the complete schema: ```mdx --- title: 'Your Post Title' description: 'A brief description that appears in listings and meta tags' pubDate: 'Jan 15 2025' heroImage: '../../assets/your-image.jpg' featured: true category: 'Case Study' tags: ['VFX', 'Houdini', 'Nuke'] --- ``` #### Required Fields - **`title`** (string) - The post title - **`description`** (string) - Brief description for listings and SEO - **`pubDate`** (string) - Publication date in any format (e.g., `'Jan 15 2025'`, `'2025-01-15'`) #### Optional Fields - **`heroImage`** (image path) - Hero image for the post. Use relative path from the MDX file: - Images in `src/assets/`: `'../../assets/image.jpg'` - Images in `public/media/`: Use absolute path in content: `/media/image.jpg` - **`featured`** (boolean, default: `false`) - Set to `true` to feature on blog index page - **`category`** (string) - Category for filtering (e.g., `'Case Study'`, `'Tutorial'`, `'Thoughts'`) - **`tags`** (array of strings) - Tags for categorization and related posts - **`updatedDate`** (string) - Optional update date ### Step 3: Write Your Content Write your content using Markdown or MDX syntax. You can use: - Standard Markdown (headings, lists, links, etc.) - JSX components and HTML - Custom styling with Tailwind classes #### Example: Adding Videos ```mdx
/// VIDEO CAPTION
/// CAPTION 1
/// CAPTION 2
/// PROJECT VIDEO