# Portfolio A high-performance, containerized professional portfolio and R&D lab built with **Next.js 15**, **Tailwind CSS**, and **TypeScript**. This project serves as both a public showcase and a dynamic bridge to a private **Forgejo** instance for real-time development tracking. ## ๐Ÿ—๏ธ Architecture Summary - **Infrastructure**: Hosted on a **Hetzner** cloud node. - **Containerization**: Fully Dockerized for **linux/amd64** architectures. - **CI/CD**: Automated build and deployment via **Woodpecker CI**. - **CDN**: Assets and media served via **Bunny CDN** for global performance. - **Data Layer**: Dynamic changelog fetching from private repositories via **Forgejo API**. ## ๐Ÿ› ๏ธ Technical Stack - **Framework**: Next.js 15 (App Router). - **Styling**: Tailwind CSS with a monospace "Technical Lab" aesthetic. - **Icons**: Lucide React. - **Deployment**: Docker Compose with `force-dynamic` runtime environment injection. ## ๐Ÿš€ Deployment & Build The project utilizes a specialized build process to ensure compatibility with the production Hetzner node environment: ### Manual Build ```bash docker buildx build --platform linux/amd64 -t portfolio:latest . ``` ### Automated Pipeline Deployments are triggered via Git Releases. The Woodpecker pipeline executes the following steps: -Build: Compiles the Next.js application for linux/amd64. -Push: Uploads the image to a private container registry. -Deploy: Re-creates the container on the Hetzner node, injecting the FORGEJO_TOKEN from a secure .env file at runtime. ## ๐Ÿงช The_Forge Integration "The Forge" is a dynamic project log system that provides a glimpse into active R&D cycles. -Metadata: Configured via data/forge.ts for project-specific details. -Real-time Logs: Fetched server-side from private changelog.md files. -Status: Includes a conditional ACTIVE_STREAM pulse based on commit recency. -Performance: Utilizes Next.js data caching with a 1-hour revalidation window. --- Built for performance and technical transparency.