Mobile App Overview
xCRUD_Nova_Android_App is a Capacitor WebView shell around a static HTML/JS frontend that talks to any xCRUD Nova/Pro backend over plain HTTP.
What it is
xCRUD_Nova_Android_App/ is a Capacitor project - a thin native Android shell whose entire UI is a WebView. Its capacitor.config.json is deliberately small:
{
"appId": "net.xcrud.nova",
"appName": "xCRUD Nova",
"webDir": "www"
}
webDir: "www" points at www/ - a rebranded copy of the project's own remote_frontend_demo/ - a 100% static HTML/JS frontend with no native Android networking code at all. Every screen (login, then the live dashboard) is fetched from a backend purely over fetch() calls, routed through core/remote_shell_bridge.php on the backend side.
The key idea: one app, any backend
The same installed app works against ANY deployed xCRUD Nova/Pro backend - the buyer's own server, not a fixed one baked in at build time. Which backend it talks to is controlled entirely by one file, www/settings.ini, edited after the fact:
- Point it at a different backend by changing one URL.
- Reload the WebView (or re-sync the app) to see the change - no rebuild, no code change to the app itself.
- The static frontend it loads is the same code as the desktop
remote_frontend_demo/- just rebranded for the app shell.
This makes a quick test trivial: edit settings.ini, reload, done. See Configuring & Rebuilding the Android App for the full walkthrough, including when a real APK rebuild is actually needed.
How it fits together
| Piece | Role |
|---|---|
capacitor.config.json | Capacitor project metadata - app ID, app name, and which folder (www/) is the WebView's content root. |
www/ | The static HTML/JS frontend loaded into the WebView - a rebranded copy of remote_frontend_demo/. |
www/settings.ini | The buyer-editable config - which backend URL to call, branding text, and optional CTA links. No rebuild needed to change it. |
core/remote_shell_bridge.php (backend) | The server-side endpoint the frontend's fetch() calls talk to - part of the xCRUD Nova/Pro backend, not the app itself. |