PowerShell.org is a Hugo static site (v0.128+) serving as the community hub for PowerShell enthusiasts. The site is built with a custom theme (powershell-community) and uses Tailwind CSS with FontAwesome icons. Content is organized into five main sections: Home, Podcast, Summit, Community, and Learning.
- Configuration: ../hugo.yaml - Contains site metadata, menu structure, taxonomies, and environment-specific parameters
- Theme: ../themes/powershell-community/ - Custom theme with Tailwind CSS styling
- Content: ../content/ - Markdown files organized by section (_index.md for section pages)
- Data: ../data/community_stats.json - Dynamic data source for community statistics
- Outputs: Site builds to both ../public/ (GitHub Pages) and ../docs/ directories
Each major section has its own directory under content/:
community/- Community hub with discussion statslearning/- Educational resourcespodcast/- Podcast listing (podcast details inhugo.yaml)summit/- Event information (summit config inhugo.yaml)_index.mdfiles define section landing pages and front matter
- Base Template: ../themes/powershell-community/layouts/_default/baseof.html - HTML structure, RSS feeds, Open Graph metadata
- Home Layout: ../themes/powershell-community/layouts/index.html - Hero section, stats display
- Section Layout: ../themes/powershell-community/layouts/list.html - Used for Podcast, Summit, Learning sections
- Partials: ../themes/powershell-community/layouts/partials/ - header.html, footer.html (reusable components)
The community_stats.json file is accessed in templates via .Site.Data.community_stats. It includes:
activities- Recent forum activity liststats- Total topics, posts, active users, weekly countslast_updated- ISO timestamp for cache-busting
npm run dev # Hugo server on http://localhost:1313 with drafts enabled (-D)
npm run build # Production build with garbage collection and minification
npm run preview # Production server for testingKey flags:
-D(drafts): Enabledraft: truepages--disableFastRender: Prevents caching issues during development--gc --minify: Garbage collection and CSS/JS minification for production
- Development: Live-reloaded on file changes; accessible at http://localhost:1313
- Production: Generated in
public/anddocs/directories - RSS feeds: Auto-generated for home, sections, and taxonomy pages
All markdown files follow Hugo convention with YAML front matter:
---
title: "Page Title"
description: "Short description for meta tags and summaries"
draft: false # Set to true to exclude from builds (visible with -D)
date: 2024-01-01T00:00:00Z
categories: ["category-name"]
tags: ["tag1", "tag2"]
author: "Author Name"
---- Framework: Tailwind CSS utility classes (in HTML templates)
- Icons: FontAwesome 6+ (
<i class="fas fa-icon-name"></i>) - Color Scheme: Blues for primary (hero/nav), purples for highlights (podcast), gradients for sections
- Responsive Design: Mobile-first with
sm:,lg:breakpoints
Example header component pattern (from baseof.html):
<meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}">Located in ../hugo.yaml params:
- Podcast:
podcast.title,podcast.description,podcast.feed_url - Summit:
summit.year,summit.dates,summit.location,summit.registration_url - Social Links: Twitter, YouTube, GitHub, Discord, Bluesky URLs in
socialmap
Update these centrally; templates access via .Site.Params.podcast.title etc.
Defined in ../hugo.yaml:
taxonomies:
category: categories
tag: tags
author: authorsEach taxonomy auto-generates list pages at /categories/, /tags/, /authors/ with RSS feeds.
- Enabled globally:
enableRSSFeed: true - Output formats: Home and sections generate both HTML and RSS
- RSS feed links in baseof.html use
{{ range .AlternativeOutputFormats }} - Podcast feed URL points to external podbean:
https://powershellpodcast.podbean.com/feed/
- Site publishes to
docs/folder for GitHub Pages compatibility - Both
public/anddocs/are build outputs (verify in CI/CD scripts)
All pages auto-generate OG metadata in baseof.html:
- Images: Look for
og:imagein front matter; defaults to site image - Title/Description: Pulled from front matter, fallback to site defaults
- Create
content/section/_index.mdorcontent/section/page-name.md - Include front matter with
title,description,draft: false - Write content in Markdown (supports HTML with
unsafe: truein markup config) - Run
npm run devto preview
Edit ../hugo.yaml params section (podcast, summit, social) - no page rebuild needed for config.
- Edit templates in ../themes/powershell-community/layouts/
- Use Hugo template functions:
.Title,.Content,range .Pages,.Truncate,.Permalink - Hot-reload works with
npm run dev; Tailwind classes apply without rebuild
<!-- Community stats in templates -->
{{ .Site.Data.community_stats.stats.total_topics }}
{{ range .Site.Data.community_stats.activities }}
{{ .message }} <!-- Current activity -->
{{ end }}- Hugo: v0.128+ (using goldmark markdown, pagination v2 syntax)
- Node.js: For npm scripts (package.json defines hugo-extended and node-fetch)
- Tailwind CSS: Utility-first CSS framework (classes in HTML templates)
- FontAwesome: Icon library (v6+ icons via CDN in baseof.html)
- Don't use old Hugo pagination syntax (
{{ .Paginate }}without.Paginateassignment) - v0.128+ requires explicit assignment - Don't commit
public/ordocs/folders - Generated by CI/CD - Draft pages are hidden by default - Must add
-Dflag tohugo serveror setdraft: falsein front matter - Section aliases/redirects - If moving content, add
aliases: ["/old-path/"]to front matter - Hardcoding URLs - Use
.Permalink,.RelRef, and.Site.BaseURLinstead