Miler rider app: surface system, visible design language, backend lifecycle

Design system
- MilerSurface ladder (canvas → working → raised → floating) with MilerPanel
  as layer 1; canvas moved to #DEE3EA so white separates at 1.290:1.
- Visible vocabulary applied across Home, Deliveries, Activity, Account and
  the sheets: hero heads (tabular numeral + small caption, clamped at 1.3x),
  canvas wells for anything that opens, small filled tags for shelf labels,
  demoted placeholders. Recorded in DESIGN_SYSTEM.md §6.
- One icon family: 222 Material glyphs migrated to Lucide; none left outside
  lib/xpress.
- Colour semantics corrected: amber only for what is genuinely owed, brand red
  reserved for the live stop, disabled primaries go neutral rather than pale.

Data and lifecycle
- lib/data/lifecycle.dart reads mutations for what they prove; route_order.dart
  makes admin sequence the single ordering authority; service_day.dart, and
  stop_area.dart rewritten against live Coimbatore addresses (digit-token
  stripping, city stoplist, street suffixes, stammer collapse).
- countLabel states the load once, in bags.

Testing
- 1440 tests passing; golden shot harnesses for Home, Deliveries, Activity,
  sheets and verify, with test/failures/ now gitignored (diff debris).
- New pins: home_gutter_test, stop_area_test, plus updated structural bounds.

Note: this commit also carries pre-existing working-tree deletions that were
present before this work (API_SPEC.md, README.md, demo test fixtures).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-22 05:40:35 +05:30
parent c8350563d9
commit d7348e253f
387 changed files with 80693 additions and 12272 deletions

View File

@@ -0,0 +1,129 @@
class User {
int? userid;
String? authname;
int? configid;
int? authmode;
int? roleid;
String? firstname;
String? lastname;
String? password;
String? email;
String? contactno;
String? address;
String? suburb;
String? city;
String? state;
String? postcode;
String? userfcmtoken;
int? pin;
int? partnerid;
int? tenantid;
String? fullname;
String? tenantname;
String? tenantaddress;
String? tenantcity;
String? tenantpostcode;
String? tenantlat;
String? tenantlong;
int? locationid;
String? locationname;
int? applocationid;
User({
this.userid,
this.authname,
this.configid,
this.authmode,
this.roleid,
this.firstname,
this.lastname,
this.password,
this.email,
this.contactno,
this.address,
this.suburb,
this.city,
this.state,
this.postcode,
this.userfcmtoken,
this.pin,
this.partnerid,
this.tenantid,
this.fullname,
this.tenantname,
this.tenantaddress,
this.tenantcity,
this.tenantpostcode,
this.tenantlat,
this.tenantlong,
this.locationid,
this.locationname,
this.applocationid,
});
factory User.fromJson(Map<String, dynamic> json) {
return User(
userid: json['userid'] as int?,
authname: json['authname'] as String?,
configid: json['configid'] as int?,
authmode: json['authmode'] as int?,
roleid: json['roleid'] as int?,
firstname: json['firstname'] as String?,
lastname: json['lastname'] as String?,
password: json['password'] as String?,
email: json['email'] as String?,
contactno: json['contactno'] as String?,
address: json['address'] as String?,
suburb: json['suburb'] as String?,
city: json['city'] as String?,
state: json['state'] as String?,
postcode: json['postcode'] as String?,
userfcmtoken: json['userfcmtoken'] as String?,
pin: json['pin'] as int?,
partnerid: json['partnerid'] as int?,
tenantid: json['tenantid'] as int?,
fullname: json['fullname'] as String?,
tenantname: json['tenantname'] as String?,
tenantaddress: json['tenantaddress'] as String?,
tenantcity: json['tenantcity'] as String?,
tenantpostcode: json['tenantpostcode'] as String?,
tenantlat: json['tenantlat'] as String?,
tenantlong: json['tenantlong'] as String?,
locationid: json['locationid'] as int?,
locationname: json['locationname'] as String?,
applocationid: json['applocationid'] as int?,
);
}
Map<String, dynamic> toJson() => {
'userid': userid,
'authname': authname,
'configid': configid,
'authmode': authmode,
'roleid': roleid,
'firstname': firstname,
'lastname': lastname,
'password': password,
'email': email,
'contactno': contactno,
'address': address,
'suburb': suburb,
'city': city,
'state': state,
'postcode': postcode,
'userfcmtoken': userfcmtoken,
'pin': pin,
'partnerid': partnerid,
'tenantid': tenantid,
'fullname': fullname,
'tenantname': tenantname,
'tenantaddress': tenantaddress,
'tenantcity': tenantcity,
'tenantpostcode': tenantpostcode,
'tenantlat': tenantlat,
'tenantlong': tenantlong,
'locationid': locationid,
'locationname': locationname,
'applocationid': applocationid,
};
}