This repository hosts Subash Lama’s multimedia-rich portfolio as a static site, deployed with GitHub Pages and GitHub Actions.
.
|-- .github/
|-- archive/
|-- config/nginx/
|-- content/resume/
|-- public/
`-- scripts/
public/ contains the deployed static site.public/assets/ contains runtime CSS, JS, media, and the published resume output.content/resume/ contains the source resume PDFs that feed the published download file.scripts/ contains local automation, including resume syncing.config/nginx/ contains the Docker/nginx runtime config..github/workflows/ contains CI, Pages deploy, and security scanning workflows.archive/ contains legacy template files, unused raw media, and old local artifacts that are not part of the live site.Run a local server (or Docker) so media assets and animations load the same way they do in production. The deployed site now lives under public/, while Docker serves that folder directly:
# Option A: Docker (recommended)
pwsh ./scripts/sync-resume.ps1
docker build -t static-site .
docker run --rm -p 8080:80 --name static-site static-site
# Option B: Built-in PowerShell static server
# pwsh ./scripts/sync-resume.ps1
# pwsh ./scripts/serve-static.ps1 -Port 8080
# Option C: Any static server (if installed)
# pwsh ./scripts/sync-resume.ps1
# python -m http.server 8000 --directory public
# npx serve public
Then open http:// (Docker) or your chosen server URL.
If pwsh is not installed on your machine, use:
powershell -ExecutionPolicy Bypass -File .\scripts\sync-resume.ps1
For a one-command local Docker launch, use:
pwsh ./scripts/deploy-local.ps1
content/resume/.Subash-Lama-Resume.pdf.public/assets/docs/cv/latest-resume.pdf during local deploy and GitHub Actions.main branch to GitHub Pages..github/workflows.CONTRIBUTING.md for the local check and pull request workflow.Every time someone downloads your resume, the system automatically:
cloudflare-worker/worker.js) — captures real IP, city, country, and company from Cloudflare’s edge headers. Skips your own downloads (VIA NET ISP).log-download.yml) — triggered by the Worker, appends a row to download-logs/resume-downloads.txt, sends Telegram message and ntfy Windows notification.daily-digest.yml) — runs every day at 9:00 AM Nepal time, sends today’s count + weekly + all-time stats to Telegram.| Channel | How | |—|—| | Telegram bot (@trackerSbash) | GitHub Actions → Telegram API | | ntfy Windows popup | GitHub Actions → ntfy.sh | | PowerShell toast | Local watcher script |
| Secret | Purpose |
|—|—|
| GITHUB_PAT | Cloudflare Worker → GitHub dispatch |
| TELEGRAM_BOT_TOKEN | Send Telegram messages |
| TELEGRAM_CHAT_ID | Your Telegram user ID |
| NTFY_TOPIC | ntfy.sh topic for Windows notifications |
| CLOUDFLARE_API_TOKEN | Deploy Workers via GitHub Actions |
cd cloudflare-worker
npx wrangler login
npx wrangler deploy worker.js
View all resume downloads: download-logs/resume-downloads.txt
public/assets/docs/cv/latest-resume.pdf is published for resume downloads..env, private keys, certificate files, Terraform state, or other secret-bearing files.