AstroHugoStarter

astro-theme-popular — Astro Starter Template

By Mariatta

Popular is an Astro theme for meetups, user groups and small events, sharing design tokens, CSS, behavior scripts and content models with the Hugo theme of the same name. It provides pages for events, blog, organizers and docs, plus content import scripts.

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

What stands out

A quick read of the recorded project description.

01

Homepage composed of hero, stats, features, automatic next event, latest posts, organizers, testimonials and CTA blocks

02

Events automatically split into upcoming and past, including speaker profiles, venue pages (address, arrival tips, accessibility information) and check-in instructions

03

Blog supports tag filtering, tag pages, RSS, and multi-author attribution via author profiles or guestAuthors

04

Docs pages include a scrollspy table of contents; the Checklist component remembers checked progress in localStorage using the same key format as the Hugo theme

05

Sessionize and spreadsheet import scripts generate event, speaker and venue content without overwriting existing files

06

Build-time check for alt text on all images; missing alt text fails CI

Template Details

Popular is the Astro version of hugo-theme-popular. The two share design tokens, CSS, behavior JS and content models, and follow a cross-repository PARITY contract. The theme targets meetups, user groups and small events. It offers a composable homepage (hero, stats, features, automatic next event, latest posts, organizers, testimonials, CTA), a blog with tag filtering and RSS, events automatically split into upcoming and past (with speaker profiles, venue pages and check-in instructions), an organizers/team page, and docs pages with a scrollspy table of contents and a progress checklist that remembers state. The content model supports multiple authors: posts can reference author profiles via authors, add one-off guest authors via guestAuthors, or fall back to a plain author string. UI strings are centralized for translation; brand configuration is centralized in src/config.ts. The theme includes Sessionize and spreadsheet import scripts that populate events, speakers and venue data without overwriting existing files. Builds fail if images lack alt text. The repository also provides AGENTS.md so AI agents and human contributors follow the same rules.

AstroHugoStarter

Is it right for your project?

Use Cases

  • Build a community site for a local meetup or user group with event schedules, speaker introductions and venue information
  • Create a content site with blog, tag filtering and RSS for a fan club or interest group
  • Organize docs pages such as the organizer team, code of conduct, participation guide and event handbook
  • Bulk import event and speaker data from Sessionize or spreadsheets to reduce manual entry
  • Maintain the same design tokens and content model as an existing Hugo site to migrate content between the two frameworks

Suitable For

  • Community organizers running meetups, user groups or small events
  • Developers who want to build a static community site with Astro and self-host it on Netlify, GitHub Pages or Cloudflare Pages
  • Teams needing an integrated content structure for multi-author blogs, event management and documentation handbooks
  • Projects already using hugo-theme-popular that want to try the corresponding Astro version

Getting started & customization

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

  1. 1

    Create a project with npm create popular-site@latest, then run npm install and npm run dev to start the local development server

  2. 2

    Site name, brand colors, navigation, footer, social links and homepage sections are configured in src/config.ts without modifying CSS

  3. 3

    Content files go under src/content in directories such as blog, events, organizers, pages and docs; front-matter is validated by zod and kept compatible with the Hugo theme

  4. 4

    Before deploying the static output in dist/, set site in astro.config.mjs; if deploying under a subpath, also set base, and you can use scripts/setup.py to generate a GitHub Pages workflow

  5. 5

    To import event data, run scripts/sessionize-import.py or scripts/spreadsheet-import.py; existing files will not be overwritten

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

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

Must comply with when using

  • You may use, modify, commercialize and distribute the code of this version for free.
  • 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

  • The README provides a GitHub Sponsors link; sponsorship is voluntary and does not affect free use under the MIT license.
  • The theme uses Inter/Quantico fonts from Google Fonts and Font Awesome 6 icons; these third-party resources have their own license terms, which you should verify before use.
  • The Sessionize import script relies on public API endpoints of the Sessionize service; using this feature requires access to an external service.
  • Demo images, fonts, icons and other third-party assets must be checked against their respective licenses; the MIT license of the code alone is not sufficient to judge them.
  • External services such as domains, hosting, databases, payments or AI may incur separate charges.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

Sponsor on GitHub

Original README

Typography: **Inter** & **Quantico** (Google Fonts). Icons: **Font Awesome 6**.

Original README

from a [Sessionize](https://sessionize.com) event's public "API / Embeds" endpoint

Original README
https://github.com/Mariatta/astro-theme-popular/blob/main/LICENSEhttps://github.com/Mariatta/astro-theme-popular/blob/main/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-02. 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
Astro Themes
Documentation and maintenance reference score
More documented · 88 / 100
Technologies
Astro · Hugo
Website type
Starter
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-09-04
Screenshot last checked
2026-10-02

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.

Automatically checked against source and license rules; no manual editorial review.

Inspect the recorded source material

SHA-256: 10738a41fbde2e956cf9b1a70ef30c2309ce9430fa180ddef1549a9959bd8f8b

2026-10-02T15:52:08.179Z

Source file / repository
# Popular: an Astro theme for meetups & communities

> *Built to make your community seen and famous.*

> **AI agents / automated contributors:** read [AGENTS.md](AGENTS.md) before making changes. It covers the repo layout, build commands, the Hugo-Astro parity contract, and content conventions.

> **Something not working as described?** Please [open an issue](https://github.com/Mariatta/astro-theme-popular/issues/new) as you hit it, while it's fresh: a command that errors, a step that's out of date, a sentence you had to read three times. Setup friction is a bug. Reporting it here gets it fixed upstream, so the next person doesn't hit the same wall. Fixes to the wording are welcome as pull requests too.

**Popular** is a warm, community-first [Astro](https://astro.build) theme for meetups, user
groups and small events. Named after the song *Pop!ular* by Darren Hayes, it is the Astro
twin of [`hugo-theme-popular`](https://github.com/Mariatta/hugo-theme-popular). Both share the same design tokens, CSS,
behaviour JS and content model; see **PARITY.md** for the cross-repo contract.

- Composable **home page** (hero, stats, features, auto next-event, latest posts, organizers, testimonials, CTA)
- **Blog** with tag filtering, tag pages, RSS, and per-post speaker bios
- **Events** that split into *upcoming* and *past* automatically, with speaker profiles, venue pages (address, buzz-code arrival notes, accessibility) and check-in instructions
- **Organizers / team** page
- **Docs** (handbook & runbooks) with scroll-spy TOC and **checklists that remember progress**
- Dark footer with **land-acknowledgement** slot and social links
- **Alt text, required**: CI builds every site and fails if any image lacks alt text
- **One-command imports**: populate events, speakers and venues from Sessionize or a spreadsheet (`scripts/`), cross-referenced and dependency-free
- **Agent & human friendly**: ships [`AGENTS.md`](AGENTS.md) so AI coding agents follow the same rules as human contributors
- **Translatable UI**: every template string lives in one place (Hugo `i18n/`, Astro `STRINGS` config), so a site can run in any language
- Re-brand the whole theme from `src/config.ts`, no CSS edits needed

**Full documentation** lives on the theme's project site (deployed from the Hugo
repo): start at `/docs/quick-start/?fw=astro`. This README covers the essentials.

**Multi-author blogging:** posts support `authors: ["slug"]` (profiles in
`src/content/authors/` with bio, photo, socials, website → linked profile pages)
and inline `guestAuthors` for one-off guest writers, plus a plain `author` string fallback.

## Quick start

Start a site with the scaffolder. You get a small project that **depends on**
the theme, so updating is `npm update astro-theme-popular` rather than diffing
tags and re-copying files:

```bash
npm create popular-site@latest my-community
cd my-community
npm install
npm run dev          # http://localhost:4321
```

Pick the neutral **"Your Community" starter** (the default) or any of the four
fictional demos as a fuller example to edit down: **Rocky Cove Aquarium Club**
(teal), **Lucky Town Foodie Club** (copper), **KDrama Fan Club** (indigo) and
**Truly Madly Riley** (gold, a personal site for one fictional superfan). All
communities and venues in them are made up for demonstration.

Live: the [starter](https://mariatta.ca/astro-theme-popular/) is the deployment
root, and the [demo gallery](https://mariatta.ca/astro-theme-popular/demos/)
links the other four.

### Working in this repo

Each demo is its own workspace consuming the package, so there is no activation
step: build or serve one where it lives.

```bash
npm install                              # one install for every workspace member
npm run dev --workspace demos/aquarium   # or: npm run demo:aquarium
npm run build --workspaces               # build everything
```

`DEMO_BAR` in a demo's `popular.config.ts` drives the in-page switcher; it is
`null` on the starter and on anything the scaffolder writes, so it never
appears on a real site.

## Make it yours

| What | Where |
|---|---|
| Site name, logo, tagline, land acknowledgement | `src/config.ts` → `SITE` |
| Colours, fonts, radii (design tokens) | `src/config.ts` → `BRAND` (deep changes: `src/styles/tokens/`) |
| Navigation, header CTA, footer, socials | `src/config.ts` → `NAV`, `CTA`, `FOOTER`, `SOCIAL` |
| Home page sections | `src/config.ts` → `HOME` |
| Blog posts / events / organizers | `src/content/{blog,events,organizers}/*.md` |
| About, Code of Conduct, Get involved | `src/content/pages/*.mdx` |
| Handbook & runbooks | `src/content/docs/*.mdx` (use `<Callout>` and `<Checklist>`); sidebar ordered by `weight`, set it on every docs page |

Front-matter schemas live in `src/content.config.ts` (zod-validated) and are kept
1:1 compatible with the Hugo theme, so content moves between the two freely.

### MDX components

```mdx
import Callout from '../../components/Callout.astro';
import Checklist from '../../components/Checklist.astro';

<Callout tone="tip" title="Two-deep rule">
  Aim for **two** organizers at every event.
</Callout>

<Checklist id="rb-venue" items={[
  'Shortlist 2–3 venues',
  'Confirm step-free access',
]} />
```

`Checklist` progress persists in the visitor's browser (`localStorage`), using the same
key format as the Hugo theme.

## Helper scripts

- `scripts/sessionize-import.py`: populate `src/content/events/` and `src/content/speakers/`
  from a [Sessionize](https://sessionize.com) event's public "API / Embeds" endpoint:

  ```bash
  python3 scripts/sessionize-import.py --url https://sessionize.com/api/v2/<embed-id>/view/All --site .
  ```

  Existing files are never overwritten, so edit freely after importing.

- `scripts/spreadsheet-import.py`: the same import from one spreadsheet with tabs for
  Speakers, Venues, Organizers and Events (dependency-free .xlsx or per-tab CSVs).
  `--make-sample community.xlsx` writes a starter workbook (one ships at
  `scripts/sample-community.xlsx`); import it with
  `--xlsx community.xlsx --site .`.

The helper scripts have a dependency-free test suite: `python3 -m unittest discover -s scripts/tests` (also run in CI).

## Deploying

Static output: deploy `dist/` to Netlify, GitHub Pages, Cloudflare Pages, etc.
Set `site` in `astro.config.mjs` for correct RSS/OG URLs.

**Serving from a subpath** (a GitHub project page lives at `user.github.io/repo/`)
is supported: set `site` and `base` in `astro.config.mjs`, and every link, image
and feed URL picks it up. Your config and content need no changes, paths keep
their leading slash.

```js
export default defineConfig({
  site: 'https://you.github.io',
  base: '/my-community',
  integrations: [mdx(), sitemap(), popularMarkdown()],
});
```

`scripts/setup.py` writes both from your `base_url` answer, along with a
ready-to-run GitHub Pages workflow at `.github/workflows/deploy.yml` (only when
the site has no workflows of its own). If you write your own components or
pages, wrap the URLs you emit: `import { withBase } from './lib/url'` (npm
consumers: `from 'astro-theme-popular/url'`), then `href={withBase('/about/')}`.

## Support the theme

Popular is free and MIT licensed. If it made your community site easier, there are three
ways to support the work:

- **Star the repo** so other organizers can find it
- **Tell others about it**: share it with another meetup, club or community, or use it
  yourself for your next community site
- **[Sponsor on GitHub](https://github.com/sponsors/Mariatta)**

## Credits & license

Typography: **Inter** & **Quantico** (Google Fonts). Icons: **Font Awesome 6**.
MIT: see `LICENSE`. Fork it, adapt it, and share your community's version.

## Versioning & staying up to date

Releases are tagged `v0.x` (semver, in lockstep with
[`hugo-theme-popular`](https://github.com/Mariatta/hugo-theme-popular)); the
1.0 release will mark the content model and brand keys as stable. Changes are
documented in [CHANGELOG.md](CHANGELOG.md). To hear about updates, watch this
repo (Watch → Custom → Releases) or subscribe to the
[releases feed](https://github.com/Mariatta/astro-theme-popular/releases.atom).
Since Astro sites vendor the theme (you copy this repo), updating means
re-copying the files you haven't customized; the changelog tells you which
areas moved, and the full guide is at
[/docs/updating/](https://popular.mariatta.ca/docs/updating/).

Releases are cut by the Release workflow after the CHANGELOG entry is merged:
`gh workflow run release.yml -f version=X.Y.Z`, run in **both** repos. It
validates the CHANGELOG section and cross-repo parity, then tags `vX.Y.Z` and
publishes the GitHub Release with that section as the notes. On this repo it also checks that
`package.json` matches the version.

Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.