A giant tabular reading you scrub hour by hour on a ruled tape, over a ten-day range table.
A forecast screen set like a printed almanac: a giant tabular temperature, a tape of hairline ticks for the next 24 hours you drag to scrub, with rolling figures, conditions and a sun or moon that travels its arc, and a ten-day table of capsule range bars below.
$199 once, every piece included. See how installing works · Sign in
SwiftUI source you own, built on Apple frameworks only.
Press (style). Your agent builds around this screen in the same design.
Weather App (template)
How it behaves, what it handles, and the decisions behind it.
The page is set like a printed almanac. A masthead with an issue rule sits over the hour under the indicator, shown as a giant tabular figure with a ruled sidebar for feels like, high, low and rain. Below it the next 24 hours run on a tape of hairline ticks under one fixed spot-colour indicator, like the rim of a measuring dial. Drag it and the tape follows your finger, snapping to each hour with a selection tick while the figures roll and the sun (or, after sunset, a crescent moon) travels a ruled half-dial between the rise and set times. Hours likely to rain ink their ticks, so the showers read off the ruler before you scrub to them.
Under the instrument, a ten-day table draws each day's low to high as a capsule on one shared scale, with a ring on today's bar for the hour you have scrubbed to, and the day's details close the page as ruled cells: a wind compass, UV as a solid block, humidity on a dot grid, sunrise and sunset.
ForecastScrubber is a control, not a readout. It owns the drag, the fling and the snapping; your screen reads selection and puts the figures wherever it likes. Bind position as well when something should follow the drag continuously, such as ForecastSkyArc.Canvas and are animatable in their position, so a fling or a jump back to now glides instead of cutting.ForecastRangeBar.span(low:high:in:) is the scaling the bars use, exposed so a widget or a test can place a range the same way.ForecastScrubberExample at the end of ForecastScrubber.swift is the screen shown in the preview; copy it as a starting point.Pieces that work well next to this one.