Next.jsReactPortfolioBlog

quietfolio-template — Next.js Portfolio Template

By salahu01

A developer portfolio template built on the Next.js App Router, including project case studies, a blog, and a printable resume page, with static export and no backend dependencies.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

3 previews
Desktop homepage1 / 3
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 3

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-02View source

What stands out

A quick read of the recorded project description.

01

Single-page homepage integrating introduction, filterable projects, experience, tech stack, and GitHub activity

02

Provides /work/[slug] case studies, /blog blog, and /resume printable resume page

03

Case studies and articles maintained as JSON, with a content validation script checking links, images, and slugs

04

Built-in per-page metadata, canonical, Open Graph, Twitter cards, and multiple JSON-LD structured data

05

Outputs sitemap.xml, robots.txt, RSS, llms.txt, security.txt, and web manifest

06

Supports static export to GitHub Pages and can also be deployed to Node hosting environments

Template Details

quietfolio-template is a portfolio template for developers; the repository is MIT licensed. The stack is Next.js (App Router), Tailwind CSS, and Framer Motion, and the build output is fully static with no backend service dependency.

On the content side, the homepage is a single-page structure containing a personal introduction, a filterable project list, work experience, a tech stack, and a GitHub activity graph; it also provides /work/[slug] case study pages, a /blog blog list and article pages, and a /resume printable resume page generated from data. Case studies and blog posts are maintained as JSON files (content/work.json, content/blog.json), supporting block types such as h2, h3, p, ul, ol, quote, code, img, and table, as well as inline syntax such as bold, italic, inline code, and links.

Site configuration is centralized in lib/data.ts and lib/site.ts, and environment variables control the canonical URL, subpath, whether indexing is disabled, and whether to statically export. The template includes a content validation script to check for broken links, missing images, and duplicate slugs; it also provides scripts to generate brand assets, sample images, banners, and a resume PDF.

For deployment, you can connect to Netlify, Vercel, or another Node host, or publish to GitHub Pages via static export using the deploy:pages script. Under static hosting, there are no custom response headers, CSP, or redirects, and images are not optimized at request time.

Next.jsPortfolioBlog

Is it right for your project?

Use Cases

  • Individual developers building a portfolio site with case studies and a blog
  • Job-seeking scenarios requiring a printable resume page consistent with site data
  • Projects that want to publish statically to GitHub Pages without running a server
  • Personal sites needing fairly complete SEO and structured data output

Suitable For

  • Developers familiar with Next.js and maintaining content via JSON
  • Personal sites needing portfolio, case studies, and blog content
  • Users who accept static hosting limitations and are willing to verify third-party asset licenses themselves

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    After cloning the repository, run npm install and npm run dev; the Node version is specified by .nvmrc

  2. 2

    Fill in personal information, projects, and experience in lib/data.ts, and set profile.githubUser

  3. 3

    Replace the avatar and project images under public/img; scripts can regenerate placeholder assets

  4. 4

    Copy .env.example and set NEXT_PUBLIC_SITE_URL; if unset, the build outputs a warning

  5. 5

    To deploy to GitHub Pages, use npm run deploy:pages; under static hosting there are no custom headers, CSP, or redirects

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This entry covers the free version under the MIT license in the public repository; the free scope is the code of that version and does not imply that external services or third-party assets are free.

Must comply with when using

  • You are allowed to use, modify, commercialize, and distribute the code of this version for free.
  • When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
  • The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.

Additional costs & items to verify

  • The GitHub activity graph depends on the third-party GitHub API; if you change the third-party source, you must also update the CSP configuration in next.config.ts.
  • Under static hosting (such as GitHub Pages), custom response headers, CSP, and redirects are not supported, and images are not optimized at request time.
  • The demo build sets NEXT_PUBLIC_NOINDEX=1 to make the site non-indexable; if this Pages site is a production site, remove that variable in the deployment script.
  • Generating pixel banners requires the Python Pillow library installed locally.
  • Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses; the code's MIT license alone is not sufficient to judge them.
  • External services such as domains, hosting, databases, payments, or AI may incur additional charges.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

If you change third-party origins (for example the GitHub activity API), update the CSP in `next.config.ts`.

Original README

Custom headers/CSP and redirects don't exist on a static host, and images aren't optimized at request time

Original README

Demo builds set `NEXT_PUBLIC_NOINDEX=1` so a mirror never competes with your canonical site in search.

Original README

the animated pixel-art banner comes from `python3 scripts/make_banner.py` (needs Pillow)

Original README
https://github.com/salahu01/quietfolio-template/blob/main/LICENSEhttps://github.com/salahu01/quietfolio-template/blob/main/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-02. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.

Project checks & description sources

Template Information

Source platforms
GitHub
Documentation and maintenance reference score
More documented · 85 / 100
Technologies
Next.js · React
Website type
Portfolio · Blog
How this score is calculated

Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.

What to verify for this project

Repository update recorded
2026-10-02
Screenshot last checked
2026-10-02

A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.

The catalog identifies Next.js as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.

Use a selection guide →

How this description was prepared

AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.

Automatically checked against source and license rules; no manual editorial review.

Inspect the recorded source material

SHA-256: b4e6702c81794f2d6c51d953ffcbadc3b3e097c32f2b4721e7b34e39be71e690

2026-10-02T16:38:13.593Z

Source file / repository
# quietfolio

A minimal, fast, accessible and SEO-first developer portfolio template with projects, case studies and a blog.
Built with **Next.js (App Router)**, **Tailwind CSS v4** and **Framer Motion**. Fully static, no backend.

**Live demo:** https://salahu01.github.io/quietfolio-template/ (sample content)

<p align="center">
  <img src="docs/cover.jpg" alt="quietfolio: a minimal, fast, open-source portfolio template" width="100%">
</p>

## Use it
Click **Use this template** on GitHub, or:
```bash
git clone https://github.com/salahu01/quietfolio my-site && cd my-site
nvm use            # Node 22 (.nvmrc)
npm install
npm run dev        # http://localhost:3000
```

## Make it yours (checklist)
1. **You** — edit `lib/data.ts`: name, role, bio, links, projects, experience, tech stack. Set `profile.githubUser` for the activity graph.
2. **Writing** — edit `content/work.json` (case studies) and `content/blog.json` (posts). Run `npm run validate` to catch broken links, missing images and duplicate slugs.
3. **Images** — replace `public/img/avatar.jpeg` and `public/img/projects/*.jpg`. `python3 scripts/make_sample_assets.py` regenerates neutral placeholders.
4. **Brand assets** — `python3 scripts/make_brand_assets.py "Your Name" "Your Role" "yourdomain.com"` regenerates the favicon, Apple icon and social image from your avatar.
5. **SEO** — set `NEXT_PUBLIC_SITE_URL` (see `.env.example`) and review `lib/site.ts` (description, keywords, Twitter handle).
6. **Resume** — `/resume` is a printable page generated from your data. Regenerate the PDF with `npm run build && npm start`, then `npm run resume`.
7. **Banner** — the animated pixel-art banner comes from `python3 scripts/make_banner.py` (needs Pillow). Edit the script to change the scene.

## Features
- Single-page home (about, projects with filters, experience, tech stack, GitHub activity) plus `/work/[slug]` case studies, `/blog` and `/resume`.
- Animated pixel-art banner, pixel cursor trail + focus reticle, dark/light theme (no flash), ⌘K command palette.
- **SEO / AEO / GEO:** per-page metadata and canonical URLs, Open Graph + Twitter cards (per-post generated images), JSON-LD (`Person`, `WebSite`, `ProfilePage`, `TechArticle`, `BlogPosting`, `Blog`, `BreadcrumbList`), `sitemap.xml`, `robots.txt`, RSS (`/feed.xml`), `llms.txt` and `llms-full.txt`, `security.txt`, web manifest.
- **Accessibility:** skip link, landmarks, AA contrast, visible focus, `prefers-reduced-motion` (static banner, no cursor effects), keyboard-operable palette and filters.
- **Hardening:** security headers and a strict CSP in production, no third-party scripts, `X-Powered-By` removed, JSON-LD escaped.

| Script | Purpose |
| --- | --- |
| `npm run dev` | Dev server |
| `npm run build` / `npm start` | Production build / serve |
| `npm run lint` · `npm run typecheck` | ESLint · TypeScript |
| `npm run validate` | Validates `content/*.json`, links and assets |
| `npm run check` | Everything above, in order (what CI runs) |
| `npm run deploy:pages` | Static export → `gh-pages` branch (GitHub Pages) |
| `npm run resume` | Regenerate `public/resume.pdf` |

## Content format
Blocks: `h2`, `h3`, `p`, `ul`, `ol`, `quote`, `code`, `img`, `table`. Inline: `**bold**`, `*italic*`, `` `code` ``, `[text](url)`. See the sample posts in `content/blog.json`.

## Configuration
Copy `.env.example`:

| Variable | Default | Purpose |
| --- | --- | --- |
| `NEXT_PUBLIC_SITE_URL` | `https://example.com` | Canonical URL (origin + optional sub-path) for metadata, sitemap, feeds, JSON-LD. A warning is printed at build time if unset. |
| `NEXT_PUBLIC_BASE_PATH` | *(empty)* | Sub-path when served from a folder, e.g. `/my-repo`. Set automatically by `deploy:pages`. |
| `NEXT_PUBLIC_NOINDEX` | *(unset)* | `1` makes the build non-indexable (for demos/mirrors). |
| `STATIC_EXPORT` | *(unset)* | `1` builds a static `out/` folder instead of a Node server build. |

## Deploy
**Netlify / Vercel / any Node host** — connect the repo and set `NEXT_PUBLIC_SITE_URL` to your domain. Security headers, the CSP and the `/work` redirect apply in this mode (`netlify.toml` is included).

**GitHub Pages (static export)** — no server, no Actions required:
```bash
npm run deploy:pages
```
This builds with `STATIC_EXPORT=1`, `NEXT_PUBLIC_BASE_PATH=/<repo>` and publishes `out/` to the `gh-pages` branch. Then in the repo go to **Settings → Pages → Deploy from a branch → `gh-pages` / root**. It is served at `https://<user>.github.io/<repo>/` and does not affect your other Pages sites. Notes:
- Custom headers/CSP and redirects don't exist on a static host, and images aren't optimized at request time (keep images web-sized; `scripts/optimize_images.py` shrinks project covers).
- Demo builds set `NEXT_PUBLIC_NOINDEX=1` so a mirror never competes with your canonical site in search. Remove that variable in `scripts/deploy_pages.sh` if the Pages site is your real one.

After deploying, verify `/sitemap.xml`, `/robots.txt`, `/llms.txt`, `/feed.xml`, and test a page in the [Rich Results Test](https://search.google.com/test/rich-results). Submit the sitemap in Google Search Console and Bing Webmaster Tools.

If you change third-party origins (for example the GitHub activity API), update the CSP in `next.config.ts`.

## Project structure
```
app/            routes, metadata files (sitemap, robots, manifest, OG images, feeds)
components/     UI (Hero, Projects, Navbar, CursorFx, JSON-LD, article renderer…)
content/        case studies + blog posts (JSON)
lib/            data, site config, SEO helpers, content loader
public/img/     images
scripts/        asset generators, content validator, deploy script
```

## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md) and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).

## License
[MIT](LICENSE).
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.

tailwind-nextjs-starter-blog

tailwind-nextjs-starter-blog

A Next.js and Tailwind CSS blog starter template using Contentlayer for Markdown/MDX, with built-in SEO, code highlighting, and tags. It targets personal technical blogs and migration from Jekyll/Hugo to React, and supports one-click Vercel deployment.

Next.js · Blog

react-resume-template

react-resume-template

A personal resume website template for software developers, built with Next.js, React, and TypeScript and styled with Tailwind CSS. Site content is driven by a single data file at /src/data/data.tsx, with types in dataDef.ts and images in src/images/.

Next.js · Portfolio

Nextjs-tailwindcss-blog-template

Nextjs-tailwindcss-blog-template

A personal blog template built with Next.js and Tailwind CSS, using Velite to process Markdown content. It includes home, about, contact and article pages, with a demo site and a companion YouTube tutorial.

Next.js · Blog

Next-js-Blog-Boilerplate

Next-js-Blog-Boilerplate

A blog starter built on Next.js 12 and Tailwind CSS 3, integrating TypeScript, ESLint, Prettier, and PostCSS.

Next.js · Blog

nextjs-blog-theme

nextjs-blog-theme

A Next.js 15 and Tailwind CSS 4.x blog starter by Netlify, designed by Bejamas, with MDX support, dark/light theme switching, and environment-variable configuration. It includes a visual setup wizard for deploying to Netlify and manages content via local .mdx files.

Next.js · Blog

blog

blog

A personal blog forked from Timlrx's tailwind-nextjs-starter-blog, built with Next.js, React, and Tailwind CSS. Content is stored as Markdown/MDX under data/, with site, author, navigation, and project data in separate files.

Next.js · Blog