Personal portfolio website for Rayhan Amrullah.
Built with React + Vite in an npm workspaces monorepo.
apps/* + packages/*)netlify.toml)portfolio-theme)IntersectionObserverprefers-reduced-motionFrom the repository root:
npm install
npm run dev
The dev server runs on port 3000 and opens the browser automatically.
Run these from the repository root:
npm run dev — start Vite dev server (workspace: apps/web)npm run build — production build (outputs to apps/web/dist)npm run preview — preview the production build locallyYou can also run workspace scripts directly:
npm run dev --workspace=apps/web
npm run build --workspace=apps/web
Edit the content here:
apps/web/src/data/personal.js — name, tagline, resume link, statsapps/web/src/data/projects.js — project list shown in the Projects sectionapps/web/src/data/skills.js — skills shown in the Skills sectionMost layout/styling is split into section-level modules:
apps/web/src/sections/* + corresponding *.module.cssVite is configured with @ → apps/web/src, so imports like @/components/... resolve correctly.
.
├─ apps/
│ └─ web/ # Main Vite app
│ ├─ public/
│ ├─ index.html
│ ├─ vite.config.js
│ └─ src/
│ ├─ components/
│ ├─ sections/
│ ├─ data/
│ ├─ hooks/
│ └─ styles/
├─ packages/
│ └─ ui/ # Shared UI components (Badge, GlassCard, etc.)
├─ netlify.toml
└─ package.json
netlify.toml is set up to:
npm run buildapps/web/distindex.html (SPA fallback)