React作品集

Portfolio (Ahmedmo-27) — React 作品集模板

作者 Ahmedmo-27

基于 React 与 Vite 的个人作品集网站模板,包含深浅主题、玻璃拟态界面、动画效果,以及由 Express 提供支持的邮件联系表单。

看看你的网站会是什么样

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

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

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

全部页面与视图 2

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

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

值得关注的模板亮点

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

01

深浅主题切换并持久化到 localStorage,带过渡效果

02

玻璃拟态视觉风格与 Framer Motion 动画

03

Express + Nodemailer 实现的联系表单,含校验、蜜罐与限流

04

支持通过环境变量接入 Cloudflare R2 公共地址加载媒体资源

05

生产模式下由 Express 同时提供静态前端与 API

模板详细介绍

这是一个面向开发者个人展示的作品集网站模板,前端使用 React 与 Vite 构建,样式基于 TailwindCSS 与 CSS 变量,动画使用 Framer Motion,图标来自 Lucide React。页面包含 Hero、Projects、Experience、Contact 等区块,支持深浅主题切换并写入 localStorage,布局适配移动端到桌面端。

联系表单由独立的 Express 后端处理,通过 Nodemailer 经 SMTP 发送邮件,表单带校验、蜜罐字段和基础限流。开发时 Vite 开发服务器与 Express 服务同时运行,前端请求 /api/contact 被代理到后端;生产模式下 Express 同时提供 dist/ 静态资源和 API。项目还支持通过环境变量配置 Cloudflare R2 公共地址来加载图片与 PDF,PDF 以内联方式提供。

使用前需自行准备 SMTP 账号并配置 .env,Gmail 需使用应用专用密码。模板以 MIT 许可发布,代码可免费使用、修改和分发,但演示图片、字体、图标等第三方素材以及域名、托管、邮件等外部服务需另行核对许可与费用。

React作品集

适合你的项目吗?

适用场景

  • 开发者搭建个人作品集与简历展示页面
  • 需要带邮件通知联系表单的静态站点
  • 希望以 React 与 TailwindCSS 快速起步并自行调整内容区块

适合人群

  • 熟悉 React 与 Node.js 的前端开发者
  • 需要可自行部署的个人作品集项目
  • 愿意配置 SMTP 环境变量以启用联系表单的用户

上手与定制指南

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

  1. 1

    需要 Node.js 18+ 与 npm,安装依赖后运行 npm run dev 可同时启动前端与 Express 服务

  2. 2

    在项目根目录创建 .env,配置 SMTP_HOST、SMTP_PORT、SMTP_USER、SMTP_PASS、CONTACT_TO_EMAIL 等变量

  3. 3

    Gmail 需使用应用专用密码,遇到 smtp_tls_failed 通常与 VPN、代理或杀毒软件的 SSL 检查有关

  4. 4

    生产运行使用 npm run build 后执行 npm run start,npm run preview 仅启动前端预览

  5. 5

    可选设置 VITE_R2_PUBLIC_URL 以从 R2 公共地址加载图片与 PDF

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

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

使用时需要遵守

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

额外费用与待核对事项

  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
  • 使用前需在项目根目录创建 .env 文件并自行配置环境变量,且不应将其提交到版本库。
  • 联系表单依赖外部 SMTP 邮件服务,需自行提供 SMTP 主机、端口、账号、密码与收件邮箱,否则后端无法发送邮件。
  • 若使用 Gmail,必须使用应用专用密码而非普通账号密码,需额外在 Google 账号中开启并生成。
  • 可选配置 VITE_R2_PUBLIC_URL 以从 Cloudflare R2 公共地址加载图片与 PDF,涉及第三方存储服务。
  • 后端对联系表单接口施加基于 IP 的限流,频繁提交可能被拒绝。
查看原文依据

Permission is hereby granted, free of charge

许可证原文

Create a `.env` file in the project root (don’t commit it).

README 原文

SMTP_HOST=smtp.gmail.com SMTP_PORT=587 SMTP_SECURE=false [email protected] SMTP_PASS=your_app_password [email protected]

README 原文

For Gmail, use an **App Password** (not your normal password).

README 原文

If set, images/PDFs can be built/loaded from an R2 public base URL

README 原文

The backend applies a small per-IP limit to reduce spam.

README 原文
https://github.com/Ahmedmo-27/Portfolio/blob/main/LICENSEhttps://github.com/Ahmedmo-27/Portfolio/blob/main/README.md

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

项目核对记录与介绍依据

模板资料

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

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

这个项目需要核对什么

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

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

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

查看具体选型方法 →

介绍的制作与核对状态

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

审核声明: [email protected] · 2026-10-13

查看当时使用的来源资料

SHA-256: 94fa7a8687464fd7954eb2333d74b9c4ae9c07ed309ccf59a4fae4c92b0deb43

2026-10-13T06:52:46.861Z

来源文件 / 仓库
# Ahmed Mostafa — Portfolio Website

Modern, responsive developer portfolio built with **React 19 + Vite** and a small **Express** backend for the contact form (`POST /api/contact`).

## Tech Stack

- **Frontend:** React 19 (JavaScript/JSX), Vite
- **Styling:** TailwindCSS + CSS variables
- **Animations:** Framer Motion
- **Icons:** Lucide React
- **Backend:** Express + Nodemailer (SMTP)
- **Runtime:** Node.js 18+ (ESM project)

## Features

- **Dark/Light mode** with persistence (localStorage) + smooth transitions
- **Responsive layout** optimized for mobile → desktop
- **SEO-friendly** structure/meta tags
- **Contact form** with validation, honeypot, and basic rate-limiting
- **Media support** with optional Cloudflare R2 public base URL
- **PDFs served inline** (both dev + production)

## Getting Started

### Prerequisites

- Node.js 18+
- npm (or yarn/pnpm if you prefer)

### Install

```bash
npm install
```

### Run locally (recommended)

This starts **both**:
- Vite dev server (frontend)
- Express server on `http://localhost:3000` (API)

```bash
npm run dev
```

The frontend calls `/api/contact`, which is proxied in dev to the Express server.

### Environment Variables

Create a `.env` file in the project root (don’t commit it).

```bash
# Backend (Express / Nodemailer)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_SECURE=false
[email protected]
SMTP_PASS=your_app_password
[email protected]
# Optional:
[email protected]
SITE_URL=https://your-domain.com
BRAND_NAME=Ahmed Mostafa
BRAND_LOGO_URL=https://your-domain.com/logo.png

# Frontend (Vite)
# If set, images/PDFs can be built/loaded from an R2 public base URL
VITE_R2_PUBLIC_URL=https://your-public-bucket-domain
```

## Production

### Build

```bash
npm run build
```

### Run (serves `dist/` + `/api`)

In production, the Express server serves the built frontend from `dist/` and handles `/api/contact`.

```bash
npm run start
```

### Note about `npm run preview`

`npm run preview` runs Vite’s preview server (frontend only). For a full production-like run (frontend + API), use `npm run build` then `npm run start`.

## Project Structure

```
src/
├── components/               # UI sections and shared components (.jsx/.css)
├── context/                  # Theme provider
├── utils/                    # Helpers (animations, asset URL helpers, ...)
├── App.jsx                   # App composition
├── main.jsx                  # Entry point
└── index.css                 # Global styles + theme variables

server/
├── mailApi.js                # POST /api/contact
├── emailConfig.js            # SMTP + brand/contact config from env
└── contactEmailTemplate.js   # Styled HTML + text email body

server.js                     # Express app (API + serving dist/)
```

## Customization

- **Sections/content:** update components in `src/components/` (e.g. `Hero.jsx`, `Projects.jsx`, `Experience.jsx`, `Contact.jsx`)
- **Social links:** typically in `Hero.jsx`, `Contact.jsx`, and `Footer.jsx`
- **Theme/styling:** `src/index.css` + Tailwind classes (see `tailwind.config.js`)
- **Profile image/static assets:** place files in `public/` and reference them via `/your-file.png`

## Troubleshooting

- **`server_not_configured`**
  - Ensure the required env vars exist: `SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASS`, `CONTACT_TO_EMAIL`.
- **`smtp_tls_failed` / “self-signed certificate in certificate chain”**
  - Usually caused by VPN/corporate proxy/antivirus SSL inspection. Try a different network or disable SSL inspection.
- **`smtp_auth_failed`**
  - For Gmail, use an **App Password** (not your normal password).
- **`rate_limited`**
  - The backend applies a small per-IP limit to reduce spam.

## Notes

- Performance docs: `PERFORMANCE_ANALYSIS.md`, `HEAVIEST_COMPONENTS.md`
- Deployment entrypoint: `server.js` (see `Procfile`)

## License

MIT — see `LICENSE`.

## Author

**Ahmed Mostafa**
- Email: [email protected]
- GitHub: [@ahmedmo-27](https://github.com/ahmedmo-27)
- LinkedIn: [Ahmed Mostafa](https://linkedin.com/in/ahmedmostafa-swe)
反馈内容错误

看看同类模板

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