HugoPortfolioBlogTool Site

hugo-theme-introduction — Hugo Portfolio Template

By victoriadrake

Introduction is a minimal Hugo theme that can be configured as a single page or a full site with multiple sections. It includes built-in Projects and Blog sections, multilingual support, light and dark themes, and Markdown-driven homepage sections.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

2 previews
Desktop homepage1 / 2
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 2

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

Can be configured as a single-page site or as a full site with multiple sections

02

Homepage sections are generated from Markdown files under content/home/, with weight sorting and image support

03

Built-in Projects and Blog sections; projects support external links, timelines, and multi-image carousel galleries

04

Multilingual support with translation files for multiple languages in the i18n/ directory

05

Includes light and dark themes, page fade-in and smooth anchor scrolling, Markdown typography, and syntax highlighting

06

Styles use Sass and Sass variables, compiled via Hugo Pipes and PostCSS

Template Details

Introduction is a theme for the Hugo static site generator, positioned as minimal and flexible: it can be used as a single-page site or organized as a full site with multiple sections. Homepage content is composed of Markdown files under content/home/, each corresponding to a homepage section, sortable via weight in frontmatter, and able to display an image on the left of the section via image; contact.md is always displayed as the last homepage section. The theme includes two built-in sections, Projects and Blog. Projects support standalone pages, external links, project timelines, and multi-image carousel galleries. Blog posts also appear in the homepage Blog section. Site configuration is centralized in config.toml, and menus, custom CSS, and custom JavaScript are all integrated through configuration options. The theme supports multilingual sites, with translation files for multiple languages provided in the i18n/ directory; additional languages can be added by creating .toml files. The theme includes light and dark theme styles, a fade-in effect on page load, smooth scrolling for anchor links, consistent typography for Markdown content (including post titles), and syntax highlighting. Styles are written in Sass and compiled to CSS via Hugo Pipes and PostCSS; Sass variables make it easy to adjust colors. The theme also provides optional Plausible and Google Analytics 4 integration, Disqus comments, and a local time display in the contact section. Usage constraints: production builds require Hugo extended 0.163.0 or later, Node.js 22.12 or later, and the theme's local PostCSS dependencies; when referencing the theme in a site, you must add the theme's node_modules/.bin to PATH before building. When previewing with hugo server, Sass is not compiled through PostCSS; only production builds use PostCSS to add browser prefixes. The example site demo is built by Netlify, and settings in netlify.toml take precedence over same-named settings in the Netlify panel.

HugoPortfolioBlogUtility site

Is it right for your project?

Use Cases

  • Build a personal portfolio site, using the Projects section to showcase projects with multi-image galleries
  • Create a personal blog, with posts also appearing in the homepage Blog section
  • Make a single-page personal introduction, using homepage sections to organize bio, projects, and contact information
  • Build a multilingual personal site, providing parallel content for different languages

Suitable For

  • Developers using Hugo who want to quickly build a personal portfolio or blog
  • Personal sites that need to flexibly switch between single-page and multi-section organization
  • Sites that need multilingual content and light/dark theme switching
  • Users who prefer managing content and configuration with Markdown and config.toml

Getting started & customization

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

  1. 1

    Requires Hugo extended 0.163.0 or later; production builds also require Node.js 22.12 or later

  2. 2

    Run npm ci --ignore-scripts in the theme directory to install locked PostCSS dependencies

  3. 3

    When using the theme in a site, add the theme's node_modules/.bin to PATH before building

  4. 4

    The theme can be placed in themes/introduction via git clone or git submodule

  5. 5

    Copy config.toml from exampleSite/ to the site root and modify the configuration as indicated by comments

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This entry covers the free version under the Apache-2.0 license in the public repository; the free scope applies to that version's code and does not imply that external services or third-party assets are free.

Must comply with when using

  • Free use, modification, commercial use, and distribution are permitted; when distributing, include the Apache-2.0 license.
  • Modified files must carry prominent notices of changes, and relevant copyright, patent, trademark, and attribution notices must be retained.
  • If the original project includes a NOTICE file, applicable attribution notices in it must be retained when distributing derivative works.
  • The license includes an applicable contributor patent grant; initiating patent litigation as described in the license terminates that patent grant, and no trademark rights are granted.
  • 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

  • Using this theme requires Hugo extended 0.163.0 or later; standard Hugo does not meet the requirement.
  • Production builds also require Node.js 22.12 or later and the theme's local PostCSS dependencies.
  • When using the theme in a site, the theme's node_modules/.bin must be added to PATH before building; otherwise, production builds cannot use PostCSS.
  • Enabling Plausible analytics requires registering a Plausible account; it is an external service and may incur costs.
  • After configuring a Google Analytics 4 measurement ID, the theme loads Google's gtag.js external script.
  • Enabling Disqus comments requires setting disqusshortname; the comment feature depends on the external Disqus service.
  • Running npm test for build regression tests requires Python 3.9+ and Google Chrome.
  • The official Netlify demo uses Hugo 0.165.0 and Node.js 24, which differ from the theme's minimum supported versions.
  • When deploying with Netlify, settings in netlify.toml override same-named settings in the Netlify panel.
  • Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses; they cannot be judged solely by the code's Apache-2.0 license.
  • External services such as domains, hosting, databases, payments, or AI may incur additional charges.
View Original Text Basis

no-charge, royalty-free, irrevocable copyright license

Original License Text

Requires **Hugo extended 0.163.0 or later**.

Original README

Production builds also require **Node.js 22.12 or later** and the theme's local PostCSS dependencies.

Original README

PATH="$PWD/themes/introduction/node_modules/.bin:$PATH" hugo

Original README

You'll need your own Plausible account - see [plausible.io](https://plausible.io/) for more.

Original README

The theme loads Google's `gtag.js` when this ID is present.

Original README

Set `disqusshortname` in `config.toml` to activate Hugo's [internal Disqus template](https://gohugo.io/templates/internal/#disqus).

Original README

Run `npm test` for the build regressions (Python 3.9+ and Google Chrome required)

Original README

The demo pins **Hugo 0.165.0** and **Node.js 24**.

Original README

Settings in `netlify.toml` take precedence over matching settings in the Netlify dashboard.

Original README
https://github.com/victoriadrake/hugo-theme-introduction/blob/master/LICENSEhttps://github.com/victoriadrake/hugo-theme-introduction/blob/master/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
Hugo Themes
Documentation and maintenance reference score
More documented · 96 / 100
Technologies
Hugo
Website type
Portfolio · Blog · Tool Site
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-08
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 Hugo 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: b803388c56f98fd935ef4de1830055af1984e0291e4f287d778e1aab77047cb1

2026-10-02T10:32:10.658Z

Source file / repository
# Introduction theme for Hugo

[![Netlify Status](https://api.netlify.com/api/v1/badges/51d09485-c9d1-4a88-90ba-894f09e5a29d/deploy-status)](https://app.netlify.com/sites/hugo-introduction/deploys)
![Test Hugo versions](https://github.com/victoriadrake/hugo-theme-introduction/workflows/test-versions/badge.svg)
![Latest Release](https://img.shields.io/github/tag/victoriadrake/hugo-theme-introduction.svg)

Introduction is a minimalist, highly-versatile theme for Hugo. It can be configured as a single page, or as a full-featured site with multiple sections. It is multilingual, responsive, and includes a light and dark theme.

New to the Hugo static site generator? [Learn the fundamentals here](https://gohugo.io/categories/fundamentals).

![Device mockups](https://github.com/victoriadrake/hugo-theme-introduction/blob/master/images/mockup.png)

Features:

- Multilingual - supports side-by-side content in different language versions
- Custom index page sections from Markdown files
- Projects and Blog sections
- Page load fade-in CSS effect and smooth scrolling to anchor links
- Straightforward customization via `config.toml`
- Styled Markdown throughout, including post titles
- Syntax highlighting

Developer-friendly:

- Sass files included with instant compiling to CSS thanks to [Hugo Pipes](https://gohugo.io/hugo-pipes/postcss/) and [PostCSS](https://gohugo.io/hugo-pipes/postcss/)
- Thoughtful use of Sass variables makes creating new colour schemes easy

## Getting started

Requires **Hugo extended 0.163.0 or later**. See the [Hugo installation instructions](https://gohugo.io/getting-started/installing/). The minimum supported version and the latest release are tested in CI.

Production builds also require **Node.js 22.12 or later** and the theme's local PostCSS dependencies. From the theme directory, install the locked versions:

```sh
npm ci --ignore-scripts
```

When using the theme inside another Hugo site, put the theme's local tools on your path before building. From your site's root:

```sh
PATH="$PWD/themes/introduction/node_modules/.bin:$PATH" hugo
```

`hugo server` previews compile Sass without PostCSS. Production builds use PostCSS to add browser prefixes; no global npm packages are required.

## Get the theme

Run from the root of your Hugo site:

```sh
git clone https://github.com/victoriadrake/hugo-theme-introduction.git themes/introduction
```

Alternatively, you can include this repository as a [git submodule](https://git-scm.com/docs/gitsubmodules). This makes it easier to update this theme if you have your Hugo site in git as well:

```sh
git submodule add https://github.com/victoriadrake/hugo-theme-introduction.git themes/introduction
```

## Preview the theme

Introduction ships with a fully configured example site. From the theme directory:

```sh
npm run dev
```

Then visit `http://localhost:1313/` in your browser to view the example site.

To build the example site, run `npm run build`. Output goes to `docs/`. Override the example URL with `HUGO_BASEURL=https://example.org/ npm run build` when needed.

Run `npm test` for the build regressions (Python 3.9+ and Google Chrome required) and `npm run check:html` after building to check internal links and assets, including accidental `example.com` URLs. The tests use temporary copies and leave local content and generated resources untouched.

This modernization keeps the existing content and configuration model. Navigation and project dialogs use native JavaScript; the existing Owl Carousel still uses bundled jQuery.

## Netlify demo

The [live demo](https://hugo-introduction.netlify.app/) automatically builds and publishes successful pushes to `master`. [netlify.toml](netlify.toml) controls the build: it runs `npm run build && npm run check:html` from the repository root and publishes `docs/`.

The demo pins **Hugo 0.165.0** and **Node.js 24**. This is separate from the theme's minimum supported Hugo version, 0.163.0. New Hugo releases are tested by CI, but the demo's pin must be updated explicitly. Settings in `netlify.toml` take precedence over matching settings in the Netlify dashboard.

After deploying, verify the Hugo version in the production build log and check that images load from the demo domain. A failed build leaves the previous successful deployment live.

## Add content

The following explains how to add content to your Hugo site. You can find sample content in the `exampleSite/` folder.

## Introduction section

Create `index.md`:

```sh
hugo new home/index.md
```

The `title` frontmatter will be the first large heading.

The content of `index.md` will be shown as a subtitle line.

You might want to set `headless` to `true` in the frontmatter. See [headless bundles](https://gohugo.io/content-management/page-bundles/#headless-bundle) for more information.

## Home page

Content for the home page lives under `content/home/`. You may add as many files as you want to in markdown format.

Each markdown file will show as a section on the home page and can be ordered by the `weight` value in the file's frontmatter. You can set `image` to show an image on the left side of the section. The image file must be in the `content/home/` folder.

You may add a contact section by creating
`contact.md`:

```sh
hugo new home/contact.md
```

This will always be shown as the last section on the home page.

## Projects section

Introduction provides an easy way to showcase your projects. Each project can even have its own gallery, shown as an image carousel.

Start by creating an index file for the projects section:

```sh
hugo new projects/_index.md
```

Add a `title` and some optional content to the file.
Add an optional `weight` for ordering projects section.

To create a project, run:

```sh
hugo new projects/YourProjectName/index.md
```

The frontmatter of your new file contains some comments to help your configure your project.

You can set `external_link` to make the project link to another website.

Add images to your project by placing image files in the `YourProjectName/` folder. If you add more then one photo, they will display as a carousel gallery. Images will be ordered by filename. The first image will be shown as the project preview image. You can change the order of your images by adding a `weight` to that resource's parameters:

```sh
resources:
    - src: NameOfYourImage.jpg
      params:
          weight: -100
project_timeframe: "June-December"
```

You can add a `project_timeframe` parameter to the frontmatter of your project to optionally display an arbitrary string on the homepage and modal.

## Blog section

Create an index file for the blog:

```sh
hugo new blog/_index.md
```

Add an optional `weight` for ordering blog section on your homepage

Create a new blog post with:

```sh
hugo new blog/YourEntryTitle.md
```

Posts will also display in the Blog section of the home page.

## Configure your site

From `exampleSite/`, copy `config.toml` to the root folder of your Hugo site and change the fields as you like. Helpful comments are provided.

## Multilingual

Introduction currently ships with support for [many languages](https://github.com/victoriadrake/hugo-theme-introduction/tree/master/i18n). Contributions for other language translations are welcome.

To create a new language translation, add the `.toml` file to the `i18n/` folder. See the existing files for the necessary fields.

See the [hugo documentation](https://gohugo.io/content-management/multilingual/) for more details.

## Menu

Introduction contains a default menu. If you want to override this, you can do so by defining a `menu.main` in `config.toml`.

Optionally, you can disable this menu by setting `showMenu` to `false` in your `config.toml`.

## Contact section clock

Introduction can optionally show your current local time in your [contact section](https://hugo-introduction.netlify.app/#contact). This uses vanilla JS and variables you provide. You can set this up by copying the settings in the exampleSite `config.toml` for `localTime`, `timeZone`, and `timeFormat`.

## Plausible

You can easily use Plausible.io for analytics by setting `plausible = true` in your `config.toml`. Plausible offers a privacy-friendly alternative to Google Analytics. You'll need your own Plausible account - see [plausible.io](https://plausible.io/) for more.

## Google Analytics

For Google Analytics 4, set the measurement ID in your configuration:

```toml
[services.googleAnalytics]
  id = "G-MEASUREMENT_ID"
```

The theme loads Google's `gtag.js` when this ID is present.

## Disqus

Set `disqusshortname` in `config.toml` to activate Hugo's [internal Disqus template](https://gohugo.io/templates/internal/#disqus).

## Custom CSS

You can add custom CSS files by placing them under `assets/` and adding the paths to the files to the `customCSS` list in `config.toml`.

## Custom JavaScript

You can add custom JavaScript files by placing them under `assets/` and adding the paths to the files to the `customJS` list in `config.toml`.

## Issues

If you have a question or get stuck, please [open an issue](https://github.com/victoriadrake/hugo-theme-introduction/issues) for help and to help those who come after you. The more information you can provide, the better!

## Contributing

Contributions for new translations, fixes, and features are welcome.

This theme would not be nearly as awesome without its amazing community of open source [contributors](https://github.com/victoriadrake/hugo-theme-introduction/graphs/contributors). Thank you so much! ❤

## License

Copyright (C) 2017-2026 [Victoria Drake](https://victoria.dev/)

Licensed under the [Apache License, Version 2.0](https://github.com/victoriadrake/hugo-theme-introduction/blob/master/LICENSE) (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0).

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.