MainNavigationView Redesign Prompt for OffGrid: AI (SwiftUI, iOS 17)
A production-ready UI refactor prompt for MainNavigationView.swift in OffGrid: AI, focused on premium native SwiftUI design while preserving all existing app logic and business rules.
MainNavigationView Redesign Prompt
This prompt is designed for redesigning MainNavigationView.swift in OffGrid: AI, a dark, minimal, offline survival AI app.
The file contains full chat UI scope:
- sidebar
- chat detail
- message bubbles
- typing indicator
- download flow
- trial UI
The goal is a premium native visual language without decorative gradients, brand color tokens, or visual noise.
The key constraint: presentation-only changes. Logic and business behavior stay untouched.
Design Constraints
- No
Color("BrandPrimary") - No hardcoded
.blue,.green,.orange - No
.shadow()modifiers - No decorative
secondarySystemBackgroundortertiarySystemBackgroundcards in chat thread - Minimum iOS 17.0
- Keep all logic, bindings, and manager calls intact
Required UI Changes
1. Remove debug artifact
Remove the DEBUG message count block from ChatDetailView.body.
2. Fix navigation title
Change sidebar title from OffGridAI to OffGrid.
3. Replace welcomeView
Use typography-led welcome view with no hero icon and no brand-colored CTA.
4. Refine conversationRow
Improve hierarchy:
- title in
.subheadline+.medium - timestamp in
.caption2and.tertiary - preview in
.captionand.secondary
5. Simplify sidebar download progress section
- remove blue icon/tint usage
- keep progress linear and neutral
- use
.monospacedDigit()for percentage stability
6. Replace TypingIndicator
Remove brain icon, timer publisher, and "Thinking..." text. Use minimal three-dot breathing animation only.
7. Redesign user MessageBubble
Use Color(.systemFill) background for user bubbles and .primary foreground.
8. Redesign DownloadChoiceBubble
- remove all
Color("BrandPrimary") - use
Color(.systemFill)and neutral semantic styles - replace "RECOMMENDED" badge with plain text "Recommended"
- convert button and card surfaces to
.ultraThinMaterialwhere appropriate
9. Redesign DownloadProgressBubble
- remove
.shadow() - remove hardcoded icon colors
- remove
.tint(.blue) - use
.ultraThinMaterialfor outer surface
10. Redesign TrialExhaustedBubble
Replace accent-color pill button with neutral outlined/material capsule style.
11. Update input send button color logic
Use adaptive label colors:
- disabled:
Color(.tertiaryLabel) - enabled:
Color(.label)
12. Remove color-coded status labels in modelStatusSection
Use .primary instead of green/orange color cues.
Invariants (Must Not Change)
Do not modify:
- state declarations and environment bindings
- download handling logic and callbacks
- purchase/trial/business rules
sendMessage(),createNewChat(),generateWelcomeMessage()logic- streaming and parsing internals
- sheets, alerts, confirmation dialogs
This prompt is strictly for UI layer refinement.
Acceptance Checklist
- zero
Color("BrandPrimary") - zero hardcoded
.blue/.green/.orangeusage for UI state - zero
.shadow()modifiers - debug block removed
- navigation title updated to
OffGrid - welcome view is typography-led and neutral
- typing indicator reduced to 3-dot minimalist pattern
- bubbles use system fill/material surfaces
- input send button uses adaptive label colors
- app compiles with unchanged behavior
Why this prompt works
It combines strict UI constraints with explicit non-functional boundaries, which is critical when using AI-assisted refactoring in production codebases.
The result is a safer prompt:
- strong enough to produce a meaningful visual redesign
- constrained enough to prevent accidental logic regressions
For teams using AI to accelerate SwiftUI refactors, this pattern is reusable across complex views: define visual target, enforce semantic styling, and lock business behavior.