ReactPortfolio

Portfolio (Ahmedmo-27) — React Portfolio Template

By Ahmedmo-27

A personal portfolio website template built with React and Vite, including dark/light themes, a glassmorphism interface, animations, and an Express-powered email contact form.

Explore the design

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

2 previews
Desktop homepage1 / 2
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 2

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-13View source

What stands out

A quick read of the recorded project description.

01

Dark/light theme switching persisted to localStorage with transition effects

02

Glassmorphism visual style and Framer Motion animations

03

Contact form implemented with Express and Nodemailer, including validation, honeypot, and rate limiting

04

Supports loading media assets from a Cloudflare R2 public URL via environment variables

05

In production mode, Express serves both the static frontend and the API

Template Details

This is a portfolio website template for developers to showcase their work. The frontend is built with React and Vite, styled with TailwindCSS and CSS variables, animated with Framer Motion, and uses icons from Lucide React. The page includes Hero, Projects, Experience, and Contact sections, supports dark/light theme switching persisted to localStorage, and adapts from mobile to desktop layouts.

The contact form is handled by a separate Express backend, sending emails via Nodemailer over SMTP, with form validation, a honeypot field, and basic rate limiting. During development, the Vite dev server and Express service run simultaneously, and frontend requests to /api/contact are proxied to the backend; in production mode, Express serves both the dist/ static assets and the API. The project also supports loading images and PDFs via a Cloudflare R2 public URL configured through environment variables, with PDFs served inline.

Before use, you need to prepare your own SMTP account and configure .env; Gmail requires an app-specific password. The template is released under the MIT license, and the code can be used, modified, and distributed for free, but third-party assets such as demo images, fonts, and icons, as well as external services like domains, hosting, and email, require separate verification of licensing and costs.

ReactPortfolio

Is it right for your project?

Use Cases

  • Developers building personal portfolio and resume showcase pages
  • Static sites that need a contact form with email notifications
  • Those who want to quickly start with React and TailwindCSS and customize content sections themselves

Suitable For

  • Frontend developers familiar with React and Node.js
  • Personal portfolio projects that need to be self-deployed
  • Users willing to configure SMTP environment variables to enable the contact form

Getting started & customization

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

  1. 1

    Requires Node.js 18+ and npm; after installing dependencies, run npm run dev to start both the frontend and Express service

  2. 2

    Create a .env file in the project root and configure variables such as SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, and CONTACT_TO_EMAIL

  3. 3

    Gmail requires an app-specific password; encountering smtp_tls_failed is usually related to VPN, proxy, or antivirus SSL inspection

  4. 4

    For production, run npm run build then npm run start; npm run preview only starts the frontend preview

  5. 5

    Optionally set VITE_R2_PUBLIC_URL to load images and PDFs from an R2 public URL

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 this version and does not imply that external services or third-party assets are free.

Must comply with when using

  • The code of this version may be used, modified, used commercially, and distributed 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

  • Demo images, fonts, icons, and other third-party assets must be checked under their respective licenses and cannot be judged solely by the code's MIT license.
  • External services such as domains, hosting, databases, payments, or AI may incur additional charges.
  • Before use, you need to create a .env file in the project root and configure environment variables yourself, and you should not commit it to version control.
  • The contact form relies on an external SMTP email service; you must provide the SMTP host, port, account, password, and recipient email yourself, otherwise the backend cannot send emails.
  • If using Gmail, you must use an app-specific password instead of a regular account password, which requires enabling and generating it in your Google account.
  • Optionally configure VITE_R2_PUBLIC_URL to load images and PDFs from a Cloudflare R2 public URL, which involves a third-party storage service.
  • The backend applies IP-based rate limiting to the contact form endpoint; frequent submissions may be rejected.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

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

Original README

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

Original README

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

Original README

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

Original README

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

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

Compiled by DeepSeek based on repository license and README ·2026-10-13. 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 · 80 / 100
Technologies
React
Website type
Portfolio
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-08-16
Screenshot last checked
2026-10-13

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 React 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.

Review declaration: [email protected] · 2026-10-13

Inspect the recorded source material

SHA-256: 94fa7a8687464fd7954eb2333d74b9c4ae9c07ed309ccf59a4fae4c92b0deb43

2026-10-13T06:52:46.861Z

Source file / repository
# 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)
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.

react-portfolio-template

react-portfolio-template

A React-based developer portfolio template for showcasing projects, work history, and skills. It offers a multi-component layout, dark and light modes, and responsive mobile adaptation, with text and images editable in src/components.

React · Portfolio

personal-website-react

personal-website-react

A single-page developer portfolio template built with React and Material-UI, driven by a JSON Resume-compliant resume.json. It offers light/dark theme switching with localStorage persistence, a clean responsive layout, and Create React App tooling for simple builds and static deployment.

React · Portfolio

karngyan.com

karngyan.com

A personal website and blog template for developers, built with TanStack Start, React 19, Tailwind CSS v4, and shadcn/ui. It uses MDX for articles with Shiki highlighting and GFM tables, and automatically generates RSS, sitemap, robots.txt, llms.txt, and OG images.

React · Portfolio

react-portfolio-template

react-portfolio-template

A React portfolio template by Ryan Balieiro with a fixed sidebar and page-turn transitions on desktop, bottom navigation on mobile, multilingual support, light/dark themes, and content components for experience, education, skills, projects, and testimonials.

React · Portfolio

portfolio

portfolio

A data scientist personal portfolio template built with React and MUI, with content centrally managed through configuration files in the assets directory.

React · Portfolio

react-portfolio

react-portfolio

A React 16 and Material-UI developer portfolio template that centralizes personal information in a JSON Resume-compliant resume.json, with light/dark theme switching saved to local storage. It currently provides portfolio display only; resume page templates and structured data enhancements are still planned.

React · Portfolio