使用本地 JSON 文件作为数据源,无需编写代码即可填写作品集内容
github-portfolio-template — HTML 作品集模板
作者 iyanarmanda
一个基于 HTML、CSS 和 JavaScript 的开源 GitHub 作品集模板,通过本地 JSON 文件配置项目与个人信息,适合部署到 GitHub Pages 展示公开仓库。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 2
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
提供测试脚本,可通过 npm、yarn 或 pnpm 运行以校验 JSON 数据
基于 HTML5、CSS 和 JavaScript,README 称其无第三方依赖
支持配置亮色与暗色主题色、站点标题和社交媒体链接
项目数据支持状态枚举、技术栈枚举、缩略图与模态框图片
推荐部署在 GitHub Pages 上
模板详细介绍
该模板用于搭建展示公开 GitHub 作品的作品集网站,README 说明其设计目标是呈现项目、仓库,以及 GitHub 个人主页上未正常显示的子仓库或组织内容。数据来源为本地 JSON 文件:./data/projects.json 存放项目列表,./data/config.json 存放 GitHub 用户名、站点标题、主题色、社交媒体等配置。模板使用 HTML5、CSS 和 JavaScript 构建,README 称其不依赖第三方库,并推荐部署到 GitHub Pages。README 同时标注项目仍在开发中,部分功能(如通过 API 端点读取 JSON、包管理器安装、子仓库与组织支持、邮箱联系功能)标注为 coming soon 或 under development。
适合你的项目吗?
适用场景
- 为个人 GitHub 公开仓库制作静态作品集页面
- 集中展示多个项目及其技术栈、状态和演示链接
- 在 GitHub Pages 上托管个人作品集
- 通过 JSON 配置快速更新作品集内容,无需改动页面代码
适合人群
- 希望展示公开 GitHub 项目的开发者
- 偏好使用 JSON 配置而非编写前端代码的用户
- 计划将作品集部署到 GitHub Pages 的用户
- 需要展示项目技术栈、状态和图片的开发者
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
克隆或下载仓库后即可使用,README 说明无需额外构建步骤
- 2
编辑 ./data/config.json 填写 GitHub 用户名等配置
- 3
编辑 ./data/projects.json 添加项目数据
- 4
可选安装 Node.js 18 或以上版本,运行 npm run test、yarn test 或 pnpm test 校验 JSON
- 5
图片建议使用 .webp 格式并放在 ./images 目录,未提供缩略图时使用默认回退图片
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
- 该模板仅用于展示公开的 GitHub 作品,不适用于私密作品集。
- 运行测试脚本需要本地安装 Node.js 作为 JavaScript 运行时环境。
- 子仓库与组织支持为可选功能,README 标注为即将推出(coming soon)。
- Node.js 为可选依赖,仅用于测试脚本,建议版本 18 或以上。
- 通过 npm、yarn 或 pnpm 等包管理器安装的方式标注为即将推出(coming soon)。
- 通过 API 端点从 GitHub 仓库根目录读取 JSON 的方式标注为即将推出(coming soon)。
- useLocalJson 设为 false 以从 GitHub API 读取仓库数据的功能标注为即将推出(coming soon)。
- 邮箱联系功能标注为仍在开发中(under development)。
- 使用 API 时需将图片存放在与 JSON 相同的 ./portfolio 目录,该功能标注为即将推出(coming soon)。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
>Note: *This GitHub Portfolio is intended for showcasing public GitHub works only, not for private portfolios.*
README 原文
Run a testing script via your package manager to validate and check your JSON data. The script will display error, success, warning, or info messages depending on your input. *Need Node.js as JavaScript runtime environment to run JavaScript file locally*.
README 原文
4. **Support for sub-repos and organizations** (*coming soon*)
README 原文
`Node.js is` optional for use test script. Recommended version is 18 or above.
README 原文
2. **Package Manager** (*coming soon*)
README 原文
- By providing an API endpoint that returns JSON from your GitHub repository’s root directory `./github-portfolio/index.json` (*coming soon*).
README 原文
|useLocalJson|Set to true to read data from local JSON. Set false to read data from GitHub API repositories (*coming soon*)|Optional (Default: `true`)|Boolean|
README 原文
|email|Your contact email (*this feature is under development*)|Optional|string (email format)|
README 原文
https://github.com/iyanarmanda/github-portfolio-template/blob/main/LICENSEhttps://github.com/iyanarmanda/github-portfolio-template/blob/main/README.md- If using an API, store them in the same directory as the JSON in `./portfolio` (*coming soon*).
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-13。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 80 / 100
- 技术栈
- HTML
- 网站类型
- 作品集
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-04-16
- 截图检查日期
- 2026-10-13
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 HTML。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: codex-user-requested-batch-review-20261015 · 2026-10-15
查看当时使用的来源资料
SHA-256: 53fccea2b76b19c18c72593df1b59cdb6b506a9383c10804fb61c92ee8e76e2b
2026-10-13T15:34:06.969Z
来源文件 / 仓库<a id="readme-top"></a>
[![Contributors][contributors-shield]][contributors-url]
[![Forks][forks-shield]][forks-url]
[![Stargazers][stars-shield]][stars-url]
[![Issues][issues-shield]][issues-url]
[![MIT License][license-shield]][license-url]
[![LinkedIn][linkedin-shield]][linkedin-url]
<h1 align="center">Github Portfolio API Template</h1>
<p align="center">
<a href="https://iyanarmanda.github.io/github-portfolio-template">View Demo</a>
·
<a href="https://github.com/iyanarmanda/github-portfolio-template/issues/new?labels=bug&template=bug-report---.md">Report Bug</a>
·
<a href="https://github.com/iyanarmanda/github-portfolio-template/issues/new?labels=enhancement&template=feature-request---.md">Request Feature</a>
<br/>
</p>
<h3 align="center">Powered by:</h3>
<p align="center">
<img src="https://img.shields.io/badge/HTML5-E34F26?logo=html5&logoColor=white" alt="HTML5" />
<img src="https://img.shields.io/badge/CSS-663399?logo=css&logoColor=white" alt="CSS" />
<img src="https://img.shields.io/badge/JavaScript-F7DF1E?logo=javascript&logoColor=black" alt="JavaScript" />
<img src="https://img.shields.io/badge/GitHub-181717?logo=github&logoColor=white" alt="GitHub" />
<br/>
</p>
<details>
<summary>Table of Contents</summary>
<ol>
<li>
<a href="#about-the-project">About The Project</a>
<ul>
<li><a href="#features">Features</a></li>
</ul>
</li>
<li>
<a href="#getting-started">Getting Started</a>
<ul>
<li><a href="#prerequisites">Prerequisites</a></li>
<li><a href="#installation">Installation</a></li>
</ul>
</li>
<li>
<a href="#usage">Usage</a>
<ul>
<li>
<a href="#fill-data">Fill Data</a>
<ul>
<li><a href="#config-structure">Config Structure</a></li>
<li><a href="#project-structure">Project Structure</a></li>
<li><a href="#repository-structure">Repository Structure</a></li>
</ul>
</li>
<li><a href="#deployment">Deployment</a></li>
</ul>
</li>
<li><a href="#license">License</a></li>
<li><a href="#contact">Contact</a></li>
</ol>
</details>
## About The Project
**This project is on development**
An open-source template for building a GitHub Portfolio website.
It’s designed to showcase your projects, repositories, and even sub-repos or organizations that don’t appear properly on your GitHub profile.
You can use it easily with a simple `JSON` file, no coding required!
Of course, you can still customize the UI/UX if you’d like.
This website is recommended to be deployed on **GitHub Pages**.
>Note: *This GitHub Portfolio is intended for showcasing public GitHub works only, not for private portfolios.*
<p align="right">(<a href="#readme-top">back to top</a>)</p>
### Features
1. **No coding required, just write in JSON**
Use `JSON` files as your data source. Simple and easy to modify.
</br>
3. **Intregated with testing script**
Run a testing script via your package manager to validate and check your JSON data. The script will display error, success, warning, or info messages depending on your input. *Need Node.js as JavaScript runtime environment to run JavaScript file locally*.
**npm**:
```bash
npm run test
```
**yarn**:
```bash
yarn test
```
**pnpm**:
```bash
pnpm test
```
</br>
4. **Support for sub-repos and organizations** (*coming soon*)
This optional feature allows you to display repositories from organizations or sub-repos.
It can be enabled during installation or manually later.
</br>
5. **Built with vanilla technologies**
Lightweight, high-performance, and completely dependency-free. Perfect for deploying on GitHub Pages.
</br>
<p align="right">(<a href="#readme-top">back to top</a>)</p>
---
## Getting Started
### Prerequisites
1. **Node.js**
`Node.js is` optional for use test script. Recommended version is 18 or above.
<p align="right">(<a href="#readme-top">back to top</a>)</p>
### Installation
There's a different way to install this template:
1. **GitHub**
Download or clone this repository, it’s ready to use.
GitHub:
```
https://github.com/iyanarmanda/github-portfolio-api-template
```
Clone with:
```bash
git clone https://github.com/iyanarmanda/github-portfolio-api-template.git github-portfolio
cd github-portfolio
```
</br>
2. **Package Manager** (*coming soon*)
This template will soon be available via npm, yarn, or pnpm.
</br>
<p align="right">(<a href="#readme-top">back to top</a>)</p>
---
## Usage
### Fill Data
You can add your portfolio data in two ways:
- By editing the local `./data/projects.json` file, or
- By providing an API endpoint that returns JSON from your GitHub repository’s root directory `./github-portfolio/index.json` (*coming soon*).
Both formats share the same JSON structure. Choose format do you prefer.
Additionally, the file `./data/config.json` must be filled in with your credentials and configuration settings.
<p align="right">(<a href="#readme-top">back to top</a>)</p>
---
#### Config Structure
File location: `./data/config/json`
|Field Name|Description|Requirement|Data Type|
|----------|-----------|-----------|---------|
|githubUsername|Your GitHub username|Required|String|
|githubUrl|Your GitHub URL. Overwrite it if use GitHub organization|Optional|String, (URL format)|
|webTitle|Website tilte|Optional|String|
|title|Main title of the GitHub Portfolio|Optional|String|
|subtitle|Sub title of the GitHub Portfolio|Recommended|String|
|lightThemeColor|Website theme color on light mode|Optional (Default: `#0000FF`)|String, (Hex color format)|
|darkThemeColor|Website theme color on dark mode|Optional (Default: `#BB86FC`)|String, (Hex color format)|
|useLocalJson|Set to true to read data from local JSON. Set false to read data from GitHub API repositories (*coming soon*)|Optional (Default: `true`)|Boolean|
|email|Your contact email (*this feature is under development*)|Optional|string (email format)|
|socialMedia|List of your social media accounts|Optional|Array of Objects|
|socialMedia.name|Social media platform name|Required|Enum (see **social platform list**)|
|socialMedia.url|Link to your social media|Required|String (URL format)|
Example:
```JSON
{
"githubUsername": "iyanarmanda",
"githubUrl": "https://github.com/iyanarmanda",
"webTitle": "GitHub Portfolio - iyanarmanda",
"title": "My GitHub Portfolio",
"subtitle": "A showcase of my repositories and creations",
"lightThemeColor": "#0000ff",
"darkThemeColor": "#BB86FC",
"useLocalJson": true,
"email": "[email protected]",
"socialMedia": [
{
"name": "instagram",
"url": "yourIgUrl"
},
{
"name": "twitter",
"url": "yourTwitterUrl"
},
{
"name": "likendin",
"url": "yourLinkedinUrl"
}
],
}
```
**Social Platform List**
Use the value of `socialMedia.name` from the list below:
|Social Platform|value|
|----------|-----|
|Instagram|ig|
|X|x|
|LinkedIn|linkedin|
|WhatsApp|wa|
|Facebook|fb|
|Discord|dc|
> **Note**: You can add another social media platform. Check on `./src/utils/socialPlatform.js`
<p align="right">(<a href="#readme-top">back to top</a>)</p>
---
#### Project structure
This file should contain an array of objects. Each object represents a project.
|Field Name|Description|Requirement|Data Type|
|----------|-----------|-----------|---------|
|name|Project/repository name|Required|String|
|description|Short description|Recommended|String|
|fullDescription|Full description (shown in modal)|Optional, (default: `description`)|String|
|projectUrl|Project/repository URL|Recommended|String, (URL format)|
|productUrl|Product/demo URL|Optional|String, (URL format)|
|field|Project/product field or platform|Recommended|String|
|status|Project work status|Recommended|Enum ("COMPLETED", "ON PROGRESS", "MAINTENANCE", "ARCHIVED")|
|techStack|List of technologies used|Recommended|Array of Objects|
|techStack.name|Technology name|Required|Enum (see **tech stack list**)|
|thumbnailImage|Thumbnail image file path. Using fallback image if not provided|Optional|String|
|thumbnailImageAlt|Alternative text for thumbnail|Optional|String|
|modalImages|Images displayed in modal|Optional|Array of Objects|
|modalImages.fileName|Modal image file path|Required|String|
|modalImages.alt|Alternative text for modal imge|Optional|String|
Example:
```JSON
[
{
"name": "Portfolio Website",
"description": "My personal portfolio as Informatic Engineering",
"fullDescription": "This website show all my works as Informatic Engineering and it build perfectly that reference how skilled I am",
"projectUrl": "https://github.com/iyanarmanda/portfolio",
"productUrl": "https://iyan-zuli-armanda.netlify.app",
"field": "Website",
"status": "COMPLETED",
"techStack": [
{ "name": "react" },
{ "name": "tailwind" },
{ "name": "vite" },
{ "name": "ts" }
],
"thumbnailImage": "portfolio.webp",
"thumbnailImageAlt": "Start page of my portfolio website",
"modalImages": [
{
"fileName": "portfolio.webp",
"alt": "Review of portfolio page 1"
},
{
"fileName": "my_diary.webp",
"alt": "Review of portfolio page 2"
},
{
"fileName": "software_techs_portal.webp",
}
]
},
{
"name": "Surabaya BestPoint",
"description": "Directory Listing App, show all best point in Surabaya",
"projectUrl": "https://github.com/iyanarmanda/SurabayaBestPoint",
"field": "Website",
"status": "ON PROGRESS",
"techStack": [
{ "name": "express" },
{ "name": "mongodb" },
{ "name": "mongoose" },
{ "name": "ejs" },
{ "name": "bootstrap" },
{ "name": "js" }
],
"thumbnailImage": "directory_listing_app.webp"
}
]
```
**Images**
- It’s recommended to use **.webp** format for better performance.
- In this template, store images inside the `./images` directory.
- If using an API, store them in the same directory as the JSON in `./portfolio` (*coming soon*).
- If no `thumbnailImage` provided, it will use Splash image as fallback. See on `./src/utils/defaultImage.js`
**Tech Stack List**
Use the value of `techStack.name` from the list below:
|Tech Stack|value|
|----------|-----|
|.NET|dotnet|
|AdonisJS|adonis|
|Alpine.js|alpine|
|Angular|angular|
|Astro|astro|
|Bootstrap|bootstrap|
|C|c|
|C++|cpp|
|CMake|cmake|
|Dart|dart|
|Debian|debian|
|Docker|docker|
|EJS|ejs|
|Electron|electron|
|Express|express|
|Flutter|flutter|
|Framer|framer|
|Git|git|
|GitHub|github|
|GitHub Action|github-action|
|GitLab|gitlab|
|Gradle|gradle|
|GraphQL|graphql|
|Handlebars.js|hbs|
|HTML5|html|
|htmx|htmx|
|JavaScript|js|
|Jest|jest|
|Kali Linux|kali|
|Kotlin|kotlin|
|Linux|linux|
|Markdown|md|
|Linux Mint|mint|
|MongoDB|mongodb|
|MySQL|mysql|
|NestJS|nestjs|
|Netlify|netlify|
|NGINX|nginx|
|Node.js|nodejs|
|npm|npm|
|Nx|nx|
|OpenCV|opencv|
|pnpm|pnpm|
|PostgreSQL|postgres|
|Postman|postman|
|Prisma|prisma|
|Python|py|
|Qt|qt|
|React|react|
|React Native|react-native|
|Redis|redis|
|Rust|rust|
|Sass|sass|
|SQLite|sqlite|
|Swagger|swagger|
|Tailwind CSS|tailwind|
|Tauri|tauri|
|Three.js|threejs|
|TypeScript|ts|
|TypeORM|typeorm|
|Vim|vim|
|Vite|vite|
|Vitest|vitest|
|Webpack|webpack|
|Yarn|yarn|
> **Note**: You can add another tech stack. Check on `./src/utils/techBrand.js`
<p align="right">(<a href="#readme-top">back to top</a>)</p>
---
#### Repository Structure
This file should contain an array of objects. Each object represents a project. *If you don't have another or sub repotories, then leave this file empty array* (`[]`).
|Field Name|Description|Requirement|Data Type|
|----------|-----------|-----------|---------|
|repoName|Another or sub repository name|Required|String|
|repoDesc|Another or sub repository short description|Optional|String|
|repoUrl|Another or sub repository URL|Required|String (URL format)|
Example:
```json
[
{
"repoName": "My Other Repo",
"repoDesc": "This is my other repo. The content is specialized field",
"repoUrl": "https://github.com/reponame"
},
{
"repoName": "Organization Repo Example",
"repoDesc": "This repo is from an organization.",
"repoUrl": "https://github.com/yourorg/reponame"
}
]
```
<p align="right">(<a href="#readme-top">back to top</a>)</p>
---
### Deployment
This GitHub Portfolio template is ideal for GitHub Pages.
Just deploy from the root directory, since it already includes an `index.html` file.
<p align="right">(<a href="#readme-top">back to top</a>)</p>
---
## License
This template is [MIT LICENSED](https://github.com/iyanarmanda/github-portfolio-api-template?tab=MIT-1-ov-file)
<p align="right">(<a href="#readme-top">back to top</a>)</p>
---
## Contact
This github-portfolio-api-template is created by **iyanarmanda**.
Feel free to connect:
- **GitHub**: [iyanarmanda](https://github.com/iyanarmanda)
- **Instagram**: [@iyan_zul1](https://www.instagram.com/iyan_zul1/)
- **Linkedin**: [iyan-zuli-armanda](https://www.linkedin.com/in/iyan-zuli-armanda-8a1383296/)
Template link: [https://github.com/iyanarmanda/github-portfolio-template](https://github.com/iyanarmanda/github-portfolio-template)
<p align="right">(<a href="#readme-top">back to top</a>)</p>
---
</br>
Please leave a star and it free to contribute.
Hope you enjoy it ^-^
[contributors-shield]: https://img.shields.io/github/contributors/iyanarmanda/github-portfolio-template.svg?style=for-the-badge
[contributors-url]: https://github.com/iyanarmanda/github-portfolio-template/graphs/contributors
[forks-shield]: https://img.shields.io/github/forks/iyanarmanda/github-portfolio-template.svg?style=for-the-badge
[forks-url]: https://github.com/iyanarmanda/github-portfolio-template/network/members
[stars-shield]: https://img.shields.io/github/stars/iyanarmanda/github-portfolio-template.svg?style=for-the-badge
[stars-url]: https://github.com/iyanarmanda/github-portfolio-template/stargazers
[issues-shield]: https://img.shields.io/github/issues/iyanarmanda/github-portfolio-template.svg?style=for-the-badge
[issues-url]: https://github.com/iyanarmanda/github-portfolio-template/issues
[license-shield]: https://img.shields.io/github/license/iyanarmanda/github-portfolio-template.svg?style=for-the-badge
[license-url]: https://github.com/iyanarmanda/github-portfolio-template/blob/master/LICENSE.txt
[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge&logo=linkedin&colorB=555
[linkedin-url]: https://www.linkedin.com/in/iyan-zuli-armanda-8a1383296/
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

simplefolio
⚡️ A minimal portfolio template for Developers
HTML · 作品集

Freelancer
Freelancer 是 Start Bootstrap 出品的单页作品集模板,专为自由职业者、设计师和小型工作室设计。 页面结构清晰,包含多个内容区块、响应式作品集网格,每个作品项目配有模态窗口展示详情。
HTML · 作品集

Resume
Resume 是 Start Bootstrap 推出的简历与 CV 主题,基于 Bootstrap 构建,采用固定侧边栏加内容区块的结构。
HTML · 作品集

Creative
Creative 是 Start Bootstrap 团队维护的一款单页营销模板,定位明确:为创意机构或产品服务提供一个以作品展示和行动号召为核心的落地页。
HTML · 企业官网

Grayscale
Grayscale 是 Start Bootstrap 出品的深色系单页 HTML 模板,基于 Bootstrap 构建。 它的视觉重心放在大尺寸首屏和清晰的内容分区上,整体氛围偏暗,适合摄影、活动或品牌叙事类网站。
HTML · 企业官网

startbootstrap-stylish-portfolio
Stylish Portfolio 是 Start Bootstrap 维护的单页作品集主题,基于 Bootstrap 构建,采用多个内容区块加离屏导航菜单的结构。
HTML · 作品集
