@model FeatureRequestRoadmapViewModel @using Microsoft.AspNetCore.Html @using System.Text.Encodings.Web @{ ViewData["Title"] = "Feature Roadmap"; }

Feedback

Feature Roadmap

Here are some improvements currently being considered, planned, in progress, or recently shipped. This is not a complete list of every suggestion, but it shows where PlotDirector is actively evolving.

My Requests Submit Feature Request
@foreach (var roadmapSection in Model.Sections) {

@roadmapSection.Heading

@if (!roadmapSection.Requests.Any()) {

@EmptyMessage(roadmapSection.Status)

} else {
@foreach (var request in roadmapSection.Requests) {

@request.Title

@StatusBadge(request.Status) @if (!string.IsNullOrWhiteSpace(request.AppArea)) { @request.AppArea }
@if (string.Equals(request.Status, FeatureRequestStatuses.Shipped, StringComparison.OrdinalIgnoreCase) && request.ShippedUtc.HasValue) { Shipped @FormatDate(request.ShippedUtc.Value) }

@Excerpt(request.Description)

}
}
} @functions { private static string FormatDate(DateTime value) => value.ToLocalTime().ToString("yyyy-MM-dd"); private static string Excerpt(string value) { var cleaned = value.ReplaceLineEndings(" ").Trim(); return cleaned.Length <= 220 ? cleaned : $"{cleaned[..220]}..."; } private static string EmptyMessage(string status) => status switch { FeatureRequestStatuses.Shipped => "No shipped roadmap items yet.", FeatureRequestStatuses.InProgress => "No roadmap items are currently in progress.", FeatureRequestStatuses.Planned => "No planned roadmap items yet.", _ => "No roadmap items in this section yet." }; private static IHtmlContent StatusBadge(string status) { var css = status switch { FeatureRequestStatuses.Candidate => "text-bg-secondary", FeatureRequestStatuses.Planned => "text-bg-success", FeatureRequestStatuses.InProgress => "text-bg-success", FeatureRequestStatuses.Shipped => "text-bg-dark", _ => "text-bg-secondary" }; return new HtmlString($"{HtmlEncoder.Default.Encode(status)}"); } }