<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title><![CDATA[Small Bites]]></title>
        <description><![CDATA[Bite-sized thoughts on technology, product, and growth]]></description>
        <link>https://www.smallbitesbyjack.com</link>
        <generator>RSS for Node</generator>
        <lastBuildDate>Wed, 15 Apr 2026 20:21:29 GMT</lastBuildDate>
        <atom:link href="https://www.smallbitesbyjack.com/rss" rel="self" type="application/rss+xml"/>
        <pubDate>Wed, 15 Apr 2026 20:21:29 GMT</pubDate>
        <copyright><![CDATA[2026 Small Bites]]></copyright>
        <language><![CDATA[en]]></language>
        <ttl>60</ttl>
        <item>
            <title><![CDATA[Working with Images in Your Blog Posts]]></title>
            <description><![CDATA[A guide to adding and formatting images in your markdown blog posts, including local and external images.]]></description>
            <link>https://www.smallbitesbyjack.com/posts/image-test</link>
            <guid isPermaLink="false">https://www.smallbitesbyjack.com/posts/image-test</guid>
            <category><![CDATA[tutorial]]></category>
            <category><![CDATA[markdown]]></category>
            <category><![CDATA[images]]></category>
            <pubDate>Tue, 30 Jan 2024 00:00:00 GMT</pubDate>
            <content:encoded>&lt;h1&gt;Working with Images in Your Blog Posts&lt;/h1&gt;
&lt;p&gt;This post demonstrates how to add images to your markdown blog posts. You can include images from various sources and they&apos;ll be displayed beautifully in your blog.&lt;/p&gt;
&lt;h2&gt;External Images from URLs&lt;/h2&gt;
&lt;p&gt;You can embed images directly from external URLs. Here&apos;s an example using an Unsplash image:&lt;/p&gt;
&lt;figure class=&quot;prose-image&quot;&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=800&amp;#x26;h=400&amp;#x26;fit=crop&quot; alt=&quot;A beautiful landscape from Unsplash&quot; loading=&quot;lazy&quot;&gt;&lt;/figure&gt;
&lt;h2&gt;Different Image Sizes&lt;/h2&gt;
&lt;h3&gt;Full Width Image&lt;/h3&gt;
&lt;figure class=&quot;prose-image&quot;&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1519904981063-b0cf448d479e?w=1200&amp;#x26;h=600&amp;#x26;fit=crop&quot; alt=&quot;Full width mountain view&quot; loading=&quot;lazy&quot;&gt;&lt;/figure&gt;
&lt;h3&gt;Medium Size Image&lt;/h3&gt;
&lt;figure class=&quot;prose-image&quot;&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1495474472287-4d71bcdd2085?w=600&amp;#x26;h=400&amp;#x26;fit=crop&quot; alt=&quot;Coffee and notebook&quot; loading=&quot;lazy&quot;&gt;&lt;/figure&gt;
&lt;h3&gt;Small Inline Image&lt;/h3&gt;
&lt;p&gt;Here&apos;s a smaller image that can be used inline with text: &lt;figure class=&quot;prose-image&quot;&gt;&lt;img$1 loading=&quot;lazy&quot; /&gt;&lt;/figure&gt; - perfect for adding visual interest to your paragraphs.&lt;/p&gt;
&lt;h2&gt;Images with Alt Text&lt;/h2&gt;
&lt;p&gt;Always include descriptive alt text for accessibility:&lt;/p&gt;
&lt;figure class=&quot;prose-image&quot;&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1498050108023-c5249f4df085?w=800&amp;#x26;h=500&amp;#x26;fit=crop&quot; alt=&quot;Developer working on a laptop with multiple screens showing code&quot; loading=&quot;lazy&quot;&gt;&lt;/figure&gt;
&lt;h2&gt;Multiple Images in a Row&lt;/h2&gt;
&lt;p&gt;You can place multiple images to create a gallery effect:&lt;/p&gt;
&lt;div class=&quot;prose-image-gallery&quot;&gt;&lt;figure class=&quot;prose-gallery-image&quot;&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1507525428034-b723cf961d3e?w=400&amp;#x26;h=300&amp;#x26;fit=crop&quot; alt=&quot;Beach sunset&quot; loading=&quot;lazy&quot;&gt;&lt;/figure&gt;&lt;figure class=&quot;prose-gallery-image&quot;&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1439853949559-2b55e0f6e0d8?w=400&amp;#x26;h=300&amp;#x26;fit=crop&quot; alt=&quot;Mountain lake&quot; loading=&quot;lazy&quot;&gt;&lt;/figure&gt;&lt;figure class=&quot;prose-gallery-image&quot;&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1511497584788-876760111969?w=400&amp;#x26;h=300&amp;#x26;fit=crop&quot; alt=&quot;Forest path&quot; loading=&quot;lazy&quot;&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2&gt;Best Practices for Blog Images&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Use descriptive alt text&lt;/strong&gt; - This helps with SEO and accessibility&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimize image sizes&lt;/strong&gt; - Use appropriate dimensions for your content&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choose relevant images&lt;/strong&gt; - Images should enhance your content, not distract from it&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consider loading performance&lt;/strong&gt; - Use lazy loading for better page speed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maintain consistency&lt;/strong&gt; - Use similar styles and quality across your posts&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Technical Implementation&lt;/h2&gt;
&lt;p&gt;In this blog, images are automatically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Centered in the content area&lt;/li&gt;
&lt;li&gt;Given rounded corners for a modern look&lt;/li&gt;
&lt;li&gt;Styled with a subtle shadow for depth&lt;/li&gt;
&lt;li&gt;Made responsive to fit different screen sizes&lt;/li&gt;
&lt;li&gt;Lazy loaded for better performance&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Using Local Images&lt;/h2&gt;
&lt;p&gt;You can also use local images by placing them in the &lt;code&gt;public&lt;/code&gt; folder:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;![Local image](/images/my-image.jpg)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Adding images to your blog posts is simple with markdown. Just use the standard markdown image syntax, and the blog will handle the rest - making your images look great on all devices!&lt;/p&gt;
</content:encoded>
            <author>Jack</author>
        </item>
        <item>
            <title><![CDATA[The State of Modern Web Development in 2024]]></title>
            <description><![CDATA[Exploring the latest trends, tools, and best practices shaping web development today. From AI-assisted coding to edge computing.]]></description>
            <link>https://www.smallbitesbyjack.com/posts/modern-web-development</link>
            <guid isPermaLink="false">https://www.smallbitesbyjack.com/posts/modern-web-development</guid>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[trends]]></category>
            <category><![CDATA[ai]]></category>
            <pubDate>Thu, 25 Jan 2024 00:00:00 GMT</pubDate>
            <content:encoded>&lt;h1&gt;The State of Modern Web Development in 2024&lt;/h1&gt;
&lt;p&gt;Web development continues to evolve at a breakneck pace. New frameworks emerge, paradigms shift, and what was best practice yesterday might be outdated today. Let&apos;s explore the current landscape and what it means for developers.&lt;/p&gt;
&lt;h2&gt;The Rise of AI-Assisted Development&lt;/h2&gt;
&lt;p&gt;AI has fundamentally changed how we write code:&lt;/p&gt;
&lt;h3&gt;GitHub Copilot and Beyond&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Autocomplete on steroids&lt;/strong&gt; - Full function generation from comments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bug detection&lt;/strong&gt; - AI spots potential issues before runtime&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code review assistance&lt;/strong&gt; - Automated suggestions for improvements&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Example: AI-Generated React Component&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-jsx&quot;&gt;// AI can generate this entire component from a simple comment:
// Create a card component with title, description, and image

function Card({ title, description, imageUrl }) {
  return (
    &amp;#x3C;div className=&quot;rounded-lg shadow-md overflow-hidden&quot;&gt;
      &amp;#x3C;img 
        src={imageUrl} 
        alt={title}
        className=&quot;w-full h-48 object-cover&quot;
      /&gt;
      &amp;#x3C;div className=&quot;p-4&quot;&gt;
        &amp;#x3C;h3 className=&quot;text-xl font-bold mb-2&quot;&gt;{title}&amp;#x3C;/h3&gt;
        &amp;#x3C;p className=&quot;text-gray-600&quot;&gt;{description}&amp;#x3C;/p&gt;
      &amp;#x3C;/div&gt;
    &amp;#x3C;/div&gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Edge Computing and Serverless&lt;/h2&gt;
&lt;p&gt;The edge is no longer just a buzzword:&lt;/p&gt;
&lt;h3&gt;Benefits of Edge Deployment&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reduced latency&lt;/strong&gt; - Serve content from locations nearest to users&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better scalability&lt;/strong&gt; - Automatic scaling without infrastructure management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost efficiency&lt;/strong&gt; - Pay only for what you use&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Global distribution&lt;/strong&gt; - Deploy once, run everywhere&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Popular Edge Platforms&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vercel Edge Functions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare Workers&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Netlify Edge Functions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deno Deploy&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The TypeScript Takeover&lt;/h2&gt;
&lt;p&gt;TypeScript has become the default choice for serious JavaScript projects:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-typescript&quot;&gt;interface User {
  id: string;
  name: string;
  email: string;
  createdAt: Date;
}

async function fetchUser(id: string): Promise&amp;#x3C;User&gt; {
  const response = await fetch(`/api/users/${id}`);
  if (!response.ok) {
    throw new Error(&apos;User not found&apos;);
  }
  return response.json();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Why TypeScript Wins&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Catch errors at compile time&lt;/strong&gt; - Not in production&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better IDE support&lt;/strong&gt; - Autocomplete and refactoring&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-documenting code&lt;/strong&gt; - Types serve as inline documentation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Easier refactoring&lt;/strong&gt; - Change with confidence&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Component-Driven Development&lt;/h2&gt;
&lt;p&gt;Building UIs as composable components is now standard:&lt;/p&gt;
&lt;h3&gt;Design Systems&lt;/h3&gt;
&lt;p&gt;Modern teams build their own component libraries:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Consistent UI across applications&lt;/li&gt;
&lt;li&gt;Faster development through reuse&lt;/li&gt;
&lt;li&gt;Better collaboration between design and development&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Tools Leading the Way&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Storybook&lt;/strong&gt; - Component development environment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bit&lt;/strong&gt; - Component sharing and collaboration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Figma Dev Mode&lt;/strong&gt; - Design to code workflow&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Performance Obsession&lt;/h2&gt;
&lt;p&gt;Web performance is more critical than ever:&lt;/p&gt;
&lt;h3&gt;Core Web Vitals&lt;/h3&gt;
&lt;p&gt;Google&apos;s metrics that impact SEO:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LCP (Largest Contentful Paint)&lt;/strong&gt; - Loading performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FID (First Input Delay)&lt;/strong&gt; - Interactivity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CLS (Cumulative Layout Shift)&lt;/strong&gt; - Visual stability&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Optimization Techniques&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;// Lazy loading with React Suspense
const HeavyComponent = lazy(() =&gt; import(&apos;./HeavyComponent&apos;));

function App() {
  return (
    &amp;#x3C;Suspense fallback={&amp;#x3C;Loading /&gt;}&gt;
      &amp;#x3C;HeavyComponent /&gt;
    &amp;#x3C;/Suspense&gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;The Jamstack Evolution&lt;/h2&gt;
&lt;p&gt;Jamstack architecture continues to mature:&lt;/p&gt;
&lt;h3&gt;Modern Jamstack Stack&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Framework&lt;/strong&gt;: Next.js, Nuxt, SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CMS&lt;/strong&gt;: Contentful, Sanity, Strapi&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deployment&lt;/strong&gt;: Vercel, Netlify, Cloudflare Pages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Database&lt;/strong&gt;: PlanetScale, Supabase, Neon&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Web3 and Decentralization&lt;/h2&gt;
&lt;p&gt;While the hype has cooled, practical applications emerge:&lt;/p&gt;
&lt;h3&gt;Real Use Cases&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Decentralized storage&lt;/strong&gt; - IPFS for content distribution&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Authentication&lt;/strong&gt; - Wallet-based login systems&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smart contracts&lt;/strong&gt; - Automated, trustless transactions&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Mobile-First Everything&lt;/h2&gt;
&lt;p&gt;Mobile traffic dominates, demanding mobile-first approaches:&lt;/p&gt;
&lt;h3&gt;Progressive Web Apps (PWAs)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Offline functionality&lt;/li&gt;
&lt;li&gt;App-like experience&lt;/li&gt;
&lt;li&gt;Push notifications&lt;/li&gt;
&lt;li&gt;Home screen installation&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What&apos;s Next?&lt;/h2&gt;
&lt;p&gt;Looking ahead, several trends are emerging:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;WebAssembly mainstream adoption&lt;/strong&gt; - Near-native performance in browsers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI-powered user experiences&lt;/strong&gt; - Personalization at scale&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Voice and gesture interfaces&lt;/strong&gt; - Beyond traditional input methods&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Micro-frontends&lt;/strong&gt; - Independent, deployable frontend modules&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Green coding&lt;/strong&gt; - Sustainable, energy-efficient development practices&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Modern web development is more exciting and challenging than ever. The tools are more powerful, the possibilities endless, but the fundamental goal remains the same: creating exceptional user experiences.&lt;/p&gt;
&lt;p&gt;The key to thriving in this environment? Stay curious, keep learning, and remember that not every new tool needs to be in your stack. Choose technologies that solve real problems for your users.&lt;/p&gt;
&lt;p&gt;What trends are you most excited about? The web&apos;s future is being written now, and we&apos;re all part of it.&lt;/p&gt;
</content:encoded>
            <author>Alex Chen</author>
        </item>
        <item>
            <title><![CDATA[Integrating Obsidian with Your Blog Workflow]]></title>
            <description><![CDATA[Discover how to seamlessly integrate Obsidian notes into your blog publishing workflow, making content creation more efficient than ever.]]></description>
            <link>https://www.smallbitesbyjack.com/posts/obsidian-workflow</link>
            <guid isPermaLink="false">https://www.smallbitesbyjack.com/posts/obsidian-workflow</guid>
            <category><![CDATA[obsidian]]></category>
            <category><![CDATA[productivity]]></category>
            <category><![CDATA[workflow]]></category>
            <category><![CDATA[markdown]]></category>
            <pubDate>Sat, 20 Jan 2024 00:00:00 GMT</pubDate>
            <content:encoded>&lt;h1&gt;Integrating Obsidian with Your Blog Workflow&lt;/h1&gt;
&lt;p&gt;Obsidian has revolutionized how many of us take notes and manage knowledge. But what if you could seamlessly turn those notes into published blog posts? Let&apos;s explore how to create a powerful content creation workflow.&lt;/p&gt;
&lt;h2&gt;Why Obsidian for Blogging?&lt;/h2&gt;
&lt;p&gt;Obsidian offers unique advantages for bloggers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bidirectional linking&lt;/strong&gt; helps you discover connections between ideas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graph view&lt;/strong&gt; visualizes your content relationships&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Templates&lt;/strong&gt; streamline post creation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugins&lt;/strong&gt; extend functionality infinitely&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local storage&lt;/strong&gt; keeps your content under your control&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Setting Up Your Obsidian Vault&lt;/h2&gt;
&lt;p&gt;Here&apos;s how I organize my Obsidian vault for blogging:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;📁 Vault/
├── 📁 Blog/
│   ├── 📁 Published/
│   ├── 📁 Drafts/
│   └── 📁 Ideas/
├── 📁 Research/
├── 📁 Templates/
└── 📁 Archive/
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Creating a Blog Post Template&lt;/h2&gt;
&lt;p&gt;Templates save time and ensure consistency. Here&apos;s my go-to blog post template:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;---
title: &quot;{{title}}&quot;
date: {{date}}
tags: []
status: draft
---

## Introduction

## Main Points

### Point 1

### Point 2

### Point 3

## Conclusion

## References
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;The Publishing Workflow&lt;/h2&gt;
&lt;h3&gt;Step 1: Write in Obsidian&lt;/h3&gt;
&lt;p&gt;Use Obsidian&apos;s powerful editing features to craft your post. Take advantage of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Live preview&lt;/li&gt;
&lt;li&gt;Vim mode (if that&apos;s your thing)&lt;/li&gt;
&lt;li&gt;Quick switcher for linking related notes&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Step 2: Process Obsidian-Specific Syntax&lt;/h3&gt;
&lt;p&gt;Obsidian uses some special syntax that needs conversion:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;[[Internal Links]]&lt;/code&gt; → Regular markdown links&lt;/li&gt;
&lt;li&gt;&lt;code&gt;![[Embedded Notes]]&lt;/code&gt; → Inline content&lt;/li&gt;
&lt;li&gt;Tags: &lt;code&gt;#blog #writing&lt;/code&gt; → Front matter tags&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Step 3: Export to Your Blog&lt;/h3&gt;
&lt;p&gt;Simply copy your processed markdown file to your blog&apos;s content directory. The front matter transfers seamlessly!&lt;/p&gt;
&lt;h2&gt;Advanced Tips&lt;/h2&gt;
&lt;h3&gt;Using Dataview for Content Management&lt;/h3&gt;
&lt;p&gt;The Dataview plugin can help you track your blog posts:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-dataview&quot;&gt;table title, date, status
from &quot;Blog&quot;
sort date desc
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Automating with Templater&lt;/h3&gt;
&lt;p&gt;Create dynamic templates that auto-fill dates and generate slugs:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;&amp;#x3C;%* 
const title = await tp.system.prompt(&quot;Post Title&quot;);
const slug = title.toLowerCase().replace(/\s+/g, &apos;-&apos;);
const date = tp.date.now(&quot;YYYY-MM-DD&quot;);
-%&gt;
---
title: &quot;&amp;#x3C;% title %&gt;&quot;
slug: &quot;&amp;#x3C;% slug %&gt;&quot;
date: &amp;#x3C;% date %&gt;
---
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Handling Images&lt;/h2&gt;
&lt;p&gt;For images in your Obsidian vault:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Store images in a dedicated folder&lt;/li&gt;
&lt;li&gt;Use consistent naming conventions&lt;/li&gt;
&lt;li&gt;Consider using Cloudinary or similar for hosting&lt;/li&gt;
&lt;li&gt;Or reference images from Unsplash for quick placeholder images&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Benefits I&apos;ve Experienced&lt;/h2&gt;
&lt;p&gt;Since adopting this workflow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Writing speed increased 2x&lt;/strong&gt; - No context switching&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ideas flow naturally&lt;/strong&gt; - Everything is interconnected&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Research is integrated&lt;/strong&gt; - Notes become posts organically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Version control&lt;/strong&gt; - Git tracks everything&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Challenges and Solutions&lt;/h2&gt;
&lt;h3&gt;Challenge: Syncing Between Devices&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Use Obsidian Sync or Git for version control&lt;/p&gt;
&lt;h3&gt;Challenge: Special Syntax Differences&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Build a simple conversion script or use find-and-replace&lt;/p&gt;
&lt;h3&gt;Challenge: Image Management&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Establish clear conventions and use cloud hosting&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Integrating Obsidian into your blogging workflow transforms how you create content. Your notes naturally evolve into posts, your research feeds directly into your writing, and everything stays organized and searchable.&lt;/p&gt;
&lt;p&gt;The key is starting simple and gradually adding complexity as you become comfortable with the workflow. Your blog becomes a natural extension of your thinking process.&lt;/p&gt;
&lt;p&gt;What&apos;s your note-taking to blog workflow? I&apos;d love to hear about your process!&lt;/p&gt;
</content:encoded>
            <author>Jane Smith</author>
        </item>
        <item>
            <title><![CDATA[Getting Started with Next.js and MDX]]></title>
            <description><![CDATA[Learn how to build a modern blog with Next.js, MDX, and Tailwind CSS. This guide covers everything from setup to deployment.]]></description>
            <link>https://www.smallbitesbyjack.com/posts/getting-started</link>
            <guid isPermaLink="false">https://www.smallbitesbyjack.com/posts/getting-started</guid>
            <category><![CDATA[nextjs]]></category>
            <category><![CDATA[mdx]]></category>
            <category><![CDATA[web-development]]></category>
            <pubDate>Mon, 15 Jan 2024 00:00:00 GMT</pubDate>
            <content:encoded>&lt;h1&gt;Getting Started with Next.js and MDX&lt;/h1&gt;
&lt;p&gt;Building a modern blog has never been easier with the powerful combination of Next.js and MDX. In this post, we&apos;ll explore how to create a beautiful, performant blog that&apos;s a joy to write for and read.&lt;/p&gt;
&lt;h2&gt;Why Next.js?&lt;/h2&gt;
&lt;p&gt;Next.js provides an excellent foundation for building blogs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Static Site Generation (SSG)&lt;/strong&gt; for blazing-fast performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built-in routing&lt;/strong&gt; with file-based routing system&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Image optimization&lt;/strong&gt; out of the box&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SEO-friendly&lt;/strong&gt; with built-in metadata support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Great developer experience&lt;/strong&gt; with hot reload and TypeScript support&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Setting Up MDX&lt;/h2&gt;
&lt;p&gt;MDX allows you to write JSX directly in your markdown files, giving you the power to include React components alongside your content. Here&apos;s how to get started:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;// next.config.mjs
import createMDX from &apos;@next/mdx&apos;

const withMDX = createMDX({
  options: {
    remarkPlugins: [],
    rehypePlugins: [],
  },
})

export default withMDX(nextConfig)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Creating Your First Post&lt;/h2&gt;
&lt;p&gt;With MDX configured, creating a new blog post is as simple as adding a new &lt;code&gt;.mdx&lt;/code&gt; file to your content directory:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;---
title: &quot;My First Post&quot;
date: &quot;2024-01-15&quot;
author: &quot;Your Name&quot;
---

# Hello World

This is my first blog post using MDX!
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Styling with Tailwind CSS&lt;/h2&gt;
&lt;p&gt;Tailwind CSS makes it easy to create beautiful, responsive designs without leaving your HTML. Combined with the &lt;code&gt;@tailwindcss/typography&lt;/code&gt; plugin, your blog posts will look great out of the box.&lt;/p&gt;
&lt;h3&gt;Key Benefits:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Utility-first approach&lt;/strong&gt; - Style directly in your components&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Responsive design&lt;/strong&gt; - Mobile-first breakpoints&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dark mode support&lt;/strong&gt; - Built-in dark mode utilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customizable&lt;/strong&gt; - Extend with your own design system&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Deployment Options&lt;/h2&gt;
&lt;p&gt;When it comes to deploying your Next.js blog, you have several excellent free options:&lt;/p&gt;
&lt;h3&gt;Vercel&lt;/h3&gt;
&lt;p&gt;The creators of Next.js offer seamless deployment with automatic SSL, global CDN, and preview deployments.&lt;/p&gt;
&lt;h3&gt;Netlify&lt;/h3&gt;
&lt;p&gt;Great for static sites with form handling and serverless functions support.&lt;/p&gt;
&lt;h3&gt;Railway&lt;/h3&gt;
&lt;p&gt;Perfect if you need a full-stack solution with database support.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Building a blog with Next.js and MDX gives you the perfect balance of developer experience and user performance. Whether you&apos;re a seasoned developer or just getting started, this stack provides everything you need to create a professional blog.&lt;/p&gt;
&lt;p&gt;Happy blogging!&lt;/p&gt;
</content:encoded>
            <author>John Doe</author>
        </item>
    </channel>
</rss>