Jekyll作品集

howdy-jekyll-theme — Jekyll 作品集模板

作者 howdyitskyle

Howdy 是一个基于 Jekyll 的个人网站与作品集主题,采用 MIT 许可,支持浅色/深色模式、项目集合、分页博客与多种第三方服务配置。

看看你的网站会是什么样

浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。

3 个预览视图
桌面端首页1 / 3
桌面端截图首屏预览

由服务器浏览器实际访问页面后截取。

全部页面与视图 3

截图用于了解视觉与布局,交互效果请以实际项目为准。

采集于 2026-10-13查看来源

值得关注的模板亮点

从已有项目资料中,快速了解它的特点。

01

以 RubyGem 分发,通过 Gemfile 与 _config.yml 的 theme 字段安装

02

支持浅色/深色模式切换,偏好持久化并跟随系统设置

03

首页 Hero 支持单图或 2 张以上图片的触摸/滑动轮播

04

项目集合按年份排序,博客使用 jekyll-paginate-v2 分页并带分类色标

05

集成 jekyll-seo-tag、jekyll-feed、jekyll-sitemap,可选 Giscus/Disqus/Utterances 评论与 Mailchimp/Buttondown 订阅

06

提供 Playwright 端到端测试与 Rake 校验、Lighthouse 审计任务

模板详细介绍

Howdy 是一个面向个人网站与作品集的 Jekyll 主题,以 RubyGem 形式分发,可通过 Gemfile 与 _config.yml 中的 theme 字段安装到新建或已有 Jekyll 站点。主题提供首页 Hero 轮播(单图或 2 张以上图片启用触摸/滑动切换)、按年份排序的项目集合、带分页与分类色标的博客、自动目录、分享按钮、公司 Logo 跑马灯,以及浅色/深色模式切换(偏好持久化并跟随系统设置)。内容通过 _projects 与 _posts 目录中的 Markdown 文件管理,页面文案、导航、社交链接、字体、404 页等均在 _config.yml 中配置。主题集成 jekyll-seo-tag、jekyll-feed、jekyll-sitemap 与 jekyll-paginate-v2,并可选接入 Giscus/Disqus/Utterances 评论、Mailchimp/Buttondown/自定义表单的订阅,以及 Google Analytics 或 Plausible 统计。样式可通过覆盖 _sass 变量、_includes 与 _layouts 文件进行定制,强调色可在 colors.accent 中修改。仓库包含 Playwright 端到端测试与 Rake 任务,用于 HTML 校验、配置字段检查与 Lighthouse 审计;README 列出了 Chrome、Firefox、Safari、Edge 的兼容版本及若干浏览器已知差异。使用前需注意:主题代码为 MIT 许可,但演示图片、字体、图标等第三方素材需单独核对许可;评论、订阅、统计等外部服务可能产生额外费用。

Jekyll作品集

适合你的项目吗?

适用场景

  • 搭建个人作品集网站,用 _projects 集合展示按年份排序的项目
  • 建立带分页、分类与自动目录的个人博客
  • 为个人站点配置浅色/深色模式、社交链接与分享按钮
  • 在静态站点中接入第三方评论、邮件订阅或访问统计服务

适合人群

  • 熟悉 Jekyll 与 Markdown 内容管理的个人开发者或设计师
  • 需要作品集与博客并存的个人网站
  • 希望以 RubyGem 方式安装并可通过 _config.yml 配置的主题使用者
  • 接受自行核对演示图片、字体等第三方素材许可的站点搭建者

上手与定制指南

结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。

  1. 1

    需要 Ruby >= 3.0、Jekyll >= 3.9 与 Bundler >= 2.4;Node.js >= 18 仅用于 Lighthouse CI

  2. 2

    新建站点可执行 jekyll new my-site --skip-bundle,再在 Gemfile 加入 gem "howdy-jekyll-theme" 并在 _config.yml 设置 theme: howdy-jekyll-theme

  3. 3

    已有站点需移除 _config.yml 中的 theme 与 remote_theme 行,并删除 _layouts、_includes、_sass 目录后再安装

  4. 4

    若遇权限或系统 gem 冲突,先执行 bundle config --local path .bundle 再 bundle install

  5. 5

    评论、订阅、统计等外部服务需在 _config.yml 中填写对应 provider 与凭据,可能产生额外费用

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。

使用时需要遵守

  • 允许免费使用、修改、商用和分发该版本代码。
  • 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
  • 代码按现状提供;担保与责任限制以原许可证及适用法律为准。

额外费用与待核对事项

  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
  • 主题设计灵感来自并改编自 axeltmpl 的 Framer 模板,该模板本身并非本仓库的 MIT 代码,使用者需自行确认其设计来源的授权情况。
  • 演示所用 SVG 插画来自 Illustration Kit 的 Ven 系列,属于第三方素材,其许可与主题的 MIT 代码许可相互独立,需单独核对。
  • Logo 使用的 Chaumont Script 字体由 Måns Grebäck 提供,属于第三方字体素材,商用或再分发前需自行确认其字体许可。
  • Node.js 18 及以上仅在运行 Lighthouse CI 审计时需要,普通站点构建与部署不依赖 Node.js。
  • 启用邮件订阅需在 _config.yml 中配置 Mailchimp、Buttondown 或自定义表单的 provider 与 action_url,属于外部服务,可能产生费用或需注册账号。
  • 启用评论需配置 Giscus、Disqus 或 Utterances,并填写仓库、分类等凭据,依赖 GitHub 或第三方评论服务。
  • 启用访问统计需选择 Google Analytics 或 Plausible 并填写对应域名或凭据,属于外部服务,可能产生费用。
查看原文依据

Permission is hereby granted, free of charge

许可证原文

- **[axeltmpl](https://axeltmpl.framer.website/)** — Design inspired by and remixed from this Framer template

README 原文

- **[Ven from Illustration Kit](https://illustrationkit.com/illustrations/ven)** — Free SVG illustrations

README 原文

- **[Chaumont Script](https://fontmeme.com/fonts/chaumont-script-font/)** — by Måns Grebäck

README 原文

| [Node.js](https://nodejs.org/) | >= 18 | For Lighthouse CI only |

README 原文

newsletter: enabled: true provider: buttondown # mailchimp, buttondown, custom action_url: "https://..." # form action URL

README 原文

comments: enabled: false provider: giscus # giscus, disqus, utterances giscus: repo: "user/repo" repo_id: "R_XXXXXXXX" category: "Announcements" category_id: "DIC_XXXXXXXX"

README 原文

analytics: provider: plausible # google, plausible plausible_domain: "yoursite.com"

README 原文
https://github.com/howdyitskyle/howdy-jekyll-theme/blob/main/LICENSEhttps://github.com/howdyitskyle/howdy-jekyll-theme/blob/main/README.md

DeepSeek 根据仓库许可证和 README 整理 ·2026-10-13。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。

项目核对记录与介绍依据

模板资料

来源平台
GitHub
资料与维护参考分
资料较完整 · 80 / 100
技术栈
Jekyll
网站类型
作品集
这个分数如何计算

本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。

这个项目需要核对什么

记录的仓库更新时间
2026-09-14
截图检查日期
2026-10-13

已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。

目录记录的主要技术栈是 Jekyll。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。

查看具体选型方法 →

介绍的制作与核对状态

介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。

审核声明: [email protected] · 2026-10-13

查看当时使用的来源资料

SHA-256: 09a0e0f2b9635fad3b85afae1e566c4ec6dd046cfd60f7c78752c569a29445f2

2026-10-13T08:33:19.545Z

来源文件 / 仓库
# Howdy Jekyll Theme

> A clean, modern, and minimalist Jekyll theme for personal websites and portfolios.

[![Gem Version](https://img.shields.io/gem/v/howdy-jekyll-theme)](https://rubygems.org/gems/howdy-jekyll-theme)
[![Gem Downloads](https://img.shields.io/gem/dt/howdy-jekyll-theme)](https://rubygems.org/gems/howdy-jekyll-theme)
[![CI](https://github.com/howdyitskyle/howdy-jekyll-theme/actions/workflows/ci.yml/badge.svg)](https://github.com/howdyitskyle/howdy-jekyll-theme/actions/workflows/ci.yml)
[![Jekyll](https://img.shields.io/badge/jekyll-%E2%89%A53.9-008a1e)](https://jekyllrb.com/)
[![Ruby](https://img.shields.io/badge/ruby-%E2%89%A53.0-red)](https://www.ruby-lang.org/)
[![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)
[![Lighthouse](https://img.shields.io/badge/lighthouse-all%20categories%20%E2%89%A50.9-008a1e)](lighthouserc.json)

[**Live Demo**](https://howdyitskyle.github.io/howdy-jekyll-theme/) · [**Installation**](#installation) · [**Configuration**](#configuration) · [**Contributing**](#contributing)

---

## Requirements

| Dependency | Version | Required |
|---|---|---|
| [Ruby](https://www.ruby-lang.org/) | >= 3.0 | Yes |
| [Jekyll](https://jekyllrb.com/) | >= 3.9 | Yes |
| [Bundler](https://bundler.io/) | >= 2.4 | Yes |
| [Node.js](https://nodejs.org/) | >= 18 | For Lighthouse CI only |

## Screenshots

| Light Mode | Dark Mode |
|---|---|
| ![Light mode](assets/images/howdy-theme-light.png) | ![Dark mode](assets/images/howdy-theme-dark.png) |

## Features

| Feature | Description |
|---|---|
| **Gem-based** | Easy installation via RubyGems |
| **Light & Dark** | Toggle with persistent preference, respects system preference |
| **Responsive** | Desktop, tablet, and mobile optimized |
| **Hero Carousel** | Touch/swipe-enabled, Swiper.js powered, fade transitions, autoplay |
| **Projects** | Portfolio collection sorted by year with dedicated layouts |
| **Blog** | jekyll-paginate-v2 powered with category color accents |
| **SEO** | jekyll-seo-tag integration |
| **RSS** | Automatic feed via jekyll-feed |
| **TOC** | Auto-generated table of contents with configurable heading levels |
| **Share** | Twitter, LinkedIn, Facebook, Reddit, Hacker News, WhatsApp, Telegram, Email, and copy-link buttons |
| **Newsletter** | Mailchimp, Buttondown, or custom form support |
| **Comments** | Giscus, Disqus, or Utterances |
| **Analytics** | Google Analytics or Plausible |
| **Company Logos** | Configurable marquee section |
| **Fonts** | Local DM Sans variable font + Chaumont Script logo font. Configurable via `fonts.primary` and `fonts.mono` |

## Browser Compatibility

| Browser | Version | Supported |
|---|---|---|
| Chrome | 120+ | ✅ |
| Firefox | 115+ | ✅ |
| Safari | 16+ | ✅ |
| Edge | 120+ | ✅ |

### Known Quirks

- **Firefox scrollbars**: Uses `scrollbar-color` and `scrollbar-width` (native thin scrollbars). `::-webkit-scrollbar` rules are ignored.
- **Safari `scroll-margin-top`**: Fully supported in Safari 15+. Older versions may require `padding-top` workaround on headings.
- **Safari SVG `loading="lazy"`**: SVG images do not support lazy loading in Safari; they load eagerly regardless of attribute.

## Automated Testing

This theme includes Playwright end-to-end tests covering:

| Test Suite | Coverage |
|---|---|
| `nav.spec.js` | Hamburger toggle, ESC/overlay close, desktop hide |
| `theme.spec.js` | Light/dark toggle, localStorage persistence, reload restore |
| `carousel.spec.js` | Dot navigation, swipe gestures, slide dimensions |
| `toc.spec.js` | Anchor scroll, scroll-margin offset, TOC presence |
| `transitions.spec.js` | Page fade-out, external/hash link exclusion |

```bash
npm test          # Run all tests
npm run test:ui   # Interactive UI mode
```

## Installation

### New Jekyll Site

```bash
jekyll new my-site --skip-bundle
cd my-site
```

### Add the Theme

Add to your `Gemfile`:

```ruby
gem "howdy-jekyll-theme"
```

Add to your `_config.yml`:

```yaml
theme: howdy-jekyll-theme
```

Then install:

```bash
bundle config --local path .bundle
bundle install
```

> **Troubleshooting:** If you run into permission issues or conflicts with system gems, run `bundle config --local path .bundle` before `bundle install`. This vendors all gems into the project's `.bundle/` directory, keeping your environment isolated.

### Existing Site

Remove any `theme:` and `remote_theme:` lines from `_config.yml`, delete `_layouts`, `_includes`, and `_sass` directories, then follow the steps above.

## Configuration

### Minimal Setup

```yaml
# _config.yml
title: "Your Name"
description: "Your site description"
lang: "en"
author: "Your Name"
email: "[email protected]"

url: "https://yoursite.com"
baseurl: ""

theme: howdy-jekyll-theme

plugins:
  - jekyll-seo-tag
  - jekyll-feed
  - jekyll-sitemap
  - jekyll-paginate-v2

collections:
  projects:
    output: true
    permalink: /projects/:slug/
    sort_by: year

pagination:
  enabled: true
  per_page: 5
  permalink: "/blog/page:num/"
  sort_reverse: true
```

### Hero Carousel

Single image or multi-image carousel:

```yaml
# Single image
hero_image: /assets/images/hero.png

# Carousel (2+ images enables touch/swipe)
hero_images:
  - /assets/images/hero-1.jpg
  - /assets/images/hero-2.jpg
  - /assets/images/hero-3.jpg
```

### Navigation

```yaml
navigation:
  - title: "Home"
    url: "/"
  - title: "Projects"
    url: "/projects/"
  - title: "Blog"
    url: "/blog/"
  - title: "About"
    url: "/about"
```

### Social Links

```yaml
social:
  github: "https://github.com/yourusername"
  twitter: "https://x.com/yourusername"
  linkedin: "https://linkedin.com/in/yourusername"
  instagram: "https://instagram.com/yourusername"
  dribbble: "https://dribbble.com/yourusername"
```

### Homepage Hero

```yaml
hero:
  headline: "I&nbsp;shape product&nbsp;strategy<br>&amp;&nbsp;design experiences<br><span class=\"text-muted\">at scale</span>"
  subtitle: "Your tagline or short description."
  cta_text: "View case studies"
  cta_url: "/projects/"
```

### About Page

```yaml
about_bio: "Your intro paragraph. <strong>HTML</strong> supported."
about_headline: "Building products that<br>sit at the intersection<br><span class=\"text-muted\">of design and intelligence</span>"
about_paragraph_2: "Your second paragraph."
about_paragraph_3: "Your third paragraph."
about_hero_image: "/assets/illustrations/designer.svg"
about_resume:
  enabled: true
  text: "Download Resume"
  url: "/assets/resume.pdf"

# Testimonials (shown on about page)
testimonials:
  - quote: "A great testimonial quote."
    name: "Jane Doe"
    role: "Title, Company"
```

### Pagination

```yaml
pagination:
  enabled: true
  per_page: 5
  permalink: "page:num/"
  sort_reverse: true
  prev_text: "Prev"
  next_text: "Next"
```

### 404 Page

```yaml
page_404:
  title: "Page Not Found"
  message: "The page you're looking for doesn't exist or has been moved."
  button_text: "Go Home"
  button_url: "/"
```

### Fonts

```yaml
fonts:
  primary: "DM Sans"      # DM Sans, Inter, Plus Jakarta Sans, Instrument Sans, Space Grotesk, Work Sans, Outfit, Manrope, Sora
  mono: "Fragment Mono"   # Fragment Mono, JetBrains Mono, Fira Code
```

### Company Logos Marquee

```yaml
company_logos:
  enabled: true
  items:
    - name: "Company 1"
      width: 120
      url: "https://company1.com"
    - name: "Company 2"
      width: 100
      url: "https://company2.com"
```

### Newsletter, Comments, Analytics

```yaml
# Newsletter
newsletter:
  enabled: true
  provider: buttondown      # mailchimp, buttondown, custom
  action_url: "https://..." # form action URL
  title: "Stay updated"

# Comments
comments:
  enabled: false
  provider: giscus          # giscus, disqus, utterances
  giscus:
    repo: "user/repo"
    repo_id: "R_XXXXXXXX"
    category: "Announcements"
    category_id: "DIC_XXXXXXXX"

# Analytics
analytics:
  provider: plausible       # google, plausible
  plausible_domain: "yoursite.com"
```

## Content Types

### Projects

Create files in `_projects/`:

```yaml
---
layout: project
title: "Project Name"
subtitle: "Brief description"
category: "Web Design"
year: "2025"
image: /assets/images/project.jpg
---
Project content with markdown...
```

### Blog Posts

Create files in `_posts/` with naming format `YYYY-MM-DD-slug.md`:

```yaml
---
layout: post
title: "Post Title"
category: "Tutorials"      # Tutorials, Inspiration, Freebies, Interviews
image: /assets/images/post.jpg
---
Post content...
```

> **Tip:** Use `<!--more-->` to define the excerpt shown on the blog index.

## Customization

### Override Styles

Create `assets/css/main.scss` in your site:

```scss
---
---
@use "variables";
@use "base";
@use "typography";
@use "layout";
@use "components";
@use "dark-mode";

// Your styles here
```

### Override Partials

Copy any `_includes/` or `_layouts/` file into your site's directory with the same path. Jekyll will use your version instead of the theme's.

### User Color Palette

Override the accent color in your `_config.yml`:

```yaml
colors:
  accent: "#e63946"
```

## Development

```bash
git clone https://github.com/howdyitskyle/howdy-jekyll-theme.git
cd howdy-jekyll-theme
bundle config --local path .bundle
bundle install
bundle exec jekyll serve
```

Visit `http://localhost:4000`.

### Testing

```bash
bundle exec rake test             # HTML validation (links, images, scripts)
bundle exec rake validate_config  # Config field checks
bundle exec rake lighthouse       # Performance & accessibility audits
bundle exec rake all              # All of the above
```

Lighthouse CI asserts accessibility >= 0.9 across 5 pages.

### Build the Gem

```bash
gem build howdy-jekyll-theme.gemspec
gem install ./howdy-jekyll-theme-1.0.0.gem
```

## File Structure

```
├── _includes/          # 12 partials (nav, hero-carousel, toc, share, etc.)
├── _layouts/           # 7 layouts (default, home, page, post, project, blog, collection)
├── _sass/              # 7 stylesheets (variables, base, typography, layout, components, dark-mode, user-colors)
├── assets/
│   ├── css/            # main.scss, swiper-bundle.min.css
│   ├── js/             # hero-carousel.js, mobile-nav.js, theme-toggle.js, swiper-bundle.min.js
│   ├── fonts/          # ChaumontScript-Regular.otf, DMSans-Variable.ttf, DMSans-Italic-Variable.ttf
│   ├── images/
│   └── illustrations/
├── _projects/          # Demo portfolio items
├── _posts/             # Demo blog posts
├── blog/               # Blog index with pagination
├── lib/                # Gem entry point
├── _config.yml         # Fully documented configuration
├── Rakefile            # Test runner
└── lighthouserc.json   # Lighthouse CI assertions
```

## Contributing

1. Fork the repo
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

Bug reports and feature requests are welcome at [Issues](https://github.com/howdyitskyle/howdy-jekyll-theme/issues).

## License

This theme is available under the [MIT License](LICENSE).

## Acknowledgments

- **[axeltmpl](https://axeltmpl.framer.website/)** — Design inspired by and remixed from this Framer template
- **[Ven from Illustration Kit](https://illustrationkit.com/illustrations/ven)** — Free SVG illustrations
- **[Swiper.js](https://swiperjs.com/)** — Touch-enabled carousel (MIT)
- **[Chaumont Script](https://fontmeme.com/fonts/chaumont-script-font/)** — by Måns Grebäck
- **[Jekyll](https://jekyllrb.com/)** — Static site generator
反馈内容错误

看看同类模板

对比同技术栈与用途的模板,找到更适合的视觉与内容结构。