Self-Hosted Portfolio Website
The production-style web service behind TLCTechLab.com, hosted in a dedicated Debian LXC container with Nginx and published through Cloudflare.
Project Goal
The goal of this project is to operate my technical portfolio as a self-hosted service rather than relying on a hosted site builder. The environment gives me direct responsibility for the Linux workload, Nginx configuration, public publishing, HTTP security controls, content deployment, rollback copies, and ongoing maintenance.
Public documentation intentionally excludes internal addressing, origin details, credentials, tunnel identifiers, and private infrastructure configuration.
Architecture
Technologies Used
What I Built
- Deployed the website inside a dedicated Debian 13 LXC container on Proxmox.
- Installed and maintain Nginx 1.26.3 as an active and enabled web service.
- Published the site through Cloudflare while keeping the origin and management infrastructure private.
- Host the current two-page resume as a text-based PDF alongside project documentation.
- Configured a custom 404 page and validated HTTP 404 behavior.
- Configured the www hostname to redirect to the primary TLCTechLab.com address with HTTP 301.
- Implemented HSTS, Content Security Policy, X-Frame-Options, Referrer-Policy, and Permissions-Policy headers.
- Configured X-Robots-Tag and matching HTML robots metadata so the portfolio remains accessible by direct link while requesting exclusion from search indexing.
- Built a PowerShell-first deployment workflow with staging files, rollback copies, SHA256 verification, and post-deployment public checks.
Security Considerations
- Internal IP addresses, origin details, credentials, connector identifiers, and management paths are not published.
- The public site returns HSTS and a restrictive Content Security Policy.
- X-Frame-Options is set to DENY and browser permissions are restricted through Permissions-Policy.
- The homepage, project pages, custom 404 response, and hosted resume return X-Robots-Tag noindex protection.
- HTML pages also carry matching noindex metadata as a second indexing-control layer.
- The site is public by direct URL; noindex is treated as search-index guidance rather than access control.
Operational Value
Running the portfolio as an actual service creates a small but complete web-operations workflow: Linux administration, Nginx configuration, publishing, security headers, content deployment, rollback planning, cache behavior, HTTP validation, and public troubleshooting all have to work together.
The site also gives me a controlled place to document professional and independent infrastructure work while keeping client identities, internal addressing, credentials, and other sensitive configuration out of public documentation.
Project Status
Active and operational. The portfolio currently runs on Debian 13 with Nginx 1.26.3 active and enabled. The public homepage returns HTTP 200 through Cloudflare, the resume is served as a PDF, the custom 404 handler is active, and the site returns both HTTP-header and HTML noindex protection.