@model List @{ ViewData["Title"] = "Release Notes Manager"; string TagBadge(string tag) => tag switch { "Feature" => "bg-primary", "Improvement" => "bg-info", "Fix" => "bg-warning text-dark", "Breaking" => "bg-danger", "Security" => "bg-dark", _ => "bg-secondary" }; }

Release Notes Manager

Publish versioned changelogs visible to all platform users
@if (TempData["Success"] != null) { } @* Summary cards *@
@Model.Count
Total
@Model.Count(r => r.IsPublished)
Published
@Model.Count(r => !r.IsPublished)
Draft
@Model.Count(r => r.IsPublished && r.ReleasedAt >= DateTime.UtcNow.AddDays(-30))
Last 30 Days
@foreach (var note in Model) {
v@(note.Version) — @note.Title
@note.Tag   @if (note.IsPublished) { Published } else { Draft }
Released @note.ReleasedAt.ToString("MM/dd/yyyy")
Created By @note.CreatedByUserName
@if (note.Body.Length > 0) {
Preview @(note.Body.Length > 60 ? note.Body[..60] + "…" : note.Body)
}
} @if (!Model.Any()) {
No release notes yet. Create the first one.
}
@if (!Model.Any()) { } @foreach (var note in Model) { }
Version Title Tag Released Status Created By
No release notes yet. Create the first one.
v@(note.Version)
@note.Title
@if (note.Body.Length > 80) { @note.Body[..80]… }
@note.Tag @note.ReleasedAt.ToString("MM/dd/yyyy") @if (note.IsPublished) { Published } else { Draft } @note.CreatedByUserName
@Html.AntiForgeryToken()
@Html.AntiForgeryToken()