Pages fall away downward, the pickup comes back, and a real icon set

── Navigation ──

Pages arrived from the right and left to the right. Right is the direction
the system back gesture drags, so a page leaving under a button press read as
a swipe nobody made — and every push in this app is a layer over the one
before it, which arrives from below. The axis is vertical now: the incoming
page rises and covers, the page underneath stays put and dims, and back drops
the top page off the bottom. Full travel rather than the old 14% nudge, which
is what makes the direction nameable. test/page_transition_test.dart holds it.

── Home ──

The pickup pill is back under the greeting. It was cut on the argument that
the form below already carried the pickup; the form is four hundred points
down the screen, and a location you can only see by scrolling to a form is a
location you do not trust. It shows the locality while the form keeps the
door, so the screen answers one question once, and it now has a resolving
state — it used to print the last place you were, confidently, while the fix
was still in flight.

The sphere's caption was falling off the screen. Adding the pill pushed it out
of the scroll viewport, silently, with no overflow warning — the fourth time
Home growing has clipped something under the sphere. DmBookOrb.field is no
longer a constant: the glow gives way to whatever is left, the sphere never
does.

── 74 points of dead canvas, on every root ──

Home, Orders and Account each cleared the floating tab bar by
`MediaQuery.paddingOf(context).bottom + 74`, on the reasoning that the inset is
the home indicator and 74 is the bar above it. Scaffold with extendBody
replaces the body's bottom padding with the bar's whole laid-out height —
measured, a 34pt inset and this bar hand the body 106. They were clearing the
bar, then clearing it again. One helper now, dmTabBarClear().

── One journey, one vocabulary ──

Review said ORIGIN/DESTINATION; Home's form and tracking say PICKUP/DROP.
Three screens a customer walks in order. The tracking card had already written
down the argument; the booking screen hadn't followed.

The rail's first milestone read "Booking created" directly above "Order
created" — down the rail: created, created, in transit. It is "Pickup booked",
which is what JourneyStage.milestoneLabel has called that stage all along on
Orders and on Home's live row.

── The launcher icon ──

tool/icons.py renders all twenty-eight files from one master, because the
failure mode of exporting by hand is nineteen replaced and nine left on the
old mark, at the density nobody checks.

The master is a bare mark on a field, so it cannot be dropped into Android's
adaptive canvas whole: crimson is the background, the white mark is the
foreground, and it is sized by its reach from the canvas centre so a round
mask cannot take the arrow tip. Measured on the built file: 63.7dp against a
66dp safe zone. A real monochrome layer replaces the colour foreground that
was standing in for one — the system tints by alpha, so that themed as a blob.
ic_launcher_round.png exists at last; minSdk is 24 and android:roundIcon had
nothing to resolve to below API 26.

The artwork is flattened (the source vignettes over ten values of red) and its
horizontal offset is placed deliberately rather than inherited — geometric
centring made the mark lean, because the arrow carries the bounding box right
while contributing almost none of the ink.

── Bundle ──

pubspec declared assets/images/ as a folder, which shipped the 974 KB icon
master to every customer for a file no code opens. Named explicitly now.
This commit is contained in:
2026-09-25 13:34:52 +05:30
parent 8956e818a4
commit 49b0de0d8f
72 changed files with 897 additions and 92 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

View File

@@ -1,15 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- The Doormile mark on white.
<!-- The Doormile mark, as three layers. Generated by tool/icons.py.
The foreground was a house drawn as two vector paths — a placeholder that
shipped, and the reason the launcher showed a generic home icon next to
the name Doormile. It is the real mark now, rendered from
`assets/images/doormile-icon.png` into the 66dp safe zone.
background The crimson field, as a colour rather than a bitmap — it is
flat, and a launcher that parallaxes the layers should slide a
colour rather than resample an image.
White background rather than brand: the mark carries its own crimson ring,
and on a maroon field that ring disappears into it. -->
foreground The white mark, with no disc behind it, sized so its furthest
corner — the arrow tip — lands inside the 66dp circle Android
guarantees. Bigger looks better on a square mask and loses the
arrow on a round one.
monochrome The same silhouette with the colour discarded. The system
tints by alpha, so handing it the colour foreground themes as
a solid blob. -->
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/dm_surface" />
<background android:drawable="@color/dm_icon_bg" />
<foreground android:drawable="@drawable/dm_mark_fg" />
<monochrome android:drawable="@drawable/dm_mark_fg" />
<monochrome android:drawable="@drawable/dm_mark_mono" />
</adaptive-icon>

View File

@@ -1,15 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- The Doormile mark on white.
<!-- The Doormile mark, as three layers. Generated by tool/icons.py.
The foreground was a house drawn as two vector paths — a placeholder that
shipped, and the reason the launcher showed a generic home icon next to
the name Doormile. It is the real mark now, rendered from
`assets/images/doormile-icon.png` into the 66dp safe zone.
background The crimson field, as a colour rather than a bitmap — it is
flat, and a launcher that parallaxes the layers should slide a
colour rather than resample an image.
White background rather than brand: the mark carries its own crimson ring,
and on a maroon field that ring disappears into it. -->
foreground The white mark, with no disc behind it, sized so its furthest
corner — the arrow tip — lands inside the 66dp circle Android
guarantees. Bigger looks better on a square mask and loses the
arrow on a round one.
monochrome The same silhouette with the colour discarded. The system
tints by alpha, so handing it the colour foreground themes as
a solid blob. -->
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/dm_surface" />
<background android:drawable="@color/dm_icon_bg" />
<foreground android:drawable="@drawable/dm_mark_fg" />
<monochrome android:drawable="@drawable/dm_mark_fg" />
<monochrome android:drawable="@drawable/dm_mark_mono" />
</adaptive-icon>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -3,4 +3,8 @@
<!-- Doormile brand tokens, mirrored from lib/ui/tokens.dart -->
<color name="dm_brand">#8F0F06</color>
<color name="dm_surface">#FFFFFF</color>
<!-- The launcher icon's field. Read off the master artwork by
tool/icons.py, not typed here: if the logo is redrawn in a
different crimson, the adaptive background follows it. -->
<color name="dm_icon_bg">#BD0921</color>
</resources>