production-ready Next.js + Tailwind portfolio.
- static export for GitHub Pages
- a Docker multi-stage build (serves the static site via Nginx)
- a docker-compose for quick local testing
- a GitHub Actions workflow that builds & deploys to Pages on push to
master
- Next.js App Router (
/src/app) with sections: Hero, Projects, Experience, Skills, Beyond Code, Contact. - Content lives in
/src/data/*so you can edit links & bullets without touching layout. - Static export config in
next.config.mjs(output: 'export',images: { unoptimized: true },trailingSlash: true). - Tailwind configured, dark mode toggle, accessible contrast.
Dockerfile(multi-stage) builds and serves/outvia Nginx..github/workflows/deploy.ymldeploys to GitHub Pages.
-
Open
src/data/site.config.tsand set:githubUser: '<your-username>'linkedinandemail
-
Update
src/data/projects.tswith your real repo links (DICOM Converter, InfinityView, PD app, etc.). -
Replace
public/resume.pdfwith real resume. -
Drop real photos into
public/images/(W210, E39, homelab, etc.) or remove those cards.
npm i
npm run dev
# open http://localhost:3000npm run build # generates /out
npm run preview:static
# open http://localhost:4173docker build -t laith-site .
docker run -p 8080:80 laith-site
# open http://localhost:8080or with Compose:
docker compose up --build
# open http://localhost:8080- Create a public repo (for a user site, name it
<your-username>.github.io). - Push code to the
mainbranch. - In Settings → Pages, set Source = GitHub Actions.
- Push again (or run the workflow); it will build & publish
/out.
Hosting under a project path (e.g.,
/my-portfolio)
Modern, static-exportable Next.js site ready for GitHub Pages + Docker.
npm i
npm run dev
# open http://localhost:3000npm run build
npm run preview:static
# open http://localhost:4173docker build -t laith-site .
docker run -p 8080:80 laith-site
# open http://localhost:8080Or:
docker compose up --build
# open http://localhost:8080- Create a public repo (ideally
<your-username>.github.iofor user site). - Push this code to the
mainbranch. - In repo Settings → Pages, set Source = GitHub Actions.
- Push to
mainagain; workflow builds and deploys/outto Pages.
For a project site (not user root), you may need a
basePath.> Seenext.config.mjsif hosting under/<repo>instead of root.