Next.jsReact作品集

lumen-nextjs-photography-template — Next.js 作品集模板

作者 haider484991

Lumen 是一个基于 Next.js 与 TypeScript 的免费摄影作品集模板,包含可筛选的瀑布流画廊、键盘可访问的灯箱、定价与客户选片页面,所有内容集中在单个配置文件。

看看你的网站会是什么样

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

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

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

全部页面与视图 2

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

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

值得关注的模板亮点

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

01

可筛选的瀑布流画廊,使用 CSS columns 实现,不引入布局库

02

键盘可访问的灯箱,支持方向键、Escape、焦点管理与滚动锁定,使用 role="dialog" 与 aria-modal

03

客户选片页面,通过图库代码进入,并设置 noindex、nofollow 避免私密画廊被搜索引擎收录

04

定价、流程与 FAQ 页面,FAQ 带 FAQPage 结构化数据

05

零图片依赖,仓库不含图片文件,占位画面由 CSS 渐变生成

06

画廊、套餐、FAQ 与文案集中在 config/site.ts 中配置

模板详细介绍

Lumen 是一个面向摄影师的免费作品集网站模板,使用 Next.js 与 TypeScript 构建,样式基于 Tailwind CSS。模板提供可筛选的瀑布流画廊、带键盘支持的灯箱、定价与流程展示、FAQ 以及客户选片页面,站点内容(画廊、套餐、FAQ、文案)集中在 config/site.ts 中配置。模板不附带任何图片文件,占位画面由 CSS 渐变生成,替换为真实照片需要修改 components/Frame.tsx 并接入 next/image。客户选片表单是前端外壳,静态站点无法验证密码,需要自行对接外部图库托管服务或自有 API。模板采用静态导出,构建产物可部署到任意静态托管平台。

Next.jsReact作品集

适合你的项目吗?

适用场景

  • 摄影师搭建个人作品集网站,展示婚礼、人像等分类作品
  • 需要向客户提供私密选片入口的摄影业务
  • 希望以静态站点形式部署作品集,托管在任意静态托管平台
  • 需要展示套餐价格、服务流程与常见问题的摄影服务页面

适合人群

  • 独立摄影师或小型摄影工作室
  • 熟悉 Next.js 与 TypeScript、愿意自行替换图片与对接外部服务的开发者
  • 需要静态导出并部署到静态托管平台的用户
  • 希望以单文件配置管理站点内容的用户

上手与定制指南

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

  1. 1

    克隆仓库后执行 npm install 与 npm run dev,默认在 http://localhost:3000 启动

  2. 2

    站点内容在 config/site.ts 中修改,ratios 字段接受 portrait(4:5)、landscape(3:2)与 square

  3. 3

    替换真实照片需修改 components/Frame.tsx 使用 next/image,并保留外层容器与宽高比类名

  4. 4

    模板使用 output: "export",next.config.ts 中 images.unoptimized 为 true;如需自动缩放需部署到运行 Next.js 图片优化器的托管平台或预先压缩图片

  5. 5

    客户选片表单为前端外壳,需将 handleSubmit 指向 Pic-Time、Pixieset、ShootProof、CloudSpot 等图库托管服务或自有 API

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

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

使用时需要遵守

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

额外费用与待核对事项

  • 客户选片表单仅为前端外壳,静态站点无法验证密码;需自行对接 Pic-Time、Pixieset、ShootProof、CloudSpot 等外部图库托管服务或自有 API 才能实现真正的选片功能。
  • 模板使用 output: "export" 且 images.unoptimized 为 true,next/image 不会自动缩放图片;如需自动图片优化,必须部署到运行 Next.js 图片优化器的托管平台,或自行预先压缩图片。
  • 模板不含任何图片文件,占位画面由 CSS 渐变生成;使用真实照片需自行修改 components/Frame.tsx 接入 next/image,并保留外层容器与宽高比类名以维持瀑布流布局。
  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
查看原文依据

Permission is hereby granted, free of charge

许可证原文

Point `handleSubmit` at your real gallery host (Pic-Time, Pixieset, ShootProof, CloudSpot) or your own API and redirect on success.

README 原文

either deploy on a host that runs the Next.js image optimizer, or pre-resize your exports

README 原文

Replace the placeholder in **`components/Frame.tsx`** with `next/image`

README 原文
https://github.com/haider484991/lumen-nextjs-photography-template/blob/main/LICENSEhttps://github.com/haider484991/lumen-nextjs-photography-template/blob/main/README.md

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

项目核对记录与介绍依据

模板资料

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

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

这个项目需要核对什么

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

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

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

查看具体选型方法 →

介绍的制作与核对状态

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

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

查看当时使用的来源资料

SHA-256: 7cfeef6d2aa01feb572be3c0b65962578a03e87ff0bc21e5379fb4e2139e8365

2026-10-01T15:34:35.234Z

来源文件 / 仓库
# 📷 Lumen — Free Photography Portfolio Website Template

**A production-ready photography portfolio template built with Next.js 15, TypeScript, and Tailwind CSS v4.** Filterable masonry galleries, a keyboard-accessible lightbox, pricing, and a client-proofing page. Clone it, edit one config file, deploy for free.

**[Live demo →](https://pixelandoak-lumen.pages.dev)**
**[Template page →](https://pixelandoak.com/templates/photography-portfolio-website-template/)**

![Lumen screenshot](./screenshot.png)

## Why this one

Photography portfolios have a specific problem: they are the heaviest sites on the web, built by people whose work deserves to load instantly. Most portfolio templates ship 40MB of demo photographs and a carousel library.

Lumen ships **zero image files**. Every frame is a deterministic CSS gradient, so the repo is tiny and the demo is instant. When you add your own photographs, you are adding the *only* images on the site.

- 🖼️ **Filterable masonry gallery** — CSS columns, no layout library, no reflow jank
- 🔍 **Lightbox with real keyboard support** — arrow keys, Escape, focus-safe, scroll-locked, `role="dialog"` + `aria-modal`. About 100 lines of React, no dependency
- 🔒 **Client proofing page** — gallery-code entry, correctly `noindex, nofollow` so private galleries never reach Google
- 💶 **Pricing + process + FAQ** — the three things that stop the "how much?" email, with `FAQPage` structured data for rich results
- 📍 **Local SEO** — `ProfessionalService` schema so you can rank for "*city* wedding photographer"
- 🌙 **Real dark mode** — class strategy, localStorage, OS detection, no flash
- 🎞️ **Zero image dependencies** — nothing to license, nothing to optimise, nothing slow
- ⚙️ **One-file customization** — galleries, packages, FAQs, and copy all in `config/site.ts`
- 📦 **Fully static export** — `/out` deploys to any static host, free
- 📱 **Responsive** — tested from 375px, mobile nav panel, no horizontal scroll

## Quick start

```bash
git clone https://github.com/haider484991/lumen-nextjs-photography-template.git my-portfolio
```

```bash
cd my-portfolio && npm install && npm run dev
```

Open [http://localhost:3000](http://localhost:3000).

## Make it yours

Everything lives in **`config/site.ts`**:

```ts
export const siteConfig = {
  name: "Lumen",
  photographer: "Ada Okonkwo",
  title: "Lumen — Wedding & Portrait Photography in Lisbon",

  galleries: [
    {
      slug: "weddings",
      name: "Weddings",
      blurb: "Full-day coverage, documentary-leaning, always unhurried.",
      shots: 9,
      ratios: ["portrait", "landscape", "square" /* … one per shot */],
    },
  ],

  packages: [
    { name: "Wedding — full day", price: "€2,400", duration: "10 hours",
      features: ["600+ edited photographs", /* … */], featured: true },
  ],
};
```

`ratios` accepts `"portrait"` (4:5), `"landscape"` (3:2), and `"square"` — mix them and the masonry grid does the rest.

## Using real photos

Replace the placeholder in **`components/Frame.tsx`** with `next/image`:

```tsx
import Image from "next/image";

<div className={`relative overflow-hidden rounded-sm ${RATIO_CLASS[ratio]}`}>
  <Image
    src={src}                       // e.g. `/galleries/${seed}/${index}.jpg`
    alt={alt}                       // describe the photograph — this is real SEO
    fill
    sizes="(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw"
    className="object-cover"
  />
</div>
```

Keep the wrapper and its aspect-ratio class — the masonry layout depends on them. `next/image` lazy-loads by default, which matters once a gallery has 60 photographs in it.

Because this template uses `output: "export"`, `next.config.ts` sets `images.unoptimized = true`. If you want automatic resizing, either deploy on a host that runs the Next.js image optimizer, or pre-resize your exports (which most photographers are already doing on the way out of Lightroom).

## Connecting the client gallery

`components/ProofingForm.tsx` is a front-end shell on purpose — a static site cannot verify a password, and pretending otherwise would be insecure theatre. Point `handleSubmit` at your real gallery host (Pic-Time, Pixieset, ShootProof, CloudSpot) or your own API and redirect on success.

## Deploy

```bash
npm run build
```

Emits `/out`. Deploy anywhere:

```bash
npx wrangler pages deploy out
```

Netlify, Vercel, GitHub Pages, and any static host work identically. Preview the production build with `npm run preview`.

## Tech

Next.js 15 (App Router, static export) · React 19 · TypeScript · Tailwind CSS v4 · zero runtime dependencies beyond React.

## License

MIT — free for personal and commercial use. Attribution appreciated but not required.

---

Built by [Pixel & Oak](https://pixelandoak.com/templates/photography-portfolio-website-template/) — web design and AI development studio.
More free templates: [Nova (blog)](https://github.com/haider484991/nova-nextjs-blog-template) · [LaunchPad (SaaS)](https://github.com/haider484991/launchpad-nextjs-saas-template) · [Table & Fork (restaurant)](https://github.com/haider484991/tablefork-nextjs-restaurant-template)
反馈内容错误

看看同类模板

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