A Next.js personal site template for people who want a Markdown-maintained Library of things they love, plus writing, activity logs, projects, search, and RSS.
It is designed to feel like a personal profile instead of a resume: a sidebar identity card, a README-style home page, recent activity, Markdown blog posts, short notes, full-site search, RSS, and a Library for anime, movies, artists, games, books, or anything else you want to collect.
The core idea is simple: edit Markdown files, commit them, and your public Library updates automatically.
See the finished template at sean-hawks.github.io/personal-library-site-template.
Original site and inspiration: hawks.tw.
Desktop screenshots from the original site, hawks.tw.
| Home | Library |
|---|---|
![]() |
![]() |
| Blog |
|---|
![]() |
- Library-first homepage with profile, activity timeline, featured picks, latest posts, talks, and projects
- Markdown Blog, Talk, and Library content powered by YAML frontmatter
- Library categories for
anime,movie,artist, andgame - Review pages with cover images, ratings, tags, recommended works, and featured ordering
- Tag archive pages shared by Blog and Library content
- Full-site search
- RSS feed at
/rss.xml - Light and dark theme toggle
- Static export ready for GitHub Pages
npm install
npm run devOpen http://localhost:3000.
Before publishing:
npm run lint
npm run buildSearch for these placeholders and replace them:
Your Nameyour-site.exampleyour-githubhello@example.com
Then edit:
app/components/ProfileSidebar.tsxfor avatar text, bio, contact, and profile detailsapp/components/ReadmeSection.tsxfor the homepage introapp/data/roles.tsfor profile tagsapp/data/projects.tsfor project cardspublic/avatar.svgandpublic/banner.svgfor your own visuals
Most day-to-day updates happen in Markdown:
content/library/*.mdfor Library items and reviewscontent/posts/*.mdfor longer postscontent/talks/*.mdfor activity notes
Blog posts live in content/posts/.
---
title: "My first post"
date: "2026-01-01"
desc: "One sentence summary."
tags:
- "#blog"
status: published
---Short updates live in content/talks/.
---
title: "Today I changed the site"
date: "2026-01-02"
subtitle: "A short activity note."
event: "Personal Website"
tags:
- "#log"
status: published
---Library entries live in content/library/.
---
title: "Work title"
subtitle: "Optional subtitle"
category: "anime"
year: "2026"
date: "2026-01-03"
status: "watched"
recommendation: "recommended"
rating: 8.5
featured: true
featuredOrder: 1
tags:
- "#favorite"
note: "Short personal note."
image:
src: "/images/library/example-anime.svg"
alt: "Cover image"
credit: ""
source: ""
fit: "cover"
---If a Library Markdown file has body content, it becomes a clickable review page. If it only has frontmatter, it works as a collection card. This makes the site easy to maintain from a Markdown editor, Obsidian vault, or ordinary Git workflow.
category:anime,movie,artist, orgamestatus:watched,listened,watching,playing,played,planned, orrecommendedrecommendation:brilliant,favorite,recommended, orcasualrating: number from0to10, ornullfeatured: promotes the item into homepage and Library highlightsfeaturedOrder: lower numbers appear firstrecommendedWorks: optional list for artist or creator pages
This template is configured for static export and GitHub Pages.
- Create a GitHub repository from this template.
- Push to
main. - In GitHub, open
Settings -> Pages. - Set the source to GitHub Actions.
- Optional: add your custom domain and create
public/CNAME.
If you deploy under https://<user>.github.io/<repo>/, the GitHub Actions workflow automatically reads the repository name and builds with the correct subpath.
If you deploy with a custom domain, set a repository variable:
DEPLOY_TARGET=custom-domain
- Add a
siteConfigfile to centralize all profile and metadata settings - Add more Library categories
- Add a theme preset system
- Add a CLI script that creates new content from templates
- Improve Open Graph image generation for Library reviews
MIT


