UI — Lumina first
Standing law after init: .nuvyn/reference/constraints.md. Read it once. Do not paste it into the spec.
xmlns:nv="http://nuvyntralabs.com/uikit". One recipe per screen. Put bound primitives inside so they replace the demo seed. No raw Entry / Button / Label when an NV* exists. Recipes: .nuvyn/reference/screen-recipes.md.
<nv:NVSignInView>
<VerticalStackLayout Padding="20" Spacing="16">
<nv:NVInputField Label="Email" Text="{Binding Email}" />
<nv:NVPasswordField Label="Password" Text="{Binding Password}" />
<nv:NVButton Text="Sign in" Variant="Filled" Command="{Binding SignInCommand}" />
</VerticalStackLayout>
</nv:NVSignInView>Do not invent a new NV*View. Do not add Syncfusion, Telerik, or a second look. Control reference: UIKit(MAUI) docs.
Packages — catalog first
Prefer MauiEssentials (Plugin.Maui.*, NuvyntraLabs.*, Nuventra.*) before any other library. Map: .nuvyn/reference/stack-map.md and the package catalog.
| You asked for | Start with | Not a substitute |
|---|---|---|
| Typed REST | HttpForge | Refit (usual alternative if the team already uses it) |
| Persist on device | LocalStore (+ NuvexaDB if you want .nvx) | Opening NuvexaDB without LocalStore |
| Durable jobs | JobQueue | BackgroundTasks |
| Retry failed named ops | RetryQueue | JobQueue |
| OS schedule | BackgroundTasks | JobQueue |
| Auth tokens | SecureSession | AppLock, BiometricPlus |
| Lock UI after background | AppLock | BiometricPlus |
| GPS | GeoLocator | MAUI Geolocation alone when you need reverse geocoding / tracking |
| Circular geofence enter / exit / dwell | Geofence 1.1 (GeofencingClient + persist) | Raise() is samples only |
| Store review | AppReview 1.1 (Play Core ReviewManager) | AppUpdate (binary updates) |
| Camera / gallery video | VideoPipeline 1.1 (thumbnail + OS transcode) | FFmpeg; MediaPipeline (images) |
An outside library needs a Catalog gap row in plan.md. HttpForge API or in-memory seed until you ask to persist. Then LocalStore — not a silent SQLite add.
Hardened plugins
If you later add DeepLinks, PushRouter, SmartUpload, or FeatureFlags, keep fail-closed defaults. Do not restore PermissiveMode, AllowUnmappedPayloadRoutes, or RequireHttps = false unless spec and plan require it. See hardened releases.
AppReview 1.1 is Play Core ReviewManager (GetEligibilityAsync / RequestAsync; Unavailable → OpenStoreListingAsync). Geofence 1.1 is GeofencingClient + persist (Raise() is samples only). VideoPipeline 1.1 is FromCamera() / FromGallery() with thumbnail + OS transcode — not FromCameraAsync, not FFmpeg (CannotTranscode if the device cannot encode).
Never dotnet nuget push from a local clone. Publishing this CLI is pipeline-only (NUGET_KEY_NUVYN).