Skip to content
Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

39 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Amir Iranmanesh β€” Personal Portfolio

Personal portfolio and rΓ©sumΓ© site of Amir Iranmanesh β€” CTO & Senior Backend Engineer.

amiranmanesh.ir Β· RΓ©sumΓ© (PDF) Β· LinkedIn Β· GitHub

Deploy React Node


Overview

A single-page React application presenting experience, education, projects, and contact information, plus a LaTeX-built rΓ©sumΓ© PDF. Every push to main builds the app and compiles the rΓ©sumΓ©, then publishes the result to the gh-pages branch behind the custom domain amiranmanesh.ir.

Features

  • Light/dark theme with a persistent toggle
  • Sections: Home, Experience, Education, Projects, Contact
  • All content driven from a single data file β€” src/portfolio.js
  • RΓ©sumΓ© compiled from LaTeX (XeLaTeX + Vazirmatn) via make resume-pdf
  • Automated build and deploy through GitHub Actions

Quick Start

Requirements: Node.js 18.x (see .nvmrc). Newer versions break some transitive dependencies.

nvm use            # picks up .nvmrc
make install       # npm install
make run           # dev server at http://localhost:3000

Production build:

make build         # output in build/

If npm install fails on peer dependencies:

npm install --legacy-peer-deps

Make Targets

Target Description
make install Install Node.js dependencies
make run Start the development server
make build Production build into build/
make resume-pdf Compile public/resume/resume.tex to resume.pdf
make resume-font-check Check whether Vazir/Vazirmatn is installed
make resume-clean Remove LaTeX auxiliary files
make clean Remove auxiliary files and the rΓ©sumΓ© PDF

make help prints the same list from the command line.


Editing Content

All site content lives in src/portfolio.js β€” a content change needs no component edits.

Export Controls
settings Splash screen, custom cursor, Google Analytics ID
greeting Name, headline, rΓ©sumΓ© link, contact email
socialMediaLinks GitHub, LinkedIn, Telegram, email, website
skills Skill groups and their technology icons
degrees Education entries
certifications Certification cards
experience Work history, grouped into sections
projects Project cards and their language/tech badges
contactPageData Contact page copy and profile image

Colors and typography live in src/theme.js and src/global.js. Images belong in src/assests/images/; logos referenced by logo_path resolve from that directory.


RΓ©sumΓ©

The rΓ©sumΓ© source is public/resume/resume.tex with its class file resume.cls. Building it requires XeLaTeX and the Vazirmatn (or Vazir) font.

# macOS
brew install --cask basictex
export PATH="/Library/TeX/texbin:$PATH"

make resume-font-check   # verify the font is installed
make resume-pdf          # writes public/resume/resume.pdf

make resume-pdf runs XeLaTeX twice so cross-references resolve, then reports the output path. A missing toolchain or font produces an explicit error with install instructions instead of a broken PDF. CI installs texlive-xetex, texlive-latex-extra, and fonts-vazirmatn, then performs the same step on every deploy.


Project Structure

β”œβ”€β”€ .github/workflows/main.yml   # build + deploy pipeline
β”œβ”€β”€ public/
β”‚   β”œβ”€β”€ index.html
β”‚   └── resume/                  # resume.tex, resume.cls, resume.pdf
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/              # reusable UI (cards, header, footer, ...)
β”‚   β”œβ”€β”€ containers/              # page sections (greeting, skills, projects, ...)
β”‚   β”œβ”€β”€ pages/                   # routed pages (home, experience, education, ...)
β”‚   β”œβ”€β”€ assests/                 # fonts, images, Font Awesome
β”‚   β”œβ”€β”€ portfolio.js             # ← all site content
β”‚   β”œβ”€β”€ theme.js                 # color themes
β”‚   └── global.js                # global styles
β”œβ”€β”€ Makefile
└── CNAME                        # amiranmanesh.ir

Deployment

.github/workflows/main.yml runs on every push to main:

  1. Check out the repository on Node 18.x
  2. Install the LaTeX toolchain and compile the rΓ©sumΓ© PDF
  3. npm i --legacy-peer-deps and npm run build
  4. Force-push the contents of build/ to the gh-pages branch with a CNAME for amiranmanesh.ir

The workflow needs a GH_TOKEN repository secret with push access. Manual deploy from a local machine:

npm run deploy     # gh-pages -b gh-pages -d build

Tech Stack

React 16 Β· React Router Β· Sass Β· styled-components Β· Base Web Β· Bootstrap Β· Iconify / Font Awesome Β· react-reveal Β· react-ga β€” built with react-scripts 5, formatted by Prettier with husky + lint-staged pre-commit hooks.


Contact

About

πŸ”₯ My Portfolio

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages