Operations manifest
01 — Brutalist-minimalist axiom
The interface behaves as an explicit, high-contrast, zero-overhead instrument terminal. Every container is bounded by sharp geometric limits with a 0.0 corner radius. Removing anti-aliased corners and composited shadow matrices lets container shapes map cleanly onto immediate clip-rect primitives, so the rendering engine spends its cycles on data instead of presentation.
Gradient interpolation fields, blur filtering and heavy motion libraries are rejected outright. They inflate the render tree, add non-deterministic layout latency and accelerate mobile thermal degradation.
02 — Binary contrast space
Two absolute themes exist. Absolute dark pins the canvas to #000000 with structure drawn in #FFFFFF; absolute light flips the relationship exactly. No mid-tone grey, no pastel hue enters the core interface.
| Pixel pipeline | True black drops OLED sub-pixel voltage to zero, unlike #121212-style dark greys that keep the matrix illuminated. |
| Optical clarity | A 21:1 structural contrast ratio keeps text readable in direct sunlight and high-glare field conditions. |
| State consolidation | Theme is a single boolean. Switching redraws in one frame tick with no interpolation. |
03 — Identity symbology
The logo is the raw text token LUVIASUN at weight 900 with explicit letter spacing. Because branding is a compile-time string rather than an image asset, it needs no disk read, no decode loop and no canvas scaling, and it cannot throw an asset exception at boot.
04 — Boot pipeline
Four coordinated phases guarantee no layout pop, no white flash and immediate data availability at workspace access.
[OPERATING SYSTEM HOME SCREEN]
| (user taps launcher icon)
v
+--------------------------------------------------------+
| PHASE 1: NATIVE SPLASH LOCK |
| - screen held at absolute black (#000000) |
| - engine boot begins execution |
+--------------------------------------------------------+
v
+--------------------------------------------------------+
| PHASE 2: GLOBAL INITIALISATION (main.dart) |
| - native splash preserved manually |
| - Hive local storage opened and mounted |
| - prefetch of weather telemetry dispatched |
+--------------------------------------------------------+
v
+--------------------------------------------------------+
| PHASE 3: ANIMATED SPLASH ROUTINE |
| - native lock released |
| - 'LUVIASUN' wordmark opacity loop, 2000 ms |
| - local / network cache verification runs in parallel |
+--------------------------------------------------------+
v
+--------------------------------------------------------+
| PHASE 4: MAIN INTERFACE RE-RENDER |
| - navigation shell mounts with data already loaded |
| - zero layout shift, no white flash |
+--------------------------------------------------------+05 — Navigation shell
A five-slot bottom matrix — weather, compass, calendar, arcade, setting — sits behind a single hairline rule. The active slot is drawn as an inverted block rather than a coloured pill; there is no ripple, no elevation and no icon set.
06 — Tab logic
| Weather | Custom painter glyphs, a hand-drawn six-day bar chart and a bordered telemetry matrix covering humidity, precipitation, wind, visibility, sunshine and cloud layers. |
| Map | Position tiles rendered in matching light or dark treatment, without markers or overlays. |
| Calendar | The full year as one grid: elapsed days filled, remaining days hollow, current day in dark red, with a day-of-year progress readout. |
| Arcade | A rectangle-only snake engine with local score and persisted best score. |
| Setting | Theme switch, unit selection and cache controls. Nothing account-shaped. |
07 — Network pipeline
Forecast requests go directly from the device to the open weather endpoint and parse into flat typed structures. There is no Luviasun backend, no relay, no analytics beacon and no third-party SDK inserted into the request path.
08 — Cache rollover
A time-lock caching matrix keeps the last verified snapshot in local Hive storage. Cached payloads are matched against the current date; at the midnight rollover the stored day is invalidated and a fresh pull is scheduled. Offline launches render the last verified snapshot instead of an empty state.
09 — Install
| 01 | Clone the repository. |
| 02 | Run the Flutter dependency fetch. |
| 03 | Generate the native splash configuration. |
| 04 | Build the release artifact for your target platform. |