AstroSolidJSBlog

astro-engineering-blog — Astro Blog Template

By EddyVinck

An engineering blog template built on Astro and SolidJS, supporting multiple authors, co-authoring, topic categories, search, pagination, drafts, and dark mode, with optional Appwrite integration for post emoji reactions and rankings.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

3 previews
Desktop homepage1 / 3
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 3

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-07View source

What stands out

A quick read of the recorded project description.

01

Multi-author system supporting co-signing of a single post by multiple authors

02

Built-in topic categories, blog pagination, drafts, sitemap, and RSS feed

03

Site search implemented with SolidJS, using Fuse.js for search logic

04

Dark mode supports both system preference and a manual toggle button

05

Optional Appwrite backend for post emoji reactions and a post ranking page

06

Images processed with astro:assets, plus canonical URLs and OpenGraph metadata

Template Details

This is a blog template for engineering teams or individual technical writers, using Astro as the main framework and SolidJS for interactive features that require JavaScript, such as search. Styling is based on Tailwind CSS, search logic uses Fuse.js, and the code is written in TypeScript. Content is stored as Markdown and MDX in src/content/blog/, read via Astro content collections and getCollection(), and frontmatter can be validated with a schema.

The template includes an author system that supports multiple authors co-signing a single post, and provides topic categories, blog pagination, drafts, sitemap, RSS feed, canonical URLs, and OpenGraph metadata. Images are processed through astro:assets. Dark mode follows system preference and also offers a toggle button. Search is implemented as a SolidJS component.

An optional Appwrite backend powers post emoji reactions and a blog post ranking page. It requires configuring an API key, endpoint, project ID, database ID, and reactions collection ID in .env; without this configuration, those features are unavailable. Brand name, site title, site URL, description, and posts per page are modified in src/consts.ts, head content such as the favicon is adjusted in src/components/BaseHead.astro, and colors are defined in the Tailwind configuration.

The repository is MIT licensed, allowing free use, modification, commercial use, and distribution of this version of the code, provided the copyright notice and full MIT license notice are retained when distributing. Third-party assets such as demo images, fonts, and icons require separate license verification, and external services such as domains, hosting, and Appwrite may incur costs.

AstroSolidJSBlog

Is it right for your project?

Use Cases

  • Engineering teams building a public technical blog where multiple engineers publish together
  • Individual developers creating a technical writing site with topic categories and site search
  • Blogs that want to manage content in Markdown/MDX while keeping RSS and a sitemap
  • Blog projects that need dark mode and optional features such as post emoji interactions and rankings

Suitable For

  • Developers familiar with Astro or willing to configure content collections according to the documentation
  • Engineering blog maintainers who need multiple authors and a co-authoring mechanism
  • Teams comfortable customizing styles and logic with TypeScript and Tailwind CSS

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    Create the project with npm create astro@latest -- --template eddyvinck/astro-engineering-blog, then run npm install to install dependencies

  2. 2

    Modify BRAND, SITE_TITLE, SITE_URL, SITE_DESCRIPTION, and PAGINATION_POSTS_PER_PAGE in src/consts.ts

  3. 3

    Adjust head content such as the favicon in src/components/BaseHead.astro, and modify colors in the Tailwind configuration

  4. 4

    For emoji reactions and post rankings, configure the Appwrite API key, endpoint, project ID, database ID, and reactions collection ID in .env

  5. 5

    Common commands: npm run dev starts local development, npm run build builds to ./dist/, and npm run preview previews the build locally

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This entry covers the free version in the public repository under the MIT license; the free scope is the code of this version and does not mean external services or third-party assets are free.

Must comply with when using

  • Free use, modification, commercial use, and distribution of this version of the code are permitted.
  • When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
  • The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.

Additional costs & items to verify

  • Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
  • External services such as domains, hosting, databases, payments, or AI may incur additional charges.
  • Post emoji reactions and the blog post ranking page are optional features that depend on the Appwrite service (the README states it uses its free tier); without Appwrite integration, these features are unavailable.
  • Enabling the backend service requires providing your own Appwrite API key and configuring the endpoint, project ID, database ID, and reactions collection ID in .env.
  • Using the optional backend features requires entering your own Appwrite API key in /.env, which is an external service credential requirement.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

✅ [Post reactions & blog post ranking page](./src/content/blog/enabling-emoji-reactions.md) (optional, uses Appwrite's free tier)

Original README

You can enable backend services to your project by adding an [Appwrite](https://appwrite.io/) API key:

Original README

SECRET_APPWRITE_API_KEY=YOUR_APPWRITE_API_KEY

Original README
https://github.com/EddyVinck/astro-engineering-blog/blob/main/LICENSEhttps://github.com/EddyVinck/astro-engineering-blog/blob/main/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-07. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.

Project checks & description sources

Template Information

Source platforms
GitHub
Documentation and maintenance reference score
More documented · 77 / 100
Technologies
Astro · SolidJS
Website type
Blog
How this score is calculated

Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.

What to verify for this project

Repository update recorded
2024-10-04
Screenshot last checked
2026-10-07

A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.

The catalog identifies Astro as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.

Use a selection guide →

How this description was prepared

AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.

Review declaration: [email protected] · 2026-10-08

Inspect the recorded source material

SHA-256: 131ccd02a6d4482a6585048c879d4236d1186b7d9d311525e4ee9a232be773ac

2026-10-07T22:25:32.423Z

Source file / repository
![Astro Engineering Blog template: Multiple authors, co-authoring, topics, search, and more](./public/placeholder-social.jpg)

# Astro Starter Kit: Engineering Blog

This template was built to easily create an engineering blog for one or multiple authors.

Demo: <https://astro-engineering-blog.netlify.app/>

## Features

- ✅ Easy configuration
- ✅ Minimal styling (make it your own!)
- ✅ 100/100 Lighthouse performance
- ✅ SEO-friendly with canonical URLs and OpenGraph data
- ✅ Uses [`astro:assets`](https://docs.astro.build/en/guides/assets/) for optimized images
- ✅ Sitemap support
- ✅ RSS Feed support
- ✅ Markdown & MDX support
- ✅ Search functionality
- ✅ Author system
- ✅ Multiple authors per post (co-authoring)
- ✅ Topics
- ✅ Blog pagination
- ✅ Blog drafts
- ✅ Dark mode (system preference + toggle button)
- ✅ [Post reactions & blog post ranking page](./src/content/blog/enabling-emoji-reactions.md) (optional, uses Appwrite's free tier)

## Technologies used

- Astro as the framework tying everything together
- Solid.js for search (all `.tsx` files) and any other features that require JavaScript
- Tailwind CSS for styling
- Fuse.js for search logic
- Everything is written in TypeScript 💙

## Getting started

```
npm create astro@latest -- --template eddyvinck/astro-engineering-blog
```

### Configuration

Edit the values in `src/consts.ts` to match your brand or company:

```ts
export const BRAND = "Acme";
export const SITE_TITLE = "Acme Engineering";
export const SITE_URL = "https://astro-engineering-blog.netlify.app";
export const SITE_DESCRIPTION = "Welcome to the Acme Engineering blog!";
export const PAGINATION_POSTS_PER_PAGE = 5;
```

Change any lines or add more in the `<head>` tags in `src/components/BaseHead.astro`, like the favicon:

```html
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
```

You can also update the colors in `tailwind.config.css`:

```js
/** @type {import('tailwindcss').Config} */
module.exports = {
  content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}"],
  theme: {
    extend: {
      colors: {
        header: "#000",
        "header-foreground": "#fff",
        "header-dropdown": "#1e293b",
        "header-dropdown-foreground": "#fff",
        link: "#2563EB",
        "link-dark": "#3e7afe",
        primary: {
          500: "#2563EB",
          600: "#1D4ED8",
        },
        "primary-foreground": "#fff",
      },
```

#### Optional: enable backend services

You can enable backend services to your project by adding an [Appwrite](https://appwrite.io/) API key:

```
# in /.env
SECRET_APPWRITE_API_KEY=YOUR_APPWRITE_API_KEY
PUBLIC_APPWRITE_ENDPOINT=https://cloud.appwrite.io/v1
PUBLIC_APPWRITE_PROJECT_ID=PUBLIC_APPWRITE_PROJECT_ID
PUBLIC_APPWRITE_DATABASE_ID=PUBLIC_APPWRITE_DATABASE_ID
PUBLIC_APPWRITE_EMOJI_REACTIONS_COLLECTION_ID=post-reactions
```

## Thank you ❤️

- Astro team & all the other library authors
- The maintainers of the [Astro blog template](https://github.com/withastro/astro/tree/latest/examples/blog?on=github) which was used as a base for this template
- [FrontValue](https://frontvalue.nl/), for letting me work on this template during work hours

## 🚀 Project Structure

Inside of your Astro project, you'll see the following folders and files:

```
├── public/
├── src/
│   ├── components/
│   ├── content/
│   ├── layouts/
│   └── pages/
├── astro.config.mjs
├── README.md
├── package.json
└── tsconfig.json
```

Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.

There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.

The `src/content/` directory contains "collections" of related Markdown and MDX documents. Use `getCollection()` to retrieve posts from `src/content/blog/`, and type-check your frontmatter using an optional schema. See [Astro's Content Collections docs](https://docs.astro.build/en/guides/content-collections/) to learn more.

Any static assets, like images, can be placed in the `public/` directory.

## CLI Commands

All commands are run from the root of the project, from a terminal:

| Command                | Action                                           |
| :--------------------- | :----------------------------------------------- |
| `npm install`          | Installs dependencies                            |
| `npm run dev`          | Starts local dev server at `localhost:3000`      |
| `npm run build`        | Build your production site to `./dist/`          |
| `npm run preview`      | Preview your build locally, before deploying     |
| `npm run astro ...`    | Run CLI commands like `astro add`, `astro check` |
| `npm run astro --help` | Get help using the Astro CLI                     |

### Learn more about Astro

Check out [the documentation](https://docs.astro.build) or jump into the [Discord server](https://astro.build/chat).
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.