Homepage composed of hero, stats, features, automatic next event, latest posts, organizers, testimonials and CTA blocks
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.
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.
Events automatically split into upcoming and past, including speaker profiles, venue pages (address, arrival tips, accessibility information) and check-in instructions
Blog supports tag filtering, tag pages, RSS, and multi-author attribution via author profiles or guestAuthors
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
Sessionize and spreadsheet import scripts generate event, speaker and venue content without overwriting existing files
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.
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
Create a project with npm create popular-site@latest, then run npm install and npm run dev to start the local development server
- 2
Site name, brand colors, navigation, footer, social links and homepage sections are configured in src/config.ts without modifying CSS
- 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
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
To import event data, run scripts/sessionize-import.py or scripts/spreadsheet-import.py; existing files will not be overwritten
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis 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
https://github.com/Mariatta/astro-theme-popular/blob/main/LICENSEhttps://github.com/Mariatta/astro-theme-popular/blob/main/README.mdfrom a [Sessionize](https://sessionize.com) event's public "API / Embeds" endpoint
Original README
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.
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
accessible-astro-starter
An accessibility-focused Astro 6 starter template with WCAG 2.2 AA practices, Tailwind CSS 4, TypeScript, Prettier, ESLint, form validation, blog and portfolio examples, and preference toggles for dark mode, high contrast, and reduced motion.
Astro · Blog

astro-erudite
astro-erudite is an opinionated, unstyled static blog template built with Astro and native CSS, with no UI or CSS framework and minimal dependencies.
Astro · Portfolio

astro-shopify
A lightweight Shopify headless ecommerce starter template built with Astro and Svelte, integrating the Shopify Storefront API for product and inventory data, with built-in cart state management and basic add-to-cart and checkout flow.
Astro · E-commerce

brutal
Brutal is a neobrutalism Astro starter theme from ElianCodes, derived from the author's personal site and generalized. It includes a Markdown blog collection, build-time RSS and sitemap, image optimization, Tailwind CSS styling, and Biome checks, with no JavaScript by default.
Astro · Starter

qwind
Qwind is a free and open-source website template built on Qwik and Tailwind CSS, featuring directory-based routing via QwikCity, a Markdown blog, dark mode, and static deployment configuration.
Astro · Tool Site
