No description
- HTML 40.9%
- CSS 29.3%
- C# 28.5%
- JavaScript 1.3%
| .woodpecker | ||
| FF.Boneskewer69.Portfolio | ||
| FF.Boneskewer69.Portfolio.AppHost | ||
| .gitignore | ||
| aspire.config.json | ||
| nuget.config | ||
| portfolio.slnx | ||
| README.md | ||
| renovate.json | ||
boneskewer69/portfolio
Personal portfolio site built with ASP.NET Core 10, served as a container image.
Stack
- Framework: ASP.NET Core 10 (MVC + Razor views)
- Email: MailKit for contact form delivery
- Localization: English and German (
en/de) - Container:
mcr.microsoft.com/dotnet/aspnet:10.0-noble-chiseled-extra, multi-arch (linux-x64,linux-arm64) - CI: Woodpecker CI — publishes on git tag, triggers Renovate after a successful push
- Dependencies: managed by Renovate via
local>fullbyte/renovate
Pipelines
| Pipeline | Status |
|---|---|
| Publish | |
| Renovate |
Running locally
dotnet run --project FF.Boneskewer69.Portfolio
The app listens on port 18400. Add an appsettings.secrets.json next to appsettings.json to configure SMTP:
{
"Smtp": {
"Host": "...",
"Port": 587,
"Username": "...",
"Password": "..."
},
"MailTemplate": {
"To": "you@example.com"
}
}
Deployment
Pushing a version tag (e.g. v1.2.3) triggers the Woodpecker pipeline which:
- Builds and pushes a container image to
forge.fullbyte.de/boneskewer69/portfoliotagged with the version andlatest. - Fires a Renovate pipeline run so dependent repos pick up the new image tag automatically.
Rate limiting
The contact endpoint is protected by a fixed-window rate limiter: 5 requests per IP per hour. Excess requests are redirected back to /#contact with a localized error message.
TODOs
- Replace
apple-touch-icon.png(180×180) with a proper 1200×630 OG image for better social share previews /llms.txthreflangalternate links foren/de- DNSSEC — enable at registrar + DNS provider if both support it (optional)