Skip to content
Cnone-Tech Documentation

Branding

Cnone-Tech DocsVeldriq Field

Veldriq Field

Veldriq Field always has a visual identity. That identity is not one logo file. Three layers apply at different times. Changing Settings → Branding in Veldriq Web does not change the home-screen icon, the native splash, or the compiled fallback PNG.

This page assumes you already have PNG files. It does not describe how to design artwork. Paths are from the Flutter root mobile/ (ZIP: veldriq-field-1.0.0/mobile).

Layer What it is When you see it
Mobile package identity applicationId / bundle id, launcher label, store icons, native splash Home screen and OS splash — always this binary
Native fallback branding branding/fallback_logo.png, AppTheme.fallbackPrimary / fallbackAccent First launch, no workspace yet, missing or invalid remote logo, or empty branding fields
Backend / workspace branding Veldriq Settings → Branding → logo URL + primary + accent After a Field session for that workspace. Cached offline until the next successful refresh

Precedence for dynamic in-app elements: workspace value → last cached workspace value (SharedPreferences shell) → native fallback.

A remote logo must be an http:// or https:// URL. If the image 404s, the network is down, or the file is invalid, the in-app widget shows the fallback PNG. Native Field does not fall back to the Veldriq platform logo used by the CMS, portal, mail, and Field PWA. Workspace A branding does not stay on screen after you Switch workspace to B.

The API may send logo_icon_url. Native Field does not paint it. Only logo_url is shown.

APP_DISPLAY_NAME is the in-app title (MaterialApp, Welcome back, Flutter boot). It is not the home-screen label.

Place File / flag Default
Dart --dart-define=APP_DISPLAY_NAME Veldriq Field
Android launcher android/buyer.properties → app_name Veldriq Field
iOS launcher ios/Runner/Info.plist → CFBundleDisplayName Veldriq Field

Set all three to the same customer-facing name, then rebuild. See Android and iOS.

Have a PNG ready (RGBA, transparent background recommended, at least 512×512). This PNG is the in-app mark on login, two-factor, workspace picker, password reset, and the Flutter boot screen when no workspace logo URL is usable. It is declared in pubspec.yaml as branding/fallback_logo.png.

  1. Replace mobile/branding/fallback_logo.png with your PNG. Keep that exact path and filename unless you also change the assets: list in pubspec.yaml and BrandLogo.assetPath.
  2. From the Flutter root: flutter pub get, then rebuild the binary.
  3. Verify on a fresh install or after clearing the app: Welcome back shows your PNG before any workspace is selected.

If it fails: you changed only the launcher icon — that does not replace this file. After login, a workspace logo_url still wins when it loads.

Loopback URLs (localhost, 127.0.0.1) in a workspace logo are rewritten toward API_BASE_URL when possible. If rewrite cannot produce a reachable HTTPS origin, the widget falls back to the compiled PNG.

There is no flutter_launcher_icons package. Overwrite the files already in the tree. Manifest: android:icon="@mipmap/ic_launcher".

Paths under android/app/src/main/res/:

Put your PNG here Pixels
mipmap-mdpi/ic_launcher.png 48×48
mipmap-hdpi/ic_launcher.png 72×72
mipmap-xhdpi/ic_launcher.png 96×96
mipmap-xxhdpi/ic_launcher.png 144×144
mipmap-xxxhdpi/ic_launcher.png 192×192
drawable-xxxhdpi/ic_launcher_foreground.png 432×432 (transparent; mark inside the inner ~66%)

Keep those filenames. Full-bleed launcher PNGs should be opaque (no pre-rounded iOS-style mask). Adaptive icon XML is already in place: mipmap-anydpi-v26/ic_launcher.xml and ic_launcher_round.xml use @color/ic_launcher_background (template #2563EB in res/values/colors.xml) plus the foreground PNG.

  1. Overwrite the PNGs. Do not rename them.
  2. Rebuild the APK/AAB. Uninstall the previous build so the launcher cache drops.
  3. Verify the home-screen icon. It will not change when the office uploads a workspace logo.

Authority: ios/Runner/Assets.xcassets/AppIcon.appiconset/ + Contents.json. Replacing Android mipmaps does not update iOS. Keep the filenames in Contents.json.

The App Store 1024 file must be opaque (no alpha). Apple applies the rounded mask. Do not pre-round the corners.

Put your PNG here Pixels
Icon-App-20x20@1x.png 20×20
Icon-App-20x20@2x.png 40×40
Icon-App-20x20@3x.png 60×60
Icon-App-29x29@1x.png 29×29
Icon-App-29x29@2x.png 58×58
Icon-App-29x29@3x.png 87×87
Icon-App-40x40@1x.png 40×40
Icon-App-40x40@2x.png 80×80
Icon-App-40x40@3x.png 120×120
Icon-App-60x60@2x.png 120×120
Icon-App-60x60@3x.png 180×180
Icon-App-76x76@1x.png 76×76
Icon-App-76x76@2x.png 152×152
Icon-App-83.5x83.5@2x.png 167×167
Icon-App-1024x1024@1x.png 1024×1024 (opaque)
  1. Overwrite every PNG named in Contents.json.
  2. Rebuild / archive on macOS + Xcode. See iOS.
  3. Verify Springboard and the App Store Connect 1024 asset.

Native splash is build-time only. Flutter’s later boot screen uses BrandLogo (fallback or workspace URL) and is not this native layer.

Platform Put your PNG here This template
Android android/app/src/main/res/drawable/launch_logo.png 512×512 recommended; transparent mark. Background @color/launch_background in res/values/colors.xml (template #2563EB). Layout: res/drawable/launch_background.xml (and drawable-v21/)
iOS ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png, LaunchImage@2x.png, LaunchImage@3x.png 768×768, 1536×1536, 2304×2304. Keep those filenames.
  1. Overwrite the Android and/or iOS PNGs. Optionally change launch_background in colors.xml.
  2. Rebuild.
  3. Verify: cold start shows your native splash, then Flutter Checking server… / Welcome back.

In-app Material theme when workspace primary/accent are absent or malformed:

Value
File mobile/lib/app/theme/app_theme.dart
Primary AppTheme.fallbackPrimary → const Color(0xFF0F172A)
Accent AppTheme.fallbackAccent → const Color(0xFF334155)

Replace with 8-digit ARGB. Native splash #2563EB comes from the product mark fill, not from AppTheme. Changing Dart fallback colors does not change the launcher icon. Rebuild after editing this file.

Veldriq → Settings → Branding (/app/w/{workspace}/settings/branding). Permission workspace.update. Full field list: Web branding.

Native Field consumes only:

  • Logo → logo_url on the mobile session (BrandLogo)
  • Primary → theme primary
  • Accent → theme secondary

Not consumed by native Field: collapsed icon, sidebar, top bar, canvas, fonts, corner radius, density. Those stay CMS / portal / PWA.

No mobile rebuild is required for those three workspace fields. Field picks them up on login, workspace selection, or the next successful session fetch. Push does not deliver a new logo.

Offline: last cached logo URL and colors remain until a successful refresh. If nothing was ever cached, fallback PNG and slate colors apply.

Verify: upload a workspace logo, sign in on Field (or switch workspace), confirm login header and boot plate. Kill the app: cached branding should still show. Switch workspace: that workspace’s branding, not the previous one.

Change Where Rebuild Field?
Workspace logo Web Branding No
Workspace primary / accent Web Branding No
Fallback logo PNG mobile/branding/fallback_logo.png Yes
Launcher / adaptive / AppIcon native resources Yes
Native splash launch XML / LaunchImage Yes
In-app fallback colors app_theme.dart Yes
In-app title APP_DISPLAY_NAME dart-define Yes
Home-screen label app_name / CFBundleDisplayName Yes
applicationId / bundle id buyer.properties / Xcode Yes

Related: Android, iOS, API Base URL, Profile.