@model WriterDashboardViewModel @{ ViewData["Title"] = "Writer Workspace"; var message = TempData["WriterWorkspaceMessage"] as string; var error = TempData["WriterWorkspaceError"] as string; var workspaceSeed = Model.WriteNext .Concat(Model.ContinueWriting) .Concat(Model.RevisionQueue) .Concat(Model.PolishingQueue) .FirstOrDefault(); var workspaceProjectId = workspaceSeed?.ProjectID ?? Model.ProjectID; var workspaceBookId = workspaceSeed?.BookID; var workspaceBookTitle = workspaceSeed?.BookDisplayTitle ?? "Waiting for Word"; }
Today view
A practical control room for drafting, revision, polish, and story readiness.
Writing Workspace
Daily plan
No writing schedule configured.
Create Writing Schedule } else { @if (!Model.WritingSchedule.TodayTasks.Any()) {No writing tasks scheduled for today.
} else {| Task Type | Book | Chapter | Scene | Priority | Estimated Minutes | Target Words | Blocked | Writing Plan | |
|---|---|---|---|---|---|---|---|---|---|
| @item.TaskType | @item.BookDisplayTitle | Chapter @item.ChapterNumber: @item.ChapterTitle | Scene @item.SceneNumber: @item.SceneTitle | @(item.Priority?.ToString() ?? "-") | @(item.EstimatedMinutes?.ToString() ?? "-") | @(item.TargetWords?.ToString() ?? "-") | @(item.IsBlocked ? "Yes" : "No") | @item.PlanName |
Upcoming work
No upcoming writing tasks.
} else {| Scheduled Date | Task Type | Book | Chapter | Scene | Estimated Minutes | Target Words |
|---|---|---|---|---|---|---|
| @item.ScheduledDate.ToString("dd MMM yyyy") | @item.TaskType | @item.BookDisplayTitle | Chapter @item.ChapterNumber: @item.ChapterTitle | Scene @item.SceneNumber: @item.SceneTitle | @(item.EstimatedMinutes?.ToString() ?? "-") | @(item.TargetWords?.ToString() ?? "-") |
Schedule
No active schedule
}Write Next
In progress
Revision
Final pass
Story health
@reminder.Detail
} @if (reminder.SceneID.HasValue) { Open scene }