Multi-author system supporting co-signing of a single post by multiple authors
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.
Actual screenshot captured by the server browser.
All pages & views 3
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Built-in topic categories, blog pagination, drafts, sitemap, and RSS feed
Site search implemented with SolidJS, using Fuse.js for search logic
Dark mode supports both system preference and a manual toggle button
Optional Appwrite backend for post emoji reactions and a post ranking page
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.
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
Create the project with npm create astro@latest -- --template eddyvinck/astro-engineering-blog, then run npm install to install dependencies
- 2
Modify BRAND, SITE_TITLE, SITE_URL, SITE_DESCRIPTION, and PAGINATION_POSTS_PER_PAGE in src/consts.ts
- 3
Adjust head content such as the favicon in src/components/BaseHead.astro, and modify colors in the Tailwind configuration
- 4
For emoji reactions and post rankings, configure the Appwrite API key, endpoint, project ID, database ID, and reactions collection ID in .env
- 5
Common commands: npm run dev starts local development, npm run build builds to ./dist/, and npm run preview previews the build locally
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis 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
https://github.com/EddyVinck/astro-engineering-blog/blob/main/LICENSEhttps://github.com/EddyVinck/astro-engineering-blog/blob/main/README.mdSECRET_APPWRITE_API_KEY=YOUR_APPWRITE_API_KEY
Original README
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 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).
Explore similar templates
Compare previews and descriptions within the same stack and category.

astrowind
AstroWind is a free, open-source Astro starter theme using Astro and Tailwind CSS, released under the MIT license.
Astro · Blog

astro-paper
AstroPaper is a minimal, responsive, accessible, and SEO-friendly Astro blog theme. Articles are stored as Markdown/MDX in src/content/posts/, with subdirectories affecting URLs.
Astro · Blog

fuwari
Fuwari is a static blog template built with Astro and Tailwind CSS for personal blogs. It manages posts as Markdown files in src/content/posts/, with frontmatter for title, date, description, cover, tags, categories, draft status, and language.
Astro · Blog

Firefly
Firefly is a clean personal blog theme forked from Astro and Fuwari, offering four background modes, single/double sidebar and list/grid layouts, Pagefind client-side full-text search, and a six-language UI.
Astro · Blog

astro-theme-cactus
Astro Cactus is an Astro-based blog and portfolio theme that uses Markdown/MDX content collections to manage posts, notes, and tags, with frontmatter type-checked by a schema.
Astro · Portfolio

astrofy
Astrofy is a free and open-source personal portfolio website template built with Astro and TailwindCSS, with built-in blog, CV timeline, project showcase, store, and RSS feed modules.
Astro · Portfolio
