Personal portfolio and rΓ©sumΓ© site of Amir Iranmanesh β CTO & Senior Backend Engineer.
amiranmanesh.ir Β· RΓ©sumΓ© (PDF) Β· LinkedIn Β· GitHub
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
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:3000Production build:
make build # output in build/If npm install fails on peer dependencies:
npm install --legacy-peer-deps| 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.
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.
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.pdfmake 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.
βββ .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
.github/workflows/main.yml runs on every push to main:
- Check out the repository on Node 18.x
- Install the LaTeX toolchain and compile the rΓ©sumΓ© PDF
npm i --legacy-peer-depsandnpm run build- Force-push the contents of
build/to thegh-pagesbranch with aCNAMEforamiranmanesh.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 buildReact 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.
- Website β amiranmanesh.ir
- Email β iranmanesh.ah@gmail.com
- LinkedIn β in/amiranmanesh
- Telegram β @iranmanesh_ah