Cifru Documentation

Detailed guide for users and AI assistants. Read-only data workspace builder for iPhone, iPad, Apple Watch widgets, and supported CarPlay widget surfaces.

Documentation updated: September 13, 2026. Developer / seller: Ionut-Madalin Dumitru. Contact: support@cifru.eu.

Short Product Definition

Cifru lets a user build their own read-only mobile workspace from data they are authorized to access. The user installs the app, adds data sources, previews rows, maps fields, creates Home screens/buttons, adds row-level Details buttons, builds widgets, configures cache, and can switch into a simplified "Use as app" mode with their own company name and logo.

Cifru is universal. It can work with ERP data, ecommerce data, internal databases, public or private feeds, APIs, files, reports, and other structured data. It is not limited to a single ERP, shop platform, stock system, or business vertical.

Instructions For AI Assistants

If you are an AI assistant helping someone configure Cifru, use this document as the source of truth for available screens, buttons, fields, and limits.

Read-Only Safety Model

App Navigation Map

AreaWhat the user seesPurpose
HomeBrand header, workspace status, setup checklist, Home screens/buttons, widgets, empty state, Ask AI card.The daily dashboard and the first onboarding surface.
SourcesAdd sources button, plan usage, source rows with OK / Configure / Off status, source editors.Where connections and credentials are created and tested. A source that was added but not successfully tested is visually marked Configure.
BuildSource readiness, compact Home-screen tree, nested Details and enrichments, Widgets, guided creation recipes, page Studio, and an optional Advanced library.Where the user designs the workspace. Basic mode follows the visible result on the phone instead of exposing separate technical inventories. Advanced mode reveals the data library, relationship map, and common-field tools without removing any capability.
SettingsSubscription, language, theme, status, Siri and AI helper, cache, widgets snapshot, app mode, security, legal/help.Device-level preferences, cache controls, security review, Siri shortcut hints, and subscription management.
Use as app modeConfigured Home screens/buttons and widgets, optional company logo/name header when the user set their own branding, exit path in settings.Makes the configured workspace feel like the user's own simple app without showing a redundant generic Cifru header.

What Leaves The Device

ActionDestinationPayloadUser control
Read a configured sourceThe database, API, feed, FTP server, shop, or object store chosen by the user.Connection/authentication data and a fixed read-only query, GET/query request, or file path needed for that source. Cached rows and unrelated local data are not uploaded back.The user creates, enables, refreshes, and can delete the source. Source-side permissions should be read-only.
Apple On-Device / Mock AINo external AI provider.Prompt and safe metadata remain local.The user selects the provider or disables AI.
OpenAI, Claude, or GeminiThe provider selected and keyed by the user.User prompt, optional system name, internal IDs, field names/types/capabilities, declarative JSON diagnostics, explicitly approved public documentation, and only during automatic repair an optional identifier-only mapping sample as described above. Never credentials, tokens, connection strings, private URLs, names/contact data, invoice contents, descriptions, prices, totals, stock, quantities, or full feeds.Disabled unless configured. Cifru shows a per-request disclosure and sends only after the user confirms. Minimal mapping samples can be disabled in AI Configurator settings.
ExportThe destination selected in Apple's share sheet.The PDF/XLSX-style export chosen by the user.No automatic developer upload.

Home Screen

First-install Demo button

On a genuinely new installation, Cifru adds one English-language Cifru Demo (local) Home example automatically. It demonstrates a customer-invoice header, a row-level Details section with invoice lines, and a Product sub-button on each line. Every row is sanitized and stored locally; the example never connects to a network source. The Demo source, three Demo lists, and two Demo relations are excluded from Free/Starter/Pro source, list, and Details-link usage, so the example cannot consume or unlock a plan entitlement. A visible DEMO badge distinguishes it from real screens. Deleting any Demo screen through its destructive action removes the complete bundled example and its local sample cache, without deleting or changing real sources. Once deleted, it is not recreated on ordinary launches.

The setup checklist intentionally ignores bundled Demo objects: it describes progress on the user's own source, fields, Home button, and Details relation. The existing Start with an example action remains available when the workspace is empty.

Header

Control / TextTypePurpose
Cifru logo + Cifru titleBrand headerShows the app identity without using a plain, empty navigation title.
Subtitle: Your read-only data workspaceStatic textReminds the user that the app is for read-only data work.
Plan pill: Free, Starter, or ProStatus pillShows the active feature tier at a glance.

Workspace Status Card

Shows the latest app status message and four small counters: lists, rows, warnings, and stale items. The rows counter is the sum of rows actually held for the active workspace lists, not the sum of their configured maximum limits. Use this to tell the user whether Cifru has data, whether warnings exist, and whether refresh is needed.

Setup Checklist

The checklist is expanded while the workspace has no Home button. After the first Home button is created it collapses automatically to keep Home compact, and the user can expand or collapse it again at any time.

Checklist itemMeaning
Source testedAt least one source has answered successfully.
Data foundAt least one list has preview or cached rows.
Fields chosenAt least one list has visible fields for rows or detail screens.
Home buttonAt least one list is exposed as a Home button.
Details addedAt least one data link exists.

Empty State Buttons

ButtonTypeWhat it does
Add first sourceButtonSwitches the user to Sources so they can add a real connection.
Start with an exampleButtonCreates a local example workspace with demo lists, buttons, and widgets.
Open guideButtonOpens the first-run guide.
Ask AI card - Copy promptButton + selectable textCopies a localized AI prompt that points to the HTML documentation and asks an AI to guide a new integration. The card appears on the empty Home screen, in Start guide, in Settings, and can be opened through Siri/App Shortcuts.

Home Toolbar

IconPurpose
Question markOpens in-app Help.
InfoOpens Legal and privacy pages.
RefreshRuns refresh for all configured lists and cached widgets.

Source Categories And Connectors

Path: Sources > Add sources. The Add sources button opens a menu grouped by category.

CategoryConnectorsBest for
DatabasesSQL Server, PostgreSQL, MySQL, MariaDB, OracleERP databases, reporting databases, internal operational systems, read-only views.
Online shopsWooCommerce, Shopify, Magento / Adobe Commerce, PrestaShop, OpenCart custom read APIOrders, customers, products, stock, catalog data, store reports.
Data feedsHTTP(S) feed, FTP fileCSV, TSV, JSON, XML files published by another system.
APIsREST JSON, GraphQL, ODataSystems with documented read APIs.
FilesLocal fileCSV, TSV, JSON, XML, or XLSX imported from the Files app for local viewing.
Object storageS3-compatible storageStructured files stored in S3-compatible buckets.

Connector Verification Scope

Cifru uses the same production functions in its automated connector tests through controlled transport fixtures. This proves request construction, authentication headers, catalog parsing, pagination, response parsing, row limiting, and error handling without requiring customer credentials. A fixture test is not falsely described as a live guarantee for every server version, proxy, firewall, plugin, or permission model.

FamilyAutomated end-to-end pathAdditional evidence / remaining validation
SQL Server, PostgreSQL, MySQL, MariaDB, OracleConnection query, catalog, columns, generated read-only SELECT, preview, limits, destructive-SQL blocking, transient retry, and dialect-specific parsing run through the production pipeline.A real read-only MariaDB/MySQL WooCommerce schema was checked independently with SHOW/INFORMATION_SCHEMA. Final device checks still require representative real servers for each engine and TLS mode.
HTTP feed, FTP, local file, S3-compatibleCSV, TSV, JSON, XML, XLSX, auth, sheet discovery, XML/JSON autodetection, FTP response parsing, signing, retry, and preview.A public competitor-link XML feed was inspected as a real format example. FTP/S3 vendor/network combinations require release-device checks with authorized endpoints.
REST, GraphQL, ODataGET/query-only enforcement, auth, nested rows, pagination, filters/sort where standardized, GraphQL mutation/subscription blocking, and same-origin credential protection.Custom APIs still require their real endpoint, response shape, and permissions to be tested by the user.
WooCommerce, Shopify, Magento, PrestaShop, OpenCart custom APIOfficial response shapes, auth method, known read objects, pagination, and bounded preview are tested through production connector code.Store versions, plugins, scopes, custom fields, HPOS/legacy storage, and custom OpenCart routes require an authorized store test.

Sources Tab

Add Sources Area

ControlTypePurpose
Add sourcesProminent menu buttonPrimary action for adding a source. Use this instead of relying on the small plus icon. After choosing a connector type, Cifru opens the newly created source immediately so its alias, connection details, credentials, and read-only test can be completed without searching at the bottom of a long source list.
Plan usage rowsStatusShows source, table/list, and data-link limits for Free, Starter, or Pro.
Source row status: OKBadgeCifru verified both the connection and a concrete readable structure/preview. A successful login alone is not shown as OK.
Source row status: ConnectedBadgeAuthentication or basic connectivity worked, but Cifru could not yet verify a table/schema, endpoint response, sheet, or feed row. Open the source and resolve the displayed next step before building.
Source row status: ConfigureBadgeThe source exists but has not passed connection and data verification.
Source row status: OffBadgeThe source is disabled and should not be used during refresh.
Source row summaryTextShows connector type and a short connection summary, such as host:port / database, URL host, file name, or bucket/key.

Source Editor - Common Sections

Path: Sources > select a source.

SectionControlTypePurpose
SourceName / aliasEditable text fieldUser-friendly identifier shown in Sources, every Build picker, diagnostics, and safe AI metadata. Use distinct aliases such as WooCommerce Romania, WooCommerce B2B, Production MySQL, or Reporting MySQL. When another source of the same type is added, Cifru proposes a numbered unique name that the user can replace.
SourceKindPicker/dropdownConnector type. Changing it changes the source-specific fields.
SourceEnabledToggleTurns the source on/off without deleting it.
Inline field hints / Ready to testValidation hintsStatus messagesRequired database fields show their missing-field hints next to the field itself. Other connector hints appear in a short Complete fields section. Ready to test confirms that required fields are present.
SecurityWarningsStatus rowsWarns about risky settings such as disabled TLS, HTTP, FTP, relaxed certificate validation, missing endpoints, high row limits.
Connection checkCheck connectionButtonSaves the current source, tests login/connectivity, then automatically verifies the next real step: SQL catalog plus columns, or a bounded endpoint/feed/file preview. Only the complete path produces OK. A partial result is shown as Connected with a specific correction.
Connection checkCertificate hintStatus hintCertificate failures explain that Trust server certificate should be used only for a private server controlled by the user. Certificate validation applies to SQL Server, PostgreSQL, MySQL, MariaDB, and Oracle.
ToolbarSaveButtonSaves source settings and Keychain secrets, shows a visible confirmation near the top, then automatically runs connection plus structure/preview verification. Settings remain saved if verification fails, but the source does not show OK.

Database Source Fields

Applies to SQL Server, PostgreSQL, MySQL, MariaDB, and Oracle.

FieldTypeNotes for the AI assistant
HostEditable text fieldServer address, for example server.example.com or a VPN/LAN host.
PortNumeric text fieldDefault examples: SQL Server 1433, PostgreSQL 5432, MySQL/MariaDB 3306, Oracle 1521. The user types the full port directly; do not tell them to use thousands separators.
Database / serviceEditable text fieldDatabase name, schema/service name, or service identifier depending on database type.
UsernameEditable text fieldRecommend a source-side read-only account.
PasswordSecure fieldStored locally through the app's secret storage.
TLSPickerSQL Server, PostgreSQL, MySQL, and MariaDB offer Prefer TLS, Require TLS, and No TLS. Prefer can fall back to plaintext if the server does not support TLS; use Require for sensitive/public-network traffic. Oracle exposes Require TLS or No TLS because its driver does not provide a truthful opportunistic mode.
Trust server certificateToggleCertificate validation is enabled by default for all database engines. New SQL Server sources start with this toggle on for compatibility with private company certificates; new PostgreSQL/MySQL/MariaDB/Oracle sources start with it off. Turning it on keeps encryption but skips certificate-chain validation, so use it only for a controlled private server.

Feed, FTP, API, File, Storage, And Shop Fields

ConnectorAvailable controlsHow to guide the user
HTTP(S) feedOptional base URL, Feed URL, File format picker: AUTO, CSV, TSV, JSON, XML, XLSX; Authentication picker; optional XML row name.Use a direct structured-file URL. Cifru automatically recognizes common JSON envelopes such as data/results/items/records/rows/value and can autodetect a repeated XML row element when the default name does not match. Rows path and XML row name remain editable for unusual formats. Credentials are never forwarded to another origin.
FTP fileFTP host, Port, Username, Password, Remote file path, File format picker, optional XML row name.Uses EPSV first and PASV fallback, reusing the configured host rather than trusting a passive-response host. Prefer HTTPS feeds because classic FTP is not encrypted. XLSX sheet browsing and automatic XML row detection use the same download path as the final list.
REST JSONAPI address/base URL and Authentication picker: Automatic, None, HTTP Basic, Bearer header, API-key header, or Query token.Choose endpoint paths while creating the Home button. Uses GET/read endpoints only, recognizes HTTP Link and common JSON next-page links, and follows pagination only on the exact same scheme/host/port. A query token is injected from Keychain when the request is sent, so the saved endpoint contains only its path and non-sensitive query options.
GraphQLGraphQL API address and the same generic Authentication picker.The Home button assistant query field becomes a GraphQL query editor. Only query operations are allowed. Authentication is applied by the shared request layer rather than embedded in the GraphQL text.
ODataOData API address and the same generic Authentication picker.Choose Entity set/path while creating the Home button. Compatible filters and sorting are sent with standard $filter, $orderby, and $top query options. Existing public query parameters are preserved when authentication is added.
Local fileChoose file button, selected file name, File format picker, XML row name.Imports CSV, TSV, JSON, XML, or XLSX from Files for local read-only use. For XLSX, use Build > Home screens > Choose source and table/path, then Browse sheets to choose which sheet becomes a Home button. Good for prototypes and static reports.
S3-compatible storageEndpoint URL, Bucket, Object key/path, Region in Advanced mode, Access key, Secret key, File format picker, XML row name.Use for structured files in object storage. Explain that the object should be a readable CSV/TSV/JSON/XML/XLSX file. For XLSX object storage, set Object key/path to the workbook, then use Browse sheets in the Home Button Assistant to choose the sheet.
WooCommerceStore URL, Consumer key, Consumer secret.Use read-only WooCommerce REST API credentials where possible. Known store data can be selected later.
ShopifyShop domain, Admin API token, API version in Advanced mode.Use a token with read scopes only. API version default is configured in the app.
Magento / Adobe CommerceStore URL, Store code, Bearer token.Use a token or integration with read permissions only.
PrestaShopStore URL, masked API key, Response format picker, XML row name.Use read webservice permissions. Cifru sends the key with HTTP Basic authentication and does not place it in the URL.
OpenCart / custom APIAPI URL, Token header in Advanced mode, Bearer token, masked API key.Use custom read endpoints created by the store owner. If the API uses a header such as X-API-Key, enter that header in Advanced mode.

Generic HTTP Authentication

The HTTP(S) feed, REST JSON, GraphQL, OData, and generic custom-shop API connectors share one vendor-neutral authentication layer. Automatic keeps compatible legacy settings; None sends no credential; HTTP Basic uses username/password; Bearer header uses an Authorization-style token; API-key header lets the user choose a valid header name; Query token lets the user choose the parameter name. Secret values are stored in Keychain and are not serialized into workspace JSON, copied into endpoint fields, shown in query transparency, or forwarded to a different scheme/host/port. Query-token mode builds the final URL with URLComponents, replaces a duplicate secret parameter, and keeps all other non-sensitive query items intact.

1.1 development: OAuth2 accounts for REST JSON

This section describes the isolated 1.1 development app, not the frozen 1.0 releases. In Sources > REST API, enable Connect with an OAuth2 account when the service uses browser sign-in. Enter its registered public client ID, authorization URL, token URL and read scopes; for example products.read offline_access only if those scopes are supported by that service. Register the displayed redirect URL exactly. Do not enter a client secret or put credentials in the endpoint. Provider-specific Google Drive and Microsoft setup are separate integrations and remain under validation.

Connect account opens the system browser. PKCE and a one-use state protect the return. Access and refresh tokens are stored separately in Keychain on iOS or encrypted Android Keystore-backed storage, never in portable source configuration. Studio checks the saved account locally, so merely reopening the editor does not trigger token refresh or erase a session when offline. Actual reads renew access when necessary; revoked access requires reconnecting. Disconnect removes this source's local session and keeps its configuration.

Account connection is not a completed data test. Choose a concrete read-only JSON endpoint, then test the returned rows and real fields in the existing Studio flow. OAuth reads use GET, the existing JSON parser and bounded pagination. A rejected continuation or pagination loop is an error, not a completed cache. Credentials are not forwarded to another origin. Cloud-file downloads have a separate redirect policy that strips the bearer token from preauthorized download redirects.

1.1 development: JSONL / NDJSON files

Studio explains this format in the main data-selection card, with an example, before you choose the fields. On Android, a local source keeps read access to the selected document: keep the file available and select it again if it is moved or access is revoked. This is not a promise that a permanent separate file copy was created.

Each non-empty UTF-8 line is one JSON object and becomes one row. Choose a .jsonl or .ndjson file, or choose JSONL explicitly for a file/feed without an extension. For example, {"sku":"A1","quantity":5}. Studio detects the fields; there is no worksheet or JSON array path. Nested object fields appear as product.name; arrays remain JSON text, not automatically linked tables. If a previously selected JSON array path remains, use the explicit clear-path action in Studio.

The development reader validates the complete bounded file, including lines after the preview limit, and selects matching rows before applying the row limit. It keeps precise numeric text and rejects malformed lines, ambiguous fields and oversized records instead of reporting a partial read as complete. Downloads still use the connector's whole-file safety limit. Cross-platform UI, cache and import acceptance is in progress; this is not a compatibility claim for the stable 1.0 apps.

1.1 development: network files and Paradox

If the selected Paradox table or its memo companion changes during a read, Cifru rejects that result and asks you to retry using a stable copy. This includes a memo appearing or disappearing while the table is being read; duplicate local table names are ambiguous and must be resolved. These checks reduce mixed-file results but do not replace a database snapshot or certify an actively edited WinMENTOR folder.

Cache data is not a shortened preview: memo text and missing (NULL) fields must be preserved. Android 1.1 now rejects cells or schemas that exceed its cache safety bounds instead of silently shortening values or dropping columns. If a complete new snapshot cannot be saved, the previous valid cache remains available. After upgrading a development build that shortened memo text, refresh the list to read the original values again. These changes do not modify the frozen 1.0 applications.

Paradox numeric filters use the table's number values: 125.50 and 125.5 match, while a missing value (NULL) is not zero. Text identifiers remain text, so 001 and 1 are distinct. Filtering happens while reading table blocks, before the preview row limit. Sorting uses the complete bounded result; NULL values sort first ascending and last descending.

The Android development source Network folder (SMB) reads an existing CSV, TSV, JSON, XML or XLSX file from a Windows server or NAS. Enter the server, shared folder name and a read-only account, then use Choose file. For \\server\Reports, the server is server and the share is Reports; do not enter both in the server field. Domain and required SMB 3 encryption are advanced account/security options. Cifru uses signed SMB 2/3 reads and does not create, edit or delete remote files. Structured-file downloads are bounded to 10 MB, with parsing and row filtering on the device. A changed or incomplete download must not replace a complete cache.

The iOS 1.1 development implementation includes the same server/share/account/file flow and production list reader. Its separate CI has passed signed and encrypted SMB protocol tests against a read-only Samba fixture, including real schema, preview and runtime reads. Final release validation remains separate.

Paradox is a separate file format, not another name for SMB. In the Android and iOS 1.1 development source editor, choose Paradox tables, then Folder on this device or Network folder (SMB). Select a real .DB table; keep its matching .MB memo file in the same folder. For a local source, select the containing folder, not just one file. In Studio, choose a table from that folder, preview its actual fields and configure cards, filters and Details. No SQL query, JSON row path or workbook sheet is needed. Cifru reads bounded blocks and applies filters locally before the row limit; it does not execute SQL, install BDE, or create lock/index files. Character encoding is automatic from the table header; advanced users can override it, for example with windows-1250, without changing the file.

The Android production reader has passed local-file, folder-selection persistence and actual SMB tests with independently generated Paradox tables, including NULL, decimals, diacritics and memo. The Swift reader has passed format, actual SMB and coordinated local-file tests; its new source/Studio integration is under validation. Folder access is kept locally: iOS stores a device-only security-scoped bookmark in Keychain, not in exported configuration. After transferring a configuration to another device, select the local folder again. These tests do not certify every WinMENTOR installation, encrypted table or unsupported field type. Use a stable read-only copy when another application is editing the tables: change detection is not a multi-file database transaction. These development notes do not describe the frozen 1.0 releases.

1.1 development: Google Drive and OneDrive / SharePoint files

The account card shows Connected when a source-specific account is saved securely on this device. This is separate from testing the selected file or endpoint: access is checked when reading. Reconnecting is an available action, not a required second login. Each source keeps its own connection.

Background cache: enabled automatic refresh can run without a visible app when the operating system grants execution time. Android requests a deduplicated catch-up on minimization; iOS schedules its next opportunity before waiting for reads. The configured minutes are a due threshold, not an exact timer. Battery-saving modes, suspension, network availability and force-stopping can delay or prevent execution. Multi-minute iOS partition rebuilds still require further long-work/resume validation; these development changes do not guarantee uninterrupted background completion.

Start at Sources > Add source > Cloud files, then choose Google Drive or OneDrive / SharePoint. S3-compatible storage remains in its separate category. Use a recognizable name such as Personal Drive or Company OneDrive. Multiple sources may use the same account or different accounts; each source retains its own account binding and selected file. Disconnecting one source must not sign out the others.

Cloud and SMB CSV/TSV reads preserve quoted line breaks and long cell values. A malformed row, ambiguous column name or oversized cell is reported instead of silently shortening or shifting its data. Use unique, non-empty column names (at most 200) and compact exports; a single text cell is limited to 1,048,576 UTF-16 units. These safety checks protect existing cached data.

For example, a row limit of 1 with the warehouse filter Central means the first matching Central row, not the first row of the downloaded file. A descending numeric sort must select the largest matching value before the limit. Cloud/SMB files are selected locally; OAuth2 API reads may need several pages before the bounded result is known. Reaching a safety limit reports an incomplete read instead of pretending the first page is the whole result.

A CSV or XLSX file can contain valid column headers but no data rows yet. The new cloud/SMB Studio setup keeps those real fields available and shows an empty preview; it does not invent an example row. A missing worksheet or malformed header is a different condition and requires correcting the selected file or sheet. OAuth2 connection tests use the same saved source account as runtime reads; a refused or expired authorization is never reported as a successful connection.

For cloud/SMB spreadsheets, give each column a clear, unique header. An explicitly empty header is shown as Column B, for example, so its values remain available. Duplicate cells, values outside the declared columns and unsafe compressed files are reported as an invalid read, even if they occur after the requested preview rows; they are not silently ignored or saved as a complete cache.

Numeric filters distinguish 0 from an empty or invalid value: text such as unknown does not become zero. If a selected filter or sort column disappears, choose its replacement in Studio; Cifru reports the change instead of saving a misleading empty result. Spreadsheet formulas are not executed by Cifru. Their saved results, including zero and intentionally empty text, are readable. If a formula has no saved result, open and recalculate the file in Excel or its spreadsheet application, save it and retry.

List search works across the currently loaded selection before dividing it into display pages. Leading or trailing spaces do not change the search, and clearing it restores that selection; search does not silently download unrelated source rows. A read-only custom SQL query does not also need a separate table name. Plan permissions, read-only validation and genuine connection or data-limit warnings still apply.

Choose the cloud source, connect an account, and browse folders to select a CSV, TSV, JSON, XML, XLSX file or Google spreadsheet. For example, choose Inventory.xlsx, then its Products sheet in Studio, preview rows, and choose the actual code, name and quantity columns. File IDs are retained separately from displayed names. Cloud transports do not execute SQL: a complete file up to 10 MB is downloaded before local filtering. A file that changes during download is rejected without replacing a valid cache. Google Sheets are exported read-only to XLSX so worksheet selection remains available.

Google on Android uses the operating system's Google authorization service and binds each saved source to the chosen account. iOS uses its registered native OAuth client and PKCE browser flow, with refresh credentials in Keychain. Microsoft uses its registered native OAuth application; additional site/library permission must be granted by the user's organization when needed. Successful sign-in is shown separately from successful file/schema verification. These development integrations and test registrations are not production release approval; real account validation is recorded separately.

The Google Drive and OneDrive apps do not need to be installed: Cifru browses and reads files directly through the providers' APIs. The current Android Google authorization path requires Google Play services, which is a separate system component, not the Drive app. If those services are disabled or outdated, Cifru explains that they need to be enabled or updated when supported by the phone; it does not treat that condition as an expired account. Devices without Google Play services need a separately supported authorization path; do not assume that installing Drive solves that limitation.

If an account service takes too long to respond, return to the source and try again. A timed-out attempt does not delete the previously saved session or cached rows. Explicitly disconnecting one source keeps other sources connected.

Home updates the visible age of a saved cache while the app is active and when you return to it. This is only a display update: it does not trigger an extra source read or change the automatic refresh interval.

1.1 development: consistent navigation and readable forms

Home, Build, Sources and Settings use the same grouped navigation pattern on Android and iOS, including their Studio, account, cache and preference pages. Use the back chevron to return and the three-dot button for page actions. The selected bottom tab remains highlighted. Red guidance continues to mark the next required setup field; it is not a connection failure by itself.

Long page titles and values may wrap onto a second line, especially with larger system text. Source names, hosts and file paths share the available row width with their labels rather than hiding them. Light, Dark and Eye Comfort appearance applies to forms and menus as well as the main pages. Cloud account connection is displayed separately from verification of the selected file: a connected account does not guarantee that every file is readable.

For a cross-platform video guide, use the same application language, appearance, text size and sample workspace. Android and iOS keep their own system sign-in, permission and file-selection dialogs; these are not additional Cifru setup steps and may look different. Some development-language strings still fall back to English. These notes describe 1.1 development, not changes to the frozen 1.0 releases.

Home Button Assistant

1.1 development: New buttons in Basic mode use five steps: Data, Appearance, Filters, Actions, and Preview. The numbered indicator highlights the current step, not completed validation. Back and Continue stay below the editor. Examples and checks before saving expand on request. Filters are optional; sub-buttons are required only when you choose the Home-with-Details recipe. Appearance separates the Home button name/icon from the fields shown in each list row. Preview can use a bounded sample from the successful data test; it does not create a complete cache or report a total row count. Changing the source, query or selected fields invalidates that sample. Existing configurations remain unchanged.

Path: Build > Home screens > Choose source and table/path. This is the easiest path for non-programmers. The source editor is only for connection settings and connection testing; tables, views, endpoints, sheets, and feed paths are chosen here while creating a Home button.

Studio adapts this choice to the source family. Known ecommerce objects are shown as localized business choices such as Products, Orders, Customers, Categories, Coupons, and Collections while Cifru keeps the connector route internally. Unknown or custom store objects are never given an invented label: their exact object name or path is shown. Feeds, FTP files, local CSV/TSV/JSON/XML/XLSX files, and S3-compatible objects use the configured file or object as the guided starting point; workbook sheets and detected structured-data fields are offered after preview. Generic APIs use the verified root or endpoint, and manual technical paths remain available in Advanced mode.

SectionControlsPurpose
ProgressCheck connection, Choose data, Choose fields, Create Home button.Shows where the user is in the source-to-screen setup flow. Details and cross-source values are configured afterward in the same screen Studio.
Starting pointName, Type.Confirms which source is being configured.
1. Check connectionCheck connection button and status row.Tests the source before browsing or previewing. The next steps are disabled until this succeeds. If the source was already tested from Sources, this step starts as done.
2. Choose dataBrowse button, searchable modal for tables/endpoints/sheets, guided business choices for known shops, object path field in Advanced mode, optional Rows path field for nested JSON/API responses in Advanced mode, GraphQL query editor when applicable, Save selection button, Save selection & preview rows button.Chooses the table, endpoint, feed path, entity set, GraphQL query, store object, file, storage object, or XLSX sheet. Known shop objects use localized business labels while their technical routes remain internal. Unknown shop/API objects are shown exactly as returned, without a guessed alias. Browse opens a popup/modal over the assistant, not a huge inline list. For the default SQL schema, a canonical name such as dbo.accesex_arhiva_view is shown simply as accesex_arhiva_view; Cifru keeps the complete canonical name internally. Non-default schemas remain visible when needed to distinguish objects. Selecting a row fills the saved object directly so the user does not need to type technical names manually. Cifru remembers the last saved selection for that source.
3. Choose fieldsField count, visible-field count, and a searchable field picker based on the concrete source schema. Basic mode asks for selected fields, friendly labels, and card/detail visibility; internal names, types, presentation, optional semantic meaning, and the stable unique-row field remain in Advanced mode. Test and preview is the final step after the fields are chosen. The one required control that needs attention uses the same red pulse on iOS and Android: source, object/path, fields, then Test and preview. With Reduce Motion enabled, the red semantic warning and outline remain without animation.Maps real source fields into mobile-friendly labels without asking the user to remember technical column names. A semantic field meaning helps formatting and later suggestions; it does not connect this list to another source.
4. Add to HomeButton/list name text field, summary labels, Add button to Home button.Creates the list and the Home button in one guided step.

AI guidance pattern: tell the user to first test the source in Sources, then go to Build > Home screens > Choose source and table/path. After the user chooses or types a table/path/sheet, tell them to tap Save selection & preview rows. Fields are shown only after a preview for the current selection and Rows path, so Cifru does not reuse mappings from an older table, endpoint, sheet, or nested JSON path.

One configured source can produce multiple lists/Home screens. After creating the first Home screen, the user can tap Add another table/list from this source, choose another SQL table, endpoint, or XLSX sheet, preview it, choose fields, and create another Home screen without duplicating the source connection.

Builder concept: a Source is only the connection. A List, also shown as Data to read, chooses what to read from that source. A Home screen/button chooses how that list appears as mobile cards. Card fields from other lists and row Details are configured on Home screens/buttons, not inside the source connection.

Build Tab

Path: Build. This tab is for configuring the workspace after sources exist.

If there is no successfully tested source, Build shows a prominent warning and a highlighted Go to Sources button. The Sources tab also shows a badge until at least one enabled source has a successful connection test. This is intentional: users should configure and test a source before building lists, Home buttons, Details, or widgets. Once a source is OK, Build shows the guided Create a screen action, where the user can choose a screen type, source, and table/path, preview rows, and create the first Home screen without guessing which technical area to open.

In Cifru builder editors, Save stores the current settings, shows a short visible confirmation at the top of the editor, and keeps the user on the same screen. Use the Back button when finished editing. This lets the user save, preview, test refresh, and continue adjusting without being sent back to the previous category.

Build uses a hybrid organization. Basic mode starts with a compact tree of what the user actually sees: each Home screen is a parent row, its Details screens are nested children, and cross-source enrichments are shown under the screen where their values appear. Tapping a normal screen opens one Studio with five contextual tabs: Card, Data, Filters, Actions, and Preview. Card is the default tab so the first view matches what the user recognizes on Home. Its visual layout editor has separate Compact card and Full detail surfaces. A user can enable or hide fields, rename labels, choose text/link/image/location presentation, promote totals or statuses as highlights, group information, enter Edit mode, and drag fields into a page-specific order. A Location presentation treats the edited field as latitude, pairs it with a longitude field from the same row, and may use another row field as the pin label. Compact cards render a static MapKit snapshot that opens Apple Maps; Full detail renders a MapKit map. Coordinates always come from the read-only source data: Cifru does not request or read the device GPS location, add background location capability, or call an external geocoder. A recommended-layout action keeps useful business fields prominent and moves technical identifiers out of the compact card. Guided shortcuts may open Data or Actions directly when that is the next unfinished step. This removes the need to understand three parallel technical areas before making a useful screen.

Cross-source mapping uses the same novice-first approach for ecommerce, databases, APIs, feeds, FTP, local files, and object storage. Known identifier families are presented with localized business names and may be suggested across equivalent fields, for example Product code / SKU to Barcode / EAN / GTIN or Order ID to another order identifier. Every choice still stores the exact source fields. Unknown fields keep their exact names without an invented alias. The editor identifies both lists and sources, explains the selected pair in one sentence, checks representative values from both read-only sources, and blocks saving when no real common value can be verified. Technical field names remain visible in Advanced mode.

Each main row in Your screens has an up/down menu. Reordering a main screen moves its complete navigation tree as one unit, including nested Details screens, sub-buttons, linked/enrichment data, and saved relation references. The resulting main-screen order is also the Home order. Child rows are intentionally not reordered independently from this overview because their presentation belongs to the parent screen and is configured in Studio. Deleting a Home button also removes its private hidden sub-button screens and then removes related lists and relations only when no other button, sub-button, enrichment, or widget still uses them. Shared configuration is retained, and this local cascade never deletes rows or objects from the external source.

The Create a screen action offers two guided screen types: Home button with list and Home button with Details. A new Home screen follows one uniform sequence: name the screen, choose the configured source, then open Choose table/path and fields. This third step is the exact same data editor used later in Studio > Data, so table/view/sheet/endpoint/feed discovery, field selection, preview, and Pro Advanced custom read-only queries are never duplicated in a second setup surface. After the data is verified, the user continues in the same Studio. Home button with Details opens Studio at Actions, where a reusable child list becomes a button on every matching card; it is not shown as an unrelated second Home button. Widgets have one manual creation path: Build > Widgets > Manage widgets > Add widget. Cross-source values are added under Studio Data or Actions through a common field rather than through a separate builder recipe. The AI Configurator remains a separate visible toolbar action in the upper-right of Build.

While a new screen is still a draft, Studio shows a short completion checklist: readable table/path or tested custom query, real fields selected, card layout completed, and, for the Details recipe, one successfully tested per-card Details action. The final Save action remains unavailable until the required steps are complete. Cancel removes only temporary draft elements created by that flow.

Creating and editing a screen is transactional from the user's perspective. Canceling a new draft removes its temporary screen and any list created exclusively for that draft. If the user chose an existing list, canceling removes only the new screen and preserves the reused list and every other screen using it. Leaving or discarding unsaved changes on an existing screen restores the saved screen and never deletes it; deletion is available only through a separate destructive action and confirmation. Saving keeps the screen and continues with the same Studio controls.

Screen and data-list deletion remain dependency-aware. Cifru shows a discreet usage summary under each list (Home screens, Details screens, widgets, relations, and actions) and offers explicit list deletion from both the screen/list overview and the Advanced data library. Removing the last Home screen, Details button, widget, or relation that uses a list automatically removes that now-unused list and its local cache; if another element still uses the list, it is preserved. Deleting a list directly first explains that its local screens, widgets, relations, and actions will also be removed; it never deletes or writes source data. Deleting a saved relation removes its Details/enrichment actions and removes either endpoint list only when that list has no remaining use.

Every Studio entry begins with a What you are editing identity card. It distinguishes a main Home button, a Details/sub-button screen (including its parent and relation), a sub-button destination, linked/enrichment data, and a new temporary Home draft. When Studio Data opens the shared list editor, the editor repeats the linked-data identity so the user does not mistake source/list settings for the main Home card layout. Each context edits its own saved page presentation and actions while reusing the underlying read-only list where appropriate.

Studio also keeps one deterministic What is missing before Save? checklist: source, metadata, object/path or custom query, fields, read test, then Ready. The compact screen tree derives Ready, Retest required, Incompatible, or Incomplete from that same state and opens the concrete editor when tapped. Loading never highlights a later step, changing a read-relevant source/object/query/path/field invalidates the previous test, and schema drift reports the exact unavailable fields without deleting the user's configuration. Removing a referenced field first lists affected screens, widgets, relations, enrichments, and calculations, then—only after confirmation—cleans the incompatible references while preserving valid ones. Studio Preview uses the same card/detail rendering and saved after-load filters/sort as Home. Disabled or blocked actions remain tappable enough to explain the missing prerequisite. Community provider/session checks run in the background and never delay anonymous browsing or Import Configuration; authentication remains necessary only for account and publishing actions.

Advanced mode reveals the underlying Data library, Relations map, and Common fields. These views edit the same lists and links used by Studio; no setting or capability is removed. Lists without a Home screen remain available in the Advanced data library because they may feed a widget, Details action, or cross-source enrichment. Every list shows its current usage and has an explicit dependency-aware delete action. Deleting the last Home screen, Details button, widget, or relation that uses a list now removes that list and its local cache automatically; a list shared by another element is preserved. A deliberately created standalone draft remains available in the Data library but is not treated as an active synchronization job until a screen, widget, action, or relation uses it. With an active Pro subscription, SQL-backed lists also expose an optional custom read-only query editor. The editor accepts a complex SELECT/WITH block with CTEs, joins, unions, cases, windows and aggregations against the selected connection. With explicit approval, its AI helper first researches official public manuals, uses bounded object and generic field terms to inspect the live catalog, and generates only from the exact discovered schema. A contradictory documentation plan degrades to schema-first generation. An independent coverage critic may request one bounded correction, but it cannot override exact local validation and the bounded live read. The current SQL draft remains visible for inspection and copying; Save stays disabled until that exact text passes the read-only test. Authentication, permission, network, TLS and timeout failures are never sent back to AI as repair tasks. The same editor exposes a visible Test read/Test and preview action, and a successful custom-query test is carried back into the new-screen checklist. When a valid imported or AI-created list already contains a custom query, Basic mode shows a clear Custom read-only query summary, source, field count, test state, and a read-only View query action; editing the SQL still requires Pro Advanced mode, while replacing it with a table or view is an explicit confirmed action. Changing its mapped source preserves the query and fields but invalidates the successful test until the exact configuration is tested again. Basic mode never asks a novice to write SQL.

Named parameters for targeted SQL: a Pro custom query may use one or more value placeholders such as :product_id or :from_date. Studio detects every placeholder and shows the same parameter card on iOS and Android, where the user selects Text, Number, or Date and binds it to a parent-row field, an opening-filter value, a fixed non-secret value, or Today with a day offset. Cifru requires an exact one-to-one match between placeholders and definitions, escapes and types every value for the selected SQL dialect, and never treats a value as an identifier or executable SQL. A query that depends on parent/opening context is forced to Live mode, has automatic global refresh disabled, and can run only with the matching context; it cannot accidentally build an unfiltered global cache. This supports any compatible read-only function or view and is not hardcoded to one ERP report.

Fast custom-query verification: Verify read-only structure checks the exact SELECT/WITH block, parameter definitions, and returned column schema through a zero-row database probe. It does not execute the business report or wait for a heavy join to return sample rows. Normal table/view tests retain their bounded row preview. The portable Community JSON stores the same parameter definitions on both platforms, contains no credentials or row values, and is rejected before import or moderation if a parameter is missing, duplicated, invalid, or unused.

Build screenWhat it configuresWhen to use it
SourcesConnection profiles and credentials.When the source address, credentials, TLS, token, or feed file changes.
Compact screen treeHome screens, nested Details screens, and enrichments in the same hierarchy the user will navigate. The up/down menu moves one complete main-screen tree and changes the Home order.The normal starting point for opening, reviewing, or ordering existing dashboard screens.
Page Studio: Card (default)Home title, subtitle, icon, title/subtitle/badge, recommended layout, and separate draggable field order/visibility/labels/presentation for the compact card and full detail. Full detail fields can be highlights or grouped information. Add a field opens the same calculated-field chooser used by Data and reveals the result only on the current layout.The default entry point; use it when changing how each row and its complete workspace look to the user. Layout belongs to the screen, so two screens may present the same underlying list differently.
Page Studio: DataSource list, concrete table/path/sheet, cache/live mode, row limit, date period, source fields, local calculated fields, mappings, refresh, and search.When changing what rows or row-level values the selected screen reads. A guided setup shortcut may open this tab directly.
Page Studio: FiltersOpening filters, date period, source/read sorting, additional source-side conditions, and presentation-only defaults applied after data loads.Use opening and additional filters when they must affect the source read. Use Default filters after data loads when the already loaded rows should open with a reusable local filter or order without another source request.
Page Studio: ActionsButtons and related sections on every card, including guided parent-to-child Details. Each related list can be inline, collapsible, a tab, or a separate screen, with card, compact-row, or table presentation. The same area can optionally enable live refresh only for the currently open Details record.When a row must show matching lines/items, keep one open item current, or perform another already implemented read-only action.
Page Studio: PreviewThe actual mobile compact-card preview, the composite full-detail workspace, and a summary of related sections and enrichments.Before saving or after changing the selected screen.
Advanced data libraryAll lists, including lists without a Home screen.Technical inspection and reuse of data that feeds widgets, Details, or enrichments.
Advanced relations mapParent-child links between lists.Technical inspection or editing of relationships; normal users can create Details from Studio.
Advanced field meaningsOptional semantic labels used for formatting and later suggestions.When a technical column should be recognized as a date, document ID, EAN, amount, or another familiar meaning. This annotation is not itself a cross-source link.
Advanced read-only query (Pro)One validated SQL execution block for the current database list, plus an optional AI drafting helper.When an expert needs CTEs, nested SELECTs, joins, unions, CASE expressions, aggregates, or window functions that the guided builder cannot express.
WidgetsCounts, sums, averages, min/max, top lists, line/bar charts, filters, sort, external widget snapshot for scalar/list widgets.When the user wants dashboard summaries, in-app charts, or Home Screen / Watch / CarPlay scalar widgets.
SubscriptionFree, Starter, Pro purchase/restore and feature limits.When feature gating blocks sources, links, or advanced widgets.

Responsive large-data behavior

Large read-only loads use a responsive pipeline on both platforms. Network and file I/O, row materialization, filtering, sorting, relationship matching, enrichment projection, and export preparation run away from the UI thread. Work for a screen that has been left or superseded is cancelled or ignored, connector concurrency is bounded, and one coherent result is published only when its processing stage is ready. Cifru keeps the last valid cached content visible with local progress and error states, so Home, Back, tabs, and navigation remain usable while a live read, refresh, or cache update is in progress.

Lists Editor

Path: Build > Lists > select list.

SectionControlTypePurpose
ListNameText fieldUser-facing list name.
ListReads fromPickerSelects the source used by this list.
ListLoadingPicker: Cache or Live queryCache stores rows locally. Live query reads fresh data when needed.
ListLimit number of rowsToggleOn by default to protect mobile performance and source load. Turn it Off when a source-side filter, such as one calendar day, should return every matching row.
ListMax rowsDirect numeric field, 1 to 1000000; default 50000Limits rows only while Limit number of rows is On. Values above 50000 show a mobile-performance warning. The value can be typed directly; it is not a +/- stepper.
ListUnique row fieldText field + picker in Advanced/when setOptional stable key for row identity.
What to readChoose/change table, view, sheet, endpoint or pathSearchable source-specific selectorDiscovers the real selectable objects from the configured source. The selected canonical value is saved even when a default SQL schema prefix is hidden from the friendly title.
What to readCustom read-only queryRead-only summary and viewer in Basic; Pro Advanced multi-line editor for SQL database sourcesUses the selected database connection and supports one complex block beginning with SELECT or WITH. Studio detects named :value parameters below the SQL editor and binds them to typed, non-executable values. A configuration that already contains custom SQL remains identifiable and inspectable in Basic mode instead of appearing to have no table/path. Editing requires Pro Advanced mode, and the exact query plus parameter definitions must pass read-only schema verification before Save is enabled. Replacing it with a normal table/view is explicit and confirmed.
What to readGraphQL queryMulti-line editorRead-only GraphQL query.
What to readAPI/feed path, Object key/path, Entity set/pathText fieldPath relative to the source base, object key, or OData entity.
What to readKnown store dataPicker for ecommerce sourcesSelects friendly known store endpoints when available.
What to readRows path in JSON/responseText field for feeds/APIs/files/storage when useful; also visible in Advanced modeOptional path to the array of rows, for example data.items, data.orders.nodes, or value. OData uses value by default.
RefreshAuto refresh cacheToggleTurns timer-based refresh on/off for cached lists. While Cifru is active, one app-level scheduler checks due lists and widgets about every 30 seconds, independently of the currently visible screen. Returning to the app also performs an immediate due-cache check.
RefreshEvery X minStepper 15 to 1440Requested refresh interval for cached rows. Due lists and widgets share a serial, deduplicated queue that alternates both work types and prioritizes relatively overdue items, so a large list installation cannot indefinitely keep widgets behind every list. The editor shows whether work is due, running, queued, or waiting for automatic retry. Foreground checks run promptly; background execution is best-effort because iOS decides when the app receives background time, so the interval is a minimum due time rather than an exact background alarm.
Common fieldsDetect common fieldsButtonAttempts to map fields to shared meanings such as Invoice ID, Customer ID, EAN/Barcode.
Preview before savingPreview rowsRead-only previewShows cached rows so the user can check fields before saving. Cifru prefers a meaningful business value as the preview subject, omits technical ID/UUID/serial fields from the summary, and uses Sample row 1, Sample row 2, and so on when no friendly value is available.
Fields to showDetect and choose fields / Choose from detected fieldsSearchable multi-select modalReads actual SQL columns, API/feed keys, XML elements, CSV/TSV headers, or XLSX sheet columns. Tap a field to add/remove it; selected fields are checked.
Fields to showDetect and choose fieldsButtonAlways re-runs source-specific schema detection, then opens the searchable checkbox picker. After a table, endpoint, feed, row path, or sheet changes, compatible selections are preserved and fields that do not exist in the new object are removed.
Fields to showAdd fields...Guided choice after the detected fields and in the list editorSeparates two different operations: Calculate a field from this row, or Bring fields from another list or source. The custom SQL editor is not duplicated here and remains under What to read.
Fields to showCalculate a field from this rowUniversal guided formula editorCreates one local numeric field from two fields or from one field and a fixed value. Supported operations are add, subtract, multiply, divide, and percentage, with 0-6 decimal places and an explicit missing-value rule. A live local preview is shown when a numeric row is available. Division by zero and nonnumeric operands produce an empty result. Formulas are declarative, execute locally after a read, never modify the source, work for SQL/APIs/feeds/files, and consume no additional source/list/relation plan allowance.
Fields to showBring fields from another list or sourceFour-step read-only relation assistantChoose an existing list or another concrete table/sheet/path from any accessible source, choose the field on the current card and the matching field in the other data, select returned fields, then review matching analysis. Cifru checks bounded distinct values across representative source data rather than trusting only the first page. Repeating the same field pair reuses the existing relation and merges selected card fields.
Fields to showCreated fieldsFormula rows marked fx, with Edit/Delete and previewThe formula belongs to the list, but new calculated mappings default to hidden globally. When created from one Home/Details/sub-button screen, only that screen's selected card/full-detail layout is enabled automatically. Other screens that reuse the same list may opt in independently.
Fields to showManually add a source fieldAdvanced guided sheet below detectionMaps an existing field returned by the selected source when automatic discovery cannot expose it. The user may choose a detected field or type the exact source name, review a local sample, set the friendly label, type, link/image presentation, list/detail visibility, and optional common-field meaning. Cifru proposes a stable internal key and blocks duplicates, empty names, and fields hidden from both list and details. Use Calculate a field from this row when the value does not exist in the source.
Fields to showOriginal columnRead-only caption in Basic; editable in AdvancedExact source column/key name. Basic users select it instead of typing it.
Fields to showInternal field nameAdvanced text fieldStable internal key used by buttons, filters, widgets, and links.
Fields to showDisplay labelText fieldFriendly label shown to the user.
Fields to showTypeAdvanced picker: Text, Number, DateDetected automatically; Advanced mode can correct it for sorting/filtering and numeric widgets.
Fields to showDisplay asAdvanced picker: Automatic, Text, Link, Image, LocationControls presentation without changing how the field is matched. Automatic recognizes web/mail links and image-like fields. Location requires latitude and longitude fields in the same row and optionally a pin-label field; it uses MapKit only and never asks for the device location.
Fields to showCommon fieldAdvanced pickerMarks the meaning of the field for cross-source matching. Cifru proposes common roles where possible.
Fields to showShow in list / Show in detailsTogglesControls where the field appears.
Fields to showLocal sampleRead-only privacy-sensitive textShows a value from the bounded local preview to help identify a field. This displayed preview value is not sent directly to external AI. A separate optional repair-only identifier sample follows the strict limits described under AI Configurator privacy.
Search in listAutomatic or manual field selectionAdvanced controlsAutomatic (recommended) searches the visible Text fields shown on each card. Manual selection is collapsed until opened, uses friendly field labels, and is intended only when search must cover a smaller or different set. For example, selecting Customer and Invoice number lets “Ana” or “INV-1024” find the expected row. This setting changes only the local Search box after data is loaded; it never changes the source query, cache, filters, row limit, or downloaded rows.
ToolbarTest refreshButtonSaves the current list settings first, then pulls a preview from the source.
ToolbarSaveButtonSaves the list configuration.

Advanced Read-Only Queries (Pro)

Paths: Build > Create a screen > Home button > name > source > Choose table/path and fields > Custom read-only query, or Build > select a screen or Details list > Data > Choose table/path and fields > Custom read-only query. Both paths use the same validation/test rules. Creating or editing SQL is available only while Pro and Advanced mode are active; an existing valid query remains clearly identified and viewable read-only in Basic mode. It works for a new or existing Home list and for a list opened by a per-card action.

AreaBehaviorSafety rule
Query shapeOne read-only execution block may contain CTEs, nested SELECTs, joins, unions, CASE expressions, aggregates, and window functions.Independent semicolon-separated statements are rejected. Studio controls final sorting, filters, and row limits, so a top-level custom ORDER BY is not accepted.
Query blockCopy SQL copies the current editor text and confirms with Copied.Copying is a local, explicit clipboard action. It does not test, execute, save, or send the query.
Database scopeDirect SQL joins can use tables/views reachable through the currently selected database connection.A second configured connector is not exposed as a fake SQL table. SQL Server, Oracle, MySQL, a feed, API, file, or ecommerce source configured separately is combined afterward through Cifru's existing local relation/enrichment controls.
Source aliasesThe editor and AI helper show safe source IDs/display aliases and whether each source is directly queryable or must be mapped locally.Aliases never contain credentials, rows, connection strings, private URLs, or query results. Display names are treated as metadata, not instructions.
ValidationCifru validates locally before any database request and automatically runs a preview limited to 20 rows through the same production database runner used by the final screen. The visual preview shows five rows initially, states the total field count, and lets the user expand every remaining returned field.The preview starts with a neutral field/sort configuration. Fields and sorting from an older query are never added around a newly generated query. INSERT, UPDATE, DELETE, MERGE, DROP, ALTER, CREATE, TRUNCATE, EXEC/EXECUTE, GRANT/REVOKE, SELECT INTO, locks, external/linked execution, deliberate waits/sleeps, and other write/admin behavior are blocked.
AI helperAn optional collapsed assistant can draft the query from a plain-language request and the safe discovered schema. With explicit approval, an external provider first consults official public manuals and returns documentation evidence plus a vendor-neutral semantic contract: separate business roles, the owning role of each requested output, direct or documented formatted-identifier relations, final row grain, qualifying roles, and distinct top-N identity/order rules. Cifru then expands the live catalog with exact object candidates and generic concept field aliases (including common multilingual line/detail and creator/date wording) before a separate strict-JSON query draft is generated.The exact locally discovered objects, fields, and field types remain authoritative. Catalog search reads metadata only. During schema-first repair, the optional Minimal mapping samples control may permit the already disclosed identifier-only sample; Cifru never sends full rows, names, invoice contents, prices, credentials, connection strings, or private URLs. A contradictory research contract receives one correction and then degrades to schema-first generation. The independent draft-coverage critic receives at most one repair attempt; remaining critic uncertainty becomes a visible warning and cannot replace deterministic local validation or the bounded live read. A draft stays visible but unsaveable after a failed check. The exact query must return a non-empty preview of at most 20 rows before Save is enabled, and a successful test is propagated to the screen-creation checklist.
Changed query fieldsAfter a successful test, Cifru proposes fields from the actual returned columns. Matching display labels/settings may be preserved.Source columns, search fields, primary keys, and sort rules that belonged only to the previous query are removed, preventing a valid new SELECT from failing because an obsolete outer field was reused. Local calculated-field definitions remain separate; a formula returns empty until its selected input fields exist again.
ErrorsDatabase diagnostics such as missing column, missing object, wrong dialect syntax, permission, TLS, network, or timeout are translated into an actionable message.Cifru does not replace a useful driver/server diagnostic with the generic iOS text “The operation couldn’t be completed.” Secrets are not included in the displayed diagnostic.
Runtime protectionThe normal source timeout, editable data-safety timeout, cancellation, adaptive row protection, Studio filters, and optional row limit remain active. SQL Server text filters preserve Unicode/diacritics; literal wildcard characters in contains filters are escaped. Calendar-day filters use an exclusive next-day boundary so fractional end-of-day timestamps remain included.Use a source-side read-only database account as an additional permission boundary. Cifru representatives are not responsible for the correctness, cost, business meaning, or source permissions of user-entered queries.
Subscription downgradeThe saved query configuration remains on the device so the user's work is not deleted.Configuration, discovery, testing, and execution are disabled until Pro access is restored.

Exact Query block contract for users and AI assistants

Query parameters: values supplied by the current screen

In the shared custom SQL editor, named placeholders such as :product or :since reveal Query parameters. Choose each value's type (Text, Number or Date) and where it comes from: a parent-row field, an opening filter, a fixed non-secret value, or Today with a day offset. For example, a product's movement sub-button can use the opened product's identifier and Today minus 90 days. You are not choosing search fields here. A placeholder supplies a value, never a table name, column name or SQL fragment.

Context is mandatory when a parameter uses a parent field or opening filter. Cifru does not run that query globally without the context and does not build a whole-list automatic cache for it. Structure checks may bind typed neutral values without running the report; real execution needs the chosen context. A small preview can still be slow when a source function does expensive work. A function name is not an exception to read-only checks.

For package authors, these definitions are stored in the dataset's queryParameters array. Every placeholder must have exactly one definition; names are unique ignoring case. Parameters inside SQL string literals, comments or quoted identifiers are not bindings. The following is only a dataset fragment, not a complete import package; replace example field names with the actual mapped fields.

"queryParameters": [
  {"id":"A2283B5A-70A5-4B45-A46D-2507E47AB648", "name":"product",
   "type":"text", "source":"parentField", "fieldKey":"product_id",
   "constantValue":"", "dayOffset":0},
  {"id":"17E342C4-F4C6-44D1-A234-CAC13729D0AC", "name":"since",
   "type":"date", "source":"today", "fieldKey":"",
   "constantValue":"", "dayOffset":-90}
]

Community carries symbolic source slots, configuration and mappings, not saved accounts. Recipients connect their own source and grant access to their own cloud file or folder. Access/refresh tokens, client secrets, account-session material and device folder bookmarks are forbidden even inside nested package objects. A technical column named accessToken is merely metadata; exporting its secret value is not allowed. Existing packages still require local source mapping, plan checks and compatible fields before Apply.

The text pasted into Create calculated, grouped, or combined results > Query block must be SQL only. Do not paste Markdown fences, JSON, a title, an explanation, connection details, or credentials. The query must use the dialect of the selected connector: SQL Server, PostgreSQL, MySQL, MariaDB, or Oracle.

  1. Return exactly one statement that starts with SELECT, or with WITH whose final statement is SELECT. A single trailing semicolon is tolerated, but omitting it is recommended.
  2. CTEs, nested SELECTs, JOINs, UNION/UNION ALL, CASE expressions, aggregates, GROUP BY, HAVING, and window functions are accepted when they are valid for the selected database engine.
  3. Do not use a top-level ORDER BY. Cifru applies its final sorting, filters, and bounded row limit around the query. Use Studio sort rules for final presentation.
  4. Do not use parameters or placeholders that Cifru cannot bind, temporary tables, variables, dynamic SQL, stored-procedure calls, multiple statements, or commands that write, administer, lock, delay, import from, or export to another system.
  5. Give every calculated expression a unique, stable column alias. Return a flat row made of scalar values suitable for Text, Number, or Date fields.
  6. Use only tables, views, and columns verified in the selected source. The query contains no host, database password, token, API key, or connection string.
  7. For a Details sub-button, include the child relation key in the final SELECT. Cifru maps that returned alias to a field from the parent button outside the query. Example: the parent result exposes gestiune, the custom child query also returns gestiune, then Studio links Parent button · gestiune to Details sub-button · gestiune.
  8. For grouped results such as Top agents, decide the row grain explicitly and return both the identity and measures, for example gestiune, agent, document_count, and line_count. If a date condition must change which source rows enter an aggregate, express that condition inside the SQL or expose a suitable pre-aggregation grain; a local filter applied after loading cannot recalculate an already aggregated result.
  9. After pasting, tap Test and preview. Save is enabled only for the exact SQL text that passed local read-only validation and returned a non-empty bounded live preview of at most 20 rows. Any edit invalidates that test.

Prompt that can be given to an AI

Create a Cifru Query block for [SQL Server / PostgreSQL / MySQL / MariaDB / Oracle]. Business result: [describe the rows and values required]. Verified schema: [paste only the relevant table/view and column names, with types if known]. Final row grain: [for example, one row per warehouse and agent]. Details relation, if any: return [child alias] so Cifru can match it to [parent field]. Return SQL only, without Markdown fences, JSON, prose, credentials, placeholders, variables, temporary tables, multiple statements, or a top-level ORDER BY. Start with SELECT or WITH ending in SELECT. Use unique stable aliases for every calculated column and only the verified schema objects.

Valid SQL Server example: grouped result usable as a Details sub-button

WITH agent_activity AS ( SELECT LTRIM(RTRIM(warehouse_name)) AS gestiune, COALESCE(NULLIF(LTRIM(RTRIM(agent_name)), N''), N'Fara agent') AS agent, COUNT(DISTINCT document_id) AS document_count, COUNT_BIG(*) AS line_count FROM dbo.verified_document_lines_view GROUP BY LTRIM(RTRIM(warehouse_name)), COALESCE(NULLIF(LTRIM(RTRIM(agent_name)), N''), N'Fara agent') ) SELECT gestiune, agent, document_count, line_count FROM agent_activity

The example demonstrates the required shape, not universal NexusERP object names. An AI must replace the illustrative view and columns only with objects discovered in the user's selected database. In Studio, an existing query such as Top agents remains identified and viewable in Basic mode; Pro Advanced can open its Query block, edit it, run the required bounded test, and save the exact tested text. The same editor is used for Home lists and Details/sub-button lists.

Calculated-field scope: formulas are evaluated locally after Cifru receives each bounded row. They can be displayed, searched, filtered locally, exported, used in Details/sub-buttons, and selected by local widgets after refresh. They cannot change which rows a source returns before its source-side filter/sort/limit. Use the existing validated custom SQL query only when a database must filter, rank, group, or limit by a derived expression before sending rows to the device.

Common Fields

Path: Build > Common fields. Common fields make cross-source mapping user-friendly. A common field is a semantic annotation and normalization rule, not a relation by itself. Under every common field, Cifru discreetly reports whether it is unused or which list mappings and saved relations currently use it.

ControlTypePurpose
Add common fieldButtonCreates a new meaning such as "Project ID" or "Serial number".
Restore defaultsButtonRestores built-in common fields.
Name users seeText fieldFriendly label for the meaning.
TypePicker: Text, Number, DateHow values should be compared.
Alternative namesComma-separated text fieldSynonyms used to detect mappings, such as ean, barcode, gtin.
Trim spaces at endsToggleRemoves leading/trailing spaces before comparing.
Text casePicker: Keep case, Lowercase, UppercaseNormalizes text before matching.
Remove all spacesToggleUseful for codes with inconsistent spacing.
Remove punctuationToggleUseful for formatted IDs or phone-like codes.
Remove leading zerosToggleUseful when one system stores 000123 and another stores 123.
Use for link suggestionsToggleAllows this common field to be used for automatic Details and cross-source link suggestions.
Workspace usageRead-only statusShows the number and names of lists whose mappings use this meaning and how many relations depend on those concrete mapped fields.

Data Links / Details

Path: Build > screen > Studio > Actions for a Details section/shortcut on every card, or Studio > Data for extra values shown on the same card. Advanced mode also exposes Build > Link data as a technical relation map. A data link takes one concrete value from the opened parent row and reads only child rows whose configured field has the same value. It is read-only and can power either a one-to-many Details button/section or a card enrichment. The map now states this role, both concrete list/field endpoints, whether the relation is available under the active plan, and exactly which screen currently uses it; unused saved relations are identified as such.

Optional live Details refresh: it is disabled by default. In Basic mode the user enables it and chooses a simple 5, 10, 30, or 60 second interval. Advanced mode also accepts an exact 3–300 second value and explains that the list must have a stable unique row key. While the individual Details screen is visible and the app is active, Cifru rereads only that row by its key. Reads are sequential, stop when the screen closes or the app becomes inactive, and never turn the whole list into live cache mode. A failed read keeps the last valid value and shows a small warning. Short intervals can use more network and battery. This is foreground record polling, not device-location tracking or background tracking, and it requires no location permission.

ControlTypePurpose
NameText fieldFriendly relation name, such as Invoice details.
Main listPickerParent list opened from Home, such as Customer invoices.
Field from opened rowText field + pickerParent key, such as invoice_id.
Details listPickerChild list, such as Invoice lines.
Common field from detailsText field + pickerChild key, such as invoice_id.
Suggest common fieldsButtonUses common-field mappings and synonyms to propose parent/child keys.
Test Details nowButtonUses one real card already loaded on the device and performs the same read-only lookup that the Details button will use. It reports loaded rows, no match, or a source/configuration error before the user saves.
Preview before savingMatching rateShows percent and matched/total count when both lists already have rows. The direct Test Details button is the more reliable check when the child list is not cached yet.
ExampleRead-only labelShows a sample match such as invoice_id 123 -> 4 matching rows.
SaveButtonSaves the data link.

Card Fields From Other Lists

Path: Build > Home screens / buttons > select screen > Fields from other lists. This is the simpler choice when the user wants a few values from one matching row to appear on the same card.

ControlTypePurpose
Add fields from another listButtonCreates a same-card data link, subject to the same subscription limits as other data links. The same guided flow is also available at the bottom of the detected-field picker in Studio > Data, so a non-technical user can start from a real current field instead of navigating to a separate technical area.
NameText fieldFriendly name for this enrichment.
Read fields fromPickerThe other list that contains the values to display.
Common field on this cardText field + pickerField from the current card, for example customer_id, invoice_id, ean, or sku.
Common field in the other listText field + pickerMatching field in the other list.
Suggest common fieldsButtonUses common-field mappings to suggest the matching pair.
Fields to displayField picker + label text field + Display as pickerSelects which values from the other list appear on the current card and whether each value is rendered automatically, as text, as a link, or as an image.
Preview before savingMatching rate + sample valuesLets the user verify that the chosen fields really match before saving.

AI guidance pattern: if the user says "put customer phone/product name/status on the same invoice/order/card", guide them to Fields from other lists. If the user says "open all invoice lines/tasks/items/details", guide them to Home screens / buttons > Add guided Details.

Cifru first tries a narrow read-only lookup. If the two sources need common-field normalization, for example EAN 0594123 versus 594123, it can use a bounded fallback scan and compare normalized values locally. A custom API that does not support filters may therefore need an adequate Max rows setting or a server endpoint designed for filtered reads.

Home Screens / Buttons Editor

Path: Build > Home screens / buttons > select screen. Home screens open lists from the app Home screen and define the mobile card experience.

Use this editor for the normal master-detail flow. For example, Supplier invoices is the main list/card screen, and a Details shortcut focuses invoice lines by matching id_document from the opened invoice to id_document in the invoice-lines list. The invoice header, highlights, metadata, and lines stay in one document workspace. The details list can come from the same source or a different source.

Mental model for non-programmers: the list/table is what Cifru reads; the Home button is how the user opens that list on the phone; Details is a related section for matching child rows; Fields from other lists adds a few values from one matching row onto the same card.

SectionControlTypePurpose
Home screen/buttonTitleText fieldMain label on the Home card.
Home screen/buttonSubtitleText fieldSecondary text on the Home card.
Home screen/buttonIconVisual pickerSelects a familiar built-in icon for documents, orders, products, customers, reports, links, calendar, archive, and other common uses. Existing custom SF Symbol values are preserved as the current icon, but normal users do not need to type an internal icon name.
Home screen/buttonShow on HomeToggleHides/shows the button. Hidden pages can still be used as detail screens.
Home screen/buttonList to openPickerSelects which list opens when tapped.
Screen structureAdd guided DetailsButtonOpens the Details Assistant. The assistant asks where the details rows come from, which field on the opened card matches which field in the details list, shows matching-rate preview, then saves the Details button on every row card. For invoices, use the invoice header list as the parent and the invoice-lines list as the details list.
Data loadingLoadingPicker: Cache or Live queryEdits the linked list loading mode without hunting in Lists.
Data loadingAuto refresh cacheToggleTurns automatic cache refresh on/off for the linked list.
Data loadingEvery X minStepperRefresh interval for the linked list.
Data loadingLimit number of rowsToggleControls whether the linked list has a final row cap.
Data loadingMax rowsDirect numeric fieldEditable row cap shown only when limiting is enabled. For generated SQL table/view reads, date filters and saved sort rules are applied before this limit.
Data loadingRefresh this list nowButtonRefreshes this list immediately.
Preview before savingHome card + compact row card + row-interior previewRead-only previewShows the same visual hierarchy used at runtime before the screen is saved.
Row displayRow title field, subtitle field, badge fieldText fields + pickersSelects which columns appear as the row title, subtitle, and badge.
Row displayCompact card / Full detail selector, Recommended layout, field visibility, labels, presentation, detail role/group, and drag orderStudio > CardBuilds a readable compact card and a separately ordered composite detail. Full detail can promote totals/statuses as highlights and group metadata. Technical fields can stay available inside while remaining hidden on the compact card.
Row displayRows per pageStepper 10 to 500Controls paging to avoid huge mobile lists.
Filter before openingAdd opening filterButtonAdds a prompt/dropdown-like filter before the list opens, for example Store, Year, Status. When possible, Cifru preselects likely fields such as gestiune, magazin, store, location, warehouse, branch, or depot.
Filter before openingTitle, Field, Type, Allow All optionText fields, picker, toggleDefines the opening filter. Type can be Text, Number, or Date. Portable configurations can expose friendly date choices such as Today, Current week/month, or Last 7/30/90 days; Cifru turns them into a bounded date range before reading a compatible live source instead of enumerating every distinct date. Allow All lets the user explicitly choose Show all, but the list does not silently open on All before the user confirms.
Filter before openingRequire filter selection when openingToggleWhen On, the Home screen waits for the user to choose a filter value or All before reading the list. When Off, the list opens immediately and the same filters remain available as optional controls above the rows.
Data periodDate field + PeriodPickers, calendar, direct numeric fieldAvailable only when the selected list contains a field detected or manually marked as Date. It applies the current Day, Week, Month, or Year, as well as Yesterday, Last X days, or one specific calendar day before the row cap. If no Date field exists, Cifru shows a setup hint instead of an inapplicable filter. Turn the cap Off to retrieve every row matching that period. Last X days is typed directly.
SortAdd sortButtonAdds sorting by one or more fields. When possible, Cifru preselects a Date-like field and Descending direction, which is usually right for latest invoices/orders first. For direct SQL lists, this order is used before Max rows when refreshing.
SortField, Type, DirectionText field/picker, type picker, direction pickerDirection is Ascending or Descending. Set Type correctly for date/number sorting.
Additional filtersAdd additional filterButton and typed condition editorDefines conditions that participate in reading the source and are applied before the configured row limit where the connector supports it.
Default filters after data loadsSaved condition count, saved sort count, Clear local defaultStudio status cardShows the presentation-only default saved for this Home screen. To create or replace it, open the screen from Home, choose Filters, verify the visible result, and use Save as default in Studio. The default is attached to this screen, not to the shared source or list.
Fields from other listsAdd fields from another listButtonAdds selected values from one matching row in another list directly onto the current card.
Fields from other listsName, Read fields from, common field on this card, common field in the other list, Suggest common fields, Fields to display, Matching-rate previewText fields, pickers, button, previewUse for 1-to-1 enrichment such as invoice card + customer phone, order line + product name, task card + project owner. Use Details and row actions for 1-to-many data.
Details and row actionsAdd Details / row actionMenuGuided Details opens the Details Assistant. Each related list can appear inline, collapsible, as a tab, or on a separate screen; rows can be cards, compact rows, or a table, with a configurable preview limit and count. Advanced actions can still open another list or open a URL from the current row. A shortcut under the compact card opens the same composite workspace and focuses the chosen related section.
ToolbarSaveButtonSaves the Home button.

Details Assistant And Card Actions

Path: Build > select a Home screen > Studio > Actions > Add Details.

Use the Details Assistant for the normal non-technical flow. The user should think: "When I open one invoice/order/project card, keep its header visible and show me the matching rows from this other table/list below it." The assistant keeps all required context visible: main list, details list/table, field from opened card, field in details, matching rate, presentation mode, row style, preview limit, and an example before saving.

Example explanation shown in-app: if the opened invoice card has id_document = 123, Details should show only rows from the invoice-lines table where id_document = 123. This prevents users from confusing Details with a separate top-level Home button.

Assistant stepControlsPurpose
What this buildsRead-only explanationExplains that Cifru will add a Details button to each card in the current Home screen.
1. Where do Details come from?Main list label, Details list/table picker, Create a new details list buttonSelects an existing child list or creates one without leaving the Actions flow. The creation assistant browses a real configured source and lets the user choose its table, view, endpoint, sheet, feed, or path. It saves a reusable details list without adding a separate Home button, then returns it selected here. The child data can come from the same source or another source if the plan allows it.
2. Which field connects them?Field from opened card picker, Field in details picker, Suggest fields automatically buttonDefines the parent-child match without writing SQL. Basic mode shows friendly field labels; Advanced mode also shows technical keys. Example: Customer invoices.invoice_id equals Invoice lines.invoice_id.
3. Preview and saveSection text, inline/collapsible/tab/separate presentation, card/compact/table row style, preview limit, count/expanded options, matching-rate preview, Test Details now button, result/diagnostic, Save Details buttonTests the relationship against the source before saving and configures how it appears in the composite record. Cifru automatically resolves friendly labels, source column names, and internal mapped keys to the same field. If no rows match, the result explains which value and fields were checked.

Runtime behavior: opening a record shows one composite workspace with the selected parent header, automatic or selected highlights, grouped information, and related sections. Each related section has its own visible loading/error/Retry state, so one failing child source does not erase the parent or other sections. A child row opens an inspector sheet that retains the parent context. For SQL databases, the equality condition is sent to the database before TOP/LIMIT. For feeds and files, Cifru filters parsed rows locally before applying the configured row limit. For paginated ecommerce/API connectors that do not expose a portable server filter, Cifru scans a bounded larger window, normalizes configured Common fields such as EAN/SKU, filters it, and only then applies the visible list limit. This reduces false empty Details/enrichment results caused by spaces, punctuation, leading zeros, or later API pages without requesting an unbounded dataset.

Mapped-field safety: a relation remains valid when a source column, internal Cifru key, or friendly display label refers to the same field. After SQL schema refresh, invalid assumed fields are removed and page/relation references are repaired where an unambiguous mapped field exists.

Advanced path: Build > select a Home screen > Studio > Actions > Open another list / Open URL.

Row button typeControlsUse case
Guided Details / Show matching detailsDetails Assistant with button text, Details list picker, parent field, child field, Suggest fields automatically, matching-rate preview.Invoice -> invoice lines, order -> order items, project -> tasks, product -> stock by location. For MAXapp-style invoices, use id_document on both the invoice list and the invoice-lines list when that is the shared key.
Open another listTitle, Type picker, target List picker.Simple navigation to another configured list.
Open URLTitle, Type picker, URL field text/picker.Open a URL stored in a row, such as product page, document link, tracking link.

Widgets

Path: Build > Widgets. Basic mode exposes guided Count, Sum, and Current value controls, field pickers, date-period presets, and simple conditions. Current value is connector-neutral: it can show the latest or otherwise sorted value from a database, API, feed, file, ecommerce source, or another configured read-only list, such as a sensor reading, ticket status, exchange value, or latest order state. Advanced mode additionally exposes Average, Minimum, Maximum, Top list, native in-app Line/Bar charts, manual technical keys/types/operators, sort internals, and the explicit Cache versus Live-query choice.

For SQL Server, PostgreSQL, MySQL, MariaDB, and Oracle metric widgets, Cifru sends one generated read-only aggregate query such as SUM, COUNT, AVG, MIN, or MAX to the selected concrete table/view. The result is therefore not calculated from only the first 100 displayed rows. Date presets are applied at the source before aggregation. Feed, file, API, and commerce widgets use the compatible connector's bounded filtered read path.

Widget kindRequired fieldsNotes
CountList, optional filters.Counts matching rows.
SumList, value field, optional filters.Sums numeric values.
Current valueList, displayed field, optional date/sort field and filters.Shows one exact text or numeric value from the first row after the configured source-side filters and descending/ascending sort. It is not limited to medical or sensor data.
AverageList, value field, optional filters.Pro/advanced dashboard widget.
MinimumList, value field, optional filters.Pro/advanced dashboard widget.
MaximumList, value field, optional filters.Pro/advanced dashboard widget.
Top listList, value/title/subtitle fields, limit, sort rules.Shows a compact ranked list. Pro/advanced dashboard widget.
ChartList, one date/category X field, count or numeric-field sum on Y, line/bar style, optional filters and period.Groups bounded read-only rows and renders with Swift Charts on device. The Home tile uses a compact adaptive height and is display-only, so dragging anywhere over the chart continues to scroll the Home page. It remains in-app and is never published to Home/Lock Screen, Watch, or CarPlay snapshots. Pie and multi-series charts are not implemented in this version.

Widget Editor Controls

SectionControlTypePurpose
Preview before savingWidget card preview and matching rows countRead-only previewCheck the result before saving.
WidgetTitleText fieldWidget label.
WidgetKindPickerSelect Count, Sum, Current value, Average, Minimum, Maximum, Top list, or Chart according to plan/mode.
WidgetChart style / X axis / Y calculationPickers + point limitFor Chart, choose Line or Bar, one date/category field for X, and Count or Sum of one numeric field for Y. The editor shows a live native preview from locally available rows.
WidgetData usedPickerSource data list for the widget calculation.
Period and filtersUsePicker: Inherit list filters / Custom widget settingsWhen one compatible Home list already has a period or fixed filters, Cifru can inherit those settings. The editor explicitly shows Inherited list: [name], the inherited period, and the number of inherited fixed conditions. Choose Custom when the widget needs an independent period. Interactive opening filters are never inherited because a Lock Screen or Watch widget cannot ask the user for a choice.
WidgetShow on iPhone Home/Lock Screens, Apple Watch face, and CarPlayToggleAdds this widget to the external local snapshot. When Use as app has a client logo, Cifru includes a small resized local copy for supported iPhone/CarPlay widget families and otherwise uses the Cifru/system icon. On watchOS 10 or later, Cifru publishes one preconfigured complication recommendation for every selected widget, using its configured title rather than numbered slots. watchOS 9 uses the first selected widget as a compatibility fallback. CarPlay uses the small widget where supported by iOS.
WidgetFreshness textRead-only snapshot statusThe external widget shows when its local snapshot was updated and uses the configured metric icon. It has no manual refresh symbol or action. Cifru refreshes enabled caches through its serial in-app/background pipeline when the operating system grants execution time, publishes a new App Group snapshot, and asks WidgetKit to reload. The extension never opens the source or credentials itself, and exact background timing is not guaranteed.
WidgetValue fieldFriendly field picker; manual key in AdvancedNumeric field for Sum/Average/Minimum/Maximum, exact displayed field for Current value, or ranking value for Top list. Field references are reconciled again after SQL schema refresh.
WidgetTitle field / Subtitle fieldFriendly field pickers; manual keys in AdvancedUsed by Top list rows. Date values use the app/phone date format instead of raw source text.
WidgetLimitStepper 1 to 50Number of rows shown in Top list.
Data periodDate field, PeriodPickers: None, Current day/week/month/year, Yesterday, Last X days, Specific dayShown for Custom widget settings only, and only when the widget's data list has a field detected or manually marked as Date. In inherited mode the source Home list owns the period, so it is displayed as inherited instead of duplicated. The date constraint is applied before aggregation/read limits. Last X days uses a directly editable number; Specific day uses the calendar. A field whose name looks like a date but is still typed as Text does not activate period filtering.
RefreshLoading modeAdvanced picker: Cache or Live queryBasic uses the safe cached default. Advanced can explicitly select Live query.
RefreshAuto refresh value / Every X minToggle + stepper 1 to 1440Refreshes the cached widget value through the same app-level scheduler and serialized queue used by lists. Save performs an immediate refresh and shows any source/filter error. The resulting snapshot is revisioned so iPhone and Watch reject an older value that arrives after a newer one. The interval is a target/minimum due time: iOS decides when a suspended app receives background time. Cifru has no required developer relay, so it does not promise exact unattended minute-by-minute delivery.
ConditionsField, Condition, ValueGuided pickers, date picker, or numeric fieldWith Custom widget settings, Basic infers field type from discovered schema. For a Date field, choose a fixed date with Equals/Greater or equal/Less or equal, or a dynamic period: Today, Yesterday, This week, This month, This year, or Last X days. With an inherited list, this section becomes Additional conditions and narrows the inherited result without duplicating its date period. Dynamic periods are recalculated at every refresh and applied before database aggregation or connector row limits. Advanced can also edit the raw key and field type.
Optional alarmEnable alarm, value type, operator, comparison valueToggle + guided pickers/fieldEvaluates the newly refreshed widget value as a number or text. Numeric operators are Equals, Greater than, Less than, Greater or equal, and Less or equal. Text operators are Equals and Contains.
Optional alarmNotification behaviorPicker: Brief notification / Alarm in Cifru + notificationsBrief creates one local notification. Alarm in Cifru opens a full-screen acknowledgement view and repeats its local sound until Stop or Snooze while Cifru is visibly active. If the app is in the background or the device is locked, Cifru uses a finite standard notification sequence with Stop/OK and Snooze instead of background audio.
Optional alarmSound, snooze, cooldown, hide value on Lock ScreenPickers/toggleThe foreground in-app sound uses the selected standard/silent behavior. Background delivery remains subject to Silent Mode, Focus, notification permission, and iOS scheduling. Edge triggering and cooldown prevent repeated alerts while a condition remains true. Hiding the value protects it on Lock Screen notifications and accessory widgets.
Optional alarmTest alarmButtonStarts the full-screen in-app alarm when acknowledgement mode is selected and Cifru is active, and also prepares the finite notification fallback when permission is available. It does not read or change a source.
SortField, DirectionGuided pickers; technical key/type in AdvancedShown for Top list and in Advanced. Sorting affects ranked rows; it does not change a scalar total.
ToolbarSaveButtonSaves and immediately refreshes the widget.

Widget alarm limits: Cifru evaluates an alarm only after a fresh source read completes successfully; stale cache values and failed refreshes do not create a new alert. Continuous sound is an in-app foreground experience only. When Cifru is not active, delivery uses finite best-effort iOS local notifications and exact timing/sound are controlled by the operating system. Cifru does not run background audio, request Critical Alerts, bypass Silent Mode or Focus, operate an alarm server, or claim medical, emergency, safety, or life-critical suitability.

Opening Filters, Conditions, And Sort Rules

For supported SQL and connector reads, fixed filters and a selected opening-filter value are passed to the source before the final row cap, so Cifru does not need to download every warehouse/store just to show one selection. Opening-filter choices use bounded distinct-value discovery where supported. With Cache mode, the selected value is also applied locally to the full cached data and the resulting page partition is retained without replacing the full cache. Free-text search operates over all rows already loaded for that list, before UI pagination. By default, Cifru searches the visible Text fields shown on each card; Advanced mode can explicitly narrow or change that local search scope. Field choices use friendly labels and stay collapsed until the user asks to customize them. If a list is limited to 100 rows, search can inspect only those fetched rows; increase Max rows, turn the limit Off, or use a source-side period/filter when broader coverage is required.

Every open list also offers Scanner EAN / QR in its three-dot menu, between Filters and Export XLSX. Enabling it adds a barcode icon inside the right side of Search. Tapping that icon opens a compact camera sheet that recognizes EAN-13, EAN-8, UPC-A, UPC-E, Code 128, and QR, then places the value directly into Search. The camera uses continuous autofocus and exposure, recenters focus when the scene changes, and supports tap-to-focus. The user can use the visible Scan now button for a deliberate capture or enable Detect automatically; automatic detection applies the first valid code to Search as an immediate submit and closes the camera. Camera access is requested only when the scanner sheet is opened, the preview is released when it closes, and no photo or video is saved or uploaded by the scanner.

ConceptAvailable choicesBest practice
Field typeText, Number, DateUse Date for invoice dates/deadlines, Number for amounts/quantities, Text for names/status/codes.
Filter conditionEquals, Contains, Greater or equal, Less or equalContains is useful for search text. Greater/less is useful for dates and numbers.
Sort directionAscending, DescendingDescending for latest invoices/orders, top values, newest dates. Ascending for alphabetic lists or oldest first.
Opening filter Allow AllOn/OffKeep On when the user should be able to open all rows; turn Off when choosing a value is mandatory.

Browsing Data And Export

When a Home button opens a list, the user sees rounded mobile cards with title/subtitle/badge fields, an ordered grid of selected values, opening filters, search, sorting, row buttons, and paging. When Require filter selection when opening is enabled, Cifru waits until every required filter has a value or the user chooses Show all. Show results remains actionable so it can explain an incomplete choice: if one or more required filters are still blank, Cifru keeps the list closed and highlights exactly those filters with the shared red required-step cue. When required selection is disabled, the list opens immediately and those controls remain optional filters above the rows. After rows are present, the three-dot menu exposes Filters for local conditions and sorting. These runtime rules operate only on the rows already loaded on the phone: Apply is temporary, Clear temporarily shows the unfiltered loaded result, Reset to Studio default restores the saved screen behavior, and Save as default in Studio stores the current local rules on that one screen. None of these after-load actions changes SQL, API parameters, file paths, FTP/object-storage reads, connector behavior, or the row limit, and none triggers a source reload. Opening a row creates one composite workspace: hero header, important values, grouped metadata, and related sections. The first automatic Details link is inline and later links are collapsible; Studio can instead choose tabs or a separate screen. A parameterized related read is owned by the data runtime rather than by the temporary visible section: scrolling the section out of view does not cancel the read, and the empty-state message is shown only after the first read really completes. Child rows open in an inspector without losing the parent context. The same layout engine is used for a list opened by a Details or Open-list sub-button, and Studio Actions provides a direct Customize-cards link for that destination screen.

ActionWhat happens
Refresh this listPulls fresh rows according to the linked list/source configuration.
FiltersDetects every available field in the opened list and offers type-aware conditions and sorting over the rows already loaded. Text supports contains/not contains, equals/not equals, starts/ends with, and empty checks. Number and Date support equality, greater/less comparisons, ranges, empty checks, and ascending/descending order with empty values last.
ApplyApplies the current after-load conditions and sorting only for this open session.
Save as default in StudioStores the valid current local conditions and sort rules on this Home screen so they are applied after future loads. A successful save does not refresh or contact the source.
Reset to Studio defaultDiscards the temporary session override and reapplies the local default saved for the screen.
Clear all filters and sorts, then ApplyTemporarily shows the loaded rows without the saved after-load rules. Saving this empty state as the Studio default removes the saved local default.
Export Excel-compatible XLSCreates a spreadsheet-friendly export using current search, filters, and sort.
Export PDFCreates a readable PDF export for quick sharing. Large PDF exports are limited for mobile performance.
Share sheetThe user chooses Mail, Messages, AirDrop, Files, or another installed app. Cifru does not upload exports to a Cifru server.
PaginationRows per page is controlled in Home button editor. This avoids huge mobile lists.

Portable meaning of after-load defaults

For configuration authors and AI assistants, after-load defaults are screen presentation metadata, not connector filters. The native workspace stores them separately from source/read filters as localViewFilters and localViewSortRules. Each filter references a real field, its declared type (text, number, or date), a supported operator, and the required value or range; each sort references a real field, type, and ascending/descending direction. Portable/Android configuration uses fieldId; the iOS native workspace uses the equivalent canonical field key. A package converter must resolve that reference against the real mapped field and must never guess a missing field. Omit these arrays or use empty arrays when no local default is intended. Never translate an after-load default into SQL, OData, REST parameters, an ecommerce endpoint, a feed URL, a file path, or an object-storage prefix.

"localViewFilters": [ { "id": "minimum-total", "fieldId": "total", "type": "number", "operator": "greaterOrEqual", "value": "100", "secondValue": "" } ], "localViewSortRules": [ { "id": "largest-total-first", "fieldId": "total", "type": "number", "direction": "descending" } ]

Settings

Lists are managed only from Build, where their screen, relation, and field context is visible. Settings intentionally does not duplicate the list inventory. Cache & Sync still shows per-list cache/refresh diagnostics because those controls describe runtime state rather than list configuration.

SectionControlTypePurpose
SubscriptionManage subscriptionNavigation linkOpens Free/Starter/Pro screen with purchase and restore.
LanguageApp languagePicker: Automatic, Romanian, English, Spanish, French, German, Italian, Portuguese, Polish, Hindi, Simplified Chinese, Urdu, Nepali, Bengali, Indonesian, Arabic, VietnameseAutomatic follows the phone language when it is supported and otherwise falls back to English. Core navigation, Settings, source setup, Build, widgets, cache/security, and Help are localized; technical product/standard names stay unchanged. Missing secondary-language copy falls back to English rather than mixing languages.
AppearanceThemePicker: Dark, Light, Eye ComfortEye Comfort is the default for new installations. Existing saved choices remain unchanged. Older System settings are treated as Dark.
Date formatDate displayPicker: Automatic, dd-MM-yyyy HH:mm, yyyy-MM-dd HH:mm, Date onlyAutomatic follows the phone's current region, time zone, short-date, and short-time settings across cards, details, previews, widget rows, and refresh timestamps.
Data sourcesSource timeout (seconds)Numeric text field, 5 to 600 seconds, default 180Maximum wait time for source testing, Browse tables/endpoints, preview, and refresh. Increase for slow VPN/database/API connections; lower it when a bad source should fail faster.
Data sourcesData read protection (seconds)Numeric text field, 5 to 120 seconds, default 60Safety window used for an explicitly unbounded read or a configured limit above 50,000 rows. If it stops a live or cache read, Cifru identifies the read mode, attempted time, measured elapsed time and overrun, configured row limit, and the Settings path. The user may retry only the current read with a controlled 120, 300, or 600 second window; this one-time choice does not change the saved protection setting.
Safety and transparencyQuery transparencyNavigation linkShows the effective read-only request plan for every Home screen and Details screen. SQL entries display the generated SELECT statement with fixed filters, sort, and limit. Every Details sub-button and card enrichment also shows its parameterized child read with a selected-card placeholder instead of a real row value. Other connectors show the method, public path, cache mode, filters, relations, and enrichments. Credentials, tokens, passwords, private hosts, and sensitive query parameters are masked. The plan can be copied for review but cannot be edited or executed from this screen.
StatusRefresh all dataButtonRefreshes all lists and widgets.
AI ConfiguratorEnable AI assistantToggleEnables/disables the AI dashboard draft assistant.
AI ConfiguratorAI Configurator settingsNavigation linkOpens provider selection, API key storage controls, current model picker/base URL for external providers, and External AI Documentation Research settings.
AI Configurator settingsProviderPicker: Apple On-Device Recommended, Mock / Local Templates, OpenAI, Claude, GeminiApple On-Device is preferred when available and requires no API key. Mock uses local templates. OpenAI, Claude, and Gemini are optional external providers.
AI Configurator settingsOpenAI / Claude / Gemini API keySecure field + Save key + Save and test + Clear keyThe Configurator uses the saved key, shared across its screens. When entering a replacement, Save and test verifies it and saves it securely only after success; a failed test keeps the previous saved key. Blank input tests the saved key. Unsaved input is identified explicitly. Keys stay in Keychain on iOS or the encrypted Android secret store, never in exported configurations. Changing the model does not clear the saved key. Only Clear key deletes it.
AI Configurator settingsAvailable modelProvider-backed picker + Refresh model listWhen Settings opens, the provider changes, or the key is saved, Cifru reads the current model catalog directly from OpenAI, Claude, or Gemini. If a saved model was retired, the first available model is selected. If loading fails, the saved model remains as a fallback and the existing Keychain key remains active.
AI Configurator settingsBase URLText fieldEditable for compatible provider endpoints. The model catalog is read from this configured provider base URL.
External AI Documentation ResearchEnable external researchToggleIn 1.1 development, enabled by default for new settings on iOS and Android; users can disable it. Switching to on-device AI preserves this preference but never enables browsing for the local provider. Available only with OpenAI, Claude, or Gemini and still requires the privacy notice and external-send confirmation. Research requests prioritize official producer/vendor manuals and report search evidence and assumptions separately.
Help / AI ConfiguratorAsk an external AINavigation linkSeparate from the built-in AI Configurator. Without a configured external key, it opens the localized copyable prompt. With a stored OpenAI, Claude, or Gemini key, it opens a persistent explanatory chat using that same provider, model, base URL, and Keychain credential.
External AI chatProvider / New conversationMenuSwitches among external providers whose keys are already stored, or deletes the protected local transcript and starts a new conversation.
External AI chatMessage + SendMultiline field + icon buttonSends a bounded recent conversation window, safe metadata, and locally retrieved relevant sections of the complete public Cifru guide after first-use consent. The assistant may search public vendor manuals, explains setup, and cannot apply a configuration.
SiriSiri command hintsText examplesShows examples such as "Help me configure Cifru", "Open Cifru sources", and "Ask an external AI with Cifru".
Cache & SyncCache summary and synchronization diagnosticsNavigation linkShows cached row count, cache size, stale lists/widgets, refresh actions, clear cache, and the current refresh queue state: running, queued, exact stage, partition progress, last successful update, last failure, and retry status. Only lists that currently feed a Home/Details screen, widget, action, or relation appear and are scheduled here; removed elements and standalone unused drafts cannot leave misleading synchronization rows. Automatic list and widget refreshes share a deduplicated coordinator with at most two real source reads across the app. When two lists are waiting, each receives one slot fairly; when only one partitioned list remains, it may borrow the second slot for a second partition. A user-triggered refresh is placed ahead of queued background work, and opening a live list cannot cancel an already running cache refresh. Failed automatic reads use progressive retry delays, while a transport that becomes unreliable in parallel falls back to one read for that source. Opening Home only schedules work that is actually due; it does not wait for that work and automatic jobs do not show the global interactive busy indicator. Cache writes are coalesced and performed with utility priority. Cifru retains an already pending iOS background request when it can run sooner instead of cancelling and postponing it on every lifecycle event. A short background opportunity processes at most two fairly selected reads and prioritizes an external widget within widget work. The screen audits the complete path separately: iOS scheduling, source/list read, widget calculation, App Group snapshot revision, WidgetKit timeline reload, and Watch delivery/confirmation. Advanced mode also exposes an optional External relay + iOS fallback architecture. The app-side relay parser accepts only internal source IDs, a monotonic revision, an event type, and an optional timestamp; it rejects rows, credentials, tokens, private URLs, and business data. Production relay activation separately requires APNs capability/provisioning and a managed relay deployment. The normal iOS-managed path always remains the fallback. Background refresh remains best-effort and runs only when iOS grants execution time; configured minute intervals are due thresholds, not guaranteed timers.
Home Screen, Apple Watch & CarPlay widgetsRefresh snapshot widget every X minStepper, 15...1440 minutesThe minimum and default request is 15 minutes. It is a best-effort due threshold for the local external snapshot, not an exact timer. iOS/watchOS decide actual background execution time, so the displayed timestamp and stale state always refer to the cache value being shown. Generic feeds retain complete bounded snapshots for correctness; SQL and other capable connectors push supported filters, date periods, sorting, aggregation, and limits to the source before materializing rows.
Home Screen, Apple Watch & CarPlay widgetsHide values in external widgetsToggleProtects sensitive values on lock/watch/car displays.
Home Screen, Apple Watch & CarPlay widgetsUpdate widget snapshot nowButtonPublishes the latest selected widget values atomically to the shared local snapshot and reloads every registered iPhone and Watch widget kind. On iOS 17+/watchOS 10+, edit the external widget and choose any configured Cifru widget by its own name; older iOS versions use the compatible static snapshot widget.
Local dataClear cached rowsButtonDeletes cached rows and cached widget values, not the configuration.
Local dataReset workspace and secretsDestructive buttonDeletes configured sources, cached data, and stored secrets from this device.
App modeBranding and app modeNavigation linkSet company name/logo and enable simplified app mode.
App modePreview app modeNavigation linkPreview the simplified configured app experience.
Privacy & SecurityAdvanced modeToggleBasic keeps guided selectors and common calculations. Advanced additionally shows internal field names/types, manual operators, icon names, token headers, row paths, search keys, advanced widget kinds, cross-source matching controls, and explicit Cache/Live selection.
Privacy & SecurityRequire Face ID / passcodeToggleRequires local device authentication before entering the app.
Privacy & SecurityShow security warningsToggleShows/hides configuration warnings.
Privacy & SecuritySecurity reviewNavigation linkShows source/list/security findings.
LegalHelp, Legal, Email supportLinksSupport and legal documents.

App Mode / Use As App

Path: Settings > Branding and app mode. This is how a configured workspace can feel like the user's own native app.

ControlTypePurpose
Company nameText fieldName shown in the app mode header.
Company logoImage pickerLogo shown in app mode and on the locked Face ID/passcode screen when configured.
Remove logoDestructive buttonClears the custom logo.
Use as appButtonEnables app mode and hides builder tabs.
Exit app modeButton in app mode settingsReturns to the builder.

Subscription Limits

PlanLimitsNotes
Free1 data source, 2 tables/lists from that source, basic widgets, local cache, export, 0 data links.Free users can still build useful buttons and widgets for one source, but they cannot create unlimited tables/lists.
Starter3 data sources, unlimited tables/lists, and 3 data links.Good for small dashboards that need several sources and a few details links.
ProUnlimited data sources, unlimited tables/lists, unlimited data links, advanced widgets and dashboards.Pro and old Business entitlement names resolve to Pro.

StoreKit 2 loads the Starter and Pro product names, descriptions, localized prices, and billing periods from App Store Connect. Cifru does not invent fallback prices. If products are unavailable, the screen shows an error and Retry. Restore Purchases uses the user's Apple Account, and Privacy Policy plus Terms of Use remain available on the same screen. Local Debug builds can use a Pro development entitlement; Release and TestFlight builds begin at Free while StoreKit checks the current entitlement and never treat a plan stored in the local workspace as purchase proof. After a successful verified purchase or transaction update, Cifru activates the verified plan immediately and serially reconciles it with Transaction.currentEntitlements and the verified subscription status. The subscription screen distinguishes active, billing grace period, billing retry, expired, revoked, and verification-failed states. A verified billing grace period keeps paid access active; billing retry without grace does not. TestFlight purchases run in Apple's accelerated sandbox renewal environment and do not charge real money.

A subscription unlocks the self-service features of its plan. It does not include personalized installation, source administration, credential creation, mapping, query-writing, migration, monitoring, or configuration services unless those services are agreed separately in writing. The user or their administrator configures and validates connected systems and results; Cifru's read-only checks, documentation, AI suggestions, and Community templates assist that work. Mandatory consumer rights remain unaffected.

If a subscription expires, is revoked, or moves to a lower plan, Cifru returns to the applicable lower plan and keeps the user's local configuration so it can be restored later. Home and Build continue to show buttons and Details links that exceed the active entitlement in their original order, using a pale rose card, outline, lock icon, and an explicit reason rather than color alone. Tapping one explains the exact source, list, custom-query, relation, or cross-source limit and offers a route to the available plans; it never starts a read. On Free, the first eligible lists used by visible Home buttons remain active in Home order, followed by any eligible standalone lists, so users can reorder Home to choose deterministically what remains available. Locked sources, lists, relations, pages, and widgets cannot test a connection, browse tables/endpoints, preview or read rows, refresh in the foreground or background, publish external widget data, or be sent to the AI Configurator as usable metadata. Reactivating an eligible entitlement restores access automatically without recreating the preserved configuration.

Settings path: Settings > Subscription Plans. Product IDs: com.madalindumitru.cifru.starter.monthly and com.madalindumitru.cifru.pro.monthly.

Siri, App Shortcuts, And Apple Intelligence Readiness

Cifru exposes a small set of safe App Intents/App Shortcuts so Siri and system surfaces can help users reach the right setup area. This is the public Apple-supported path for Siri/Apple Intelligence integration on current iOS releases and is the safest future-compatible anchor for newer iOS versions.

Shortcut / IntentWhat it opensSafety boundary
Help me configure Cifru / Open Cifru start guideStart guide sheet with the recommended setup path and templates.Does not read credentials, cached rows, or source data.
Open Cifru sourcesSources tab, so the user can add, save, and test a source manually.Does not create a source automatically and does not test without the user opening/saving settings.
Open Cifru build / Build my dashboard in CifruBuild tab, where lists, Home buttons, Details, links, and widgets are configured.Does not run source queries by itself.
Ask AI with CifruAsk AI screen with the copyable prompt and documentation link.Only shows a local prompt. The user chooses if and where to paste it.

Important: Siri/App Shortcuts are navigation and guidance helpers. Cifru does not send database credentials, API keys, cached rows, exports, or imported local files to Siri or to a Cifru backend. The app does not depend on the legacy SiriKit capability for this flow; it uses App Intents/App Shortcuts.

Widgets, Apple Watch, And CarPlay

Cifru external widgets read a local snapshot created by the iPhone app. They do not open network connections directly. This is important for safety, App Store review, and privacy.

Cache Guidance

In 1.1, Home shows an active cache refresh separately from the last completed read. Relative age labels advance while Home is visible, without querying the source. Deleting an unused button/list retires its queued or running work; a list still used by another button or widget is preserved.

When an opening filter selects one fully downloaded partition, that selection can be displayed while the other partitions are still loading. It is explicitly labeled provisional until the complete cache is published. It does not replace the last complete snapshot or advance its timestamp or total row count. Unfinished or invalid partitions are never presented as complete.

The minimum automatic cache refresh interval is 15 minutes. The configured interval means that data becomes due for refresh after that time; it is a best-effort target, not an exact background timer. iOS decides when Cifru may run and can delay execution according to battery, network, and system activity. Cifru catches up at every granted background opportunity and whenever the app becomes active; due foreground refreshes use the same fair two-slot coordinator as manual work. An optional metadata-only relay mode can wake the same bounded read-only queue after a source-change event, while retaining the iOS-managed fallback. The relay event never contains source rows or secrets. Enabling a real production relay is a separate deployment task because it requires APNs provisioning and a managed service.

The editable row limit defaults to 50,000 and accepts values from 1 to 1,000,000. Values above 50,000 show a mobile-performance warning and use the editable Data read protection window, which defaults to 60 seconds, but the explicit configured limit remains effective. When Limit number of rows is Off, Cifru still applies a 50,000-row internal device ceiling. A read that exceeds its safety window, or an unbounded read that reaches that ceiling, is stopped before rows are cached or rendered and shows an actionable, localized message. The message distinguishes a live read from a cache read and reports the applied time limit, measured elapsed time and overrun, and configured row limit when available. The user can adjust Settings > Data sources > Data read protection, reduce the read with a date period/filter/row limit, or retry only that attempt with 120, 300, or 600 seconds. A controlled retry does not permanently change Settings.

Source/list typeRecommended modeReason
Reliable SQL over LAN/VPN, small row countLive query or CacheLive is convenient when the connection is stable. Cache reduces repeated mobile database access.
Large SQL tables/reportsCache with Max rows and refresh intervalProtects the phone and source database from huge repeated queries.
FTP/feed filesCacheFeed files are often static for a period and should not be downloaded constantly.
Ecommerce/API sourcesCache with reasonable Max rowsAPIs often have rate limits and paging.
Widgets / Watch / CarPlay snapshotCache or local snapshotExternal widgets should use local data only.

Troubleshooting

ProblemLikely causeWhat to tell the user
Secure connection could not be trustedPrivate/self-signed certificate, mismatched host name, missing public chain.If it is their own SQL server, enable Trust server certificate, or install a valid public certificate. For new SQL Server sources the toggle defaults on; if it was turned off, Cifru shows a hint after the failed test. Do not enable it for unknown servers.
SQL port appears wrongPort field should be plain numeric text.Type the full port directly, for example 1433 or 8433. Do not use separators such as 1.433.
No rows foundWrong table/path/sheet, authentication, rows path, or source returned an empty response.Use Check connection, Browse tables/endpoints/sheets, search/select the object if available, tap Save selection & preview rows, verify endpoint/table/sheet, and set Rows path if JSON/OData/GraphQL response is nested.
Browse tables/endpoints or preview times outSlow VPN, source server, large metadata query, slow API, or unreachable host.Open Settings > Data sources and adjust Source timeout. Default is 180 seconds; valid range is 5 to 600 seconds.
Live data unavailable / cache read unavailableThe source returned an authentication, permission, TLS, network, response-format, timeout, or read-protection error.Cifru keeps the last valid cached content when one exists and shows a localized actionable diagnostic without credentials. For a timeout it states whether the failed operation was a live or cache read, whether Data read protection applied, the attempted and elapsed seconds, how far the attempt exceeded the limit, and the configured row limit when available. Open Settings > Data sources > Data read protection to change the saved 60-second default, or use Retry with 120, 300, or 600 seconds for the current attempt only. For non-timeout failures, follow the specific authentication, permission, TLS, network, or response guidance shown by the connector.
Connected, but not OKLogin/basic connectivity succeeded, but catalog, columns, endpoint rows, sheet, or feed structure could not be verified.Open the source and read the exact second-stage error. Do not build or ask AI to guess until Save/Check connection reaches OK.
AI response is incomplete / JSON is cutThe provider exhausted its output budget or returned a malformed response before closing the JSON object.Cifru discards the partial response and retries once with a compact request without echoing the cut JSON. If the retry also fails, choose another current model/provider or try again; no draft is created or applied.
AI found documentation but not the requested objectThe official manual describes the requested flow, but the configured source did not expose the matching concrete table/view/endpoint or its detail object.Check read-only schema permissions and source setup. Cifru intentionally stops instead of substituting an unrelated document type.
NIOCore.ChannelError / connection closed during MariaDB or MySQL discoveryTransport channel closed between connection and schema discovery because of a transient network/VPN event, TLS negotiation, proxy/firewall behavior, or server connection limits.Cifru retries once with a fresh connection and uses three compatible table/column discovery methods. If it still fails, verify Require/Prefer TLS, certificate settings, VPN/firewall and server connection limits. A working login alone does not prove catalog/preview access.
XML feed shows no fieldsThe repeated record element is not named item, for example Produs, or the XML is malformed.Leave the row name on its default and retry; Cifru now detects a repeated structured element automatically. For ambiguous XML, enter the exact row element manually.
REST JSON returns one wrapper instead of rowsThe row array is inside a response envelope.Cifru recognizes common data/results/items/records/rows/value/nodes envelopes. For a custom structure, set Rows path explicitly.
Details button or cross-source completion shows no matchesThe two explicitly selected fields do not contain the same normalized value format.Open the Details or cross-source linking wizard, choose the second source/list, select one concrete field on each side, and check the bounded representative match rate. A field's optional semantic meaning can suggest candidates, but it does not create the link.
Filter does not find expected dataRows were not fetched due to Max rows/cache limit, wrong field type, or wrong field key.Increase Max rows, refresh the list, use the field picker, and set Type to Date/Number when appropriate.
Widget value looks oldThe source read may be overdue, the external snapshot may still be pending, or Watch may not yet have applied the latest revision.Open Settings > Cache & Sync and compare the latest iOS execution with Apple Watch sync. Use Refresh widget cache now, then Update widget snapshot now. Cifru keeps the newest revision queued and the Watch extension processes pending WatchConnectivity content in background when watchOS grants time. A pending Watch confirmation still means iOS/watchOS has not completed best-effort delivery yet; opening Cifru once on Watch requests the latest application context and an immediate reachable-session copy.
Source row says ConfigureUser added source but did not save/test successfully yet, or the latest automatic test failed.Open the source, complete required fields, then tap Save or Check connection. Save keeps settings and runs an automatic test.

Step-By-Step Examples

Example 1: SQL Server Customer Invoices With Details

  1. Go to Sources > Add sources > Databases > SQL Server.
  2. Open the new source. Fill Host, Port, Database / service, Username, Password, TLS. Use a read-only SQL user.
  3. For new SQL Server sources, Trust server certificate is on by default because many private company servers use internal certificates. Keep it on only when the server is controlled by the user; otherwise prefer a valid public certificate.
  4. Tap Save or Check connection. Both save the current settings and run a connection test. Wait for OK.
  5. Go to Build > Home screens > Choose source and table/path and choose the tested SQL source.
  6. Tap Browse tables. A modal opens over the assistant. Use the search field or table list to choose the invoice table/view. The selected SQL object fills Table/view to read directly and is displayed once as schema.table, for example dbo.accesex_facturi_clienti.
  7. Tap Save selection & preview rows.
  8. In Choose fields, set friendly labels such as Invoice number, Customer, Date, Total, Store. Set Type Date for invoice date and Number for totals.
  9. Optionally assign semantic meanings such as Invoice ID, Customer ID, Store/Location, or Date. These labels help formatting and later suggestions; they do not create a relationship by themselves.
  10. In Add to Home, name the button Customer invoices and tap Add button to Home.
  11. In the Customer invoices Home screen, keep Sort set to the invoice date field descending and set Max rows to a reasonable value such as 100, 500, or 1000. For generated SQL reads, Cifru applies the date sort before the row limit, so the app fetches the latest invoices instead of an arbitrary set.
  12. Create or configure a second list for invoice lines. Preview it and map Invoice ID, Product ID, EAN/Barcode, Quantity, Price.
  13. Return to the Customer invoices Home screen. Tap Add guided Details or Details / row action > Guided Details.
  14. Choose invoice lines as Details list/table. Match parent invoice_id to child invoice_id. Use Suggest fields automatically and check matching rate.
  15. Save. Opening an invoice row should now show a Details button with matching invoice lines.

Example 2: Product Enrichment From WooCommerce

  1. Add the WooCommerce source with Store URL, Consumer key, and Consumer secret.
  2. Check connection.
  3. Go to Build > Home screens > Choose source and table/path and create a Products button from known store data or an API path.
  4. Map product ID, SKU, EAN/Barcode if available, product name, image URL, price, stock status.
  5. On an invoice-lines list, optionally identify EAN/Barcode or SKU by its semantic meaning so Cifru can suggest a likely candidate.
  6. For one product match per invoice line, use Build > Home screens / buttons > select invoice lines screen > Fields from other lists. Choose the enriching source/list, the concrete EAN/SKU field in the current screen, and the equivalent concrete field in the selected source. Review the match rate before adding product name, image URL, price, or stock status to the same card.
  7. If the product should open a separate product screen, use a row button named Product with Show matching details.

Example 3: FTP CSV Feed Dashboard

  1. Go to Sources > Add sources > Data feeds > FTP file.
  2. Fill FTP host, Port, Username, Password, Remote file path, and File format CSV or AUTO.
  3. Check connection.
  4. Go to Build > Home screens > Choose source and table/path, choose/preview the file, map fields, and create a Home button. For XLSX files, tap Browse sheets and select the sheet that should become the list.
  5. Set list Loading to Cache, Auto refresh cache On, Every 15 or 60 minutes depending on feed update frequency.
  6. Add widgets such as Count, Sum, or Top list using filters and sort rules.

AI Configurator

Structure is not business correctness. A read-only SQL check can confirm real output fields without running an expensive report. It cannot decide whether you intended only products present in a warehouse or all products including those without stock. Use the optional real-data preview for that review, and add explicit instructions when regenerating. Preview rows remain local and are not sent to the AI provider.

SQL admission distinguishes grouped expressions such as WHERE (...), CASE WHEN (...) and TOP (5) from function calls. Unverified routines, writes and external execution remain blocked. Rejection diagnostics distinguish unsupported syntax, an unverified routine and outer ordering that belongs in Studio; they contain no query text or business values. Explicit requests for no Details also override a preceding request to reuse another screen layout.

Path: open Build, then tap the visible AI Configurator text action in the upper-right toolbar. This screen lets a user describe a dashboard in normal language. The same pulsing required-step cue used by the manual button builder guides the user in natural top-to-bottom order: enter the request, review the data-source choice when several sources are available, review or optionally enter the application/system name, then use Generate draft. Only the current step pulses; this is guidance and never silently changes the selected source or invents a system name. If the assistant is disabled, or an external provider is selected without a saved API key, this toolbar action opens AI Configurator settings directly so the user can enable and complete setup first. The selected provider returns only declarative JSON. Generate draft automatically discovers concrete schema, compiles mandatory main/Details/lookup topology locally, validates the JSON, runs bounded read-only functional tests through the real connectors, performs at most one safe functional repair-and-retest pass when needed, and then shows the final JSON/dashboard preview. AI can still omit or misinterpret a requirement, so the user must review the preview and tests and still decides whether to tap Apply configuration. While generation is active, the red Stop control also displays a monospaced elapsed-time counter; it is elapsed time, not a simulated completion percentage. The active job is owned above the temporary SwiftUI screen, so a phone-call interruption, App Lock presentation, or navigation rebuild does not cancel it merely because that screen was reconstructed. iOS background time remains finite: if the operating system terminates the process, Cifru records only that an anonymous run was interrupted, applies nothing, stores no prompt or credential in that marker, and offers a safe retry when reopened.

Community and configuration library

Path: Build → Community and configuration library. Library contains only public-catalog actions: explore approved packages or select one or more of the user's Home-button trees and submit them for moderation. Direct transfer and backup is separate: it imports or exports a .cifruconfig attachment through Mail, AirDrop, or Files without publishing anything. A shared tree includes its required Details/sub-buttons, lists, relations, enrichments, related widgets, and used common fields. Application/system name, configuration language, and country coverage are mandatory. Multiple countries are supported; ALL is available only for configurations that include English.

Every import makes each Home tree an explicit selectable checkbox, reports how many are selected, and offers Select all / Deselect all. The full downloaded JSON and the exact selected subset are shown separately. The user maps symbolic source slots to already configured local sources. For a mapped SQL source, Community compatibility compiles either the complete read-only custom query or an exact zero-row SELECT against the selected table/view, then validates the returned schema and mapped columns without materializing business rows. This keeps complex views responsive while still confirming the object, read permission, query shape, and expected fields. Non-SQL feeds and APIs retain a tiny bounded read because they do not expose a portable database-style result schema. The mapped source itself must already have passed the normal source setup test, including a bounded real preview. Compatibility failures identify the affected list/object and missing fields instead of exposing a generic driver error. Apply remains visibly locked with a reason until selection, plan, mapping, and read-only tests pass. Custom-query components cannot be imported in Free or Starter regardless of whether the file came from Community, Mail, AirDrop, or Files. Packages never carry source credentials, private endpoints, cached rows, or subscription rights. The last successful import can be undone from the Community screen.

The optional Community account is needed only for publishing, reviews, and contribution management. Cifru reads the public service health status and displays only social providers actually configured by the Community operator. Mobile authorization uses a browser session, state and PKCE; the resulting Cifru Community token is stored in Keychain. Browsing, package download, direct import, and private export remain available when no login provider is active. Publishing can include up to eight optional screenshots selected through the system photo picker. Cifru normalizes them to JPEG on device; the service validates dimensions and format, rewrites them without embedded metadata, creates thumbnails, and publishes them only after moderation. Configuration languages and countries use compact searchable multi-select screens; country code ALL remains mutually exclusive with individual countries.

Public library app-entry hooks

When the user chooses Explore the online library, Cifru opens the public Community URL with three presentation-only query parameters: entry=cifru_app, platform=ios|android, and lang=<effective BCP-47 interface language>. The Community site uses them only to select the app-oriented layout, platform wording, and initial language. If the app language is Automatic, Cifru resolves the effective system language and region rather than sending the literal value automatic; if it cannot resolve a language, it falls back to en. Existing legitimate URL parameters and fragments are preserved, while duplicate entry, platform, or lang keys are replaced with one final value. These hooks contain no account, email, user or device identifier, subscription or plan, explicit IP value, source configuration, business data, or credential, and they are not used for advertising, profiling, fingerprinting, or individual tracking.

The normal flow is designed for non-programmers. Tap one of the request examples or write a short request, leave source choice on Automatically choose relevant sources, then generate. During generation, the same action becomes Stop generation and cancels the active provider/check pipeline without deleting the previous draft. Cifru shows only the real current operational phase, not model chain-of-thought. Regenerate keeps one previous draft that can be restored. The result is human-first: visual Home cards, nested Details and widgets appear before an exact change summary; technical topology and raw JSON are collapsed until opened. Apply has a separate confirmation and a successful apply can be reversed once with Undo last AI apply.

Apple On-Device has a smaller practical context budget than external providers. When necessary, Cifru sends it a relevance-ranked subset that keeps the strongest live main/detail candidates and relation/enrichment fields for every independently requested flow. The UI shows both full prepared counts and focused counts. Local graph completion and validation always use the full discovered schema. External BYO-key providers normally receive one request, but malformed output or one repair after a real functional test may require an additional provider request and may incur provider charges.

For best results, the user should write which application, database, service, or system they want to integrate, which Cifru data source/list should be used if the AI cannot infer it, and which Home buttons, row Details buttons, filters, widgets, or exports they want. If External AI Documentation Research is enabled and approved, the external provider searches official producer/vendor manuals first. Cifru also supplies generic implementation notes describing how its installed SQL, feed/file, REST/GraphQL/OData, ecommerce, Details, filtering, limiting, and enrichment components actually behave. The AI must cross-check every proposed object and field against exact safe metadata and list manual titles/URLs and uncertainty under Documentation used and assumptions. The initial request contains no source rows. An optional automatic-repair request may include only the bounded identifier sample described in the privacy section; it never includes credentials, names/contact data, invoice contents, descriptions, prices, totals, stock, quantities, or private URLs.

If the user has added and fully verified a source but has not manually created a list/table, AI Configurator can still start. Cifru discovers schema locally: SQL table/view names and column names/types through fixed read-only catalog queries, and feed/API/XML field or tag structure through a bounded local preview. MySQL/MariaDB discovery tries SHOW TABLES, SHOW FULL TABLES, and information_schema.tables; columns use SHOW COLUMNS, DESCRIBE, then information_schema.columns. A transient NIO channel closure is retried once with a fresh connection. HTTP/FTP transport interruptions are also retried once when safe. Object names are ranked separately for each requested flow. Cifru contains no executable profiles keyed by ERP, ecommerce product, application, table, endpoint, installation prefix, or field name. Public manuals can improve the external provider's interpretation, but every candidate still comes from the live source. A connection is only a profile, not a readable list: Cifru never sends generic _source_setup metadata to AI as a usable list object. It resolves the selected connection to a concrete table, view, endpoint, sheet, feed, file, or vendor object and requires the returned list to reference that object. If the concrete structure cannot be read, generation stops before calling AI and distinguishes transport interruption, permission denial, authentication, TLS, invalid response, and missing-object cases where possible. Cifru also blocks an AI-created SQL list whose table/view target is empty. If the user selects one primary source, Cifru can include verified auxiliary lookup sources such as feeds, files, object storage, REST/GraphQL/OData APIs, and ecommerce connectors. Initial generation sends schema metadata only. Full row/feed contents, URLs, hosts, credentials, tokens, connection strings, invoices, customers, prices, stock, and quantities are never sent. One later automatic repair may include only the optional bounded identifier sample described below.

After an AI provider returns JSON, Cifru sanitizes it and tries to repair common draft mistakes before validation. It first reconciles each list with a concrete discovered object using the list's requested role (main, Details, lookup/enrichment), dashboard/list/relation titles, configured source alias and root connection, exact field coverage, and the provider's declared object references. This prevents a semantically different but readable table from replacing the requested business object merely because both expose fields such as id_document. Import, staging, queue, buffer, and write-back objects are strongly rejected as automatic substitutes unless the user explicitly asks to inspect that exact read-only surface. If top-level dataSources and list dataSourceId values contradict each other, the repaired graph is made internally consistent before testing. The generic provider repair runs before Cifru's deterministic request completion, so it cannot later reverse a locally verified Details or enrichment direction. When the user explicitly selected a concrete table, endpoint, sheet, feed object, or configured list, that exact object remains the visible primary list before Cifru adds Details or cross-source fields; a documented integration profile can still replace it when the prompt explicitly requests that documented business object. Examples of other repairs: if the AI invents generic fields such as title, status, amount, or valoare, Cifru maps them to the closest fields in the discovered schema or removes them if no safe match exists. If a widget points to a list created in the same draft, Cifru accepts that list reference. If an enrichment is backwards, such as an XML feed trying to enrich invoice lines, Cifru can flip it so the visible invoice-line card is enriched from the feed. If an AI provider mistakenly uses a raw source ID as parentListId or childListId in a relation/enrichment, Cifru creates an intermediate lookup list for that source and rewrites the relation/enrichment to the generated list ID. Feed/API/XML display and enrichment fields must exist in the concrete detected schema. Guessed fields such as LinkEmag, competitorUrl, imageUrl, EAN, or SKU are removed when that exact source did not expose them.

Provider completion is checked before any JSON fragment is accepted. If OpenAI, Claude, or Gemini reports an incomplete/max-token response, Cifru ignores the partial text and makes at most one compact retry. The retry uses the original request and the same safe metadata; it does not echo the malformed partial JSON. The same retry is used when a provider claims completion but returns an unclosed or non-object JSON document. If the second response is still malformed, Cifru discards both responses, shows a clear error, and leaves Apply disabled. Truncated JSON is never sent into the normal mapping-repair pass.

A complete JSON response that merges independent requests, chooses the wrong live object, omits a Details edge, reverses a relation, or omits a requested enrichment does not consume a second provider request. Before object binding, Cifru turns numbered and natural-language clauses into a vendor-neutral intent graph. Each business flow receives its own Home role; inherited phrases such as “la fel” keep the requested Details shape without copying the previous business object. Cifru then deterministically rebuilds the graph from concrete objects and compatible semantic field aliases already discovered on the device. The reconstructed graph is validated for both technical readability and requested-flow coverage and must still pass the production-connector dry-run.

Finding readable tables is not enough: every requested flow must have an independently matched Home screen, every requested Details action must use a compatible child object and real relation fields, and every requested opening filter must exist on that flow. A global dashboard title is never used to bind every list, and a relation for one parent/child pair cannot overwrite another sub-button. If the concrete graph cannot be built from locally discovered safe metadata, generation stops and explains the missing flow instead of silently returning fewer buttons.

Enrichment lookups are chosen conservatively and are transport-neutral. A per-item lookup may come from any configured read-only source, including SQL Server, MySQL/MariaDB, PostgreSQL, Oracle, an ecommerce connector, API, feed, FTP/object storage, or local file, when its concrete item identity matches the detail rows. Cifru prefers exact or semantically compatible pairs such as cod_produs to EAN, barcode to ean_code, or matching SKU/product IDs. A wide business table joined only through a header/document identifier is a master-detail relation, not a lookup, and is not attached as card enrichment. When the user asked for extra card fields but no configured source exposes a compatible lookup schema, Cifru still generates the main screen and Details, explains the missing lookup in a warning, and lets the user connect or map the lookup source later, instead of failing the whole generation.

For every flow, Cifru removes a conflicting provider-proposed enrichment between the selected detail and lookup lists, then creates one locally validated edge in the visible-detail-to-lookup direction. This prevents a reversed or duplicated AI edge from leaving a valid field name attached to the wrong source. Verification is tied to exact source identities, so two configured instances of the same application cannot invalidate or redirect each other's dashboard.

Required topology is not delegated entirely to the AI provider. After parsing the provider's declarative JSON, Cifru interprets common non-technical requests such as "when I open one, show what it contains", "put the products inside each order", "show the conversation for each ticket", or "match the picture from the other feed by product code". It then completes a missing main-to-Details relation or cross-source enrichment locally, using only exact discovered fields, compatible semantic roles, and built-in Cifru components. This works the same way for databases, ecommerce APIs, REST/GraphQL/OData, feeds, FTP/object storage, and local files. It can match vendor-neutral identifiers such as ticket_id, project_id, budget_id, PO_ID, UUIDs, documented ID pairs, and EAN/SKU families. A plain ambiguous id is not accepted as a fallback unless the local metadata gives it a compatible semantic role.

The original user request remains the semantic authority throughout automatic repair. Cifru sends a separate technical repair prompt to the provider, but it does not rebuild intent from that repair text, a global dashboard title, or a previously wrong draft. Requested main/detail roles and their Details edges are reconstructed locally after every provider response. The final check compares compatible fields actually discovered in the installation; safe aliases may match when local metadata assigns the same semantic identity. Provider output cannot remove, merge, or redirect a requested flow.

Cifru also normalizes requested scope before preview. A provider-created relation is removed when the user did not ask for Details; an enrichment is removed when the user did not ask to combine sources; and unrequested or duplicate widget types are removed. Short intent words are matched as complete words, so a request containing categorie is not misread as the Romanian count word cate. Common Romanian singular/plural forms such as imagine, imagini, and imaginile are recognized, while explicit refusals such as "nu vreau indicator" take priority over positive keywords elsewhere in the sentence. Phrases such as "show the total field on the card" do not create a metric widget, and "show the existing link column" does not create a cross-source mapping. The resulting graph is validated again and then sent through the local read-only dry-run. If the user's intent is still ambiguous or no compatible concrete objects/fields exist, Cifru stops with a focused setup message instead of guessing.

Cifru then runs an automatic local dry-run through the same production connectors used by the generated screens. It tests every list/widget with small row limits, tests Details against representative parent rows, and tests cross-source enrichments using the same common-field normalization rules used at runtime. Direct database connectors group candidate equality values for the same child field as read-only OR alternatives and apply the row limit after filtering. Feed/file/custom API enrichments use a bounded local lookup scan where portable server-side equality filtering is unavailable; OData and supported ecommerce APIs may push compatible filters to the service. If a schema, field, filter, relation, or enrichment is repairable, Cifru sends one correction request and retests the result. The repair request contains the previous declarative JSON, safe diagnostics, and, only when enabled and necessary, at most one identifier-only mapping sample per relevant object. Authentication, permission, network, TLS, and timeout errors are shown directly and are not sent to AI for repair.

Provider testing is deliberately separate from connector testing. On July 11, 2026, the synthetic OpenAI evaluation ran 68 novice-style prompts across all 17 Cifru source kinds with gpt-5-mini-2025-08-07. All 68 responses contained the required list/Details/enrichment/widget topology, but 30 raw responses also contained at least one unrequested relation, enrichment, or widget. This is why local scope normalization is mandatory. These synthetic provider tests do not claim that every third-party server, permission model, plugin, or schema is live-compatible; the generated draft must still pass the on-device production-connector dry-run before Apply becomes available.

The AI JSON can describe lists, homeScreens, relations, enrichments, and widgets. This allows a natural prompt such as: "For my ERP, create latest supplier invoices, add Details for invoice lines, and show product/feed data on invoice lines by matching EAN." Cifru maps this to native Lists, Home buttons, row Details buttons, and card enrichment fields after validation and user confirmation. For XML competitor feeds with fields such as EAN, LinkDedeman, and LinkMathaus, the expected setup is invoice lines as the displayed parent list, the XML feed as the lookup child list, a common product/EAN field as the match, and Link* fields as display fields.

Public manuals are deliberately not copied into built-in completion rules. The same compiler handles an ERP, ecommerce platform, ticketing system, public API, spreadsheet, feed, or an unknown internal database. Research may tell the external provider what a business concept usually means and which public object names to search for, but Cifru selects only objects and fields present in the configured source. This avoids a fix for one documented application becoming a hidden exception that makes the other flows less reliable.

Important safety rule: Cifru does not execute AI-generated code. The AI Configurator cannot download modules, create plugins, run scripts, evaluate code, or add behavior that is not already implemented in the app binary. It can only request existing widgets, filters, actions, Home/dashboard objects, and read-only source metadata.

AreaControlTypePurpose
RequestDescribe what you want to see in the dashboardText editor + example buttonsDescribe the business result, for example Top 5 customers by margin. You do not need to ask for SQL or manuals in this text: Cifru supplies those instructions from the separate controls. Pro custom-SQL permission allows calculations and joins where needed, without forcing unnecessary SQL. Approved online research requests manual titles, links and explanations automatically.
RequestWhich sources to usePickerDefaults to Automatically choose relevant sources. A user may choose one configured list/connection. Cifru resolves connections locally to concrete readable objects. Initial generation sends only object/list IDs, display names, field names/types, and allowed capabilities; optional bounded identifier samples are reserved for automatic repair and can be disabled.
RequestApplication/system to integrateText fieldName the app, ERP, ecommerce platform, feed vendor, or internal system you want Cifru to integrate. You may refer to a configured source by its exact name/alias, for example "use WooCommerce B2B"; Cifru prioritizes safe metadata belonging to that alias and keeps same-type sources distinct. Also explain which buttons/screens/widgets should be created. Do not put credentials here.
External AI Documentation ResearchCollapsed research controlsDisclosure + approval toggleOptional and shown only when external research is enabled in Settings with OpenAI, Claude, or Gemini. Manual URL/text fields remain nested until requested. URLs must be public, not local/private/internal.
External AI Documentation ResearchUser-approved public documentation textText editorOptional documentation excerpt pasted by the user. It must not contain private credentials, real feed rows, invoices, customers, prices, stock values, tokens, or private endpoints.
External AI Documentation ResearchApproval toggleToggleConsult online manuals starts checked when an external provider, the global research preference and privacy approval permit it. The user can uncheck it before generating; ordinary screen updates do not undo that choice. No research starts merely by opening this screen. Disabling research never blocks schema-only draft generation. The separate Pro custom-SQL option remains off by default.
ActionsGenerate draft / Stop generationStateful highlighted buttonThe enabled next-step action has a subtle shimmer, respecting Reduce Motion. It runs the full pipeline: discover schema, build safe context, optionally research approved manuals, request JSON, validate, dry-run, repair once when appropriate, and retest. While active it clearly says that generation may take a few minutes and becomes a real Stop action. The job survives temporary screen reconstruction and receives finite iOS background execution; expiration cancels the network/verification task and closes the background lease instead of leaving an orphaned run. External requests use a 240-second timeout. Missing prerequisites and failures produce a visible status.
ActionsCurrent stepSingle progress statusShows one current operational step, such as discovering schema, waiting for declarative JSON, testing read-only queries, repairing mappings, or retesting. It is not model chain-of-thought and does not keep a long trace history.
ActionsRegenerate / Restore previous draftButtonsGenerates another version without losing the immediately previous draft; the two versions can be swapped for comparison.
ActionsDiscard draftButtonDiscards the current preview; this is separate from Stop generation.
Preview dashboardVisual Home cards, nested Details, enrichments, and widgetsHuman-first visual previewShows the proposed layout/parent-child structure. In 1.1, a separate device-only data preview can show a bounded sample from a real local read; sample values are never added to provider JSON or the saved draft.
Change summaryWhat will changeSummary rowsStates how many lists, Home buttons, Details actions, cross-source completions, and widgets will be added or updated and states that unrelated workspace items are not deleted.
Technical previewTechnical structure + JSONCollapsed disclosuresShows the relation graph and exact declarative JSON only when the user expands them.
Automatic verificationFunctional check listPass/warning/fail labelsShows the result for each list, widget, Details relation, and cross-source enrichment. Apply remains disabled while any failed check is present.
Documentation used and assumptionsManual titles, clickable public URLs, uncertaintyCollapsed selectable listShows source titles/links returned by the provider's actual search metadata separately from the model's assumptions. OpenAI search sources, Claude web results/citations and Gemini grounding/citation metadata are read using their respective API formats. Missing evidence is disclosed; merely mentioning a manual does not verify its use. The AI is instructed to identify the affected list, field or calculation in each assumption. These are manuals for the application being integrated, not the AI provider's API manuals. A cited source and successful SQL structure check do not prove business arithmetic or grouping; use the optional local preview and correction instructions.
Warnings and errorsValidation listCollapsed notes + visible errorsAI notes are collapsed by default. Validator and functional errors remain visible and block Apply configuration.
ApplyApply configuration + Undo last AI applyConfirmation and restore buttonsCreates or updates native elements only after validation, functional verification and manual confirmation. Reapplying the same preview is disabled. Before mutation, Cifru snapshots the local workspace so the last AI apply can be undone. Undo restores local lists, screens, relations, enrichments, widgets and cache; it never writes to a configured source.

In the 1.1 SQL preview flow, a slow or cancelled optional read does not undo a successful structure check. If the read instead detects changed columns or lost access, Cifru revokes that check and asks you to regenerate before applying. The exact source, SQL and field configuration must still match the locally checked draft; an ordinary cache timestamp update does not invalidate it. Preview values stay on the device.

What does the SQL check actually verify?

1.1 development — Allow custom SQL queries (Pro): this optional Configurator switch starts off. With an external API AI provider and a configured SQL source, it allows a read-only query proposal using that connection. For example, calculate an available balance or join a document header to its lines. Leaving it off preserves normal table/column selection. A proposal is not permission to write, run an unknown database function, invent another source as a table or apply automatically. This development feature is still undergoing cross-platform acceptance testing.

Quick structure check: Cifru uses the configured connector to check the read-only query and the actual result columns without reading the heavy result. This is not a zero-row preview, and it does not prove that a business calculation or join returns the intended values.

1.1 development — Choosing the right tables: before opening a SQL connection for an AI proposal, Cifru checks all physical table/view references, including JOINs and nested queries, against the discovered local objects. Ambiguous or undiscovered references are not executed. Names suggesting import, staging, buffers, queues or temporary data require that exact operational list to be explicitly selected in the app; selecting the connection alone does not grant that exception. For example, a sales-history report should not silently read a temporary invoice-import buffer. A name is only a risk signal, not proof of a table's meaning. Cifru may request one corrected draft and otherwise stops with an explanation. Existing manually authored Studio queries are unchanged. These checks do not certify accounting correctness, join cardinality or reporting coverage: inspect the assumptions and, when useful, the optional local preview before Apply.

Optional real preview: choose “Load preview with real data” to inspect a small local sample. For example, check whether available stock is total stock minus reserved stock, whether zero values remain visible, or whether a join duplicates invoice totals. A complex query can still be slow even for a small sample. You can stop it; no AI request or cache update is started by this action.

Correction: write extra instructions such as “keep products with zero stock” and regenerate. You do not have to load a preview first, and the preview values are not sent to the AI. The new draft is checked again. Only you confirm Apply. A source-side read-only database account is an additional safety measure.

Allowed AI JSON Shape

The AI should return a single JSON object, not Markdown. Cifru expects this shape:

{ "version": 1, "dashboardTitle": "Sales and stock", "dataSources": [{"id": "safe_internal_id"}], "widgets": [ { "type": "metric", "title": "Total sales", "dataSourceId": "safe_internal_id", "field": "totalAmount", "aggregation": "sum", "filters": [{"field": "date", "operator": "last_days", "value": 30}] } ], "filters": [], "transformations": [], "actions": [], "warnings": [], "documentationAssumptions": [], "requiresUserConfirmation": true }

Provider Choices

Both AI entry screens show provider readiness before generation. Apple On-Device and Mock / Local Templates do not require an API key and cannot browse the web. OpenAI, Claude, and Gemini are external providers and require a user-supplied key stored in Keychain; when the selected external provider has no saved key, Cifru shows a direct link to AI settings.

ProviderUsePrivacy / limits
Apple On-Device, RecommendedDefault when Apple Foundation Models are available on supported iOS versions.No API key. Runs on device. No web browsing. Uses prompt, safe metadata, schema, allowed widgets/actions, and local/user-provided documentation text.
Mock / Local TemplatesFallback for simulator, unsupported devices, unavailable Foundation Models, or testing without API.No external provider. Uses built-in templates for sales, stock, top products, invoices, orders, and cashflow-style requests.
OpenAIOptional external provider configured by the user.API key is stored in Keychain. External documentation research is allowed only when enabled and approved by the user.
ClaudeOptional external provider configured by the user.API key is stored in Keychain. External documentation research is allowed only when enabled and approved by the user.
GeminiOptional external provider configured by the user.API key is stored in Keychain. External documentation research is allowed only when enabled and approved by the user.

For OpenAI, Cifru parses the raw Responses API output defensively. It does not assume that text is always located at output[0].content[0].text, because the response can include reasoning, web-search, or other items before the final message. Cifru reads supported text/JSON output shapes and reports clearer errors for incomplete responses or output-limit issues.

Safe Metadata Sent To AI

Cifru constructs SafeDataSourceMetadata from configured lists. It may include:

Initial generation does not include source rows. If minimal mapping samples are enabled and automatic repair needs value-shape evidence, Cifru may include at most one reduced row per relevant object, limited to 12 bounded identifier-like fields such as document IDs, product codes, EAN/barcodes, or SKUs. Local filtering excludes credentials, secrets, tokens, URLs, hosts, usernames, customer/supplier/contact/name/address fields, descriptions/notes, prices, totals, stock, quantities, exports, and private/internal documentation URLs. Sample values are never copied into the saved declarative configuration, warnings, logs, or analytics.

External AI Help Chat And Copyable Prompt

The empty Home screen, Start guide, Help, AI Configurator, and the "Ask an external AI with Cifru" Siri/App Shortcut identify this surface separately from Cifru's built-in AI Configurator. If no OpenAI, Claude, or Gemini key is stored, it shows the localized copyable prompt below. If at least one external key is stored, Help opens a conversational assistant using the same provider model, base URL, and Keychain credential already configured in Cifru.

The external Help chat keeps a bounded transcript locally with iOS complete file protection and offers a New conversation action that deletes it. Every request starts from a vendor-neutral map of the controls and navigation paths implemented in the installed Cifru binary, plus generic recipes for authentication, latest-value screens, Details, cross-source matching, cache, and external widgets. It also retrieves relevant sections from a locally cached/indexed copy of the complete public Cifru HTML guide. Public web-manual search is disabled by default and is used only after the user explicitly enables it; public manuals supplement the installed UI map and cannot invent a control that Cifru does not contain. Only a bounded recent message window, safe source metadata, and relevant public documentation excerpts are sent after first-use confirmation. Common API keys, bearer tokens, password/connection-string fragments, and private/internal URLs are redacted locally before transmission. The chat provides explanations only: it cannot create, apply, or silently modify a dashboard. It displays operational status such as reading documentation or waiting for the provider and never exposes hidden model chain-of-thought.

The copyable prompt is localized by app language and points to the HTML documentation. The English version is:

Hi! I want to integrate my app with Cifru and I need your help. The Cifru documentation is here: https://cifru.eu/documentation.html The public Cifru configuration library is here: https://cifru.eu/community Please review the Cifru documentation and the public online documentation for the app I want to integrate. Tell me: 1. which integration types I can use in Cifru; 2. which data I can bring in read-only mode; 3. which APIs, feeds, tables, endpoints, or files are useful; 4. how to configure everything in Cifru step by step, in detail, for a non-programmer; 5. which fields should be mapped; 6. which same-card fields from other lists or row Details links would make sense. The app I want to integrate is: X

Privacy, Legal, And Responsibility

The user chooses and controls their own sources. The user is responsible for credentials, permissions, third-party service terms, source availability, source-side access controls, and decisions made from displayed data. Cifru is not a backup system, accounting authority, audit system, legal system, medical system, financial trading system, or source of truth.

Use read-only accounts, least-privilege permissions, TLS/HTTPS, VPN or private network access where appropriate, and independent source-side logging for important systems.