A projects screen that starts as breathing ghost rows and hands off to your real projects.
A projects tab with a first-run empty state: ghost rows breathing at low alpha and a friendly create action, then your real projects slide into the same surface as colored blocks through a matched transition.
$199 once, every piece included. See how installing works · Sign in
SwiftUI source you own, built on Apple frameworks only.
Subscription App (template), Meditation App (template)
How it behaves, what it handles, and the decisions behind it.
Instead of a lonely symbol, the pattern draws the silhouette of what is missing: three ghost rows (list, grid or card shape) breathing at low alpha above the message and the call to action. When you flip isEmpty to false the ghosts slide out and your content slides into the same surface through a matched geometry transition, so the reveal reads as the list arriving rather than a screen swap.
action is yours: load or create data, then set isEmpty = false. It animates the change itself; no withAnimation needed.accessibilityHidden; the title and message combine into one element.GhostStateBlockExample, the earlier Cadence projects tab, stays in the file unchanged because the Subscription App template embeds it.GhostStateBlockScreenExample at the end of GhostStateBlock.swift is the Projects screen from the preview.SPTheme from @Environment(\.spTheme), so install the design-system item with it.tint defaults to color.accent for the button; the button label uses color.accentOn.color.fill and round with radius.md; the title and message use type.title3 and type.subhead in color.textPrimary and color.textSecondary.Pieces that work well next to this one.