This repository is a static-first portfolio template that keeps the existing visual layout and section flow, while using Astro for cleaner SSG builds and easier deployment.
- Astro 5 for static site generation
- React 19 + TypeScript for interactive UI sections
- Tailwind CSS 4 for styling
- Framer Motion for motion with reduced-motion support
- Playwright + Vitest for testing
npm ci
npm run devOpen http://localhost:4321.
npm run lint
npm run test
npm run build
npm run test:e2enpm run build-> production output indist/npm run build:pages-> GitHub Pages subpath build (/Portf/by default)
Remote sync/build behavior is handled by:
-
scripts/sync-remote-data.mjs -
src/hooks/useRemoteData.ts -
If
VITE_REMOTE_DATA_URLis set, build scripts sync*.jsonresources intopublic/__remote-data/and the app reads those same-origin files at runtime. -
If
VITE_REMOTE_DATA_URLis not set, the sync output is removed and the app uses local fallback data fromsrc/data/*. -
If remote mode is enabled but a resource cannot be loaded, sections show placeholder data (they do not silently swap to local fallback data).
This keeps behavior predictable and easier to debug for template users.
Edit these files:
src/data/projects.tssrc/data/experience.tssrc/data/education.tssrc/data/certifications.tssrc/data/skills.tssrc/data/socials.ts
- Main section order is in
src/App.tsx. - Section implementations are in
src/sections/*. - Shared UI components are in
src/components/*.
- Global theme styles:
src/index.css - Theme behavior:
src/providers/ThemeProvider.tsx
- Translation files:
src/translations/*.json - Language provider:
src/providers/LanguageProvider.tsx
- Icon usage is based on Iconify names (e.g.
mdi:github). - Icon mapping helpers are in
src/utils/icons.ts.
Astro routes:
/->src/pages/index.astro/privacy-policy->src/pages/privacy-policy.astro
React is hydrated client-side to preserve the current interactive behavior and visual feel.
- Build command:
npm run build - Output directory:
dist - Config:
wrangler.toml - Headers:
public/_headers
Use .github/workflows/github-pages.yml with:
BASE_PATH=/your-repo-name/npm run build:pages
Master config lives in security-headers.config.ts.
Parity check:
npm run verify:security-headersThis verifies required security headers across:
security-headers.config.tspublic/_headersfirebase.json(reference/backup hosting config)
src/README.md-> source layout overviewsrc/data/README.md-> data model and remote data formatsrc/utils/README.md-> utility responsibilitiestests/README.md-> test suite guide
BSD 3-Clause. See LICENSE.