The opening experience consists of a loading animation, Hero title card and custom cursor (dot, ring and an approximately 700px ambient glow)
Portfolio-Template-12 — Rails Portfolio Template
By Muhammad112233-creator
A Netflix-style developer portfolio template built with React, Vite, Tailwind CSS, GSAP and Framer Motion, featuring a loading animation, 3D skill arc, poster-style project grid and custom cursor.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 2
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
The Skills section is fixed-scrolled for about 500% of the viewport height on desktop, unfolding six cards along a 3D arc with an 1800px radius; on mobile it becomes a swipe-snap rail
The Projects section enters as a shuffled poster deck, then expands into a 3×3 grid, with a floating control bar
About and Expertise use bento panels, a pointer-following red spotlight, and scroll effects such as card stacking, scaling down and blurring
All copy, links, skills and project data are centralized in src/data/content.js for easy replacement with personal content
Includes a prebuilt static site/ directory and deployment configurations for GitHub Pages, Netlify and Vercel
Template Details
This is a developer personal portfolio template that takes the Netflix streaming interface as its visual reference. The page organizes content as "episodes": loading animation, Hero, About, Expertise, Skills, Projects, Contact and Footer appear in sequence. During scrolling, effects include card stacking, skill cards unfolding along a 3D arc, and project covers expanding from a shuffled state into a 3×3 grid. Desktop and mobile use fixed scrolling and swipe-snap interactions respectively.
The tech stack is React, Vite, Tailwind CSS, GSAP (including ScrollTrigger) and Framer Motion. Styling is primarily utility-class based, and animation parameters (skill arc radius, fixed scroll length, grid spacing, animation duration and easing) are centralized in the corresponding components.
Content and configuration are centralized in src/data/content.js, including brand name, name, email, location, tagline, navigation, social links, About, Expertise, Skills, Projects, Contact and Footer data. The avatar is located at src/assets/picture.png; a portrait image of about 640×780 (4:5) is recommended. The contact form by default only logs to the console and shows an alert; it requires integration with a form endpoint such as Formspree or Web3Forms to actually send email. The template includes a prebuilt static site/ directory and deployment configurations for GitHub Pages, Netlify and Vercel.
Limitations: the build output cannot be opened directly via file:// and must be previewed through a local server; the first deployment to GitHub Pages may require waiting 1–2 minutes and a hard refresh; on low-end devices the fixed scroll section may affect smoothness, and mobile automatically falls back to a simple rail layout.
Is it right for your project?
Use Cases
- Developers or engineers building a personal portfolio site who want to showcase projects and skills in a streaming-interface style
- Showcase-oriented pages that need scroll-driven animations (fixed scrolling, 3D card arc, poster expansion) as the main visual expression
- A learning or secondary-development starting point for practicing React + Vite + Tailwind CSS + GSAP animations
- Static sites deployed to GitHub Pages, Netlify or Vercel for personal branding
Suitable For
- Developers familiar with React and Vite who can modify JSX components and content data files
- Individuals who want a portfolio with strong visual animation rather than a traditional resume-style layout
- Template users who need to freely modify and use it commercially under the MIT license
- Users planning to use static hosting and configure a form service endpoint themselves
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Requires Node.js 18 or higher; run npm install in the project directory, then npm run dev, accessible by default at http://localhost:5173
- 2
Build with npm run build; output goes to ./site. To preview the build locally, use npm run preview (default http://localhost:4173)
- 3
Do not double-click site/index.html directly; the browser will show a blank page due to ES module restrictions. Access it through a local server, for example cd site && npx serve .
- 4
To replace the avatar, prepare an image of about 640×780 (4:5), save it as src/assets/picture.png, then rebuild
- 5
The contact form does not send email by default; integrate an endpoint such as Formspree or Web3Forms in src/components/Contact.jsx. Third-party assets such as demo images, fonts and icons require separate license verification
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis 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 mean external services or third-party assets are free.
Must comply with when using
- You may 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 contact form by default only logs to the console and shows an alert; it does not actually send email. To receive messages, you must register and integrate a third-party form service endpoint such as Formspree or Web3Forms, and replace handleSubmit in Contact.jsx.
- The build output cannot be opened directly by double-clicking via file://; the browser will show a blank page due to ES module restrictions. It must be accessed through a local server (e.g., npm run preview or npx serve site).
- After the first deployment to GitHub Pages, it may take 1–2 minutes and a hard refresh before the page appears; this is a deployment process limitation.
- On low-end devices, fixed scrolling and 3D animations may affect smoothness; mobile automatically falls back to a simple rail layout, so the visual and interactive effects differ from desktop.
- The README mentions the Formspree form service; real submissions require configuring a service endpoint, and its usage quotas and fees must be verified separately.
- Demo images, fonts, icons and other third-party assets must be checked against their respective licenses; they cannot be judged solely by the code's MIT license.
- 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
create a free form endpoint (for example [Formspree](https://formspree.io) or [Web3Forms](https://web3forms.com))
Original README
Opening `site/index.html` by double-clicking it (a `file://` URL) will **not** work
Original README
Wait 1–2 minutes for the first deploy, then hard-refresh
Original README
https://github.com/Muhammad112233-creator/Portfolio-Template-12/blob/main/LICENSEhttps://github.com/Muhammad112233-creator/Portfolio-Template-12/blob/main/README.mdOn low-end phones the layout automatically falls back to simple rails.
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-03. 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
- Rails · Vite · 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-10-03
- Screenshot last checked
- 2026-10-03
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 Rails 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-04
Inspect the recorded source material
SHA-256: 3c0252db1760a26c284efee8f638ea3fd505dbe2835d8ec1d59e912185ffb9cd
2026-10-03T14:59:03.623Z
Source file / repository<div align="center">
# 🎬 Netflix-Style Developer Portfolio
**A cinematic, Netflix-inspired personal portfolio template.**
Sticky 3D skill rails · a poster stack that unfolds into a 3 × 3 hub · custom red cursor · GSAP + Framer Motion throughout.
Built with **React 19 · Vite · Tailwind CSS v4 · GSAP · Framer Motion**
[Setup](#-quick-start) · [Preview](#-how-do-i-see-the-preview) · [Customise](#-make-it-yours) · [Troubleshooting](#-troubleshooting)
</div>
---
## ✨ What's inside
| Section | What happens |
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| **Loader** | A red ping dot and the brand name blur in, punch out, curtain fades. |
| **Hero** | Red marquee rail, pointer-reactive 3D portrait card, custom cursor trio (dot + ring + 700px ambient glow). |
| **Episode 01 — About** | Three bento panels that rise on scroll, each with a pointer-tracked red spotlight. |
| **Episode 02 — Expertise** | Four sticky "director's cut" cards that stack; the ones underneath shrink, lift and blur. |
| **Skills** | Desktop: the section pins for **500% of scroll** and deals six cards around an 1800px 3D arc. Mobile: swipeable snap rail. |
| **ORIGINALS — Projects** | Eight covers fly in as a shuffled deck, then unfold into a 3 × 3 streaming hub above a floating console bar. Mobile: swipe rail. |
| **Episode 04 — Contact** | A giant outlined `CONTACT` word drifts on scroll, glass form sheet slides up from the bottom edge. |
| **Footer** | Series metadata, socials, season line. |
### Tech stack
- **React 19** + **Vite 5** — dev server and bundler
- **Tailwind CSS v4** (`@tailwindcss/vite`) — all styling is utility classes, no config file needed
- **GSAP 3** (+ ScrollTrigger, `matchMedia`, `quickTo`) — scroll pinning, the 3D fan, the poster deck
- **Framer Motion** — contact section scroll transforms and reveal animations
### Project structure
```
netflix-portfolio-template/
├── public/
│ ├── favicon.svg # browser tab icon
│ └── .nojekyll # stops GitHub Pages from ignoring _-prefixed files
├── src/
│ ├── assets/
│ │ └── picture.png # ⬅ REPLACE THIS with your own portrait (640×780)
│ ├── components/
│ │ ├── Loader.jsx # intro curtain
│ │ ├── Cursor.jsx # custom cursor + ambient glow
│ │ ├── Hero.jsx # header + opening title card
│ │ ├── About.jsx # Episode 01
│ │ ├── Expertise.jsx # Episode 02
│ │ ├── Skills.jsx # pinned 3D skill fan
│ │ ├── Projects.jsx # ORIGINALS poster deck
│ │ ├── Contact.jsx # Episode 04
│ │ └── Footer.jsx
│ ├── data/
│ │ └── content.js # ⬅ ALL text, links, skills and projects live here
│ ├── index.css # Tailwind import + marquee/dropBounce keyframes
│ ├── App.jsx
│ └── main.jsx
├── site/ # ✅ pre-built static site — drag this to GitHub Pages
├── .github/workflows/deploy.yml
├── .gitignore
├── index.html
├── package.json
├── vite.config.js
├── netlify.toml
├── vercel.json
└── LICENSE
```
---
## 🚀 Quick start
You need **Node.js 18 or newer** ([download](https://nodejs.org)).
```bash
cd netflix-portfolio-template
npm install # only once
npm run dev # opens http://localhost:5173
```
Other commands:
```bash
npm run build # rebuilds the static site into ./site
npm run preview # serves the built ./site at http://localhost:4173
```
---
## 👀 How do I see the preview?
There are **four** ways — use whichever suits you.
### 1. Live preview in this chat (fastest)
If you are reading this inside the Arena workspace, the preview panel already shows the running site.
Press the **Portfolio preview** tab. Nothing to install.
### 2. Local dev server (live reload — best for editing)
```bash
cd netflix-portfolio-template
npm install
npm run dev
```
Open the printed address, normally **http://localhost:5173**.
Every save hot-reloads the page instantly.
### 3. Preview the production build
```bash
npm run build # writes ./site
npm run preview # serves it at http://localhost:4173
```
Always do this before publishing — it is the same file set GitHub Pages will serve.
> ⚠️ Opening `site/index.html` by double-clicking it (a `file://` URL) will **not** work — browsers block ES modules loaded from the local disk. Serve it instead:
>
> ```bash
> cd site && npx serve .
> ```
---
## 🎨 Make it yours
Almost everything lives in **one file**: `src/data/content.js`.
```js
export const profile = {
brand: "HAMZA", // navbar + loader + footer wordmark
fullName: "Hamza Raza",
email: "[email protected]",
location: "LAHORE, PK",
headlineTop: "HAMZA", // hero line 1 (solid white)
headlineAccent: "DEV.ENGINE", // hero line 2 (red gradient)
tagline: "TOP 1%",
role: "Software Engineer & Systems Architect",
stats: ["99.9% Uptime", "TypeScript • Node.js", "PostgreSQL & AWS"],
rails: [
/* the big red marquee lines */
],
nav: [
/* header + footer navigation */
],
socials: [
/* GitHub / LinkedIn / LeetCode links */
],
};
```
Then `about`, `expertise`, `skills`, `projects`, `contact` and `footer` — same idea, plain arrays.
### Swap the portrait
1. Prepare your photo at roughly **640 × 780 px** (4:5, portrait).
2. Save it as `src/assets/picture.png`.
3. Rebuild: `npm run build`.
The card crops with `object-cover`, so any 4:5-ish photo works.
### Change the accent colour
The template uses Netflix red `#E50914`. Find and replace it in:
- `src/index.css` → `::selection` background
- `src/components/Cursor.jsx` → the two RGBA glows and the dot shadow
- `src/components/Hero.jsx` → the hero glow gradient
- `src/components/About.jsx`, `Expertise.jsx`, `Skills.jsx`, `Projects.jsx` → the spotlight `radial-gradient(...)` values
- Any `bg-red-600` / `text-red-500` utility class you want to shift
### Change the browser-tab icon
Edit `public/favicon.svg` (plain SVG), or drop in your own `.svg`/`.png` with the same filename.
### Wire up the contact form
`src/components/Contact.jsx` currently logs to the console and shows an alert. To send real email, create a free form endpoint (for example [Formspree](https://formspree.io) or [Web3Forms](https://web3forms.com)) and replace `handleSubmit`:
```js
const handleSubmit = async (event) => {
event.preventDefault();
if (!form.permission)
return alert("Please accept the contact permission checkbox.");
await fetch("https://formspree.io/f/YOUR_FORM_ID", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(form),
});
setForm(emptyForm);
};
```
### Useful knobs
| What | Where |
| -------------------------------- | ------------------------------------------------------------ |
| Skill arc width / spacing | `Skills.jsx` → `const radius = 1800`, `angle = offset * 18` |
| Pin length of the skills section | `Skills.jsx` → `end: '+=500%'` |
| Poster grid gaps | `Projects.jsx` → the `+ 40` in the `x` / `y` tweens |
| Card reveal timing | `About.jsx` / `Projects.jsx` → `duration`, `stagger`, `ease` |
| Marquee speed | `index.css` → `animation: marquee 35s linear infinite` |
---
## 🛠 Troubleshooting
| Symptom | Fix |
| ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Blank page on GitHub Pages | Make sure `index.html` and the `assets/` folder sit at the **published root**. Using Option B, the Pages folder must be `/site`, not `/ (root)`. |
| **404** on `…github.io/repo-name/` | Wait 1–2 minutes for the first deploy, then hard-refresh (**Ctrl ⇧ R** / **⌘ ⇧ R**). |
| `npm run build` fails after editing | Check for a missing comma or bracket in `src/data/content.js` — it is the file people edit most. |
| Portrait looks stretched or cropped oddly | Supply a ~**640 × 780** (4:5) image. |
| Animations feel sluggish | Close other heavy tabs; the pinned sections do real work. On low-end phones the layout automatically falls back to simple rails. |
| `file://` preview is blank | Expected — ES modules need a server. Use `npm run preview` or `npx serve site`. |
| Fonts look "off" | The template uses the system UI font stack (plus Impact/Bebas for the giant `CONTACT` word). Add a `@font-face` in `src/index.css` if you prefer a webfont. |
---
## 📄 License
MIT — free for personal and commercial use. Attribution is welcome but not required.
See [LICENSE](./LICENSE).
<div align="center">
**If this template helped you, a ⭐ on the repo goes a long way.**
`STREAMING WORLDWIDE • BUILT WITH REACT & GSAP`
</div>
<div align="center">
**`STREAMING WORLDWIDE • BUILT WITH REACT & GSAP`**
</div>
Explore similar templates
Compare previews and descriptions within the same stack and category.

Portfolio-Template-20
A handcrafted static portfolio template for creative studios, using sky-blue gradients, paper texture, and warm orange accents.
Rails · Portfolio

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

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

yashitanamdeo.github.io
A Gatsby and React personal portfolio template with a dark theme and navy blue and green accents, based on Yashita Namdeo's first personal homepage.
Gatsby · Portfolio

nxt-lnk
nxt-lnk is a Next.js-based bio link page template that manages personal information and links via BioData.js and LinksData.js, positioned as a self-hosted alternative to Linktree. It groups links by type, supports enabling/disabling individual links, and offers hexagonal or oval avatars.
Next.js · Portfolio

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
