Skip to content

Repository files navigation

Hugo Starter Project

What is this?

This is a small project to show the capabilities and structure of a website built using Hugo, a static website generator written in Go. It allows you to write reusable website components and pages using simple html template syntax, and to generate static html pages by combining these templates with different content.

Hugo enables teams to quickly build and iterate upon complex static websites. The resulting site is easy and cheap to host using an enterprise-grade service such as AWS Cloudfront, and very fast since there is no server-side rendering for each page request.

Setup

  1. Install Hugo using these these instructions.
  2. Run npm install or yarn to get the dependencies for the included Gulp build system.
  3. Build and optimize resources by running gulp
  4. Run hugo server to build the site and visit localhost:1313/hugo-starter/ to view it.

Structure

The Hugo documentation gives a much better overview of the project structure than me, so check it out.

  • The /content directory is where the core website content is stored. Files can be organized in any sort of directory structure and can be written in either markdown or plain html.
    • The +++ stuff at the top of each file is called "Front Matter", and can hold the metadata for each page. This metadata can later be accessed in the layouts to dynamically render content.
  • The /layouts directory contains the html templates, the structural building blocks for the website.
    • The /layouts/partials directory contains reusable html components that we can inject into any template. This is useful for headers, footers, navbars, sharing links, and other common components.
    • The /layouts/pages directory is where we store the templates for rendering the content in the /content directory.
    • The /layouts/shortcodes directory is where can store shortcodes, or reusable html blocks that we can use in any of the content pages.
      • The core difference between partials and shortcodes is that partials are used in layouts(such as a footer), and shortcodes are used in content(such as a right-aligned image).
  • The /archetypes, /data, and /themes directories have some cool roles as well, but we don't need to use them in this sample project. Check out the Hugo documentation for more info.
  • The core project configuration is stored within the config.toml file. The data here is accessible from any template in the /layouts directory. This is where we store top-level data like the site name and the menu configuration.
  • The prebuild resources(SCSS, Javascript ES6) are stored in the /src directory.
  • The built resources(css, javascript, images) are stored in the /static directory.
  • The /public directory is the final product, with the entire generated website.

Build System

This starter project has a basic Gulp build system configured. This allows us to write SCSS and ES6 Javascript in the /src directory, and compiles it to minified browser compatible code in the /static directory. It will also optimize any images in the /src/images directory.

  • To build all of the resources in the src directory, run gulp or gulp build.
  • To watch the /src directory and automatically rebuild when a change is detected, run gulp watch.
  • To build the /public directory from the static resources and html templates, run hugo.
  • The hugo server command serves the site to localhost:1313/hugo-starter, automatically watches the project files, and runs a live reload script on the web page whenever a change is made.
  • By running gulp watch and hugo server at the same time, you can automatically sync resource changes from /src directly to the webpage. As a shortcut for running both watchers at once, use npm start.

You can also place prebuilt resources, such as libraries and fonts, directly in the /static directory. These will be overwritten

by Gulp if they have the path js/scripts.js or css/style.css.

How To

Add a Page

Create a new file called {pagename}.html in the /content/{section}/ directory.

At the top of the file, add some metadata, called Front Matter.

Here's an example -

+++
title = "Sample Product 1"
draft = false
type = "page"
script = "product.js"
+++
  • Title - The page title. This is what will appear in the browser tab.
  • Draft - This will be more useful once the website is in production. For now just set it to false.
  • Type - The HTML template on which to show the page. This is where we add the header, footer, etc. Use "page" for all stand-alone pages.
  • Script - (optional) The javascript file to send with the page, for page specific behavior. Should correspond to a file in /src/js/page/.

The rest of the file should contain the html for the page content, i.e. whatever is between the header and the footer. Don't import any external javascript or css files here, it will hurt the SEO and page load.

Javascript

Add javascript to a page

Add a new file in /src/js/page/ called {pagetitle}.js Add the custom javascript here. The the page content file, add script ="{pagetitle}.js" to the Front Matter metadata. The script should now download and run whenever the page is visited.

Add a javascript library

Add the library JS file to /src/js/vendor. During the Gulp build process it will be minified and combined with all other libraries in the directory, and imported before the page-specific scripts on each page.

Add global javascript

For any javascript that should be run on every page, add it to /src/js/scripts.js.

CSS

Add a SCSS rule

Add the rule to the appropriate file in the /src/scss directory.

Add a CSS library

Add the library CSS file to the /src/css directory.

About

Minimal HelloWorld project to explore the Hugo static site generator.

Resources

Stars

6 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - socialcopsdev/hugo-starter: Minimal HelloWorld project to explore the Hugo static site generator. · GitHub
Skip to content

Repository files navigation

Hugo Starter Project

What is this?

This is a small project to show the capabilities and structure of a website built using Hugo, a static website generator written in Go. It allows you to write reusable website components and pages using simple html template syntax, and to generate static html pages by combining these templates with different content.

Hugo enables teams to quickly build and iterate upon complex static websites. The resulting site is easy and cheap to host using an enterprise-grade service such as AWS Cloudfront, and very fast since there is no server-side rendering for each page request.

Setup

  1. Install Hugo using these these instructions.
  2. Run npm install or yarn to get the dependencies for the included Gulp build system.
  3. Build and optimize resources by running gulp
  4. Run hugo server to build the site and visit localhost:1313/hugo-starter/ to view it.

Structure

The Hugo documentation gives a much better overview of the project structure than me, so check it out.

  • The /content directory is where the core website content is stored. Files can be organized in any sort of directory structure and can be written in either markdown or plain html.
    • The +++ stuff at the top of each file is called "Front Matter", and can hold the metadata for each page. This metadata can later be accessed in the layouts to dynamically render content.
  • The /layouts directory contains the html templates, the structural building blocks for the website.
    • The /layouts/partials directory contains reusable html components that we can inject into any template. This is useful for headers, footers, navbars, sharing links, and other common components.
    • The /layouts/pages directory is where we store the templates for rendering the content in the /content directory.
    • The /layouts/shortcodes directory is where can store shortcodes, or reusable html blocks that we can use in any of the content pages.
      • The core difference between partials and shortcodes is that partials are used in layouts(such as a footer), and shortcodes are used in content(such as a right-aligned image).
  • The /archetypes, /data, and /themes directories have some cool roles as well, but we don't need to use them in this sample project. Check out the Hugo documentation for more info.
  • The core project configuration is stored within the config.toml file. The data here is accessible from any template in the /layouts directory. This is where we store top-level data like the site name and the menu configuration.
  • The prebuild resources(SCSS, Javascript ES6) are stored in the /src directory.
  • The built resources(css, javascript, images) are stored in the /static directory.
  • The /public directory is the final product, with the entire generated website.

Build System

This starter project has a basic Gulp build system configured. This allows us to write SCSS and ES6 Javascript in the /src directory, and compiles it to minified browser compatible code in the /static directory. It will also optimize any images in the /src/images directory.

  • To build all of the resources in the src directory, run gulp or gulp build.
  • To watch the /src directory and automatically rebuild when a change is detected, run gulp watch.
  • To build the /public directory from the static resources and html templates, run hugo.
  • The hugo server command serves the site to localhost:1313/hugo-starter, automatically watches the project files, and runs a live reload script on the web page whenever a change is made.
  • By running gulp watch and hugo server at the same time, you can automatically sync resource changes from /src directly to the webpage. As a shortcut for running both watchers at once, use npm start.

You can also place prebuilt resources, such as libraries and fonts, directly in the /static directory. These will be overwritten

by Gulp if they have the path js/scripts.js or css/style.css.

How To

Add a Page

Create a new file called {pagename}.html in the /content/{section}/ directory.

At the top of the file, add some metadata, called Front Matter.

Here's an example -

+++
title = "Sample Product 1"
draft = false
type = "page"
script = "product.js"
+++
  • Title - The page title. This is what will appear in the browser tab.
  • Draft - This will be more useful once the website is in production. For now just set it to false.
  • Type - The HTML template on which to show the page. This is where we add the header, footer, etc. Use "page" for all stand-alone pages.
  • Script - (optional) The javascript file to send with the page, for page specific behavior. Should correspond to a file in /src/js/page/.

The rest of the file should contain the html for the page content, i.e. whatever is between the header and the footer. Don't import any external javascript or css files here, it will hurt the SEO and page load.

Javascript

Add javascript to a page

Add a new file in /src/js/page/ called {pagetitle}.js Add the custom javascript here. The the page content file, add script ="{pagetitle}.js" to the Front Matter metadata. The script should now download and run whenever the page is visited.

Add a javascript library

Add the library JS file to /src/js/vendor. During the Gulp build process it will be minified and combined with all other libraries in the directory, and imported before the page-specific scripts on each page.

Add global javascript

For any javascript that should be run on every page, add it to /src/js/scripts.js.

CSS

Add a SCSS rule

Add the rule to the appropriate file in the /src/scss directory.

Add a CSS library

Add the library CSS file to the /src/css directory.

About

Minimal HelloWorld project to explore the Hugo static site generator.

Resources

Stars

6 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - socialcopsdev/hugo-starter: Minimal HelloWorld project to explore the Hugo static site generator. · GitHub
Skip to content

Repository files navigation

Hugo Starter Project

What is this?

This is a small project to show the capabilities and structure of a website built using Hugo, a static website generator written in Go. It allows you to write reusable website components and pages using simple html template syntax, and to generate static html pages by combining these templates with different content.

Hugo enables teams to quickly build and iterate upon complex static websites. The resulting site is easy and cheap to host using an enterprise-grade service such as AWS Cloudfront, and very fast since there is no server-side rendering for each page request.

Setup

  1. Install Hugo using these these instructions.
  2. Run npm install or yarn to get the dependencies for the included Gulp build system.
  3. Build and optimize resources by running gulp
  4. Run hugo server to build the site and visit localhost:1313/hugo-starter/ to view it.

Structure

The Hugo documentation gives a much better overview of the project structure than me, so check it out.

  • The /content directory is where the core website content is stored. Files can be organized in any sort of directory structure and can be written in either markdown or plain html.
    • The +++ stuff at the top of each file is called "Front Matter", and can hold the metadata for each page. This metadata can later be accessed in the layouts to dynamically render content.
  • The /layouts directory contains the html templates, the structural building blocks for the website.
    • The /layouts/partials directory contains reusable html components that we can inject into any template. This is useful for headers, footers, navbars, sharing links, and other common components.
    • The /layouts/pages directory is where we store the templates for rendering the content in the /content directory.
    • The /layouts/shortcodes directory is where can store shortcodes, or reusable html blocks that we can use in any of the content pages.
      • The core difference between partials and shortcodes is that partials are used in layouts(such as a footer), and shortcodes are used in content(such as a right-aligned image).
  • The /archetypes, /data, and /themes directories have some cool roles as well, but we don't need to use them in this sample project. Check out the Hugo documentation for more info.
  • The core project configuration is stored within the config.toml file. The data here is accessible from any template in the /layouts directory. This is where we store top-level data like the site name and the menu configuration.
  • The prebuild resources(SCSS, Javascript ES6) are stored in the /src directory.
  • The built resources(css, javascript, images) are stored in the /static directory.
  • The /public directory is the final product, with the entire generated website.

Build System

This starter project has a basic Gulp build system configured. This allows us to write SCSS and ES6 Javascript in the /src directory, and compiles it to minified browser compatible code in the /static directory. It will also optimize any images in the /src/images directory.

  • To build all of the resources in the src directory, run gulp or gulp build.
  • To watch the /src directory and automatically rebuild when a change is detected, run gulp watch.
  • To build the /public directory from the static resources and html templates, run hugo.
  • The hugo server command serves the site to localhost:1313/hugo-starter, automatically watches the project files, and runs a live reload script on the web page whenever a change is made.
  • By running gulp watch and hugo server at the same time, you can automatically sync resource changes from /src directly to the webpage. As a shortcut for running both watchers at once, use npm start.

You can also place prebuilt resources, such as libraries and fonts, directly in the /static directory. These will be overwritten

by Gulp if they have the path js/scripts.js or css/style.css.

How To

Add a Page

Create a new file called {pagename}.html in the /content/{section}/ directory.

At the top of the file, add some metadata, called Front Matter.

Here's an example -

+++
title = "Sample Product 1"
draft = false
type = "page"
script = "product.js"
+++
  • Title - The page title. This is what will appear in the browser tab.
  • Draft - This will be more useful once the website is in production. For now just set it to false.
  • Type - The HTML template on which to show the page. This is where we add the header, footer, etc. Use "page" for all stand-alone pages.
  • Script - (optional) The javascript file to send with the page, for page specific behavior. Should correspond to a file in /src/js/page/.

The rest of the file should contain the html for the page content, i.e. whatever is between the header and the footer. Don't import any external javascript or css files here, it will hurt the SEO and page load.

Javascript

Add javascript to a page

Add a new file in /src/js/page/ called {pagetitle}.js Add the custom javascript here. The the page content file, add script ="{pagetitle}.js" to the Front Matter metadata. The script should now download and run whenever the page is visited.

Add a javascript library

Add the library JS file to /src/js/vendor. During the Gulp build process it will be minified and combined with all other libraries in the directory, and imported before the page-specific scripts on each page.

Add global javascript

For any javascript that should be run on every page, add it to /src/js/scripts.js.

CSS

Add a SCSS rule

Add the rule to the appropriate file in the /src/scss directory.

Add a CSS library

Add the library CSS file to the /src/css directory.

About

Minimal HelloWorld project to explore the Hugo static site generator.

Resources

Stars

6 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - socialcopsdev/hugo-starter: Minimal HelloWorld project to explore the Hugo static site generator. · GitHub
Skip to content

Repository files navigation

Hugo Starter Project

What is this?

This is a small project to show the capabilities and structure of a website built using Hugo, a static website generator written in Go. It allows you to write reusable website components and pages using simple html template syntax, and to generate static html pages by combining these templates with different content.

Hugo enables teams to quickly build and iterate upon complex static websites. The resulting site is easy and cheap to host using an enterprise-grade service such as AWS Cloudfront, and very fast since there is no server-side rendering for each page request.

Setup

  1. Install Hugo using these these instructions.
  2. Run npm install or yarn to get the dependencies for the included Gulp build system.
  3. Build and optimize resources by running gulp
  4. Run hugo server to build the site and visit localhost:1313/hugo-starter/ to view it.

Structure

The Hugo documentation gives a much better overview of the project structure than me, so check it out.

  • The /content directory is where the core website content is stored. Files can be organized in any sort of directory structure and can be written in either markdown or plain html.
    • The +++ stuff at the top of each file is called "Front Matter", and can hold the metadata for each page. This metadata can later be accessed in the layouts to dynamically render content.
  • The /layouts directory contains the html templates, the structural building blocks for the website.
    • The /layouts/partials directory contains reusable html components that we can inject into any template. This is useful for headers, footers, navbars, sharing links, and other common components.
    • The /layouts/pages directory is where we store the templates for rendering the content in the /content directory.
    • The /layouts/shortcodes directory is where can store shortcodes, or reusable html blocks that we can use in any of the content pages.
      • The core difference between partials and shortcodes is that partials are used in layouts(such as a footer), and shortcodes are used in content(such as a right-aligned image).
  • The /archetypes, /data, and /themes directories have some cool roles as well, but we don't need to use them in this sample project. Check out the Hugo documentation for more info.
  • The core project configuration is stored within the config.toml file. The data here is accessible from any template in the /layouts directory. This is where we store top-level data like the site name and the menu configuration.
  • The prebuild resources(SCSS, Javascript ES6) are stored in the /src directory.
  • The built resources(css, javascript, images) are stored in the /static directory.
  • The /public directory is the final product, with the entire generated website.

Build System

This starter project has a basic Gulp build system configured. This allows us to write SCSS and ES6 Javascript in the /src directory, and compiles it to minified browser compatible code in the /static directory. It will also optimize any images in the /src/images directory.

  • To build all of the resources in the src directory, run gulp or gulp build.
  • To watch the /src directory and automatically rebuild when a change is detected, run gulp watch.
  • To build the /public directory from the static resources and html templates, run hugo.
  • The hugo server command serves the site to localhost:1313/hugo-starter, automatically watches the project files, and runs a live reload script on the web page whenever a change is made.
  • By running gulp watch and hugo server at the same time, you can automatically sync resource changes from /src directly to the webpage. As a shortcut for running both watchers at once, use npm start.

You can also place prebuilt resources, such as libraries and fonts, directly in the /static directory. These will be overwritten

by Gulp if they have the path js/scripts.js or css/style.css.

How To

Add a Page

Create a new file called {pagename}.html in the /content/{section}/ directory.

At the top of the file, add some metadata, called Front Matter.

Here's an example -

+++
title = "Sample Product 1"
draft = false
type = "page"
script = "product.js"
+++
  • Title - The page title. This is what will appear in the browser tab.
  • Draft - This will be more useful once the website is in production. For now just set it to false.
  • Type - The HTML template on which to show the page. This is where we add the header, footer, etc. Use "page" for all stand-alone pages.
  • Script - (optional) The javascript file to send with the page, for page specific behavior. Should correspond to a file in /src/js/page/.

The rest of the file should contain the html for the page content, i.e. whatever is between the header and the footer. Don't import any external javascript or css files here, it will hurt the SEO and page load.

Javascript

Add javascript to a page

Add a new file in /src/js/page/ called {pagetitle}.js Add the custom javascript here. The the page content file, add script ="{pagetitle}.js" to the Front Matter metadata. The script should now download and run whenever the page is visited.

Add a javascript library

Add the library JS file to /src/js/vendor. During the Gulp build process it will be minified and combined with all other libraries in the directory, and imported before the page-specific scripts on each page.

Add global javascript

For any javascript that should be run on every page, add it to /src/js/scripts.js.

CSS

Add a SCSS rule

Add the rule to the appropriate file in the /src/scss directory.

Add a CSS library

Add the library CSS file to the /src/css directory.

About

Minimal HelloWorld project to explore the Hugo static site generator.

Resources

Stars

6 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - socialcopsdev/hugo-starter: Minimal HelloWorld project to explore the Hugo static site generator. · GitHub
Skip to content

Repository files navigation

Hugo Starter Project

What is this?

This is a small project to show the capabilities and structure of a website built using Hugo, a static website generator written in Go. It allows you to write reusable website components and pages using simple html template syntax, and to generate static html pages by combining these templates with different content.

Hugo enables teams to quickly build and iterate upon complex static websites. The resulting site is easy and cheap to host using an enterprise-grade service such as AWS Cloudfront, and very fast since there is no server-side rendering for each page request.

Setup

  1. Install Hugo using these these instructions.
  2. Run npm install or yarn to get the dependencies for the included Gulp build system.
  3. Build and optimize resources by running gulp
  4. Run hugo server to build the site and visit localhost:1313/hugo-starter/ to view it.

Structure

The Hugo documentation gives a much better overview of the project structure than me, so check it out.

  • The /content directory is where the core website content is stored. Files can be organized in any sort of directory structure and can be written in either markdown or plain html.
    • The +++ stuff at the top of each file is called "Front Matter", and can hold the metadata for each page. This metadata can later be accessed in the layouts to dynamically render content.
  • The /layouts directory contains the html templates, the structural building blocks for the website.
    • The /layouts/partials directory contains reusable html components that we can inject into any template. This is useful for headers, footers, navbars, sharing links, and other common components.
    • The /layouts/pages directory is where we store the templates for rendering the content in the /content directory.
    • The /layouts/shortcodes directory is where can store shortcodes, or reusable html blocks that we can use in any of the content pages.
      • The core difference between partials and shortcodes is that partials are used in layouts(such as a footer), and shortcodes are used in content(such as a right-aligned image).
  • The /archetypes, /data, and /themes directories have some cool roles as well, but we don't need to use them in this sample project. Check out the Hugo documentation for more info.
  • The core project configuration is stored within the config.toml file. The data here is accessible from any template in the /layouts directory. This is where we store top-level data like the site name and the menu configuration.
  • The prebuild resources(SCSS, Javascript ES6) are stored in the /src directory.
  • The built resources(css, javascript, images) are stored in the /static directory.
  • The /public directory is the final product, with the entire generated website.

Build System

This starter project has a basic Gulp build system configured. This allows us to write SCSS and ES6 Javascript in the /src directory, and compiles it to minified browser compatible code in the /static directory. It will also optimize any images in the /src/images directory.

  • To build all of the resources in the src directory, run gulp or gulp build.
  • To watch the /src directory and automatically rebuild when a change is detected, run gulp watch.
  • To build the /public directory from the static resources and html templates, run hugo.
  • The hugo server command serves the site to localhost:1313/hugo-starter, automatically watches the project files, and runs a live reload script on the web page whenever a change is made.
  • By running gulp watch and hugo server at the same time, you can automatically sync resource changes from /src directly to the webpage. As a shortcut for running both watchers at once, use npm start.

You can also place prebuilt resources, such as libraries and fonts, directly in the /static directory. These will be overwritten

by Gulp if they have the path js/scripts.js or css/style.css.

How To

Add a Page

Create a new file called {pagename}.html in the /content/{section}/ directory.

At the top of the file, add some metadata, called Front Matter.

Here's an example -

+++
title = "Sample Product 1"
draft = false
type = "page"
script = "product.js"
+++
  • Title - The page title. This is what will appear in the browser tab.
  • Draft - This will be more useful once the website is in production. For now just set it to false.
  • Type - The HTML template on which to show the page. This is where we add the header, footer, etc. Use "page" for all stand-alone pages.
  • Script - (optional) The javascript file to send with the page, for page specific behavior. Should correspond to a file in /src/js/page/.

The rest of the file should contain the html for the page content, i.e. whatever is between the header and the footer. Don't import any external javascript or css files here, it will hurt the SEO and page load.

Javascript

Add javascript to a page

Add a new file in /src/js/page/ called {pagetitle}.js Add the custom javascript here. The the page content file, add script ="{pagetitle}.js" to the Front Matter metadata. The script should now download and run whenever the page is visited.

Add a javascript library

Add the library JS file to /src/js/vendor. During the Gulp build process it will be minified and combined with all other libraries in the directory, and imported before the page-specific scripts on each page.

Add global javascript

For any javascript that should be run on every page, add it to /src/js/scripts.js.

CSS

Add a SCSS rule

Add the rule to the appropriate file in the /src/scss directory.

Add a CSS library

Add the library CSS file to the /src/css directory.

About

Minimal HelloWorld project to explore the Hugo static site generator.

Resources

Stars

6 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - socialcopsdev/hugo-starter: Minimal HelloWorld project to explore the Hugo static site generator. · GitHub
Skip to content

Repository files navigation

Hugo Starter Project

What is this?

This is a small project to show the capabilities and structure of a website built using Hugo, a static website generator written in Go. It allows you to write reusable website components and pages using simple html template syntax, and to generate static html pages by combining these templates with different content.

Hugo enables teams to quickly build and iterate upon complex static websites. The resulting site is easy and cheap to host using an enterprise-grade service such as AWS Cloudfront, and very fast since there is no server-side rendering for each page request.

Setup

  1. Install Hugo using these these instructions.
  2. Run npm install or yarn to get the dependencies for the included Gulp build system.
  3. Build and optimize resources by running gulp
  4. Run hugo server to build the site and visit localhost:1313/hugo-starter/ to view it.

Structure

The Hugo documentation gives a much better overview of the project structure than me, so check it out.

  • The /content directory is where the core website content is stored. Files can be organized in any sort of directory structure and can be written in either markdown or plain html.
    • The +++ stuff at the top of each file is called "Front Matter", and can hold the metadata for each page. This metadata can later be accessed in the layouts to dynamically render content.
  • The /layouts directory contains the html templates, the structural building blocks for the website.
    • The /layouts/partials directory contains reusable html components that we can inject into any template. This is useful for headers, footers, navbars, sharing links, and other common components.
    • The /layouts/pages directory is where we store the templates for rendering the content in the /content directory.
    • The /layouts/shortcodes directory is where can store shortcodes, or reusable html blocks that we can use in any of the content pages.
      • The core difference between partials and shortcodes is that partials are used in layouts(such as a footer), and shortcodes are used in content(such as a right-aligned image).
  • The /archetypes, /data, and /themes directories have some cool roles as well, but we don't need to use them in this sample project. Check out the Hugo documentation for more info.
  • The core project configuration is stored within the config.toml file. The data here is accessible from any template in the /layouts directory. This is where we store top-level data like the site name and the menu configuration.
  • The prebuild resources(SCSS, Javascript ES6) are stored in the /src directory.
  • The built resources(css, javascript, images) are stored in the /static directory.
  • The /public directory is the final product, with the entire generated website.

Build System

This starter project has a basic Gulp build system configured. This allows us to write SCSS and ES6 Javascript in the /src directory, and compiles it to minified browser compatible code in the /static directory. It will also optimize any images in the /src/images directory.

  • To build all of the resources in the src directory, run gulp or gulp build.
  • To watch the /src directory and automatically rebuild when a change is detected, run gulp watch.
  • To build the /public directory from the static resources and html templates, run hugo.
  • The hugo server command serves the site to localhost:1313/hugo-starter, automatically watches the project files, and runs a live reload script on the web page whenever a change is made.
  • By running gulp watch and hugo server at the same time, you can automatically sync resource changes from /src directly to the webpage. As a shortcut for running both watchers at once, use npm start.

You can also place prebuilt resources, such as libraries and fonts, directly in the /static directory. These will be overwritten

by Gulp if they have the path js/scripts.js or css/style.css.

How To

Add a Page

Create a new file called {pagename}.html in the /content/{section}/ directory.

At the top of the file, add some metadata, called Front Matter.

Here's an example -

+++
title = "Sample Product 1"
draft = false
type = "page"
script = "product.js"
+++
  • Title - The page title. This is what will appear in the browser tab.
  • Draft - This will be more useful once the website is in production. For now just set it to false.
  • Type - The HTML template on which to show the page. This is where we add the header, footer, etc. Use "page" for all stand-alone pages.
  • Script - (optional) The javascript file to send with the page, for page specific behavior. Should correspond to a file in /src/js/page/.

The rest of the file should contain the html for the page content, i.e. whatever is between the header and the footer. Don't import any external javascript or css files here, it will hurt the SEO and page load.

Javascript

Add javascript to a page

Add a new file in /src/js/page/ called {pagetitle}.js Add the custom javascript here. The the page content file, add script ="{pagetitle}.js" to the Front Matter metadata. The script should now download and run whenever the page is visited.

Add a javascript library

Add the library JS file to /src/js/vendor. During the Gulp build process it will be minified and combined with all other libraries in the directory, and imported before the page-specific scripts on each page.

Add global javascript

For any javascript that should be run on every page, add it to /src/js/scripts.js.

CSS

Add a SCSS rule

Add the rule to the appropriate file in the /src/scss directory.

Add a CSS library

Add the library CSS file to the /src/css directory.

About

Minimal HelloWorld project to explore the Hugo static site generator.

Resources

Stars

6 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - socialcopsdev/hugo-starter: Minimal HelloWorld project to explore the Hugo static site generator. · GitHub
Skip to content

Repository files navigation

Hugo Starter Project

What is this?

This is a small project to show the capabilities and structure of a website built using Hugo, a static website generator written in Go. It allows you to write reusable website components and pages using simple html template syntax, and to generate static html pages by combining these templates with different content.

Hugo enables teams to quickly build and iterate upon complex static websites. The resulting site is easy and cheap to host using an enterprise-grade service such as AWS Cloudfront, and very fast since there is no server-side rendering for each page request.

Setup

  1. Install Hugo using these these instructions.
  2. Run npm install or yarn to get the dependencies for the included Gulp build system.
  3. Build and optimize resources by running gulp
  4. Run hugo server to build the site and visit localhost:1313/hugo-starter/ to view it.

Structure

The Hugo documentation gives a much better overview of the project structure than me, so check it out.

  • The /content directory is where the core website content is stored. Files can be organized in any sort of directory structure and can be written in either markdown or plain html.
    • The +++ stuff at the top of each file is called "Front Matter", and can hold the metadata for each page. This metadata can later be accessed in the layouts to dynamically render content.
  • The /layouts directory contains the html templates, the structural building blocks for the website.
    • The /layouts/partials directory contains reusable html components that we can inject into any template. This is useful for headers, footers, navbars, sharing links, and other common components.
    • The /layouts/pages directory is where we store the templates for rendering the content in the /content directory.
    • The /layouts/shortcodes directory is where can store shortcodes, or reusable html blocks that we can use in any of the content pages.
      • The core difference between partials and shortcodes is that partials are used in layouts(such as a footer), and shortcodes are used in content(such as a right-aligned image).
  • The /archetypes, /data, and /themes directories have some cool roles as well, but we don't need to use them in this sample project. Check out the Hugo documentation for more info.
  • The core project configuration is stored within the config.toml file. The data here is accessible from any template in the /layouts directory. This is where we store top-level data like the site name and the menu configuration.
  • The prebuild resources(SCSS, Javascript ES6) are stored in the /src directory.
  • The built resources(css, javascript, images) are stored in the /static directory.
  • The /public directory is the final product, with the entire generated website.

Build System

This starter project has a basic Gulp build system configured. This allows us to write SCSS and ES6 Javascript in the /src directory, and compiles it to minified browser compatible code in the /static directory. It will also optimize any images in the /src/images directory.

  • To build all of the resources in the src directory, run gulp or gulp build.
  • To watch the /src directory and automatically rebuild when a change is detected, run gulp watch.
  • To build the /public directory from the static resources and html templates, run hugo.
  • The hugo server command serves the site to localhost:1313/hugo-starter, automatically watches the project files, and runs a live reload script on the web page whenever a change is made.
  • By running gulp watch and hugo server at the same time, you can automatically sync resource changes from /src directly to the webpage. As a shortcut for running both watchers at once, use npm start.

You can also place prebuilt resources, such as libraries and fonts, directly in the /static directory. These will be overwritten

by Gulp if they have the path js/scripts.js or css/style.css.

How To

Add a Page

Create a new file called {pagename}.html in the /content/{section}/ directory.

At the top of the file, add some metadata, called Front Matter.

Here's an example -

+++
title = "Sample Product 1"
draft = false
type = "page"
script = "product.js"
+++
  • Title - The page title. This is what will appear in the browser tab.
  • Draft - This will be more useful once the website is in production. For now just set it to false.
  • Type - The HTML template on which to show the page. This is where we add the header, footer, etc. Use "page" for all stand-alone pages.
  • Script - (optional) The javascript file to send with the page, for page specific behavior. Should correspond to a file in /src/js/page/.

The rest of the file should contain the html for the page content, i.e. whatever is between the header and the footer. Don't import any external javascript or css files here, it will hurt the SEO and page load.

Javascript

Add javascript to a page

Add a new file in /src/js/page/ called {pagetitle}.js Add the custom javascript here. The the page content file, add script ="{pagetitle}.js" to the Front Matter metadata. The script should now download and run whenever the page is visited.

Add a javascript library

Add the library JS file to /src/js/vendor. During the Gulp build process it will be minified and combined with all other libraries in the directory, and imported before the page-specific scripts on each page.

Add global javascript

For any javascript that should be run on every page, add it to /src/js/scripts.js.

CSS

Add a SCSS rule

Add the rule to the appropriate file in the /src/scss directory.

Add a CSS library

Add the library CSS file to the /src/css directory.

About

Minimal HelloWorld project to explore the Hugo static site generator.

Resources

Stars

6 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - socialcopsdev/hugo-starter: Minimal HelloWorld project to explore the Hugo static site generator. · GitHub
Skip to content

Repository files navigation

Hugo Starter Project

What is this?

This is a small project to show the capabilities and structure of a website built using Hugo, a static website generator written in Go. It allows you to write reusable website components and pages using simple html template syntax, and to generate static html pages by combining these templates with different content.

Hugo enables teams to quickly build and iterate upon complex static websites. The resulting site is easy and cheap to host using an enterprise-grade service such as AWS Cloudfront, and very fast since there is no server-side rendering for each page request.

Setup

  1. Install Hugo using these these instructions.
  2. Run npm install or yarn to get the dependencies for the included Gulp build system.
  3. Build and optimize resources by running gulp
  4. Run hugo server to build the site and visit localhost:1313/hugo-starter/ to view it.

Structure

The Hugo documentation gives a much better overview of the project structure than me, so check it out.

  • The /content directory is where the core website content is stored. Files can be organized in any sort of directory structure and can be written in either markdown or plain html.
    • The +++ stuff at the top of each file is called "Front Matter", and can hold the metadata for each page. This metadata can later be accessed in the layouts to dynamically render content.
  • The /layouts directory contains the html templates, the structural building blocks for the website.
    • The /layouts/partials directory contains reusable html components that we can inject into any template. This is useful for headers, footers, navbars, sharing links, and other common components.
    • The /layouts/pages directory is where we store the templates for rendering the content in the /content directory.
    • The /layouts/shortcodes directory is where can store shortcodes, or reusable html blocks that we can use in any of the content pages.
      • The core difference between partials and shortcodes is that partials are used in layouts(such as a footer), and shortcodes are used in content(such as a right-aligned image).
  • The /archetypes, /data, and /themes directories have some cool roles as well, but we don't need to use them in this sample project. Check out the Hugo documentation for more info.
  • The core project configuration is stored within the config.toml file. The data here is accessible from any template in the /layouts directory. This is where we store top-level data like the site name and the menu configuration.
  • The prebuild resources(SCSS, Javascript ES6) are stored in the /src directory.
  • The built resources(css, javascript, images) are stored in the /static directory.
  • The /public directory is the final product, with the entire generated website.

Build System

This starter project has a basic Gulp build system configured. This allows us to write SCSS and ES6 Javascript in the /src directory, and compiles it to minified browser compatible code in the /static directory. It will also optimize any images in the /src/images directory.

  • To build all of the resources in the src directory, run gulp or gulp build.
  • To watch the /src directory and automatically rebuild when a change is detected, run gulp watch.
  • To build the /public directory from the static resources and html templates, run hugo.
  • The hugo server command serves the site to localhost:1313/hugo-starter, automatically watches the project files, and runs a live reload script on the web page whenever a change is made.
  • By running gulp watch and hugo server at the same time, you can automatically sync resource changes from /src directly to the webpage. As a shortcut for running both watchers at once, use npm start.

You can also place prebuilt resources, such as libraries and fonts, directly in the /static directory. These will be overwritten

by Gulp if they have the path js/scripts.js or css/style.css.

How To

Add a Page

Create a new file called {pagename}.html in the /content/{section}/ directory.

At the top of the file, add some metadata, called Front Matter.

Here's an example -

+++
title = "Sample Product 1"
draft = false
type = "page"
script = "product.js"
+++
  • Title - The page title. This is what will appear in the browser tab.
  • Draft - This will be more useful once the website is in production. For now just set it to false.
  • Type - The HTML template on which to show the page. This is where we add the header, footer, etc. Use "page" for all stand-alone pages.
  • Script - (optional) The javascript file to send with the page, for page specific behavior. Should correspond to a file in /src/js/page/.

The rest of the file should contain the html for the page content, i.e. whatever is between the header and the footer. Don't import any external javascript or css files here, it will hurt the SEO and page load.

Javascript

Add javascript to a page

Add a new file in /src/js/page/ called {pagetitle}.js Add the custom javascript here. The the page content file, add script ="{pagetitle}.js" to the Front Matter metadata. The script should now download and run whenever the page is visited.

Add a javascript library

Add the library JS file to /src/js/vendor. During the Gulp build process it will be minified and combined with all other libraries in the directory, and imported before the page-specific scripts on each page.

Add global javascript

For any javascript that should be run on every page, add it to /src/js/scripts.js.

CSS

Add a SCSS rule

Add the rule to the appropriate file in the /src/scss directory.

Add a CSS library

Add the library CSS file to the /src/css directory.

About

Minimal HelloWorld project to explore the Hugo static site generator.

Resources

Stars

6 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages