Skip to content

Design v2: answers, not dashboards - #10

Merged
sayed0am merged 122 commits into
mainfrom
design-v2
Oct 24, 2026
Merged

sayed0am merged 122 commits into
mainfrom
design-v2

Conversation

@sayed0am

Copy link
Copy Markdown
Owner

The v2 design: a calm app that answers in plain words instead of showing dashboards.

  • Glow design system: glow, edge and level cards, one colour per metric, dot-matrix numbers, no two neighbouring cards alike.
  • Today follows your day: moments for waking up, midday, your usual workout time, during and after a workout, evening and night.
  • Every card opens its own detail: Recovery arc, Sleep score arc, Energy, metric details with what drove each number.
  • Navigation: one stack per tab, the tab bar hides over details, and on foldables details open in a side pane.
  • Energy: Charge renamed so it isn't mistaken for the strap's battery. The kcal metric is now Calories.
  • Workouts: a live heart-rate arc that fits three digits, a separate Indoor walk, newest first, and a crash fix when a workout ends.
  • Pairing card: animated for each step.
  • Consistency pass: 20 cross-screen mismatches fixed (colours, names, numbers, where taps lead).
  • README: rewritten short, with new screenshots and a new social preview. Privacy details moved to docs/privacy.md.

Checked on a Galaxy foldable, folded and unfolded. Unit tests pass.

🤖 Generated with Claude Code

sayed0am and others added 30 commits October 23, 2026 17:56
v1.5 reworks layout, findability, the adaptive day, voice and motion
while keeping the black glow look. The folder holds the brief and its
decisions, an inventory of the current UI, five Mobbin research notes
(links only), the pattern board, a per-screen critique, the approved
mockup sources and the spec the build follows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The redesign ships as 2.0, so the docs and branch say v2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Glow cards get a light angle, a light level for Charge and a softer
second card. Motion is down to Heartbeat and Still, so nothing drifts,
breathes or strides when idle. A screen mood (Day, Dim, Night) dims every
card under it. New edge light cards, grouped lists, grid row types, a
Load colour and a haptics helper with the spec's table. A debug-only
component gallery shows them on a phone. The spec now names light angles
counterclockwise from the right and keeps edge card hairlines plain.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A new header on every tab: avatar for the You sheet, the title over the
day with yesterday peeking in, swipe to change day, and a strap chip that
opens the Strap page from anywhere. Four tabs in a tinted pill with a
detached circle for All metrics, or the live heart rate during a workout.
No card switches tab any more, tab taps scroll then pop, and back walks
the tabs you came from. The Strap page gathers alarms, alerts, off-body,
auto-detect workouts, firmware and the Zepp account in one list style.
Health alert notifications open their metric through open_metric.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Recovery and Sleep switch to their tab instead of pushing a second copy
of it onto the current tab. Charge switches to Recovery with its card in
view. Habit Age shows the value its page shows. The Workouts page gets
the round back button. Cards on screens still never switch tab.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
All metrics is reached from the circle, so the circle lights and the four
tabs go unlit until you open a detail or go back. The All metrics Charge
row now cuts to a whole number like the Charge card, so they agree.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pager wrote its settled page back into the tab state, so a tap whose
animation hadn't settled yet was undone and it took several taps to leave
All metrics. The tab state now owns the current tab and the pager only
follows it. A settled page moves the tab only after a real swipe. Tapping
the unlit tab under All metrics closes it at once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
All metrics stayed on the stack of every tab it was opened from, so
after going back and forth between the circle and the tabs, each tab
showed its own leftover All metrics and switching looked like it did
nothing. Leaving it for another tab now closes it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The circle opens All metrics as a modal sheet over the current tab, like
the You sheet. Rows close it, then open their detail on the tab showing;
Recovery, Sleep and Charge go to their tab. All metrics is no longer a
navigation page, so the special lighting, the stack clean-up and the
index reselect rule are gone. GlassSheet closes on a swipe down.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The tab bar is four tabs in a centred pill and nothing else. All metrics
is a round grid button in the header, left of the strap chip, on every
tab, and opens the same sheet. Start workout belongs to Today's
workout-window hero, and live heart rate stays on the workout capsule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The moment and day sit in the middle of the screen, not of the room
between the avatar and the right side. They slide over only when the
right side would reach them, and the empty slot kept for tomorrow's peek
may tuck under it. All metrics uses the bar chart icon.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MomentHeader shows the button only when given a callback, and
MainActivity passes none. The sheet and its row handling stay built.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The avatar opens the You page, like the strap chip opens the Strap page:
the same header and back button, over the current tab. Profile and
Diagnostics stack on top of it, so Back returns to You before the tab.
youOpen is gone; closing pages covers it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MomentResolver picks the moment from what the app already has: a
recording, the last workout, the night's sleep, your usual bedtime and
your usual workout time (weekday median, then all days, 3 or more in 28
days). Today's header shows it, Evening and Night set the mood, and the
Today hero takes the moment's light angle. Debug builds can force a
moment with --es moment <Name>.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Usual workout time counts workouts started on the phone or the strap,
not ones the strap auto-detected or filed as generic Activity. Until
today's recovery (and so the usual bedtime) has loaded, Today shows its
plain title and the Day mood instead of the fallback bedtime's Evening.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PageRow takes an optional leading icon, white at 0.7 alpha and 20dp in a
fixed slot with a 14dp gap, centred on the row. The title and value stay in
one column after it, so they line up. Other callers are unchanged.

Adds Target, UploadSimple, ArrowCounterClockwise, Bug and Flask from
Phosphor 2.1.1 regular.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each row gets a quiet Phosphor icon like the You page's, and Sync now
gets one to match Find strap. A long value on the right now wraps
itself rather than pushing the title onto two lines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Today lays out its hero and cards for the moment (spec 4.2): Recovery
on waking, Charge at midday, Start run in the workout window, the heart
rate settling after one, the day's summary in the evening and at night.
Every moment ends with Your week, Habit Age and Edit Today, which hides
cards and pins up to two and replaces the What changed chooser. The
Today states from 4.3 that have signals today are in place. The mood
follows the clock while browsing past days, and chargeLeads is gone.
Hero sentences and card choice live in pure, tested TodayCopy and
TodayPlan.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every PhosphorIcons property keeps its name and now draws the closest icon
from Hugeicons' free stroke rounded set (@hugeicons/core-free-icons 4.3.5,
MIT). A new builder strokes the paths at 1.5 on a 24 grid. Selected tab
icons use the same outline at 2.25, and play, pause and stop are the
outlines filled in. Plant draws Wellness, and a new PlantFill is its
selected form for when Recovery's tab is wired to it. The Phosphor licence
goes with the last of its data. A test builds every icon.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The icons are Hugeicons now, so the object takes a neutral name. The
property names stay, so call sites only change the object name.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The strap's estimate already stands under the waking sentence with its
label, so the sentence stops at the learning state. The after-workout
chart picks a slot size for about 40 points over the time since the
run, since per-minute slots left gaps that drew as scattered dots, and
the end heart rate figure is left out when there's none.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A card's design is its tier and the side its light comes from. Colour
alone doesn't tell two cards apart. varyLooks runs after Edit Today's
pins and hides. It flips an edge first, then tries another tier or the
neutral light, and moves an open card only as a last resort. On two
columns, cards side by side count as neighbours too.

Your week gets a neutral light from the bottom. At workout time Charge
steps down from a glow to its edge card under the hero. The offer and
suggestion become heart strips on Today. Every hero is now only as high
as its content.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each tab follows spec 5. Every card's look is fixed in TabPlans, and a
test checks every optional card on phone and wide layouts so no two
neighbours share a design. The shared look check moves to CardLooks.

Recovery: the score's meaning, what drove it, Charge and where it went,
body signals, Habit Age. Sleep: the night with stages, night vitals,
regularity, breathing disturbances, naps. Activity: start strip, steps,
Load with the week's balance, this week's facts, one workouts list.

Method text, the strap's own score, How it works, the off-normal panel
and the Activity offer are off the screens. Copy lives in TabCopy, with
tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Charge edge card's light now fills from the left across to the
value, with no progress bar. It's a level, its own design under the
no-repeat rule, so it never matches a card lit from one side.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Small pairs and the Tall Charge battery are back in use where the
approved mock puts them, and count as their own designs under the
no-repeat rule. Cards get their chart kit charts: trend dots, contributor
bars, horizon arc, bed and wake bars, ghost lines (today's line for now),
zone bars and the age scale.

Heart rate gets a home on Activity and shows on Today in the evening,
with your resting range as a band. Habit Age is one edge card
everywhere. It shows on Today only while a new estimate is unseen, and
each week's estimate is kept to compare with the next (database 18).
Today counts a full-width card as touching both columns under it.
Workout rows show their sport's icon.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… Strap pages

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A strap workout's page gets the same Delete workout row and confirm as
a phone workout. Deleting removes its row, heart rate, recovery heart
rate and the sport effect that is its own, all in one transaction. A
tombstone (database 19) makes later syncs skip it, since the strap
re-sends its history, and its time is marked Not a workout so it isn't
suggested again. Load and Charge are worked out again after a delete.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each row's icon sits on a tile lit heart red by the workout's Load against
your usual workout. The line under the sport says one fact for that sport
(distance and pace, distance, sets, else heart rate) and the start time.
Dates move into day headers, and the strap's own finds get a quiet tag.
All workouts uses the same rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
sayed0am and others added 29 commits October 24, 2026 18:58
The waking hero and the This morning card open the Recovery detail, Last night
(card and strip) the Sleep score detail as the Sleep tab's hero does. The evening
hero still opens the Recovery screen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…own icons

Charge in the index and Recovery's related row is a dash "After your first
night" until anchored, as on the battery. Habit Age shows its rounded estimate,
not the range, and takes CalendarBlank on its row and page, apart from Time to
recover's hourglass. Workouts in the index are heart red with a runner, apart
from Load's barbell, and leave the strap's Activity records out of the count.
The spec says so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The dotted number is the sleep score, with the Sleep tab's score word and time
asleep in the line under it, in place of the narrative headline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The estimate and the score share the hero's one HeroFigure, so the card still
has a single dotted number (spec 2.3).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Your body this morning and Right now read each value against your 30 day normal
(History.status) and round it with Metric.format, as the Recovery tab's Body
signals do, in place of a 7 day mean with fixed tolerances.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Titled Steps as everywhere else (and in Edit Today), and the share of the goal
fills its progress bar, under the ghost line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Load Small after a workout fills its bar to Load over your usual day's, as
the Activity tab's Load fills its light. Whether Load is a whole day to compare
with your usual is now decided by the date, as on the Activity tab and in the
detail, not by the evening moment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The card's line is the day's gross drain (exercise, stress and living, via
TabCopy.drainedAmount) as the hero, Recovery's Drained Small and the Charge
detail show it, in place of the net drop since waking. Today and the strap
notification take Charge through chargeShown, as the detail does; the
notification rounded, so 70.6 read 71 there and 70 in the app.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
It takes TabCopy.vsYesterday in place of its own signed difference.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The Recovery page shows the strap's estimate in its arc while OpenStrap's
  score is withheld, as Today and the Recovery tab do.
- Charge's sentence says what the day drained, the same total as Drained on
  the card, not the drop since waking.
- The evening Charge card keeps the day's line.
- Today's Steps card drops its goal bar when the day's line shows: under the
  line, a short bar read as the start of it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…Today

- The live number is sized for three digits inside the zone arc, so 100 and up
  no longer spill past it, and it doesn't jump in size as it crosses 100.
- The During hero keeps the last workout while it fades out: it read the
  workout after it had ended and crashed the app.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Today's sat oldest first while every day before it was newest first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Walk was one sport type either way, so the Indoor side picked on Ready was lost
and the workout showed as Walk everywhere. It's now saved as the strap's own
Indoor walk (40), as a treadmill run is saved as Treadmill, so the name says
which it was in every list, card and detail.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
In the strap's notification "Charge 67" sat beside "Connected, 32%" and read as
the strap's battery. Energy says what it is, and isn't another app's name.
Calories takes the old Energy name for the kcal metric. The notification now
reads "Recovery 74, Energy 67" over "Strap connected, battery 32%". Code names
and saved keys stay Charge, so saved data and Edit Today choices still load.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Seven screens from a demo copy with sample data and three from a real walk,
a section on moments and the design, and a short feature list. The network,
permission and backup details move to docs/privacy.md. A -PdemoApp debug
build installs beside the real app for sample-data screenshots.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Today in the morning and the evening, the Recovery page, Sleep and a live
workout, each showing something the others don't. The rest are removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The morning Today in front, the evening behind it, both from the README.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A metal rim, side buttons, a punch-hole camera and a status bar, and the back
phone tilted a little behind the front one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
"Fewer numbers. Clearer answers." in the social preview and the README, in place
of "the open-source app": many apps open the strap's data, few say what it means.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The new headline and its three lines (wake up, train, wind down) in the social
preview and at the top of the README.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The strap sat on the left while the Strap page shows it on the right, and the
line stopped at the drawing's box, well short of the pod. The phone is on the
left now, and the line runs from its edge to the pod's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The strap drawing leaves room either side of the pod for the band, so the pod
sat further in than the phone. It shifts out by that room now.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ripples out of the phone while it searches, a pulse from the strap once it's in
reach, sparks running along the line while they connect, the line lighting up
to the strap with a flash at the pod when connected, and the line broken and
amber when it fails. The line stays a solid hairline throughout.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The strap keeps a reading every few minutes outside a workout, and one-minute
slots left most of them alone between empty ones, so the curve drew as lone
dots. The slots are now never narrower than the readings' usual gap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sayed0am
sayed0am merged commit d7d435d into main Oct 24, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant