Osprey is a simple, clean, and fast one-page Hugo portfolio accompanied by a blog.
- Minimalist, clean, and uncluttered theme
- Portfolio display gallery
- Disqus comments
- Formspree AJAX contact form
- Responsive Flexbox Grid
- SASS styling
- Minimized/compressed CSS and JavaScript files with cachebusting hash setup
- Syntax highlighting with Highlight.js
- SEO-friendly construction
- Google Analytics and Google Tag Manager integration
- OpenGraph and Twitter Cards integration
- Quick loading speeds
- Custom CSS
In the root of your Hugo site directory run:
$ cd themes
$ git clone https://github.com/tomanistor/osprey.git
Create a submodule linked directly to the theme's GitHub repository in order to receive updates:
$ git submodule add https://github.com/tomanistor/osprey.git themes/osprey
Then run:
$ git submodule update --init --recursive --remote
Osprey comes with several configuration options to aid in site customization. This is an example config.toml file:
title = "Osprey Example Site"
baseURL = "https://tomanistor.com"
tags = ["portfolio", "web design", "blog"]
languageCode = "en-US"
config = "config.toml"
theme = "osprey"
canonifyURLS = true
googleAnalytics = ""
disqusShortname = "tomanistor"
disableKinds = ["taxonomy", "taxonomyTerm"] # This theme does not currently use "tag" and "category" taxonomies
[Params]
tagline = "Osprey Example Site"
author = "Toma Nistor"
description = "Full-stack web developer and UI/UX enthusiast based in San Diego, CA."
logoBig = "/images/osprey-logo.png"
logoSmall = "/images/osprey-logo.png"
favicon = "favicon.ico"
opengraphImage = "/images/osprey.png"
twitter = "TomaNistor"
linkedin = "tomanistor"
github = "tomanistor"
email = ""
googleTagManager = ""
highlightJS = true
copyright = true
credit = true
customCSS = false
cacheBustCSS = false
cacheBustJS = false
ajaxFormspree = true
[[menu.main]]
name = "About"
url = "/#about"
weight = 1
[[menu.main]]
name = "Work"
url = "/#work"
weight = 2
[[menu.main]]
name = "Blog"
url = "/#blog"
weight = 3
[[menu.main]]
name = "Contact"
url = "/#contact"
weight = 4
The two main content types are blog posts and gallery images.
To create an about section that renders on the home page, run:
$ hugo new about.md
To create a new blog post, run:
$ hugo new blog/post-title.md
To add a new image to your portfolio, run:
$ hugo new gallery/image-title.md
The gallery archetype comes with its own configuration. Here is an example:
+++
date = "2017-05-10T21:35:17-07:00"
title = "Image Title"
image = "image-file.png"
alt = "This is a description of the image"
color = "#7ac143"
link1 = "https://tomanistor.com"
link2 = "https://github.com/tomanistor"
+++
The email address specified in the config.toml file will be one receiving messages sent through the contact form. The contact form is operated by Formspree and requires that the form must be submitted once initially to confirm the email address being used. See instruction here.
To implement custom CSS sitewide, change the config.toml parameter customCSS
from false
to true
and then create a css.html
file in your layouts/partials/
folder like the example below:
<style>
<!-- This will remove the shadow on the navbar -->
nav {
box-shadow: none;
}
</style>
This will render inline CSS in the head of your site and without adding an extra HTTP request.
To implement cache busting of CSS and JS static assets with something like Gulp.js and gulp-hash, change the config.toml parameters cacheBustCSS
and cacheBustJS
from false
to true
and follow this setup guide.
If you'd like to help with the development of this theme, I encourage you to submit a pull request or create an issue if you find a bug. All help is appreciated.
This theme is released under the GNU 3.0 license. For more information read the license.