M1-03: Design pass — static UI on sample data #15
No reviewers
Labels
No labels
area/agent
area/capture
area/editor
area/geo
area/security
area/sync
area/transcription
area/ui
area/vault
area/voice-memos
blocked
milestone/M1
milestone/M2
milestone/M3
milestone/M4
needs-decision
needs-hardware
p0
p1
p2
type/bug
type/enhancement
type/feature
type/idea
type/infrastructure
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Stash/stash-ios!15
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "m1-03-design-pass"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Issue #3. First visual pass in code, stock SwiftUI throughout, no audio anywhere.
What changed
Four screens, plus the model they are built against:
Stash/Model/Memo.swift—MemoandSyncState. The three sync icons are stock SF Symbols and match Wes's description:icloud.slash,arrow.triangle.2.circlepath.icloud,checkmark.icloud. Symbol names were checked against the system'sname_availability.plist, because a bad symbol name renders as nothing rather than failing to compile.Stash/Model/SampleMemos.swift— synthetic sample data, labelled as such in its own doc comment, and deleted when capture lands. Titles are the date-stamped default names the app will generate, since M1 has no naming UI.Stash/Views/MemoListView.swift— the root view. Record toggles the recording bar; it touches no audio session and adds no memo.Stash/Views/MemoRow.swift— one row, plus the sync indicator.Stash/Views/RecordingBar.swift— level meter, live elapsed timer, stop button. Pinned withsafeAreaInsetso the last row still scrolls clear of it.Stash/Views/SettingsView.swift— aFormwith the version. The VTT-first/audio-first preference is deliberately absent; it controls something that does not exist until M3.ContentView.swiftis gone, replaced byMemoListView.README.mdandAGENTS.mdupdated in the same commit: the README no longer claims the app is an empty scaffold, andAGENTS.mdgains the design section (stock components first, no Figma step, placeholder data must admit it is placeholder) and the new source layout.Deliberate choices worth a sentence
Every sample memo is
notSynced. That is the only honest state in M1. The other two cases exist in the type so the row is designed against the states it will really have, instead of being redesigned when sync arrives.Stock components everywhere they exist —
ContentUnavailableViewfor empty,Formfor settings,safeAreaInsetfor the bar, system materials for backgrounds. The level meter is the only hand-drawn control, it is driven by a sine wave rather than a microphone, and it says so.Dark and light are entirely system-managed. No per-mode colours anywhere.
Validated
swiftlint lint --strict— 0 violations, 7 files.wes-iphone(iPhone 17 Pro), confirmed alive in the process list. Wes confirmed the screens look right. Exact commands are in a comment on issue #3.One layout bug was found by looking at the screenshots rather than trusting the code: the recording bar's material hugged its content instead of spanning the width, so the bar rendered as a floating box mid-screen. Fixed before the screenshots that are attached.
Nothing signing-related is in the repository.
DEVELOPMENT_TEAMwas passed on the xcodebuild command line, because this repo is public.Not validated
.woodpecker/lint.ymlcan run, but the simulator build still has no macOS agent.Issue #3 stays open after this merges — the design pass is expected to iterate.