Next.jsReact作品集博客

academic-site-template — Next.js 作品集模板

作者 kunpai

面向研究人员、博士生和学者的个人网站模板,基于 Next.js 16、React 19 和 Bootstrap,内容集中在 content/ 文件夹,支持出版物主题图、博客、由同一数据生成的 CV/简历 PDF,以及面向搜索引擎和 LLM 的 JSON-LD、sitemap 和 llms.txt。

看看你的网站会是什么样

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

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

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

全部页面与视图 3

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

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

值得关注的模板亮点

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

01

内容集中在 content/ 文件夹,模板不附带该文件夹,更新站点代码不会与个人内容冲突

02

出版物支持按类型分标签页、基于标签的主题图、BibTeX 条目和作者列表高亮

03

CV 和简历 PDF 由 LaTeX 从同一份数据生成,GitHub Action 可在推送时自动重建

04

提供 JSON-LD、sitemap 和 llms.txt/llms-full.txt,便于搜索引擎和 LLM 读取

05

板块可通过 config.json 中的 features 开关关闭,关闭后页面返回 404 并同步移除导航、首页区块和 sitemap/RSS/llms.txt 条目

06

支持亮色与暗色模式,可配置强调色和标题字体

模板详细介绍

该模板用于搭建学术个人网站,README 说明其面向研究人员、博士生和学者。站点代码与个人内容分离:模板本身不包含 content/ 文件夹,首次运行 npm run setup 会从 examples/content/ 复制生成,因此更新站点代码不会与用户内容冲突。内容涵盖配置、JSON 数据(出版物、教育经历、工作经历、项目、技能、奖项、新闻、报告、服务)、About 页面和 Markdown 博客,照片与 PDF 放在 public/。功能方面,出版物支持按类型分标签页、基于标签的主题图、BibTeX 和作者高亮;博客为 GitHub 风格 Markdown,含阅读时间和 RSS;CV 与简历 PDF 由 LaTeX 从同一数据生成,可通过 GitHub Action 在推送时重建;站点提供 JSON-LD、sitemap 和 llms.txt/llms-full.txt。部分板块可在 config.json 中关闭,关闭后对应页面返回 404,并移除导航链接、首页区块及 sitemap、RSS、llms.txt 中的条目。技术栈为 Next.js 16、React 19 和 Bootstrap,部署目标为 Vercel 或任何 Next.js 托管环境。README 未说明性能、可访问性或生产就绪程度。

Next.js作品集博客

适合你的项目吗?

适用场景

  • 研究人员、博士生和学者搭建个人学术主页,集中展示出版物、博客和 CV
  • 需要将出版物数据、博客文章和 CV/简历 PDF 统一维护在同一份内容源中
  • 希望站点内容能被搜索引擎和 LLM 读取,需要 JSON-LD、sitemap 和 llms.txt
  • 使用 React/Next.js 技术栈并计划部署到 Vercel 或任何 Next.js 托管环境
  • 需要按需关闭项目、博客、报告等板块,并同步从导航、首页和站点地图中移除

适合人群

  • 研究人员、博士生和学者
  • 偏好 React/Next.js 技术栈的开发者
  • 希望内容与站点代码分离、便于后续更新模板的用户
  • 需要从同一数据生成 CV 和简历 PDF 的用户
  • 计划部署到 Vercel 或任何 Next.js 托管环境的用户

上手与定制指南

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

  1. 1

    在 GitHub 点击 Use this template 或克隆仓库后,运行 npm install,再运行 npm run setup 从 examples/ 创建 content/ 并填写姓名、链接和板块设置,然后 npm run dev 启动本地服务

  2. 2

    将 content/data/*.json 中的示例条目替换为自己的数据,字段说明见 docs/CONTENT.md

  3. 3

    在 Vercel 导入仓库即可部署,默认 Next.js 设置可直接使用

  4. 4

    生成 CV 和简历 PDF 需运行 python3 scripts/generate_resumes.py,并需要本地安装 LaTeX(MacTeX 或 TeX Live)

  5. 5

    更新模板前先提交自己的修改,再运行 npm run update;首次更新会通过 .template-version 关联历史,之后为普通合并

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

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

使用时需要遵守

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

额外费用与待核对事项

  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
  • 生成 CV 和简历 PDF 需要本地安装 LaTeX(MacTeX 或 TeX Live),否则无法运行该脚本。
  • npm run indexnow 会在部署后向 Bing 等搜索引擎提交页面,属于可选的外部服务调用。
  • 部署步骤依赖 Vercel 平台,需要注册并使用该外部托管服务。
查看原文依据

Permission is hereby granted, free of charge

许可证原文

python3 scripts/generate_resumes.py # needs a LaTeX install (MacTeX, TeX Live)

README 原文

| `npm run indexnow` | After a deploy, tell Bing and others about your pages |

README 原文

3. Deploy: import the repository in [Vercel](https://vercel.com). The default Next.js settings

README 原文
https://github.com/kunpai/academic-site-template/blob/main/LICENSEhttps://github.com/kunpai/academic-site-template/blob/main/README.md

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

项目核对记录与介绍依据

模板资料

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

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

这个项目需要核对什么

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

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

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

查看具体选型方法 →

介绍的制作与核对状态

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

审核声明: codex-user-requested-batch-review-20261015 · 2026-10-15

查看当时使用的来源资料

SHA-256: 549355fcaaee191aa401bc74be413568a4e7c50ec1b58588076221fedfe116dd

2026-10-14T23:54:55.416Z

来源文件 / 仓库
# Academic Site Template

A personal website for researchers, PhD students and academics: publications with a topic graph,
a blog, a CV/resume built from the same data, and a site that search engines and LLMs can read.
Built with Next.js 16, React 19 and Bootstrap. Everything you write goes in one folder, `content/`,
which `npm run setup` creates for you from [`examples/content/`](examples/content). The template
itself never ships a `content/` folder, so updates to the site code can't conflict with yours.

[![Use this template](https://img.shields.io/badge/Use_this_template-2ea44f?style=for-the-badge&logo=github&logoColor=white)](https://github.com/kunpai/academic-site-template/generate)
[![Deploy with Vercel](https://img.shields.io/badge/Deploy_with_Vercel-000000?style=for-the-badge&logo=vercel&logoColor=white)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fkunpai%2Facademic-site-template)
[![Live demo](https://img.shields.io/badge/Live_demo-2f6fed?style=for-the-badge&logo=googlechrome&logoColor=white)](https://academic-site-template.vercel.app)

[![The template's homepage in light and dark mode, on desktop and mobile](docs/images/hero.png)](https://academic-site-template.vercel.app)

The demo at [academic-site-template.vercel.app](https://academic-site-template.vercel.app) is
built from this repository with the example content for the fictional Jane Doe.

## Updates without merge conflicts

Your content lives in your own `content/` folder, and the template only ships site code, so taking
a new release is one command. This is a real run on a site made with **Use this template**:

![npm run update merging 24 changed template files into a customised site with 0 conflicts](docs/images/update.gif)

See [Getting updates](#getting-updates) for how it works.

## Features

- **Everything personal lives in `content/`**: config, data (JSON), about page, blog posts.
  Setup creates it from the example; photos and PDFs go in `public/`.
- **Sections you can switch off.** Turning off `projects`, `blogs` and so on removes the page (it
  returns 404), its nav link, its homepage block, and its entries in the sitemap, RSS and
  `llms.txt`.
- **Publications** with tabs by type, a topic graph built from your tags, BibTeX, and your name
  highlighted in author lists.
- **Blog** in Markdown (GitHub-flavoured, raw HTML allowed), with reading time and an RSS feed.
- **CV and resume PDFs** generated with LaTeX from the same data. A GitHub Action rebuilds them
  when you push.
- **Readable by search engines and LLMs:** JSON-LD, a sitemap, and `llms.txt` / `llms-full.txt`.
- **Checked content:** JSON Schemas give editor autocomplete, and `npm run validate` runs before
  every build.
- Light and dark mode, a configurable accent colour and heading font.
- Optional link pages for posters and talks (`linktree`, off by default).

## Compared to al-folio, academicpages and HugoBlox

[al-folio](https://github.com/alshedivat/al-folio),
[academicpages](https://github.com/academicpages/academicpages.github.io) and
[HugoBlox](https://github.com/HugoBlox/hugo-theme-academic-cv) (formerly Wowchemy) are the most
popular academic site templates. All three are mature and free to host. This template makes
different trade-offs:

| | This template | al-folio | academicpages | HugoBlox |
|---|---|---|---|---|
| **Stack** | Next.js 16 (React 19), Node | Jekyll (Ruby) | Jekyll (Ruby), based on Minimal Mistakes | Hugo (Go), Tailwind CSS |
| **Your content** | One folder, `content/`, checked against JSON Schemas | Spread across `_pages/`, `_posts/`, `_bibliography/`, `_config.yml` | Spread across `_pages/`, `_publications/`, `_talks/`, `_config.yml` | Markdown in `content/`, plus `config/_default/*.yaml` and `data/authors/` |
| **Updating** | `npm run update` merges the new template; only site code changes, so your content never conflicts | Merge upstream; files you customised can conflict | Fork; no separate update path | `npx hugoblox@latest upgrade`, which applies migrations automatically |
| **Publications** | JSON with a BibTeX entry each, plus an interactive topic graph | A BibTeX file, rendered with jekyll-scholar | One Markdown file per paper (scripts can generate them from TSV/BibTeX) | A folder per paper (`index.md` + `cite.bib`); a CLI imports BibTeX |
| **CV** | CV and short resume compiled to PDF with LaTeX from the same data, locally or by a GitHub Action | CV page from JSON Resume or YAML; you supply the PDF | CV page in Markdown; you supply the PDF | CV page built from a YAML profile; you supply the PDF |
| **Deploy target** | Vercel (or any Next.js host) | GitHub Pages | GitHub Pages | Netlify, GitHub Pages, Vercel, Cloudflare Pages |

Choose al-folio or academicpages if you want Jekyll and GitHub Pages, and HugoBlox if you want
Hugo and its large library of page blocks. Choose this one if you'd rather work in React, keep
your content cleanly separated, and have your CV PDF built from the same data as the site.

## Quickstart

1. Click **Use this template** on GitHub (or clone the repo), then:
   ```bash
   npm install
   npm run setup     # creates content/ from examples/ and asks for your name, links, sections
   npm run dev       # http://localhost:3000
   ```
2. Replace the example entries in `content/data/*.json` with yours. See
   [docs/CONTENT.md](docs/CONTENT.md) for every field.
3. Deploy: import the repository in [Vercel](https://vercel.com). The default Next.js settings
   work as they are.

Until `content/` exists, `npm run dev` and `npm run build` use the example site in `examples/`.
So a fresh clone, or the Deploy button above, shows a working demo straight away.

## What lives where

`content/` isn't in this repository: `npm run setup` creates it by copying
[`examples/content/`](examples/content), the fictional Jane Doe site in the demo. Browse that folder
to see what goes where.

| Path | What it is |
|---|---|
| `content/config.json` | Name, links, SEO, feature flags, theme, UI labels |
| `content/data/*.json` | Publications, education, experience, projects, skills, awards, news, talks, service |
| `content/about.md` | The About page |
| `content/blogs/*.md` | Blog posts (front matter: `title`, `date`, `tags`, `authors`, `image`) |
| `public/` | Your photo, images, and CV/resume PDFs, served as-is |
| `examples/` | The starter content that `npm run setup` copies |
| `schemas/` | JSON Schemas for everything in `content/` |
| `components/`, `pages/`, `lib/`, `styles/`, `scripts/` | Site code |

Your editor (VS Code, via `.vscode/settings.json`) autocompletes and checks `content/` files
against `schemas/`.

## Customising

**Sections.** Set `features.<name>` to `false` in `content/config.json`:

```json
"features": { "projects": false, "blogs": true, "talks": false }
```

All sections are on by default except `linktree`. The full table is in
[docs/CONTENT.md](docs/CONTENT.md#feature-flags).

**Look.** Pick any Google Fonts family for headings, and optionally an accent colour:

```json
"theme": { "headingFont": "Audiowide", "accentColor": "#0d6efd", "gradientStart": "#0d6efd", "gradientEnd": "#00d2ff" }
```

Without colours the site uses Bootstrap's default palette. Setting `gradientStart` and
`gradientEnd` adds a gradient to your name in the hero.

**Wording.** Button and heading text can be overridden under `labels`, for example
`"labels": { "resumeButton": "Download CV" }`.

**Homepage.** Work and project entries appear on the homepage unless they set
`"show_on_homepage": false`. The full pages always list everything.

## CV and resume

```bash
python3 scripts/generate_resumes.py   # needs a LaTeX install (MacTeX, TeX Live)
```

This writes the PDFs named by `resume` and `resume_short` in your config into `public/`. Entries
opt in or out with `show_in_resume` and `show_in_resume_short`. On GitHub, the **Build Resumes**
workflow does the same on every push that changes `content/`.

## Scripts

| Command | What it does |
|---|---|
| `npm run setup` | First-time setup and identity wizard |
| `npm run dev` | Development server (regenerates `llms.txt` and RSS first) |
| `npm run validate` | Check `content/` against the schemas |
| `npm run build` | Validate, generate `llms.txt`/RSS, build, write the sitemap |
| `npm run update` | Merge the latest template into your site ([details](#getting-updates)) |
| `npm run indexnow` | After a deploy, tell Bing and others about your pages |

**Environment variables:** none are required. `SITE_URL` optionally overrides `siteUrl` for the
sitemap.

## Getting updates

Your content lives in `content/` and `public/`, and template updates only touch site code. To
pull the latest version, commit your work and run:

```bash
npm run update
```

This fetches the template and merges it. You only get conflicts in site files you edited yourself
(say, a component you customised), never in your content. [CHANGELOG.md](CHANGELOG.md) lists what
each release changes and anything you need to do.

Why a script: **Use this template** gives your repository fresh history with no commit in common
with the template, so a plain `git merge` would conflict on every file the template changed. Each
release carries a `.template-version` stamp. On the first update, the script uses it to find the
version you started from and links the two histories, so later merges are ordinary merges.

## Show your site

Built something with this template? Share it in the
[Show your site](https://github.com/kunpai/academic-site-template/discussions/1) discussion.
Questions go in [Discussions](https://github.com/kunpai/academic-site-template/discussions), and bugs in
[Issues](https://github.com/kunpai/academic-site-template/issues).

## Credits

<!-- credits:start -->
This template grew out of [Kunal Pai's website](https://www.kunpai.space), which he first built
with help from [Parth Shah](https://helloparthshah.vercel.app/) and
[Harshil Patel](https://harshilpatel.vercel.app/). All three of their sites are built on it.
<!-- credits:end -->

## License

The code is under the [MIT License](LICENSE). The example content in `examples/` is yours to
replace.
反馈内容错误

看看同类模板

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