Post banner cover related to Astro

Welcome to DuckyCoding

Written by: DuckyCoding (me)

Read time: 4 minutes

Published on: 6/4/2025

Astro
SQLite
Drizzle
TypeScript
TailwindCSS
Blog
Web Development

Welcome to DuckyCoding! 🦆

After months of planning, coding, forgetting about this, coming back, refactors and countless cups of coffee, I’m thrilled to finally launch DuckyCoding - my new home on the web where I’ll be sharing insights, tutorials, and experiences from my journey in software development.

But before we dive into the exciting content that’s coming, I thought it would be nice to show you how this blog was built. After all, as developers, we love to know what’s under the hood!

The tech stack that powers this blog

🚀 Astro - The foundation

The heart of this blog is built with Astro.
Here’s why Astro was perfect for this project:

📚 Content Collections - Structured content management

One of Astro’s killer features is Content Collections, which I’m using to manage blog posts and more:

const posts = defineCollection({
  loader: glob({ pattern: '**/*.{md,mdx}', base: './src/content/posts' }),
  schema: PostContentSchema, // Zod schema for validating post frontmatter
});

This gives me:

🗄️ SQLite + Drizzle ORM - Simple yet powerful data layer

For the database layer, I went with a SQLite database hosted on Turso, managed through Drizzle ORM:

Why SQLite?

Why Drizzle ORM?

One word, TypeScript.

🎨 Styling philosophy

The visual design is built with:

Architecture decisions & patterns

File organization

The project follows a clean, scalable structure:

src/
├── assets/         # Static assets like images and fonts
├── components/     # Reusable UI components
├── content/        # Blog posts and topics
├── db/             # Database schemas and utilities
├── layouts/        # Page layouts
├── pages/          # Routes
├── types/          # TypeScript type definitions and Zod schemas
└── utils/          # Helper functions

SEO

Every page is optimized for SEO with:

Static pages have its metadata hardcoded, whereas dynamic pages (like blog posts) have their metadata defined in the frontmatter and processed at build time.

Content management workflow

Writing a new blog post is as simple as:

  1. Create a new .mdx file in src/content/posts/
  2. Add the required frontmatter (validated by Zod schema)
  3. Write its content in Markdown syntax, using MDX for interactive components
  4. Save and commit the file, which is version controlled with Git with the rest of the repository
  5. Set the post’s status to published in the frontmatter to make it live whenever it’s ready
  6. Merge to the main branch, which triggers a build and deploy process on Netlify.
  7. The post automatically appears on the blog with proper routing, SEO, and styling

Performance optimizations

What’s coming next

Now that the foundation is solid I can finally start blogging!
Here’s what you can expect from DuckyCoding:

Join the journey

I’m excited to share this journey with you! Whether you’re a seasoned developer or just starting out, I hope you’ll find value in the content I’ll be sharing.

Feel free to reach out if you have questions about the technical setup, suggestions for future posts, or just want to connect. You can find me on GitHub or on any of my socials.

Here’s to building great things together! Quack! 🦆


This post marks the beginning of what I hope will be a long and valuable journey. Thank you for being here from the start, and welcome to DuckyCoding!

Last updated on: 6/11/2025

Up arrow caret