基于 Hugo 静态站点生成器,主题结构包含 templateSite 示例内容与 config.yaml 配置
fullstack-portfolio-refresh — Hugo 作品集模板
作者 FullstackProblemSolver
基于 Hugo 的 Fullstack Portfolio 主题,用于搭建个人作品集与博客网站,衍生自 ReFresh/Fresh 主题并扩展了代码展示类短代码。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
目前有 1 张原始预览,可打开完整图片查看设计细节。
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
衍生自 ReFresh 主题,ReFresh 又基于 Fresh 主题做了较大修改,README 列出相对原版的变更
提供 code、codeWide、codeInline 等代码展示短代码,支持行号显示与语法高亮语言参数
提供 tabsCode 与 tabs 短代码,最多支持 6 个标签页,可从 content 目录加载文件内容
提供 figure、twoFigure、book、exercise 等面向作品集与教学内容的展示短代码
配置项覆盖导航栏、侧边栏、首页、字体、颜色、统计计数器与图片目录
模板详细介绍
这是一个 Hugo 静态站点主题,定位为个人作品集与博客网站。它由 ReFresh 主题修改而来,而 ReFresh 又基于 Fresh 主题做了较大改动,README 中列出了相对原始 Fresh 与 ReFresh 的变更清单。主题提供示例站点内容与配置文件,按 README 的步骤可将主题克隆到 themes 目录、复制 templateSite 内容后本地预览。
主题的配置集中在 config.yaml,涵盖导航栏、侧边栏、首页、字体、颜色、统计计数器与图片等选项,图片需放入 assetDir 指定的目录。文章层面提供大量短代码,包括多级标题与副标题、代码块(code、codeWide、codeInline)、容器(container、containerWide)、图片(figure、twoFigure)、书籍展示(book)、练习(exercise)、多标签代码(tabsCode)与普通多标签(tabs),以及消息、通知和站点链接等彩色组件。
使用上有若干明确限制:README 说明该主题面向个人网站与博客,如需扩展其他功能需提交 pull request;运行 hugo server 时若出现 TOCSS 转换 style.sass 失败,需要安装 Hugo 扩展版;统计计数器代码需手动写入 layouts/partials/counter.html,会生成在 <body> 标签之后。
适合你的项目吗?
适用场景
- 搭建个人作品集网站,展示项目、书籍或练习内容
- 搭建个人博客,用短代码在文章中插入代码块、提示消息与多标签内容
- 撰写技术教程或课程笔记,使用 exercise、tabsCode 等短代码组织代码示例
- 在页面中嵌入 Google、Yandex 等统计计数器代码
适合人群
- 使用 Hugo 并希望快速获得作品集与博客基础结构的个人开发者
- 需要在文章中频繁展示多语言代码示例的技术写作者
- 接受在主题基础上按需修改、而非直接用于生产环境的用户
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
需安装 Hugo 扩展版,否则运行 hugo server 时可能报 TOCSS 转换 style.sass 失败
- 2
按 README 步骤:hugo new site 创建站点,将主题以 git submodule 方式加入 themes 目录,删除默认 config.toml 后复制 templateSite 内容
- 3
图片需放入 config.yaml 中 assetDir 指定的目录,例如 assetDir 设为 static 时放入站点的 static 文件夹
- 4
统计计数器代码需手动写入 layouts/partials/counter.html,生成位置在 <body> 标签之后
- 5
主题面向个人网站与博客,README 说明扩展其他功能需提交 pull request
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 该主题仅面向个人网站与博客用途;若需扩展其他功能,README 要求通过提交 pull request 的方式参与,而非直接支持任意用途。
- 运行 hugo server 时若出现 TOCSS 转换 style.sass 失败,必须安装 Hugo 扩展版(extended)才能正常构建。
- 统计计数器需自行将 Google、Yandex 等第三方统计代码手动写入 layouts/partials/counter.html,属于外部服务,需自行承担相应账号与费用。
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
This theme is intended for personal website and blog. If you'd like to extend the theme to include other functionalities submit a pull request.
README 原文
make sure you have the extended version of Hugo installed
README 原文
https://github.com/FullstackProblemSolver/fullstack-portfolio-refresh/blob/master/LICENSEhttps://github.com/FullstackProblemSolver/fullstack-portfolio-refresh/blob/master/README.mdYou can enter your Google / Yandex / etc statistic counter code into the `layouts/partials/counter.html`
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-03。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较少 · 53 / 100
- 技术栈
- Hugo
- 网站类型
- 作品集
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2022-06-18
- 截图检查日期
- 2026-10-03
目前没有记录演示链接。请依据仓库说明在本地评估;仅凭截图无法确认交互行为。
目录记录的主要技术栈是 Hugo。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: [email protected] · 2026-10-04
查看当时使用的来源资料
SHA-256: 79977f74009bf54ca0b4c7643706f44b78250580adb030f4ffff2153ca8a9ed2
2026-10-03T22:35:12.994Z
来源文件 / 仓库# Fullstack Portfolio theme for Hugo
**Fullstack Portfolio** is a theme for the [Hugo](https://gohugo.io) static site generator
**Credits/Origin**:
* it is a modified version of an awesome/accesible theme [ReFresh](https://github.com/PippoRJ/hugo-refresh) by Roberto Jordaney, which is based on:
* _highly_ modified from the awesome [Fresh](https://github.com/StefMa/hugo-fresh) theme
In a section below you can find the list of changes to the original Fresh & ReFresh theme.
You can find a live demo of the original Fresh theme [here](https://themes.gohugo.io/theme/hugo-fresh/) or a demo of the Hugo ReFresh theme [here](https://themes.gohugo.io/theme/hugo-refresh/).
You can find another example of ReFresh theme in [my personal website](https://rjordaney.is/).

> This theme is intended for personal website and blog. If you'd like to extend the theme to include other functionalities submit a pull request.
## Getting started
To create a new site using Hugo ReFresh:
```bash
# Create site and cd into it
hugo new site my-site && cd my-site
# Clone the ReFresh theme into the themes folder
git init
git submodule add https://github.com/FullstackProblemSolver/fullstack-portfolio-refresh.git themes/fullstack-portfolio-refresh
# Remove the default config
rm config.toml
# Copy the Example site content and configuration in my-site
cp -R themes/fullstack-portfolio-refresh/templateSite/* ./
# Open the site in your browser
hugo server -D
```
## Troubleshooting
If you see `error: failed to transform resource: TOCSS: failed to transform "style.sass"` when attempting to run your `hugo server`, make sure you have the extended version of Hugo installed:
```bash
# On Ubuntu:
snap refresh hugo --channel=extended
```
## Statistics counter
You can enter your Google / Yandex / etc statistic counter code into the `layouts/partials/counter.html`. Code will be generated right after open `<body>` tag.
## Customizing your page
There are different configuration options for Hugo ReFresh including options for: the navbar, the sidebar, the homepage, fonts, colours landing, stats counters and images.
Read the comments in the `config.yaml` file to know more.
The images specified in the `config.yaml` file need to be placed in the directory specified by the `assetDir` option in the config file.
E.g.: set `assetDir: "static"` to the set the default folder the `static` folder of your site.
## List of shortcodes you can use in your articles with description:
<details>
<summary> title1.html, title2.html, title3.html, title4.html, title5.html, title6.html </summary>
Usage example:
```
{{< title1 "My awesome title" "my-title-id">}}
```
The **first parameter** is the title of the shortcode (in this example is "My awesome title").<br>
The **second paramter** is the ID of the shortcode (in this example is "my-title-id").<br>
It can be used in links to the same page as:
```
[link to the title](#my-title-id)
```
</details>
<details>
<summary> subtitle1.html, subtitle2.html, subtitle3.html, subtitle4.html, subtitle5.html, subtitle6.html </summary>
Usage example:
```
{{< subtitle1 "My awesome subtitle" "my-subtitle-id">}}
```
The **first parameter** is the title of the shortcode (in this example is "My awesome subtitle").<br>
The **second paramter** is the ID of the shortcode (in this example is "my-subtitle-id").<br>
It can be used in links to the same page as:
```
[link to the subtitle](#my-subtitle-id)
```
</details>
<details>
<summary> code.html </summary>
This shortcode builds a centred page that is two-third of the full size of the page.
Usage example:
```
{{< code language="shell" >}}
$ sudo bash -c 'echo 0 > /proc/sys/kernel/randomize_va_space'
{{< /code >}}
```
This shortcode has 2 parameters:
* **line-numbers** to hide or show the line numbers. The default is true, for single line code the number is never shown.
* **language** is used to highlight the syntax of the code properly
</details>
<details>
<summary> codeWide.html </summary>
This shortcode builds a centred page that is as wide as the full size of the page.
Usage example:
```
{{< codeWide language="shell" >}}
$ dmesg | tail
......
[13401.299114] overflow64[16566]: segfault at 616161616161 ip 0000616161616161 sp 00007fffffffddb0 error 14 in libc-2.27.so[7ffff79e4000+1e7000]
{{< /codeWide >}}
```
This shortcode has 2 parameters:
* **line-numbers** to hide or show the line numbers. The default is true, for single line code the number is never shown.
* **language** is used to highlight the syntax of the code properly
</details>
<details>
<summary> container.html </summary>
This shortcode builds a centred page that is as wide as the two third of the size of the page. The content of the shortcode will pass through the markdown processor.
Usage example:
```
{{< container "container-id" >}}
{{< /container >}}
```
This shortcode has an optional parameter to give an ID to the html `div`.
</details>
<details>
<summary> containerWide.html </summary>
This shortcode builds a centred page that is as wide as the size of the page. The content of the shortcode will pass through the markdown processor.
Usage example:
```
{{< containerWide "container-wide-id" >}}
{{< /containerWide >}}
```
This shortcode has an optional parameter to give an ID to the html `div`.
</details>
<details>
<summary> figure.html </summary>
This shortcode resize an image that with the width and/or height that you specify
Usage example:
```
{{< figure src="images/the_stack.png" width="700" >}}
{{< figure src="images/the_stack.png" height="700" >}}
```
The parameter **src** is the location of the image relative to the location of the file where the shortcode has been used.<br>
The parameter **width** is the width of the image.<br>
The parameter **height** is the height of the image.<br>
The parameter **caption** is the caption of the image.<br>
The parameter **alt** is the alt property of the image.<br>
</details>
<details>
<summary> twoFigure.html </summary>
This shortcode shows 2 images one next to the other with the possibility to resize them.
Usage example:
```
{{< twoFigure src1="images/overflow_1.png" width1="700" src2="images/overflow_2.png" width2="700" >}}
```
The parameter **src1** is the location of the right image relative to the location of the file where the shortcode has been used.<br>
The parameter **width1** is the width of the right image.<br>
The parameter **height1** is the height of the right image.<br>
The parameter **caption1** is the caption of the right image.<br>
The parameter **alt1** is the alt property of the right image.<br>
The parameter **src2** is the location of the left image relative to the location of the file where the shortcode has been used.<br>
The parameter **width2** is the width of the left image.<br>
The parameter **height2** is the height of the left image.<br>
The parameter **caption2** is the caption of the left image.<br>
The parameter **alt2** is the alt property of the left image.<br>
With a small screen these images will be shown one on top of the other.
See example of use [here](https://rjordaney.is/lectures/basic_buffer_overflow/)
</details>
<details>
<summary> book.html </summary>
Usage example:
```
{{< book title="Title Awesome" authors="Awesome author" image="images/cover.jpg" size="300x">}}
```
The parameter **title** is the title of the book.<br>
The parameter **authors** contains the authors of the book.<br>
The parameter **image** is the cover of the book.<br>
The parameter **size** is used to specify the size of the book in pixel "width" x "height".<br>
E.g.: "300x" means 300px of width.<br>
E.g.: "x300" means 300px of height. <br>
See example of use [here](https://rjordaney.is/miscellaneous/ml_books/)
</details>
<details>
<summary> exercise.html </summary>
Usage example:
```
{{< exercise >}}
Text of the exercise.
{{< /exercise >}}
```
This shortcode has no parameters.
See example of use [here](https://rjordaney.is/code_exercises/staircase_n_steps/)
</details>
<details>
<summary> tabsCode.html </summary>
Usage example:
```
{{< tabsCode
file1="/content/code_exercises/staircase_n_steps/code/solution_python.md" language1="python" title1="Python" icon1="python"
file2="/content/code_exercises/staircase_n_steps/code/solution_c.md" language1="c" title2="C" icon2="c"
file3="/content/code_exercises/staircase_n_steps/code/solution_java.md" language1="java" title3="Java" icon3="java"
>}}
```
The parameter **file1** is the name of the code file to be displayed in the first tab.
The path needs to start from the `content` folder.<br>
The parameter **language1** is used to highlight the syntax of the code properly.
The parameter **title1** is the title of the first tab.<br>
The parameter **icon1** is the icon to be shown at the right of the title, it is an optional parameter. See the partial code `icon.html` for the available icons.
There are 6 tabs supported at this moment
* the files parameters are **file1**, **file2**, **file3**, **file4**, **file5**, **file6**
* the titles parameters are **title1**, **title2**, **title3**, **title4**, **title5**, **title6**
* the languages parameters are **language1**, **language2**, **language3**, **language4**, **language5**, **language6**
* the icons parameters are **icon1**, **icon2**, **icon3**, **icon4**, **icon5**, **icon6**
See example of use [here](https://rjordaney.is/code_exercises/staircase_n_steps/)
</details>
<details>
<summary> tabs.html </summary>
Usage example:
```
{{< tabs
file1="/content/exercises/article1/comments/my_comments.md" title1="My Ideas"
file2="/content/exercises/article1/comments/your_comments.md" title2="Your Ideas"
file3="/content/exercises/article1/comments/her_comments.md" title3="Her Ideas"
>}}
```
The content of the files (file1, file2 ...) are passed through the markdown processor, so you can use markdown in these files.
The parameter **file1** is the name of the code file to be displayed in the first tab.
The path needs to start from the `content` folder.<br>
The parameter **title1** is the title of the first tab.<br>
The parameter **icon1** is the icon to be shown at the right of the title, it is an optional parameter. See the partial code `icon.html` for the available icons.
There are 6 tabs supported at this moment
* the files parameters are **file1**, **file2**, **file3**, **file4**, **file5**, **file6**
* the titles parameters are **title1**, **title2**, **title3**, **title4**, **title5**, **title6**
* the icons parameters are **icon1**, **icon2**, **icon3**, **icon4**, **icon5**, **icon6**
</details>
<details>
<summary> codeInLine.html </summary>
Usage example:
```
{{< codeInline >}}sudo echo 0 > /proc/sys/kernel/randomize_va_space{{< /codeInline >}}
```
This shortcode has 2 parameters:
* **language** is used to highlight the syntax of the code properly
* **id** to set a id of the html `code` element
See an example of usage [here](https://rjordaney.is/lectures/basic_buffer_overflow/)
</details>
<details>
<summary> messageBlue.html, messageDark.html, messageGreen.html, messageRed.html, messageYellow.html </summary>
</details>
<details>
<summary> notificationBlue.html, notificationGreen.html, notificationRed.html, notificationYellow.html </summary>
</details>
<details>
<summary> siteBlue.html, siteGreen.html, siteLightgreen.html, siteRed.html, siteYellow.html </summary>
Usage example:
```
{{< siteLightgreen "Web" "https://www.example.com" >}}
<p>Description of the website.</p>
{{< /siteLightgreen >}}
```
The **first parameter** will appear in the right coloured part of the shortcode.<br>
The **second parameter** will appear in the middle part of the shortcode.<br>
See example of usage [here](https://rjordaney.is/miscellaneous/ctf_resources/)
</details>
## Customization options for a regular page
These are the options that you can define is the front matter of a regular page:
```
---
title: "My Awesome Title"
date: 2019-06-03T21:51:13+01:00
draft: false
hideLastModified: true
summaryImage: "images/system.jpg"
keepImageRatio: true
tags: ["Tag1", "tag2", "tag 3"]
summary: "This is a custom summary for my article"
showInMenu: true
---
```
* `summaryImage`: it is used to specify the image to be used in the summary
* `keepImageRatio`: it is used to force the aspect ratio of the image to be kept. The default value is **false**.
* `summary`: it is used to specify the summary of an article instead of taking it from the article itself.
* `hideLastModified`: it is used to hide the the timestamp added at the end of the article.
* `showInMenu`: it is used to show the article in the top right menu.
* `tags`: it is the list of tags for the article; they will be used to build the left sidebar.
To avoid path problems when specifying the `summaryImage`, it is recommended to define a regular page as a leaf bundle. The example above will result in:
```
* my_awesome_title (folder)
* index.md (file)
* images (folder)
* system.jpg (file)
```
## Multilanguage support
To chose the default language you need to set the `DefaultContentLanguage` setting in the `config.yaml` file.
(You can also have multiple languages at the same time, see `exampleSite/config.yaml` for an example.)
The language supported are:
* English
* Spanish
* French
* Italian
* Russian
* Chinese
If you want to add a missing language please submit a pull request.
## List of modifications from the original theme
* The ReFresh theme was transformed from _single page_ template to _multipage_.
* Added multilanguage support.
* The left side menu now contains page tags along with theirs post counter.
* The _list_ and _terms_ types of pages contain a list of the post summaries.
* The images used to build the summaries can be resized to allow better usage of the bandwidth.
* The js and css files can be minified (with a configurable option on the `config.yaml`).
* The menu is automatically built following the structure of the `content` folder. Two levels are allowed at the moment.
* The `navbar-burger` used in the original theme's menu is removed (it was displayed when the page was resized).
* The `.sass` files are now processed with `resources.ExecuteAsTemplate` so that it is possible to use variables from the `config.yaml`.
* Options in the `config.yaml` are added to configure the font-family for the navbar, sidebar and content of the a page.
* [Bulma](https://bulma.io/) (the css framework the theme is based on) is now updated to version 0.7.5 because in the new version the class _content_ has a separate style to allow modification that will impact only the contents of the posts.
* [highlight.js](https://highlightjs.org/) was added to better highlight the code sections of the posts. I chose the style **monokai-sublime**.
* [highlightjs-line-number.js](https://github.com/wcoder/highlightjs-line-numbers.js/) was added to have the line number at the beginning of each line of code in a code sections of a post.
* A minimal version of [MathJax](https://www.mathjax.org/) was added to allow LaTeX style mathematical expressions to be placed in the site.
* Several other options are added to personalise the content of a post.
* A shortcode is added to resize the images and save bandwidth in a post content.
* A shortcode is added to show multiple tabs.
* Four shortcodes are added to show code: inline, in page, in page wide, in tabs.
* The loaders images are now processed with `resources.ExecuteAsTemplate` so that they take the main colour of the theme (defined in `config.yaml`)
* The _favicon_ is processed with `resources.ExecuteAsTemplate` to follow the main colour of the page.
* Added Open Graph meta tags to each post for easy-sharing on social media sites.
* All the js and css files are loaded locally, i.e., not loaded from third party sites.
test看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

hugo-PaperMod
PaperMod 是 Hugo 生态里知名度较高的主题之一,定位很明确:给博客和轻量作品集站点提供一套干净、响应式的阅读界面。
Hugo · 作品集

Congo
Congo 是一款为 Hugo 设计的现代内容主题,核心定位是让内容本身成为页面焦点。 它基于 Tailwind CSS 3.0 构建,整体布局完全响应式,视觉风格干净且克制,没有多余装饰。
Hugo · 博客

toha
Toha 是一款面向个人作品集场景的 Hugo 主题,以极简设计和响应式布局为核心,适合用来搭建个人主页、作品展示或技术博客。
Hugo · 作品集

hugo-profile
A highly customizable and mobile first Hugo template for personal portfolio and blog.
Hugo · 作品集

hugo-theme-introduction
Minimal, single page, smooth-scrolling theme for Hugo static site generator.
Hugo · 作品集

hugo-theme-console
hugo-theme-console 是一款以系统终端为灵感的极简 Hugo 主题,基于 Terminal CSS 构建,整体视觉干净利落,强调快速加载与响应式布局。
Hugo · 作品集
