Computer Engineering student at the University of Padua, based in Venice, Italy.
🌐 Live Website: simonesiega.com
Next.js 16 · TypeScript · Tailwind CSS · Bun · GitHub Actions
This repository contains the source for my personal portfolio. It is the main place where I document selected projects, client work, and the engineering decisions behind them.
Each featured project includes an MDX case study covering the original problem, implementation choices, production constraints, results, and what I would improve next.
The current portfolio includes:
- Client Web Delivery — my first paid contracts, from contributing to an existing PHP website to owning a CMS-driven platform through production handoff.
- European Tech Opportunities 2027 — an open-source Python pipeline and directory built around deterministic classification, SQLite lifecycle management, restore-tested snapshots, and atomic deployment.
- Codex Limits — my first public npm package, combining a terminal interface, automation output, safe reset-credit redemption, and coding-agent integrations.
- CFG Parser — my first Rust project, using a hand-written recursive-descent parser to turn a custom grammar into evaluation and structured errors.
Professional experience is collected separately on the Work page.
The project uses the Bun version declared in package.json.
git clone https://github.com/simonesiega/portfolio.git
cd portfolio
bun install --frozen-lockfile
cp .env.example .env
bun run devOpen http://localhost:3000.
The environment file is optional for basic local development. It becomes important when checking canonical metadata, analytics, or production CSP behavior.
| Variable | Purpose |
|---|---|
NEXT_PUBLIC_SITE_URL |
Public origin used for canonical metadata, sitemap, and robots output. |
SITE_URL |
Server-side fallback for the public origin and the default Docker build origin. |
NEXT_PUBLIC_UMAMI_ENABLED |
Enables optional Umami analytics when set to true. |
NEXT_PUBLIC_UMAMI_SCRIPT_SRC |
URL of the Umami script; also informs the production CSP. |
NEXT_PUBLIC_UMAMI_WEBSITE_ID |
Umami website identifier supplied at build time. |
CSP_MODE |
Selects off, report-only, or enforce; production defaults to enforce. |
CSP_REPORT_URI |
Optional endpoint for CSP violation reports. |
CSP_CONNECT_SRC_EXTRA |
Optional space-separated additions to the CSP connect-src directive. |
Production builds require NEXT_PUBLIC_SITE_URL or SITE_URL so generated URLs never depend on an inferred deployment origin.
Run the complete local quality gate with:
bun run checkIt checks formatting, linting, TypeScript, unit tests, and a production build. Browser tests run separately:
bunx playwright install chromium
bun run test:e2eGitHub Actions repeats those checks on pushes and pull requests. Additional workflows build the standalone application, audit dependencies, run CodeQL, and scan the Docker image for high and critical vulnerabilities.
The multi-stage Docker build installs dependencies from the lockfile, compiles Next.js standalone output, and copies only the runtime files into the final image. The application runs on port 3000 as a non-root nextjs user.
docker build --build-arg SITE_URL=https://simonesiega.com -t portfolio .
docker run --rm -p 3000:3000 portfolioPublic environment variables are embedded during the Next.js build. Changing analytics values only at container runtime does not rewrite already prerendered pages, so production deployments provide matching build-time and runtime configuration.
src/app routes, metadata, sitemap, and page composition
src/components reusable UI, behavior, and animation components
src/lib/config/text/projects typed project entries and MDX case studies
src/lib/config/text/work professional experience data
src/styles design tokens, components, motion, and accessibility
src/proxy.ts Content Security Policy handling
public images, project media, icons, and résumé
.github/workflows quality, test, build, and security automation
Licensed under the MIT License.
