No description
  • HTML 40.9%
  • CSS 29.3%
  • C# 28.5%
  • JavaScript 1.3%
Find a file
2026-07-11 04:02:19 +00:00
.woodpecker Remove pipeline in favour of autodiscovered renovate 2026-05-27 22:26:11 +02:00
FF.Boneskewer69.Portfolio Update dependency StackExchange.Redis to 3.0.17 2026-07-11 04:02:19 +00:00
FF.Boneskewer69.Portfolio.AppHost Remove redundant dependency from apphost 2026-06-30 08:36:45 +02:00
.gitignore Add Altcha validation 2026-06-12 23:26:20 +02:00
aspire.config.json Add Altcha validation 2026-06-12 23:26:20 +02:00
nuget.config Remove redundant dependency from apphost 2026-06-30 08:36:45 +02:00
portfolio.slnx Add Altcha validation 2026-06-12 23:26:20 +02:00
README.md Add Altcha validation 2026-06-12 23:26:20 +02:00
renovate.json Remove pipeline in favour of autodiscovered renovate 2026-05-27 22:26:11 +02:00

boneskewer69/portfolio

.NET MailKit Docker Flux Renovate Woodpecker CI

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 Publish
Renovate 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:

  1. Builds and pushes a container image to forge.fullbyte.de/boneskewer69/portfolio tagged with the version and latest.
  2. 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.txt
  • hreflang alternate links for en / de
  • DNSSEC — enable at registrar + DNS provider if both support it (optional)