GatsbyReact作品集博客

gatsby-theme-chronogrove — Gatsby 作品集模板

作者 chrisvogt

一个用于个人网站与博客的 Gatsby 主题,首页以社交动态仪表盘呈现,内置 GitHub、Instagram、Spotify、Goodreads、Steam 等小组件,并支持 MDX 博客。

看看你的网站会是什么样

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

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

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

全部页面与视图 3

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

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

值得关注的模板亮点

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

01

首页为社交动态仪表盘,聚合展示多个社交平台的最新活动

02

内置 GitHub、Instagram、Spotify、Goodreads、Steam 等可配置小组件

03

博客基于 MDX,提供 Note、ColorModeImage 等短代码与嵌入支持

04

移动优先的响应式设计,支持深色与浅色模式

05

使用 pnpm workspaces 与 Turborepo 的 monorepo 结构,含演示站点与内容示例

06

包含 Jest 与 React Testing Library 的单元测试、快照测试与覆盖率报告

模板详细介绍

gatsby-theme-chronogrove 是作者为个人站点 www.chrisvogt.me 开发并开源的 Gatsby 主题,仓库同时包含可复用的主题包、演示站点和内容示例。主题面向个人网站与博客场景,首页采用社交动态仪表盘的形式,聚合展示来自多个社交平台的最新活动;博客部分基于 MDX,内置 Note、ColorModeImage 等短代码与嵌入能力。

主题提供 GitHub、Instagram、Spotify、Goodreads、Steam 等预置小组件,小组件需要自行配置数据源,仓库的 __mocks__ 目录给出了预期的 API 响应格式示例。导航通过 GraphQL 集成进行配置,界面为移动优先并支持深色/浅色模式。

项目采用 pnpm workspaces 与 Turborepo 组织为 monorepo,包含 packages/ui(共享 Theme UI 层)、packages/theme(Gatsby 主题包)、websites 下的演示站点与个人站点,以及一个可选的 Next.js App Router 参考示例。开发环境要求 Node.js 与 pnpm,并说明本地 HTTPS 需要 mkcert 生成证书;若不需要 Google Analytics,需在 gatsby-config.js 中移除或注释对应插件。仓库处于向 TypeScript 渐进迁移的过程中,新增或明显改动的 React 组件目前要求补充 prop-types。

Gatsby作品集博客

适合你的项目吗?

适用场景

  • 搭建以社交动态聚合为首页的个人网站
  • 建立支持 MDX 与短代码的个人博客
  • 在站点中嵌入 GitHub、Instagram、Spotify、Goodreads 或 Steam 的动态小组件
  • 参考 monorepo 结构维护主题包与多个站点实例
  • 通过 Next.js App Router 示例复用 @chronogrove/ui 的界面基础组件

适合人群

  • 需要个人网站与博客一体化方案的开发者
  • 熟悉 Gatsby 与 MDX 内容工作流的使用者
  • 希望以小组件形式展示社交平台动态的个人站点作者
  • 需要同时维护主题包与演示站点的 monorepo 项目

上手与定制指南

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

  1. 1

    环境要求 Node.js >= 24.0.0、pnpm >= 10.0.0 与 Git;从 Yarn 迁移需删除 node_modules 与 yarn.lock 后执行 pnpm install

  2. 2

    本地 HTTPS 开发需用 mkcert 生成证书,并放入 websites/www.chrisvogt.me/certs 目录

  3. 3

    若不使用 Google Analytics,需在 websites/www.chrisvogt.me/gatsby-config.js 中移除或注释 gatsby-plugin-google-gtag 配置块

  4. 4

    小组件需在 gatsby-config.js 中配置各自的数据源,API 响应格式可参考 packages/theme/__mocks__

  5. 5

    生产构建输出位于 websites/<站点>/public;Netlify 等静态托管需据此设置发布目录

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

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

使用时需要遵守

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

额外费用与待核对事项

  • 小组件必须自行配置数据源(如 GitHub、Instagram、Spotify、Goodreads、Steam 的 API 端点),否则无法显示动态内容。
  • 默认配置包含 Google Analytics 插件;若不使用需手动移除或注释该配置块,否则会加载分析服务。
  • 本地 HTTPS 开发需自行用 mkcert 生成 SSL 证书并放入指定目录,否则无法按文档方式启动开发服务器。
  • 运行环境要求 Node.js 24.0.0 及以上版本,低于该版本无法使用。
  • 包管理器要求 pnpm 10.0.0 及以上版本,且仓库使用 pnpm workspaces 与 Turborepo。
  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
查看原文依据

Permission is hereby granted, free of charge

许可证原文

Widgets require data sources. Configure them in your `gatsby-config.js`:

README 原文

If you do not plan to use Google Analytics, remove or comment out the analytics plugin block

README 原文

For local HTTPS development, you'll need SSL certificates:

README 原文

Node.js**: >= 24.0.0

README 原文

pnpm**: >= 10.0.0

README 原文
https://github.com/chrisvogt/gatsby-theme-chronogrove/blob/main/LICENSEhttps://github.com/chrisvogt/gatsby-theme-chronogrove/blob/main/README.md

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

项目核对记录与介绍依据

模板资料

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

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

这个项目需要核对什么

记录的仓库更新时间
2026-08-18
截图检查日期
2026-10-02

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

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

查看具体选型方法 →

介绍的制作与核对状态

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

已完成服务器许可规则与 AI 来源核对;未经过人工编辑审核。

查看当时使用的来源资料

SHA-256: a38283699bcfb9d3f9d91ba82226d5e7aaf70f9aec8be2f82d70c337d3d006d8

2026-10-02T20:02:49.722Z

来源文件 / 仓库
# Gatsby Theme Chronogrove

[![Netlify Status](https://api.netlify.com/api/v1/badges/29f330b8-22bf-4f7f-a0f0-240476512db0/deploy-status)](https://app.netlify.com/sites/chrisvogt/deploys)
[![CI](https://github.com/chrisvogt/gatsby-theme-chronogrove/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/chrisvogt/gatsby-theme-chronogrove/actions/workflows/ci.yml)
[![CodeQL](https://github.com/chrisvogt/gatsby-theme-chronogrove/actions/workflows/codeql-analysis.yml/badge.svg?branch=main)](https://github.com/chrisvogt/gatsby-theme-chronogrove/actions/workflows/codeql-analysis.yml)
[![Code Coverage](https://codecov.io/gh/chrisvogt/gatsby-theme-chronogrove/branch/main/graph/badge.svg?token=YUksu2c99s)](https://codecov.io/gh/chrisvogt/gatsby-theme-chronogrove)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/chrisvogt/gatsby-theme-chronogrove/blob/main/LICENSE)
[![BlueSky](https://img.shields.io/badge/[email protected]?logo=bluesky&logoColor=white)](https://bsky.app/profile/chrisvogt.me)

A modern Gatsby theme for personal websites and blogs with social media integration. It powers [www.chrisvogt.me](https://www.chrisvogt.me) and includes a demo site, reusable theme package, and content examples.

> **TypeScript roadmap:** The monorepo is heading toward **incremental TypeScript adoption** (a full package rewrite in one step has been painful here, so we are not doing that again in one leap). Until files are ported, please **add or update [`prop-types`](https://github.com/facebook/prop-types)** on React components you **create** or **meaningfully change**—especially under **`packages/theme/src`**, where `react/prop-types` is enabled (see root **`eslint.config.js`**). Documenting props now makes it much easier to replace `propTypes` with TypeScript types **file by file** later.

## 🚀 Features

- **Social Dashboard Homepage**: Display recent activity from multiple social platforms
- **Blog System**: Full-featured blog with MDX support (built-in shortcodes such as `Note`, `ColorModeImage`, and embeds—see theme README)
- **Widget System**: Pre-built widgets for GitHub, Instagram, Spotify, Goodreads, and Steam
- **Responsive Design**: Mobile-first design with dark/light mode support
- **Performance Optimized**: Built with Gatsby for fast loading and SEO
- **Testing**: Comprehensive unit tests and coverage reporting
- **Navigation System**: Configurable navigation with proper GraphQL integration
- **Error Handling**: Robust error handling and fallbacks throughout the theme

## 📋 Prerequisites

- **Node.js**: >= 24.0.0
- **pnpm**: >= 10.0.0
- **Git**: For version control

> **Migrating from Yarn?** Remove `node_modules` and `yarn.lock`, then run `pnpm install`. The repo uses pnpm workspaces and Turborepo; all `yarn` commands are now `pnpm` (e.g. `pnpm develop`, `pnpm test`).

## 🏗️ Project Structure

This is a monorepo using pnpm workspaces and Turborepo:

```
gatsby-theme-chronogrove/
├── packages/
│   ├── ui/                   # @chronogrove/ui — Theme UI theme, color-mode, shared primitives
│   │   ├── src/
│   │   └── package.json
│   └── theme/                # gatsby-theme-chronogrove (Gatsby theme package)
│       ├── src/
│       │   ├── components/   # React components
│       │   ├── widgets/      # Social media widgets
│       │   ├── templates/    # Page templates
│       │   └── ...
│       ├── scripts/          # Theme-local tooling (e.g. postinstall banner)
│       └── package.json
├── websites/
│   ├── www.chronogrove.com/  # Official demo site
│   │   ├── content/          # Demo blog posts and content
│   │   ├── gatsby-config.js
│   │   └── package.json
│   └── www.chrisvogt.me/     # Personal website implementation
│       ├── content/          # Blog posts and content
│       ├── src/pages/        # Custom pages
│       ├── gatsby-config.js
│       └── package.json
├── examples/
│   └── chronogrove-next/     # Next.js 16 App Router reference (optional; not the main Gatsby site)
│       ├── app/
│       └── package.json
└── package.json              # Root workspace config
```

> **Dependency overrides**: The root `package.json` uses pnpm overrides for security patches. See [docs/dependency-overrides.md](docs/dependency-overrides.md) for rationale.

## ⚡ Quick Start

1. **Clone the repository**

   ```bash
   git clone https://github.com/chrisvogt/gatsby-theme-chronogrove.git
   cd gatsby-theme-chronogrove
   ```

2. **Install dependencies**

   ```bash
   pnpm install
   ```

3. **HTTPS Development Setup**

   **For local HTTPS development, you'll need SSL certificates:**
   - Install mkcert (if not already installed):

     ```bash
     # macOS
     brew install mkcert

     # Linux
     sudo apt install mkcert
     ```

   - Generate certificates:

     ```bash
     mkcert www.dev-chrisvogt.me
     ```

   - Move certificates to the certs directory:

     ```bash
     mkdir -p websites/www.chrisvogt.me/certs
     mv www.dev-chrisvogt.me-key.pem websites/www.chrisvogt.me/certs/
     mv www.dev-chrisvogt.me.pem websites/www.chrisvogt.me/certs/
     ```

4. **If you do not plan to use Google Analytics, remove or comment out the analytics plugin block in `websites/www.chrisvogt.me/gatsby-config.js`:**

   ```
   {
      resolve: 'gatsby-plugin-google-gtag',
      options: {
        trackingIds: [process.env.GA_MEASUREMENT_ID],
        gtagConfig: {},
        pluginConfig: {
          respectDNT: true
        }
      }
    },

   ```

5. **Start development server**

   ```bash
   pnpm develop
   ```

6. **Open your browser**
   Navigate to [https://www.dev-chrisvogt.me:8000](https://www.dev-chrisvogt.me:8000)

## 🛠️ Development

### Available Scripts

| Command              | Description                                               |
| -------------------- | --------------------------------------------------------- |
| `pnpm develop`       | Start personal site (www.chrisvogt.me)                    |
| `pnpm develop:theme` | Start demo site (www.chronogrove.com)                     |
| `pnpm develop:next`  | Start Next.js reference app (`examples/chronogrove-next`) |
| `pnpm test`          | Run test suite                                            |
| `pnpm test:watch`    | Run tests in watch mode                                   |
| `pnpm test:coverage` | Generate coverage report                                  |
| `pnpm build`         | Build for production                                      |
| `pnpm format`        | Format code with Prettier                                 |
| `pnpm lint`          | Run ESLint                                                |

### Development Workflow

#### Working on the Theme

The theme code lives in **`packages/theme`** (`gatsby-theme-chronogrove`). Shared **Theme UI** surface (theme object, color-mode helpers, `ChronogroveThemeProvider`, Button, skip-nav, color toggle) lives in **`packages/ui`** (`@chronogrove/ui`). To work on theme components:

1. Start the demo site: `pnpm develop:theme`
2. Make your changes in `packages/theme/src/components/` and/or `packages/ui/src/` as appropriate
3. The changes will be reflected in the demo site at `http://localhost:8000`

Run UI package tests only: `pnpm --filter @chronogrove/ui test`

#### Working on Content

**Demo Site Content** (`websites/www.chronogrove.com/`):

- **Blog posts**: `websites/www.chronogrove.com/content/blog/`
- **Music posts**: `websites/www.chronogrove.com/content/music/`
- **Site configuration**: `websites/www.chronogrove.com/gatsby-config.js`

**Personal Site Content** (`websites/www.chrisvogt.me/`):

- **Blog posts**: `websites/www.chrisvogt.me/content/blog/`
- **Custom pages**: `websites/www.chrisvogt.me/src/pages/`
- **Site configuration**: `websites/www.chrisvogt.me/gatsby-config.js`

4. **Start HTTPS development**:
   ```bash
   pnpm develop
   ```

### Demo Site Development

For theme development and testing, use the demo site:

```bash
# Start the demo site
pnpm develop:theme

# Open your browser to http://localhost:8000
```

## 🎨 Widgets

The theme includes several pre-built widgets for social media integration:

### Available Widgets

- **📝 Recent Posts**: Display latest blog posts
- **🐙 GitHub**: Show profile stats, pinned repos, and recent PRs
- **📸 Instagram**: Display recent photos with lightbox gallery
- **📚 Goodreads**: Show reading progress and recent books
- **🎵 Spotify**: Display playlists and top tracks
- **🎮 Steam**: Show gaming activity and owned games

### Widget Configuration

Widgets require data sources. Configure them in your `gatsby-config.js`:

```javascript
module.exports = {
  plugins: [
    {
      resolve: 'gatsby-theme-chronogrove',
      options: {
        widgets: {
          github: {
            widgetDataSource: 'https://your-github-api.com'
          },
          instagram: {
            widgetDataSource: 'https://your-instagram-api.com'
          }
          // ... other widgets
        }
      }
    }
  ]
}
```

See the [mock data examples](packages/theme/__mocks__/) for expected API response formats.

## 🧪 Testing

The project includes comprehensive testing for theme components, widgets, selectors, and build-critical behavior:

- **Unit Tests**: Jest + React Testing Library
- **Snapshot Tests**: Component regression coverage
- **Coverage Reports**: Code coverage tracking
- **GraphQL Mocking**: Proper mocking for Gatsby's `useStaticQuery` and `graphql`
- **Navigation Testing**: Comprehensive tests for navigation components and hooks

### Running Tests

```bash
# Run all tests
pnpm test

# Run tests in watch mode
pnpm test:watch

# Generate coverage report
pnpm test:coverage
```

## 🚀 Production Build

### Building for Production

**Personal Site:**

```bash
pnpm --filter www.chrisvogt.me build
```

**Demo Site:**

```bash
pnpm --filter www.chronogrove.com build
```

**Next.js reference app** (optional):

```bash
pnpm --filter chronogrove-next build
```

The Gatsby build outputs are `websites/www.chrisvogt.me/public` and `websites/www.chronogrove.com/public` (relative to the repo root). The Next example writes to `examples/chronogrove-next/.next` (gitignored).

**Netlify / static hosts:** If the site root is the monorepo, set **publish directory** to `websites/www.chrisvogt.me/public` (or `public` when **base directory** is `websites/www.chrisvogt.me`).

### Testing Production Build

To test the production build locally:

```bash
# Install http-server globally
npm install -g http-server

# Serve the build with HTTPS (use the same cert/key filenames as in develop:https)
http-server -o -S -C websites/www.chrisvogt.me/certs/www.dev-chrisvogt.me.pem -K websites/www.chrisvogt.me/certs/www.dev-chrisvogt.me-key.pem -a www.dev-chrisvogt.me -p 443
```

## 🤝 Contributing

We welcome contributions! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details.

See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the pull request process, PR title format, and CI expectations.

## 📚 Documentation

- **[`@chronogrove/ui`](packages/ui/README.md)**: Shared Theme UI layer, color-mode helpers, Gatsby helpers (`@chronogrove/ui/gatsby`), and **Next.js App Router** helpers (`@chronogrove/ui/next`)
- **[Next.js example](examples/chronogrove-next/README.md)**: App Router reference (`chronogrove-next`): `@chronogrove/ui/next` shell plus [`home-showcase.jsx`](examples/chronogrove-next/app/home-showcase.jsx) demonstrating the same `@chronogrove/ui` primitives as the Gatsby theme (widgets, layout, controls)
- **[Theme Documentation](packages/theme/README.md)**: Detailed theme configuration and customization
- **[Demo Site Documentation](websites/www.chronogrove.com/README.md)**: Demo site setup and usage
- **[Widget Documentation](packages/theme/src/components/widgets/)**: Individual widget documentation
- **[API Examples](packages/theme/__mocks__/)**: Mock data examples for widget APIs

## 🐛 Troubleshooting

### Common Issues

**Port 8000 already in use**

```bash
# Kill the process using port 8000
lsof -ti:8000 | xargs kill
```

**Demo site not loading**

- Ensure you're using `pnpm develop:theme` for the demo site
- Check that the workspace is properly configured
- Verify all dependencies are installed: `pnpm install`

**SSL certificate errors**

- Ensure certificates are in the correct location: `websites/www.chrisvogt.me/certs/`
- Verify certificate names match expected format
- Check that mkcert is properly installed

**Widget data not loading**

- Verify API endpoints are accessible
- Check network requests in browser dev tools
- Review mock data examples for correct format

## 📄 License

Copyright © 2019 [Chris Vogt](https://www.chrisvogt.me). Released under the [MIT License](LICENSE).

## 🙏 Acknowledgments

- Built with [Gatsby](https://www.gatsbyjs.com/)
- Styled with [Theme UI](https://theme-ui.com/)
- Icons from [Font Awesome](https://fontawesome.com/)
- Testing with [Jest](https://jestjs.io/) and [React Testing Library](https://testing-library.com/)

---

**Questions?** Open an [issue](https://github.com/chrisvogt/gatsby-theme-chronogrove/issues) or reach out on [Bluesky](https://bsky.app/profile/chrisvogt.me).
反馈内容错误

看看同类模板

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