AstroPortfolioBlog

astro-sidecar — Astro Portfolio Template

By dmcphearson

A portfolio, resume, and blog theme for Astro with a sidebar layout, where site content is configured centrally in src/config.ts.

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-13View source

What stands out

A quick read of the recorded project description.

01

Sidebar centrally displays profile, skills, education, certifications, and social links, with each section independently toggleable

02

Site content is configured centrally in src/config.ts, with TypeScript types providing autocompletion

03

Blog supports tags, search, archives, RSS, and pagination, as well as drafts and scheduled publishing

04

Offers light, dark, and auto theme modes, with customizable light and dark color schemes

05

Optional Giscus comments and Pagefind full-text search, with view transitions on page changes

Template Details

Astro Sidecar is a portfolio, resume, and blog theme for Astro, with a sidebar layout as its core feature. The sidebar contains profile, skills, education, certifications, and social links, and each section can be toggled independently; on mobile, the sidebar collapses and provides a "View my background" toggle entry.

Site content is configured centrally in src/config.ts, covering site information, profile, homepage greeting, skills, education, certifications, projects, navigation, comments, and social links, with TypeScript types providing autocompletion. The homepage provides a project grid, and the blog supports tags, search, archives, RSS, and pagination, as well as drafts and scheduled publishing.

The theme offers light, dark, and auto modes; auto mode follows system preference and shows a toggle button in the navigation. You can also customize background, foreground, accent, muted, and border colors for light and dark modes. Comments are integrated with GitHub Discussions via Giscus, search uses Pagefind, and page transitions include view transitions.

The repository is MIT licensed, allowing free use, modification, commercial use, and distribution of this version of the code; when distributing copies or substantial portions of the code, the copyright notice and the full MIT license notice must be retained. Third-party assets such as demo images, fonts, and icons must be checked against their respective licenses, and external services such as domains and hosting may incur additional charges.

AstroPortfolioBlog

Is it right for your project?

Use Cases

  • Build a personal site that simultaneously hosts a portfolio, online resume, and blog
  • Manage profile, skills, education, certifications, and project information centrally via a configuration file
  • Add reading features such as tags, search, archives, RSS, and pagination to a blog
  • Integrate GitHub Discussions via Giscus as the article comment section

Suitable For

  • Developers who want to build personal portfolio and resume pages with Astro
  • Content creators who need to merge a blog and personal introduction into one site
  • Users who prefer maintaining site content through a single configuration file
  • Sites that need light, dark, or system-following theme switching

Getting started & customization

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

  1. 1

    After cloning the repository, run npm install, then run npm run dev to start the development server

  2. 2

    Open src/config.ts and replace the demo content with your own profile, projects, and social links

  3. 3

    Blog posts are placed as Markdown files in the src/content/blog/ directory

  4. 4

    To use Giscus comments, fill in the corresponding GitHub Discussions parameters in the configuration

  5. 5

    To customize colors, set colorPreset to custom and provide light and dark values

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This listing covers the free version under the MIT license in the public repository; 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.
  • Giscus comments are an optional feature that relies on GitHub Discussions; before use, the corresponding parameters must be filled in the configuration and the GitHub service is required.
  • The README lists Cloudflare Pages as a deployment method; actual deployment requires using that external hosting service, which may incur additional costs or require account registration.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

Optional Giscus comments backed by GitHub Discussions

Original README

Deployment** - [Cloudflare Pages](https://pages.cloudflare.com/)

Original README
https://github.com/dmcphearson/astro-sidecar/blob/main/LICENSEhttps://github.com/dmcphearson/astro-sidecar/blob/main/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-13. 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 · 85 / 100
Technologies
Astro
Website type
Portfolio · 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
2026-05-20
Screenshot last checked
2026-10-13

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-13

Inspect the recorded source material

SHA-256: ceea28e4bd96a252100428eebcb9252198d467ebf2fc810a80d7723d5569dfae

2026-10-13T00:16:40.617Z

Source file / repository
# Astro Sidecar

![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)
![Astro](https://img.shields.io/badge/Astro-BC52EE?style=for-the-badge&logo=astro&logoColor=white)
![TailwindCSS](https://img.shields.io/badge/Tailwind_CSS-38B2AC?style=for-the-badge&logo=tailwind-css&logoColor=white)
![GitHub](https://img.shields.io/github/license/dmcphearson/astro-sidecar?color=%232F3741&style=for-the-badge&v=1)

A portfolio, resume, and blog theme for [Astro](https://astro.build) with a distinctive sidebar layout. Built for professionals who want a personal site that doubles as an online resume.

Configure everything from a single file -- your profile, skills, education, certifications, projects, and blog are all driven by `src/config.ts`.

[Live Demo](https://astro-sidecar.pages.dev/) | [Getting Started](https://astro-sidecar.pages.dev/posts/getting-started-with-astro-sidecar/)

## Features

- [x] Config-driven sidebar with profile, skills, education, certifications, and social links
- [x] Every sidebar section independently toggleable
- [x] Projects grid on the homepage
- [x] Blog with tags, search, archives, RSS, and pagination
- [x] Custom color themes (define your own light/dark accent colors)
- [x] Theme mode: `light`, `dark`, or `auto` (toggle + system preference)
- [x] Optional Giscus comments backed by GitHub Discussions
- [x] Full-text search via Pagefind
- [x] View transitions for smooth page navigation
- [x] Responsive design (sidebar collapses on mobile with "View my background" toggle)
- [x] Social sharing (WhatsApp, Facebook, Bluesky, Mastodon, X, Email)
- [x] Collapsible table of contents
- [x] SEO-friendly with Open Graph metadata
- [x] Accessible (keyboard navigation, screen readers, sufficient contrast)
- [x] Sitemap and RSS feed
- [x] Draft posts and scheduled publishing

## Lighthouse Score

<p align="center">
  <a href="https://pagespeed.web.dev/analysis/https-astro-sidecar-pages-dev/27rfvq88oc?form_factor=desktop">
    <img width="710" alt="Astro Sidecar Lighthouse Score" src="lighthouse-score.svg">
  </a>
</p>

## Project Structure

```
/
├── public/
│   ├── assets/          # Profile photo, company logo, post images
│   ├── fonts/           # Self-hosted Inter font files
│   └── favicon.ico
├── src/
│   ├── assets/
│   │   └── icons/       # SVG icons (social, UI)
│   ├── components/      # Astro components (Sidebar, Header, Card, etc.)
│   ├── content/
│   │   └── blog/        # Markdown blog posts
│   ├── layouts/         # Page layouts (SidebarLayout, PostDetails, etc.)
│   ├── pages/           # File-based routing
│   ├── scripts/         # Client-side scripts (theme toggle)
│   ├── styles/          # Global CSS and typography
│   ├── utils/           # Post filtering, sorting, slugification
│   ├── config.ts        # All site configuration lives here
│   ├── constants.ts     # Share link definitions
│   ├── content.config.ts
│   └── types.ts         # TypeScript types for all config sections
└── astro.config.ts
```

## Quick Start

```bash
git clone https://github.com/dmcphearson/astro-sidecar.git my-site
cd my-site
npm install
npm run dev
```

Open `src/config.ts` and replace the demo content with your own.

## Configuration

All site content is configured in `src/config.ts`. Each section is typed with TypeScript for autocompletion.

| Section | Description |
|---------|-------------|
| `SITE` | URL, title, description, theme mode, custom colors, posts per page |
| `PROFILE` | Photo, name, tagline, current company (optional) |
| `HERO` | Homepage greeting and intro paragraphs |
| `SKILLS` | Scrolling skill tags in the sidebar (toggleable) |
| `EDUCATION` | Degree, year, and school entries (toggleable) |
| `CERTIFICATIONS` | Certification name strings (toggleable) |
| `PROJECTS` | Homepage project grid with name, description, status, optional URL |
| `NAV_ITEMS` | Navigation menu links |
| `COMMENTS` | Giscus comment integration |
| `SOCIALS` | Social links (GitHub, LinkedIn, Mail, Substack, etc.) |

### Custom Colors

The default theme uses a blue accent in light mode and green in dark mode. To define your own colors, set `colorPreset: "custom"` and provide light and dark values:

```ts
colorPreset: "custom",
customColors: {
  light: { background: "#fafaf8", foreground: "#171717", accent: "#9333ea", muted: "#f3f4f6", border: "#e5e7eb" },
  dark:  { background: "#101012", foreground: "#f5f5f7", accent: "#c084fc", muted: "#262628", border: "#373738" },
},
```

### Theme Modes

- `"dark"` -- dark mode only, no toggle
- `"light"` -- light mode only, no toggle
- `"auto"` -- respects system preference, shows a toggle in the nav

## Blog Posts

Create markdown files in `src/content/blog/`:

```yaml
---
title: Your Post Title
author: Your Name
pubDatetime: 2026-01-15T10:00:00Z
slug: your-post-slug
featured: true
draft: false
tags:
  - tag1
  - tag2
description: A short description for previews and SEO.
---
```

## Tech Stack

**Framework** - [Astro](https://astro.build/) v6
**Type Checking** - [TypeScript](https://www.typescriptlang.org/)
**Styling** - [Tailwind CSS](https://tailwindcss.com/) v4
**Static Search** - [Pagefind](https://pagefind.app/)
**Icons** - [Tabler Icons](https://tabler-icons.io/)
**Code Formatting** - [Prettier](https://prettier.io/)
**Linting** - [ESLint](https://eslint.org)
**Deployment** - [Cloudflare Pages](https://pages.cloudflare.com/)

## Commands

| Command | Action |
|---------|--------|
| `npm run dev` | Start dev server at `localhost:4321` |
| `npm run build` | Build production site to `./dist/` |
| `npm run preview` | Preview production build locally |
| `npm run format` | Format code with Prettier |
| `npm run lint` | Lint with ESLint |

## Acknowledgments

Inspired by [AstroPaper](https://github.com/satnaing/astro-paper) by Sat Naing.

## License

MIT
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.