diff --git a/.github/workflows/release-package-splitter.yml b/.github/workflows/release-package-splitter.yml index f6d25864..ceae24b3 100644 --- a/.github/workflows/release-package-splitter.yml +++ b/.github/workflows/release-package-splitter.yml @@ -63,6 +63,7 @@ jobs: ["templates/startup-landing-page"]="hugo-theme-startup-landing-page" ["templates/dev-portfolio"]="hugo-theme-developer-portfolio" ["templates/markdown-slides"]="hugo-theme-markdown-slides" + ["templates/starter"]="hugo-starter" ) build_full_matrix() { diff --git a/scripts/view-starter-dev.sh b/scripts/view-starter-dev.sh index 0eb1a187..7068e563 100755 --- a/scripts/view-starter-dev.sh +++ b/scripts/view-starter-dev.sh @@ -83,9 +83,9 @@ github.com/HugoBlox/kit/modules/slides -> ../../../modules/slides" if [ "$PAGEFIND" = true ]; then hugo if command -v pnpm >/dev/null 2>&1; then - pnpm exec pagefind --site "public" --output-subdir ../static/pagefind + pnpm exec pagefind --site "public" --output-subdir ../static/pagefind 2>/dev/null || true else - npm_config_yes=true npx pagefind --site "public" --output-subdir ../static/pagefind + npm_config_yes=true npx pagefind --site "public" --output-subdir ../static/pagefind 2>/dev/null || true fi fi diff --git a/templates/starter/.github/workflows/build.yml b/templates/starter/.github/workflows/build.yml new file mode 100644 index 00000000..a14eef8e --- /dev/null +++ b/templates/starter/.github/workflows/build.yml @@ -0,0 +1,138 @@ +name: Build + +env: + NODE_VERSION: '20' + +on: + # Standalone trigger for PR validation + pull_request: + branches: ['main'] + # Reusable workflow trigger - called by deploy.yml + workflow_call: + outputs: + artifact-id: + description: 'The ID of the uploaded artifact' + value: ${{ jobs.build.outputs.artifact-id }} + # Allow manual trigger for testing + workflow_dispatch: + +# Read-only permissions for security +permissions: + contents: read + +# Prevent duplicate builds for the same PR +concurrency: + group: build-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + build: + if: github.repository_owner != 'HugoBlox' + runs-on: ubuntu-latest + timeout-minutes: 10 + outputs: + artifact-id: ${{ steps.upload.outputs.artifact-id }} + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + # Fetch history for Hugo's .GitInfo and .Lastmod + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: ${{ env.NODE_VERSION }} + + - name: Setup pnpm + if: hashFiles('package.json') != '' + uses: pnpm/action-setup@v4 + + - name: Get Hugo Version + id: hugo-version + run: | + # Install pinned yq version for robust YAML parsing + YQ_VERSION="v4.44.1" + if ! wget -q --tries=3 --waitretry=1 -O /tmp/yq \ + "https://github.com/mikefarah/yq/releases/download/${YQ_VERSION}/yq_linux_amd64"; then + echo "::error::Failed to download yq" + exit 1 + fi + sudo mv /tmp/yq /usr/local/bin/yq + sudo chmod +x /usr/local/bin/yq + + # Read hugo_version from hugoblox.yaml + VERSION=$(yq '.build.hugo_version // ""' hugoblox.yaml 2>/dev/null | grep -v '^null$' || true) + + # Fallback to a known stable version if not specified + DEFAULT_VERSION="0.154.5" + VERSION=${VERSION:-$DEFAULT_VERSION} + + # Validate version format (basic check) + if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "::warning::Invalid hugo_version format '$VERSION', using default $DEFAULT_VERSION" + VERSION="$DEFAULT_VERSION" + fi + + echo "HUGO_VERSION=$VERSION" >> $GITHUB_ENV + echo "Using Hugo version: $VERSION" + + - name: Install dependencies + run: | + # Install Tailwind CLI if package.json exists + if [ -f "package.json" ]; then + echo "Installing Tailwind dependencies..." + pnpm install --no-frozen-lockfile || npm install + fi + + - name: Setup Hugo + uses: peaceiris/actions-hugo@v3 + with: + hugo-version: ${{ env.HUGO_VERSION }} + extended: true + + # Cache dependencies (Go modules, node_modules) - stable, rarely changes + - uses: actions/cache@v5 + with: + path: | + /tmp/hugo_cache_runner/ + node_modules/ + modules/*/node_modules/ + key: ${{ runner.os }}-hugo-deps-${{ hashFiles('**/go.mod', '**/package-lock.json', + '**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-hugo-deps- + + # Cache Hugo resources (processed images, CSS) - invalidates only when assets/config change + - uses: actions/cache@v5 + with: + path: resources/ + key: ${{ runner.os }}-hugo-resources-${{ hashFiles('assets/**/*', 'config/**/*', + 'hugo.yaml', 'package.json') }} + restore-keys: | + ${{ runner.os }}-hugo-resources- + + - name: Setup Pages + id: pages + uses: actions/configure-pages@v5 + + - name: Build with Hugo + env: + HUGO_ENVIRONMENT: production + HUGO_BLOX_LICENSE: ${{ secrets.HUGO_BLOX_LICENSE }} + run: | + echo "Hugo Cache Dir: $(hugo config | grep cachedir)" + hugo --minify --baseURL "${{ steps.pages.outputs.base_url }}/" + + - name: Generate Pagefind search index (if applicable) + run: | + # Check if site uses Pagefind search + if [ -f "package.json" ] && grep -q "pagefind" package.json; then + pnpm run pagefind || npx pagefind --site "public" 2>/dev/null || true + fi + + - name: Upload artifact + id: upload + uses: actions/upload-pages-artifact@v4 + with: + path: ./public diff --git a/templates/starter/.github/workflows/deploy.yml b/templates/starter/.github/workflows/deploy.yml new file mode 100644 index 00000000..fc582648 --- /dev/null +++ b/templates/starter/.github/workflows/deploy.yml @@ -0,0 +1,83 @@ +name: Deploy website to GitHub Pages + +on: + # Trigger the workflow every time you push to the `main` branch + push: + branches: ['main'] + # Allows you to run this workflow manually from the Actions tab on GitHub + workflow_dispatch: + +# Provide permission to clone the repo and deploy it to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: 'pages' + cancel-in-progress: false + +jobs: + # Check deployment configuration + config: + if: github.repository_owner != 'HugoBlox' + runs-on: ubuntu-latest + outputs: + deploy-host: ${{ steps.check.outputs.host }} + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + sparse-checkout: hugoblox.yaml + sparse-checkout-cone-mode: false + + - name: Check deploy host + id: check + run: | + # Install pinned yq version for robust YAML parsing + YQ_VERSION="v4.44.1" + if ! wget -q --tries=3 --waitretry=1 -O /tmp/yq \ + "https://github.com/mikefarah/yq/releases/download/${YQ_VERSION}/yq_linux_amd64"; then + echo "::error::Failed to download yq" + exit 1 + fi + sudo mv /tmp/yq /usr/local/bin/yq + sudo chmod +x /usr/local/bin/yq + + # Read deploy.host from hugoblox.yaml, default to github-pages + HOST=$(yq '.deploy.host // ""' hugoblox.yaml 2>/dev/null | grep -v '^null$' || true) + HOST=${HOST:-github-pages} + + # Validate known hosts + if [[ ! "$HOST" =~ ^(github-pages|netlify|vercel|cloudflare|none)$ ]]; then + echo "::warning::Unknown deploy host '$HOST', defaulting to github-pages" + HOST="github-pages" + fi + + echo "host=$HOST" >> $GITHUB_OUTPUT + echo "Deployment target: $HOST" + + # Build website using reusable workflow (always runs for CI) + build: + needs: config + if: github.repository_owner != 'HugoBlox' + uses: ./.github/workflows/build.yml + secrets: inherit + + # Deploy website to GitHub Pages hosting (only if configured) + deploy: + needs: [config, build] + if: needs.config.outputs.deploy-host == 'github-pages' + # Grant GITHUB_TOKEN the permissions required to make a Pages deployment + permissions: + pages: write # to deploy to Pages + id-token: write # to verify the deployment originates from an appropriate source + # Deploy to the github-pages environment + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/templates/starter/.github/workflows/upgrade.yml b/templates/starter/.github/workflows/upgrade.yml new file mode 100644 index 00000000..25dffa3d --- /dev/null +++ b/templates/starter/.github/workflows/upgrade.yml @@ -0,0 +1,98 @@ +name: Upgrade HugoBlox + +on: + workflow_dispatch: + inputs: + version_type: + description: 'Upgrade to version' + required: true + default: 'Stable' + type: choice + options: + - Stable + - Beta (Preview) + schedule: + # Run at 05:00 on Monday + - cron: '0 5 * * 1' + +permissions: + contents: write + pull-requests: write + +# Prevent duplicate upgrade runs +concurrency: + group: upgrade-${{ github.ref }} + cancel-in-progress: true + +jobs: + upgrade: + name: Upgrade + if: github.repository_owner != 'HugoBlox' + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: '22' + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + package_json_path: ./package.json + run_install: false + + - name: Setup Go + uses: actions/setup-go@v6 + with: + go-version: '1.23' + + - name: Setup Hugo + uses: peaceiris/actions-hugo@v3 + with: + hugo-version: 'latest' + extended: true + + - name: Run Upgrade CLI + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # Use manual input or default to stable for scheduled runs + VERSION_TYPE: ${{ inputs.version_type || 'Stable' }} + run: | + FLAGS="--yes --ci" + + if [ "$VERSION_TYPE" == "Beta (Preview)" ]; then + FLAGS="$FLAGS --canary" + fi + + echo "Running upgrade with flags: $FLAGS" + pnpm dlx hugoblox@latest upgrade $FLAGS + + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v7 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: "chore(deps): upgrade hugoblox modules" + title: "Upgrade HugoBlox Modules" + body: | + This PR upgrades the [HugoBlox](https://hugoblox.com) modules to the latest version. + + **Changes:** + - Updated Hugo Modules (go.mod/go.sum) + - Applied automatic migrations (if any) + + **Verification:** + - [ ] Check the Deploy Preview to ensure everything looks correct. + - [ ] Merge this PR to apply the updates. + branch: "chore/upgrade-hugoblox-${{ github.run_id }}" + delete-branch: true + base: main + labels: | + dependencies + automated-pr diff --git a/templates/starter/.gitignore b/templates/starter/.gitignore new file mode 100644 index 00000000..de02595e --- /dev/null +++ b/templates/starter/.gitignore @@ -0,0 +1,27 @@ +# Hugo Build Artifacts +public/ +resources/ +.hugo_build.lock +hugo_stats.json +**/assets/jsconfig.json + +# Node.js +node_modules/ + +# Environment +.env +.env.local +.env.*.local + +# Pagefind search index +pagefind/ +static/pagefind/ + +# OS +.DS_Store +Thumbs.db +*~ + +# Logs +*.log +npm-debug.log* diff --git a/templates/starter/README.md b/templates/starter/README.md new file mode 100644 index 00000000..3c9f6843 --- /dev/null +++ b/templates/starter/README.md @@ -0,0 +1,229 @@ +# [HugoBlox Starter — Your Blank Canvas](https://github.com/HugoBlox/hugo-starter) + +[![Screenshot](https://github.com/HugoBlox/kit/raw/main/.github/media/hero.png)](https://hugoblox.com/templates/starter/start/?utm_source=github&utm_medium=readme&utm_content=preview) + +

Describe It. Deploy It. Own It.

+ +

+ The fastest path from idea to live site.
+ Start with a blank page. Tell AI what you want. Get a production site in minutes — not days.
+ Built on HugoBlox — the open-source framework where AI generates your pages and you own everything as Markdown. +

+ +

+ Deploy Free (60s) +   |   + Build with AI +   |   + Live Demo +

+ +
+ + + GitHub Stars + + + Discord + + + HugoBlox Stars + + +
+ +

+ Part of the HugoBlox ecosystem · 150,000+ sites · Rated 4.9/5 (official survey) · Trusted since 2016 +

+ +--- + +## How It Works + +Other templates give you someone else's layout. This one gives you a blank page and an AI that builds exactly what you ask for. + + + + + + +
+ +### 1. Tell AI what you want + +Open [Hugo Chat](https://hugo.chat/?utm_source=github&utm_medium=readme&utm_content=how_it_works_starter) and describe your site in plain English: + +> *"Build me a landing page for my SaaS with a hero, three feature columns, pricing table, and a contact form"* + +> *"Create a research lab site with team profiles, a publications list, and a news feed"* + +> *"I need a portfolio with a filterable project grid and an about page"* + +Hugo Chat generates structured pages with correct front matter, blocks, and content — ready to paste in. + + + +### 2. Edit visually or in Markdown + +Fine-tune with whichever workflow fits you: + +**[Ownable CMS](https://marketplace.visualstudio.com/items?itemName=ownable.ownable)** — drag-and-drop editing inside VS Code. Rearrange blocks, update text, change design tokens. No terminal needed. + +**Markdown** — every page is a file you can read and edit. Change a heading, add a section, commit and push. + +**Hugo Chat** — come back anytime to generate new pages or refine existing ones. + +### 3. Deploy free + +Push to GitHub. Your site builds and deploys automatically via GitHub Pages. Zero cost, zero config. + +
+ +

+ + Build with AI + +

+ +--- + +## What You Can Build + +This is a blank canvas with the full HugoBlox engine behind it. Add any combination of content types: + +| Content type | URL | Use it for | +| :--- | :--- | :--- | +| **Landing pages** | any path | Hero sections, feature grids, CTAs, pricing — assembled from blocks | +| **Blog** | `/blog/` | Posts with dates, tags, categories, reading time | +| **Projects** | `/projects/` | Software, research projects, portfolio items | +| **Publications** | `/publications/` | Papers, articles, preprints with citation metadata | +| **Events** | `/events/` | Talks, webinars, workshops, conferences | +| **Datasets** | `/datasets/` | Research data with DOIs and download links | +| **Case studies** | `/case-studies/` | Customer stories, project showcases, impact reports | +| **Changelog** | `/changelog/` | Product updates, release notes, version history | +| **Courses** | `/courses/` | Lessons, tutorials, learning paths with breadcrumbs | +| **Docs** | `/docs/` | Documentation with sidebar navigation | +| **FAQ** | `/faq/` | Frequently asked questions | +| **Slides** | `/slides/` | Presentations from Markdown via reveal.js | + +Every content type supports tags, categories, search, RSS, related content, and social sharing out of the box. + +--- + +## 🚀 Get Started + +### Step 1: Deploy Your Site + +**Option A: Launch in browser** (fastest — no install needed) + +> [!TIP] +> Deploy a live site in 60 seconds — no software to install: +> [**Deploy Starter free**](https://hugoblox.com/templates/starter/start?utm_source=github&utm_medium=readme&utm_content=get_started) + +**Option B: Use the CLI** + +```bash +# Requires Hugo Extended & Node.js +npx hugoblox create site --template starter +``` + +### Step 2: Build Pages With AI + +Open [Hugo Chat](https://hugo.chat/?utm_source=github&utm_medium=readme&utm_content=step2_starter) and describe the pages you want. Paste the generated files into your `content/` folder. Push to GitHub — your site updates automatically. + +### Step 3: Customize Visually + +Install [Ownable CMS](https://marketplace.visualstudio.com/items?itemName=ownable.ownable) in VS Code to edit pages visually — rearrange blocks, update content, and preview changes without touching code. + +![Ownable CMS in Action](https://raw.githubusercontent.com/HugoBlox/kit/main/.github/media/studio/slide-1.webp) +*Ownable CMS: Drag-and-drop page builder inside VS Code.* + +> [!NOTE] +> **New to Hugo?** No problem. You don't need to know Hugo — build with AI or edit visually. Hugo is the engine under the hood that makes your site fast, secure, and free to host. [Learn more →](https://docs.ownable.dev/?utm_source=github&utm_medium=readme&utm_content=docs_starter) + +--- + +## 🏆 Why HugoBlox? + +> *Why not just use WordPress, Webflow, or an AI builder like Lovable?* + +| | **AI builders** (Lovable, v0) | **CMS platforms** (WordPress, Webflow) | **HugoBlox** | +| :--- | :---: | :---: | :---: | +| AI generates your pages | Yes | No | **Yes** | +| You own the output as readable files | No — React code | No — database | **Yes — Markdown** | +| Free to host forever | No | No | **Yes** | +| Human-editable without the tool | Barely | No | **Yes — it's Markdown** | +| Open source | No | No | **Yes — MIT licensed** | + +> [!IMPORTANT] +> Your content is plain Markdown files. No lock-in, no database, no vendor dependency. If you ever want to leave, take your files and go. + +--- + +## FAQ + +
+Do I need to know Hugo? +No. Build with Hugo Chat or edit visually with Ownable CMS. Hugo is the build engine — you don't need to touch it. +
+ +
+Why use this instead of a purpose-built template? +If you know what you want — a CV, a blog, a docs site — use those templates. The starter is for when you want full control, or when you're building something that doesn't fit a predefined layout. It's also the ideal starting point for Hugo Chat, which generates exactly the pages you describe. +
+ +
+Can I add any HugoBlox block? +Yes. The starter includes the full HugoBlox block library — hero, features, stats, testimonials, pricing, CTA, collection, and more. Assemble them in any combination. +
+ +
+Can I host for free? +Yes. GitHub Pages, Netlify, Vercel, and Cloudflare Pages all have free tiers for static sites. This template ships with GitHub Pages deployment pre-configured. +
+ +
+Can I migrate my content later? +Yes. Your site is just Markdown files in a folder. Copy them anywhere. +
+ +
+What's Hugo Chat? +An AI assistant that understands Hugo and HugoBlox. Describe what you want and it generates the right pages with correct front matter, blocks, and content. Free to try. +
+ +--- + +

🚀 Ready to build?

+ +

+ Deploy in 60 seconds. Build pages with AI. Own it as Markdown forever. +

+ +

+ Deploy Starter — free +   |   + Build with AI +

+ +--- + +## Community & Support + +- 💬 [**Discord**](https://discord.gg/z8wNYzb) — ask questions, share your site +- 📚 [**Docs**](https://docs.ownable.dev/?utm_source=github&utm_medium=readme&utm_content=community_starter) +- ⭐ [**Star HugoBlox**](https://github.com/HugoBlox/kit) — help others find it +- 🐦 [**Follow on X**](https://x.com/MakeOwnable) + +### Sponsors + +[**❤️ Sponsor on GitHub**](https://github.com/sponsors/gcushen) | [**🏢 Become a Partner**](https://github.com/sponsors/gcushen) + +--- + +Copyright 2016-present [**Lore Labs**](https://lore.tech/?utm_source=github&utm_medium=readme). +Released under the [MIT License](./LICENSE.md). + +

+ HugoBlox is a trademark of Lore Labs. +

diff --git a/templates/starter/config/_default/hugo.yaml b/templates/starter/config/_default/hugo.yaml new file mode 100644 index 00000000..8e78b8db --- /dev/null +++ b/templates/starter/config/_default/hugo.yaml @@ -0,0 +1,133 @@ +# Configuration of Hugo +# Guide: https://docs.hugoblox.com/ +# Hugo Documentation: https://gohugo.io/getting-started/configuration/ + +title: '' +baseURL: 'https://example.com/' + +############################ +## LANGUAGE +############################ + +defaultContentLanguage: en +hasCJKLanguage: false +defaultContentLanguageInSubdir: false +removePathAccents: true + +############################ +## PAGE OPTIONS +############################ + +cascade: + # Blog posts + - target: + path: /blog/** + kind: page + pager: true + show_date: true + show_date_updated: true + reading_time: true + commentable: true + show_related: true + share: true + show_breadcrumb: false + + # Publications + - target: + path: /publications/** + kind: page + show_date: true + share: true + pager: true + + # Events + - target: + path: /events/** + kind: page + show_date: true + share: true + pager: true + + # Projects + - target: + path: /projects/** + kind: page + show_date: false + share: true + + # Datasets + - target: + path: /datasets/** + kind: page + show_date: true + share: true + + # Case Studies + - target: + path: /case-studies/** + kind: page + show_date: true + share: true + + # Changelog + - target: + path: /changelog/** + kind: page + show_date: true + pager: false + + # Courses + - target: + path: /courses/** + kind: page + show_breadcrumb: true + pager: true + +############################ +## OUTPUTS +############################ + +outputs: + home: [HTML, RSS, backlinks] + section: [HTML, RSS] + +############################ +## ADVANCED +############################ + +build: + writeStats: true +enableGitInfo: false +summaryLength: 30 +pagination: + pagerSize: 10 +enableEmoji: true +enableRobotsTXT: true +footnotereturnlinkcontents: ^ +ignoreFiles: [".ipynb_checkpoints$", "\\.Rmd$", "\\.Rmarkdown$", "_cache$"] +disableAliases: true +imaging: + resampleFilter: lanczos + quality: 90 + anchor: smart + hint: picture +timeout: 600000 +taxonomies: + author: authors + tag: tags + category: categories +markup: + _merge: deep +related: + threshold: 80 + includeNewer: true + toLower: true + indices: + - name: tags + weight: 100 + - name: categories + weight: 70 +security: + _merge: deep +sitemap: + _merge: deep diff --git a/templates/starter/config/_default/module.yaml b/templates/starter/config/_default/module.yaml new file mode 100644 index 00000000..46d259c5 --- /dev/null +++ b/templates/starter/config/_default/module.yaml @@ -0,0 +1,23 @@ +############################ +## HUGO MODULES +## Install or uninstall themes and plugins here. +## Docs: https://gohugo.io/hugo-modules/ +############################ + +imports: + - path: github.com/HugoBlox/kit/modules/blox + +# Install any Hugo Blox within the `hugo-blox/blox/` folder +mounts: + - source: hugo-blox/blox/community + target: layouts/_partials/blox/community/ + files: + - "**.html" + - source: hugo-blox/blox + target: assets/dist/community/blox/ + files: + - "**.css" + - source: layouts + target: layouts + - source: assets + target: assets diff --git a/templates/starter/config/_default/params.yaml b/templates/starter/config/_default/params.yaml new file mode 100644 index 00000000..b02984a3 --- /dev/null +++ b/templates/starter/config/_default/params.yaml @@ -0,0 +1,91 @@ +# ══════════════════════════════════════════════════════════════════════════════ +# HUGOBLOX CONFIGURATION +# Schema: hugoblox.com/schema/v2 +# Documentation: https://docs.hugoblox.com/ +# ══════════════════════════════════════════════════════════════════════════════ +hugoblox: + schema: "2.0" + + # ──────────────────────────────────────────────────────────────────────────── + # IDENTITY + # ──────────────────────────────────────────────────────────────────────────── + identity: + name: "HugoBlox Starter" + organization: "" + type: person # person | organization | local_business + tagline: "" + description: "" + social: + twitter: "" + + # ──────────────────────────────────────────────────────────────────────────── + # THEME + # ──────────────────────────────────────────────────────────────────────────── + theme: + mode: system # light | dark | system + pack: "default" + colors: + primary: "" + secondary: "" + neutral: "" + + # ──────────────────────────────────────────────────────────────────────────── + # TYPOGRAPHY + # ──────────────────────────────────────────────────────────────────────────── + typography: + pack: "system" + + # ──────────────────────────────────────────────────────────────────────────── + # LAYOUT + # ──────────────────────────────────────────────────────────────────────────── + layout: + radius: "md" # none | sm | md | lg | full + spacing: "spacious" # compact | comfortable | spacious + avatar_shape: circle # circle | square | rounded + + # ──────────────────────────────────────────────────────────────────────────── + # HEADER + # ──────────────────────────────────────────────────────────────────────────── + header: + enable: true + style: navbar # navbar | navbar-simple | minimal + sticky: true + align: center # left | center | right + search: false + theme_toggle: true + + # ──────────────────────────────────────────────────────────────────────────── + # FOOTER + # ──────────────────────────────────────────────────────────────────────────── + footer: + style: minimal # minimal | columns | centered + + # ──────────────────────────────────────────────────────────────────────────── + # COPYRIGHT + # ──────────────────────────────────────────────────────────────────────────── + copyright: + notice: "© {year} {name}" + + # ──────────────────────────────────────────────────────────────────────────── + # CONTENT + # ──────────────────────────────────────────────────────────────────────────── + content: + math: + enable: false + toc: + enable: true + reading_time: + enable: true + + # ──────────────────────────────────────────────────────────────────────────── + # SEARCH + # ──────────────────────────────────────────────────────────────────────────── + search: + enable: false + + # ──────────────────────────────────────────────────────────────────────────── + # LOCALE + # ──────────────────────────────────────────────────────────────────────────── + locale: + date_format: "Jan 2, 2006" + time_format: "3:04 PM" diff --git a/templates/starter/content/_index.md b/templates/starter/content/_index.md new file mode 100644 index 00000000..d08072b1 --- /dev/null +++ b/templates/starter/content/_index.md @@ -0,0 +1,12 @@ +--- +title: 'Home' +type: landing +sections: + - block: hero + content: + title: Welcome + text: Get started by adding new content with [Hugo Chat](https://hugo.chat/?utm_source=hugoblox_site&utm_medium=hero_cta&utm_content=starter_homepage) or editing visually with [Ownable CMS](https://marketplace.visualstudio.com/items?itemName=ownable.ownable) for VS Code. + design: + spacing: + padding: ['5rem', 0, '5rem', 0] +--- diff --git a/templates/starter/data/authors/me.yaml b/templates/starter/data/authors/me.yaml new file mode 100644 index 00000000..a04d62dd --- /dev/null +++ b/templates/starter/data/authors/me.yaml @@ -0,0 +1,20 @@ +schema: hugoblox/author/v1 +slug: me +is_owner: true +name: + display: Your Name +role: '' +bio: '' + +affiliations: + - name: '' + url: '' + +links: + - icon: at-symbol + url: mailto:hello@example.com + label: Email + - icon: brands/github + url: https://github.com/ + - icon: brands/linkedin + url: https://www.linkedin.com/ diff --git a/templates/starter/go.mod b/templates/starter/go.mod new file mode 100644 index 00000000..3a00f655 --- /dev/null +++ b/templates/starter/go.mod @@ -0,0 +1,5 @@ +module github.com/HugoBlox/kit/templates/starter + +go 1.19 + +require github.com/HugoBlox/kit/modules/blox v0.12.0 diff --git a/templates/starter/hugoblox.yaml b/templates/starter/hugoblox.yaml new file mode 100644 index 00000000..6a6c40f2 --- /dev/null +++ b/templates/starter/hugoblox.yaml @@ -0,0 +1,8 @@ +build: + hugo_version: '0.159.2' +deploy: + # Deployment target: github-pages, netlify, vercel, cloudflare, or none + host: 'github-pages' +template: + id: "starter" + name: "Starter" diff --git a/templates/starter/package.json b/templates/starter/package.json new file mode 100644 index 00000000..f76c1868 --- /dev/null +++ b/templates/starter/package.json @@ -0,0 +1,19 @@ +{ + "name": "hugo-blox-starter", + "version": "1.0.0", + "private": true, + "packageManager": "pnpm@10.14.0", + "description": "Starter template for Hugo Blox with Tailwind CSS v4", + "scripts": { + "dev": "hugo server --disableFastRender", + "build": "hugo --minify && pnpm run pagefind", + "pagefind": "pagefind --site public 2>/dev/null || true" + }, + "dependencies": { + "@tailwindcss/cli": "^4.1.12", + "@tailwindcss/typography": "^0.5.10", + "pagefind": "^1.4.0", + "preact": "^10.27.2", + "tailwindcss": "^4.1.12" + } +} diff --git a/templates/starter/pnpm-lock.yaml b/templates/starter/pnpm-lock.yaml new file mode 100644 index 00000000..5c7a2c9a --- /dev/null +++ b/templates/starter/pnpm-lock.yaml @@ -0,0 +1,677 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@tailwindcss/cli': + specifier: ^4.1.12 + version: 4.2.3 + '@tailwindcss/typography': + specifier: ^0.5.10 + version: 0.5.19(tailwindcss@4.2.3) + pagefind: + specifier: ^1.4.0 + version: 1.5.2 + preact: + specifier: ^10.27.2 + version: 10.29.1 + tailwindcss: + specifier: ^4.1.12 + version: 4.2.3 + +packages: + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@pagefind/darwin-arm64@1.5.2': + resolution: {integrity: sha512-MXpI+7HsAdPkvJ0gk9xj9g541BCqBZOBbdwj9g6lB5LCj6kSV6nqDSjzcAJwvOsfu0fjwvC8hQU+ecfhp+MpiQ==} + cpu: [arm64] + os: [darwin] + + '@pagefind/darwin-x64@1.5.2': + resolution: {integrity: sha512-IojxFWMEJe0RQ7PQ3KXQsPIImNsbpPYpoZ+QUDrL8fAl/O27IX+LVLs74/UzEZy5uA2LD8Nz1AiwKr72vrkZQw==} + cpu: [x64] + os: [darwin] + + '@pagefind/freebsd-x64@1.5.2': + resolution: {integrity: sha512-7EVzo9+0w+2cbe671BtMj10UlNo83I+HrLVLfRxO731svHRJKUfJ/mo05gU14pe9PCfpKNQT8FS3Xc/oDN6pOA==} + cpu: [x64] + os: [freebsd] + + '@pagefind/linux-arm64@1.5.2': + resolution: {integrity: sha512-Ovt9+K35sqzn8H3ZMXGwls4TD/wMJuvRtShHIsmUQREmaxjrDEX7gHckRCrwYJ4XE1H1p6HkLz3wukrAnsfXQw==} + cpu: [arm64] + os: [linux] + + '@pagefind/linux-x64@1.5.2': + resolution: {integrity: sha512-V+tFqHKXhQKq/WqPBD67AFy7scn1/aZID00ws4fSDd+1daSi5UHR9VVlRrOUYKxn3VuFQYRD7lYXdZK1WED1YA==} + cpu: [x64] + os: [linux] + + '@pagefind/windows-arm64@1.5.2': + resolution: {integrity: sha512-hN9Nh90fNW61nNRCW9ZyQrAj/mD0eRvmJ8NlTUzkbuW8kIzGJUi3cxjFkEcMZ5h/8FsKWD/VcouZl4yo1F7B6g==} + cpu: [arm64] + os: [win32] + + '@pagefind/windows-x64@1.5.2': + resolution: {integrity: sha512-Fa2Iyw7kaDRzGMfNYNUXNW2zbL5FQVDgSOcbDHdzBrDEdpqOqg8TcZ68F22ol6NJ9IGzvUdmeyZypLW5dyhqsg==} + cpu: [x64] + os: [win32] + + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.6': + resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.6': + resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.6': + resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} + engines: {node: '>= 10.0.0'} + + '@tailwindcss/cli@4.2.3': + resolution: {integrity: sha512-u5l8rpeoD4LRPAVLA9edxqm6rBASgxJawvusPmWq23cx75g52LAGWVp52FHkE4vgbbcSCjEACO0hZou1x0qJPg==} + hasBin: true + + '@tailwindcss/node@4.2.3': + resolution: {integrity: sha512-dhXFXkW2dGvX4r/fi24gyXM0t1mFMrpykQjqrdA4SuavaMagm4SY1u5G2SCJwu1/0x/5RlZJ2VPjP3mKYQfCkA==} + + '@tailwindcss/oxide-android-arm64@4.2.3': + resolution: {integrity: sha512-0Jmt1U/zPqeKp1+fvgI3qMqrV5b/EcFIbE5Dl5KdPl5Ri6e+95nlYNjfB3w8hJBeASI4IQSnIMz0tdVP1AVO4g==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.2.3': + resolution: {integrity: sha512-c+/Etn/nghKBhd9fh2diG+3SEV1VTTPLlqH209yleofi28H87Cy6g1vsd3W3kf6r/dR5g4G4TEwHxo2Ydn6yFw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.2.3': + resolution: {integrity: sha512-1DrKKsdJTLuLWVdpaLZ0j/g9YbCZyP9xnwSqEvl3gY4ZHdXmX7TwVAHkoWUljOq7JK5zvzIGhrYmfE/2DJ5qaA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.2.3': + resolution: {integrity: sha512-HE6HHZYF8k7m80eVQ0RBvRGBdvvLvCpHiT38IRH9JSnBlt1T7gDzWoslWjmpXQFuqlRpzkCpbdKJa3NxWMfgVA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.3': + resolution: {integrity: sha512-Li2wVd2kkKlKkTdpo7ujHSv6kxD1UYMvulAraikyvVf6AKNZ/VHbm8XoSNimZ+dF7SOFaDD2VAT64SK7WKcbjQ==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.3': + resolution: {integrity: sha512-otIiImZaHj9MiDK02ItoWxIVcMTZVAX2F1c32bg9y7ecV0AnN5JHDZqIO8LxWsTuig1d+Bjg0cBWn4A9sGJO9Q==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.2.3': + resolution: {integrity: sha512-MmIA32rNEOrjh6wnevlR3OjjlCuwgZ4JMJo7Vrhk4Fk56Vxi7EeF7cekSKwvlrnfcn/ERC1LdcG3sFneU8WdoA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.2.3': + resolution: {integrity: sha512-BiCy1YV0IKO+xbD7gyZnENU4jdwDygeGQjncJoeIE5Kp4UqWHFsKUSJ3pp7vYURrqVzwJX2xD5gQeGnoXp4xPQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.2.3': + resolution: {integrity: sha512-venvyAu0AMKdr0c1Oz23IJJdZ72zSwKyHrLvqQV1cn49vPAJk3AuVtDkJ1ayk1sYI4M4j8Jv6ZGflpaP0QVSXQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.2.3': + resolution: {integrity: sha512-e3kColrZZCdtbwIOc07cNQ2zNf1sTPXTYLjjPlsgsaf+ttzAg/hOlDyEgHoOlBGxM88nPxeVaOGe9ThqVzPncg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.2.3': + resolution: {integrity: sha512-qpwoUPzfu71cppxOtcz4LXMR1brljS13yOcAAnVHKIL++NJvSQKZBKlP39pVowd+G6Mq34YAbf4CUUYdLWL9gQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.2.3': + resolution: {integrity: sha512-dTRIlLRC5lCRHqO5DLb+A18HCvS394axmzqfnRNLptKVw7WuckpUwo1Z87Yw74mesbeIhnQTA2SZbRcIfVlwxg==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.2.3': + resolution: {integrity: sha512-YyhwSBcxHLS3CU2Mk3dXDuVm8/Ia0+XvfpT8s9YQoICppkUeoobB3hgyGMYbyQ4vn6VgWH9bdv5UnzhTz2NPTQ==} + engines: {node: '>= 20'} + + '@tailwindcss/typography@0.5.19': + resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + enhanced-resolve@5.20.1: + resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} + engines: {node: '>=10.13.0'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + pagefind@1.5.2: + resolution: {integrity: sha512-XTUaK0hXMCu2jszWE584JGQT7y284TmMV9l/HX3rnG5uo3rHI/uHU56XTyyyPFjeWEBxECbAi0CaFDJOONtG0Q==} + hasBin: true + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + + preact@10.29.1: + resolution: {integrity: sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + tailwindcss@4.2.3: + resolution: {integrity: sha512-fA/NX5gMf0ooCLISgB0wScaWgaj6rjTN2SVAwleURjiya7ITNkV+VMmoHtKkldP6CIZoYCZyxb8zP/e2TWoEtQ==} + + tapable@2.3.2: + resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} + engines: {node: '>=6'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + +snapshots: + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@pagefind/darwin-arm64@1.5.2': + optional: true + + '@pagefind/darwin-x64@1.5.2': + optional: true + + '@pagefind/freebsd-x64@1.5.2': + optional: true + + '@pagefind/linux-arm64@1.5.2': + optional: true + + '@pagefind/linux-x64@1.5.2': + optional: true + + '@pagefind/windows-arm64@1.5.2': + optional: true + + '@pagefind/windows-x64@1.5.2': + optional: true + + '@parcel/watcher-android-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-x64@2.5.6': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.6': + optional: true + + '@parcel/watcher-win32-arm64@2.5.6': + optional: true + + '@parcel/watcher-win32-ia32@2.5.6': + optional: true + + '@parcel/watcher-win32-x64@2.5.6': + optional: true + + '@parcel/watcher@2.5.6': + dependencies: + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.4 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.6 + '@parcel/watcher-darwin-arm64': 2.5.6 + '@parcel/watcher-darwin-x64': 2.5.6 + '@parcel/watcher-freebsd-x64': 2.5.6 + '@parcel/watcher-linux-arm-glibc': 2.5.6 + '@parcel/watcher-linux-arm-musl': 2.5.6 + '@parcel/watcher-linux-arm64-glibc': 2.5.6 + '@parcel/watcher-linux-arm64-musl': 2.5.6 + '@parcel/watcher-linux-x64-glibc': 2.5.6 + '@parcel/watcher-linux-x64-musl': 2.5.6 + '@parcel/watcher-win32-arm64': 2.5.6 + '@parcel/watcher-win32-ia32': 2.5.6 + '@parcel/watcher-win32-x64': 2.5.6 + + '@tailwindcss/cli@4.2.3': + dependencies: + '@parcel/watcher': 2.5.6 + '@tailwindcss/node': 4.2.3 + '@tailwindcss/oxide': 4.2.3 + enhanced-resolve: 5.20.1 + mri: 1.2.0 + picocolors: 1.1.1 + tailwindcss: 4.2.3 + + '@tailwindcss/node@4.2.3': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.20.1 + jiti: 2.6.1 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.2.3 + + '@tailwindcss/oxide-android-arm64@4.2.3': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.2.3': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.2.3': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.2.3': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.3': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.3': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.2.3': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.2.3': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.2.3': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.2.3': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.2.3': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.2.3': + optional: true + + '@tailwindcss/oxide@4.2.3': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.2.3 + '@tailwindcss/oxide-darwin-arm64': 4.2.3 + '@tailwindcss/oxide-darwin-x64': 4.2.3 + '@tailwindcss/oxide-freebsd-x64': 4.2.3 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.3 + '@tailwindcss/oxide-linux-arm64-gnu': 4.2.3 + '@tailwindcss/oxide-linux-arm64-musl': 4.2.3 + '@tailwindcss/oxide-linux-x64-gnu': 4.2.3 + '@tailwindcss/oxide-linux-x64-musl': 4.2.3 + '@tailwindcss/oxide-wasm32-wasi': 4.2.3 + '@tailwindcss/oxide-win32-arm64-msvc': 4.2.3 + '@tailwindcss/oxide-win32-x64-msvc': 4.2.3 + + '@tailwindcss/typography@0.5.19(tailwindcss@4.2.3)': + dependencies: + postcss-selector-parser: 6.0.10 + tailwindcss: 4.2.3 + + cssesc@3.0.0: {} + + detect-libc@2.1.2: {} + + enhanced-resolve@5.20.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.2 + + graceful-fs@4.2.11: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + jiti@2.6.1: {} + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + mri@1.2.0: {} + + node-addon-api@7.1.1: {} + + pagefind@1.5.2: + optionalDependencies: + '@pagefind/darwin-arm64': 1.5.2 + '@pagefind/darwin-x64': 1.5.2 + '@pagefind/freebsd-x64': 1.5.2 + '@pagefind/linux-arm64': 1.5.2 + '@pagefind/linux-x64': 1.5.2 + '@pagefind/windows-arm64': 1.5.2 + '@pagefind/windows-x64': 1.5.2 + + picocolors@1.1.1: {} + + picomatch@4.0.4: {} + + postcss-selector-parser@6.0.10: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + preact@10.29.1: {} + + source-map-js@1.2.1: {} + + tailwindcss@4.2.3: {} + + tapable@2.3.2: {} + + util-deprecate@1.0.2: {}