Hello, I'm Maneshwar. I'm working on git-lrc: a Git hook for Checking AI generated code.
Astro has quickly become a favorite for developers building fast, SEO-optimized static sites.At the core of its performance and flexibility lie **Astro components** — the building blocks of every Astro project. If you’ve ever written HTML, you already know the basics of Astro components. Let’s walk through what they are, how they work, and why they make Astro so powerful for static site generation (SSG). ## What Are Astro Components? Astro components are `.astro` files that combine HTML templates with server-side logic. Unlike typical JavaScript frameworks, they **don’t ship any JavaScript to the browser by default**. Every Astro component is pre-rendered into HTML — either at **build time** or **on-demand** — meaning your users get instant page loads without waiting for hydration or runtime JavaScript. That’s what makes Astro sites blazingly fast. ## Why Astro Components Are Different When you use React, Vue, or Svelte, components render on the client side using JavaScript. Astro flips that model — it renders components **on the server**, stripping away JS before the page is sent to the browser. If you need interactivity, you can still opt-in using **client islands** — interactive UI components that load separately using directives like: ```astro ``` This lets you build **partially interactive** pages without sacrificing static-site performance. ## Anatomy of an Astro Component Each `.astro` file has two sections: ```astro --- // Component Script (server-side) --- ``` ### 1. Component Script This section runs only on the server. You can: * Import other Astro or framework components * Load data from APIs or local files * Use variables and props Example: ```astro --- import SomeReactComponent from '../components/SomeReactComponent.jsx'; const { title } = Astro.props; const data = await fetch('https://api.example.com/items').then(r => r.json()); --- ``` Everything inside this block is safe — even private API calls — since none of it ever reaches the client. ### 2. Component Template Below the code fence, you define your HTML output. You can mix in JavaScript expressions and imported components: ```astro --- const { title } = Astro.props; const items = ['Astro', 'React', 'Vue']; ---{title}
-
{items.map(name =>
- {name} )}
{greeting}, {name}!
``` Usage: ```astro ``` You can also define a TypeScript interface for prop validation: ```astro --- interface Props { name: string; greeting?: string; } const { greeting = "Hello", name } = Astro.props; --- ``` ## Slots: Flexible Layouts & Content Slots let you pass HTML content into a component — similar to React’s `children`. Example: ```astro --- // Wrapper.astro const { title } = Astro.props; ---{title}
``` Usage: ```astroAstro components render to static HTML.
### Named Slots
You can create **multiple placeholders** inside a component:
```astro
<slot name="header" />
<slot />
<slot name="footer" />
And pass them in like:
<Wrapper>
<h1 slot="header">Header Area</h1>
<p>Main content</p>
<footer slot="footer">Footer Area</footer>
</Wrapper>
This enables reusable layouts where child content is dynamically inserted into specific regions.
Fallback Slots
Slots can also include fallback content:
<slot>
<p>This content appears if no slot is provided.</p>
</slot>
This ensures your components always render gracefully, even when no child content is passed in.
Nested Layouts and Slot Transfer
Astro supports nested layouts using slot transfer.
For example, you can have a BaseLayout and HomeLayout:
<!-- BaseLayout.astro -->
<html>
<head>
<slot name="head" />
</head>
<body>
<slot />
</body>
</html>
<!-- HomeLayout.astro -->
<BaseLayout>
<slot name="head" slot="head" />
<slot />
</BaseLayout>
Now, you can reuse layout layers without duplicating structure — perfect for complex static sites.
HTML Components
Astro can even import plain .html files as components.
These are pure HTML, with no frontmatter or scripting, making them ideal for legacy or fully static sections.
Why This Matters for Static Site Generation
Astro components are optimized for static output. Every .astro file becomes HTML during build time — meaning:
- No client-side rendering overhead
- No hydration until you explicitly ask for it
- Better SEO, smaller bundles, faster TTFB
Astro’s approach gives you the simplicity of static sites with the flexibility of modern frameworks.
Final Thoughts
Astro components redefine how we think about building for the web.
They combine the speed of static HTML, the modularity of components, and the power of selective interactivity — making them ideal for large, content-heavy sites.
If you’re building a blog, docs site, or an icon library with 100k+ pages, Astro’s component model is built for that scale.
*AI agents write code fast. They also silently remove logic, change behavior, and introduce bugs -- without telling you. You often find out in production.
git-lrc fixes this. It hooks into git commit and reviews every diff before it lands. 60-second setup. Completely free.*
Any feedback or contributors are welcome! It's online, source-available, and ready for anyone to use.
⭐ Star it on GitHub:
HexmosTech
/
git-lrc
Free, Unlimited AI Code Reviews That Run on Commit
AI agents write code fast. They also silently remove logic, change behavior, and introduce bugs -- without telling you. You often find out in production.
git-lrc fixes this. It hooks into git commit and reviews every diff before it lands. 60-second setup. Completely free.
See It In Action
See git-lrc catch serious security issues such as leaked credentials, expensive cloud operations, and sensitive material in log statements
git-lrc-intro-60s.mp4
Why
- 🤖 AI agents silently break things. Code removed. Logic changed. Edge cases gone. You won't notice until production.
- 🔍 Catch it before it ships. AI-powered inline comments show you exactly what changed and what looks wrong.
- 🔁 Build a habit, ship better code. Regular review → fewer bugs → more robust code → better results in your team.
- 🔗 Why git? Git is universal. Every editor, every IDE, every AI…
Top comments (0)