8aae30765f
Setup Wizard: reduced from 10 steps to 5 (Company Info → QB Migration →
Pricing Defaults → Named Ovens → Notifications). Removed Doc Numbering,
Job Settings, Payment Terms, Pricing Tiers, and Team Members steps — these
all have sensible defaults and are accessible any time in Company Settings.
Wizard now completes in ~5 minutes instead of 15–20.
Dashboard progress widget (new): "Get the most out of your shop" checklist
appears for Company Admins after wizard completion. Tracks six post-setup
activation tasks with dynamic progress badge, motivating subtitle copy,
collapsed-state persistence via localStorage, and a full completion state
("Your shop is fully set up 🎉") that replaces the checklist at 100%.
The next recommended step is highlighted with a solid CTA button and a
subtle blue row tint. Completed steps show encouraging green subtext instead
of just "Done". Widget disappears from controller when AllDone would have
caused a silent vanish — now renders the completion state instead.
Guided activation (Daily Board): rewrote the BoardIntroStep callout to lead
with "This is your shop in real time" and a plain-English description of the
board's purpose. Added a separate InstructionText field to
GuidedActivationCalloutViewModel so the "Move this job to the next stage"
action prompt renders as a distinct bold line with an arrow icon rather than
being buried in the body copy. After the stage change, the confirmation
callout now reads "Nice — your workflow just updated" to reinforce what just
happened before prompting the invoice step.
All copy passes the "shop owner, not SaaS" test: no technical jargon,
benefit-driven descriptions, natural language throughout.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
64 lines
2.1 KiB
Plaintext
64 lines
2.1 KiB
Plaintext
@using PowderCoating.Application.DTOs.Wizard
|
|
@model WizardProgressDto
|
|
|
|
@{
|
|
var steps = new[]
|
|
{
|
|
(1, "Company Profile", "bi-building"),
|
|
(2, "QB Migration", "bi-arrow-left-right"),
|
|
(3, "Operating Costs", "bi-currency-dollar"),
|
|
(4, "Shop Ovens", "bi-fire"),
|
|
(5, "Notifications", "bi-bell"),
|
|
};
|
|
int currentStep = ViewBag.Step as int? ?? 1;
|
|
}
|
|
|
|
<div class="wizard-sidebar">
|
|
<div class="wizard-sidebar-header">
|
|
<i class="bi bi-rocket-takeoff me-2"></i>
|
|
<span class="fw-semibold">Setup Wizard</span>
|
|
<span class="ms-auto badge bg-secondary">@Model.CompletedCount / @WizardProgressDto.TotalSteps</span>
|
|
</div>
|
|
|
|
<div class="wizard-progress-bar">
|
|
<div class="wizard-progress-fill" style="width:@Model.ProgressPercent%"></div>
|
|
</div>
|
|
|
|
<nav class="wizard-steps-nav">
|
|
@foreach (var (num, label, icon) in steps)
|
|
{
|
|
var isDone = Model.IsStepDone(num);
|
|
var isSkipped = Model.IsStepSkipped(num);
|
|
var isCurrent = num == currentStep;
|
|
|
|
var stateClass = isCurrent ? "current" : isDone ? "done" : isSkipped ? "skipped" : "pending";
|
|
|
|
<a href="@Url.Action("Step", "SetupWizard", new { step = num })"
|
|
class="wizard-step-item @stateClass"
|
|
title="@label">
|
|
<span class="wizard-step-dot">
|
|
@if (isDone)
|
|
{
|
|
<i class="bi bi-check-lg"></i>
|
|
}
|
|
else if (isSkipped)
|
|
{
|
|
<i class="bi bi-dash"></i>
|
|
}
|
|
else
|
|
{
|
|
<span>@num</span>
|
|
}
|
|
</span>
|
|
<span class="wizard-step-label">
|
|
<i class="@icon me-1"></i>@label
|
|
@if (isSkipped && !isDone)
|
|
{
|
|
<small class="text-warning ms-1">(skipped)</small>
|
|
}
|
|
</span>
|
|
</a>
|
|
}
|
|
</nav>
|
|
</div>
|