DueSprig Privacy Policy

com.servenzo.duesprig · Servenzo

Implementation disclosure updated: 2026-10-20 App: DueSprig (com.servenzo.duesprig) Publisher/developer: Servenzo Privacy contact: [email protected] Public policy address: https://servenzo.com/apps/duesprig/privacy-policy

This disclosure describes DueSprig R1 manual local tracking and its separately labelled previous demo snapshot with optional shared platform controls. Cloud availability depends on the publisher’s configured deployment. A build without a backend URL works locally. No sign-in or upload is performed automatically.

Operator, hosting and internal testing

Servenzo operates this app and its optional cloud service. Contact [email protected] for privacy questions or requests. The app service is hosted on a Servenzo-operated VPS in the United Kingdom at https://apps-api.servenzo.com. The shared sign-in service is operated there using Keycloak; app accounts and access tokens remain scoped to their own app. Quizlilt child cloud accounts remain disabled.

Cloudflare provides DNS and the traffic proxy for the public website and API. It processes network addresses, request timing and security information through its global infrastructure. Choosing an online service sends the selected information over the network; core local features do not upload your records automatically. Google Play separately handles app distribution, tester accounts and any authorized store purchases.

Account and synchronized information is retained while you keep the app cloud account, subject to the app's export and deletion controls. Requesting account deletion blocks app access and queues scoped cleanup. The shared identity-provider profile has separate controls; contact [email protected] to request its removal, with identity verification where needed. Files expire at the time you select; expiry blocks access before background cleanup removes stored versions. Independent exports and copies are outside that cleanup.

API access logs contain network address, request path without query parameters, status and timing. They rotate daily with fourteen retained rotations; service diagnostic logs rotate by size. The internal-testing service has no automated off-server backup or guaranteed recovery. Keep independent copies of information you need. Optional cloud files use private encrypted storage that the server operator can read. This test deployment uses a locally held encryption key and is not end-to-end encrypted; a maintained key-management service is required before public cloud use.

Local information and use

Manual agreements, exact original ISO currencies and minor-unit amounts, versioned currency exponents, billing cadence/date/timezone, status and access-end dates, private notes, cancellation checklists and user-reported provider-action/proof notes are stored in the app-local transactional database (native private file; IndexedDB on web). Schedule revisions, stable occurrence lineage, one-occurrence overrides, explicit confirmed charges and their source identities/corrections, editable drafts, preferences and operation receipts preserve acknowledged local work.

Forecast dates and normalized planning equivalents are estimates, not confirmed payments. Day/week planning uses a disclosed 365-day year; no exchange rate is applied and mixed currencies remain separate. A charge is recorded only after your explicit amount/date/source confirmation. DueSprig does not connect to a bank or execute provider cancellation in this manual core. Local cancellation/checklist status is your own report; it does not cancel a service at its provider.

Original legacy cents, one selected currency, yearly/active flags and integer-ID-to-UUID mappings are retained as a recoverable one-time migration source. Missing due dates remain needs setup; no historical payments or today-based due dates are invented.

Optional account and snapshot sync

You may use the local demo without creating an account. If you choose sign-in, the configured identity provider processes authentication in your browser. The backend verifies a provider subject and app-specific access token, and stores a separate app account and workspace. Native session tokens use platform secure storage; the web session token is kept in memory. Connection drafts and revision metadata may be stored locally to preserve retries, without saving the access token in ordinary preferences.

Snapshot data eligible for explicit upload from Previous demo recovery & cloud controls: only the original one-currency subscription snapshot and its old name/cents/yearly/active fields. This is a recovery snapshot, not the current ledger. New R1 agreements, occurrence revisions, charges, private notes, cancellation records and typed drafts are excluded from that endpoint.

You choose whether to upload the allowed local fields or replace them from cloud state. A conflict requires an explicit choice rather than silently overwriting newer work. Shared infrastructure does not give one app’s account access to another app’s private workspace. Operational requests necessarily reach the configured server/provider and can expose network information such as IP address and request timing to that infrastructure.

Other optional platform controls

Cloud file controls transfer only files you deliberately select, together with bounded filename/type/size, checksum and expiry metadata. These server-readable files are not end-to-end encrypted vault storage. Expiry and deletion block future authorized access before eventual physical cleanup; previously downloaded copies cannot be recalled.

Notification controls store the schedule, message and inbox record you submit. If push delivery is configured and you register a device, the service stores its app-scoped push token and sends the message through the configured push provider. Provider acceptance does not establish that the device displayed it. In-app inbox delivery and local phone reminder scheduling have different behavior.

Google Play billing controls, where configured, send the selected product and purchase token for server verification and store verification/entitlement status. Payment details are handled by Google Play rather than entered into this app. No paid entitlement is granted just because a device claims a purchase. Development adapters are identified as development features; they do not establish a paid purchase.

Optional local Android reminders use an app-private projection containing anonymous agreement/occurrence identifiers, revision, offset and a UTC alarm instant. No merchant names, amounts, notes or provider/source identifiers go into the OS reminder message or payload. A native guard is fenced before schedule-affecting commits, and stale callbacks check current allowed identities before displaying a generic reminder. Revision-bound cancellation work is committed with the ledger. Device permission/channel state and scheduled requests do not establish delivery or payment.

Permission is requested only after opting in for a meaningful saved schedule. Scheduling is inexact and can be delayed, blocked or suppressed by OS/OEM restrictions or force-stop. The rolling window covers the next 200 requests within 400 days; opening/resuming advances it. Reboot re-arms approved future guard rows; time/timezone changes invalidate the guard until reconciliation. Other surfaces retain an in-app calendar fallback. No exact-alarm access, permanent wake lock or DND bypass is requested.

The app does not include advertising, bank-login collection or an analytics uploader in this implementation. Optional bounded local diagnostics are off by default and contain only action/revision categories; withdrawing consent clears queued optional events. Ordinary support diagnostics exclude financial names, amounts, notes, documents and provider/source identifiers. Including a particular problematic agreement requires an explicit selection and private preview. Future ads, child profiles, additional SDK collection or other new processing need separate disclosure and review before being enabled.

Storage, retention and deletion

The local database, previous preferences, JSON and CSV exports are not encrypted by an app-level data layer. Browser storage belongs to its origin/profile and may be evicted. Agreement deletion invalidates future reminders and offers a 30-second local undo; charge and revision history are part of its selected deletion scope. Expired undo payloads are cleaned on subsequent operations/reopening rather than a promise of immediate forensic erasure. Full local-data deletion is a separate confirmed action without undo and includes the preserved legacy source.

Full owned-data JSON and readable CSV export remain available offline without a paid entitlement. JSON preserves revisions, schedule segments, confirmed charges, remapping lineage and exact original currency values. CSV includes retained revisions, typed occurrence/charge rows and a bounded date projection; formula-leading text is escaped in the output without changing stored names. Recovery JSON may include private raw data, drafts, tombstones, migration sources and quarantined rows. Keep it private. No general recovery import/restore is provided in this phase.

Clipboard and file destinations operate only after your action. Exported files, recipients, OS backups and optional cloud copies have independent retention and deletion controls; local deletion cannot recall them. Android automatic app backup is disabled to avoid restoring encrypted authentication tokens on another device; this also excludes other app-private data from that automatic backup mechanism. Device manufacturers or separately selected document providers can operate independent services.

You can remove app-local data with Android Settings > Apps > DueSprig > Storage > Clear storage (labels vary). Clearing local data or uninstalling does not by itself delete an optional cloud account, cancel a Google Play subscription or erase a file you exported.

Cloud account export/deletion are separate account controls and require recent sign-in. Account deletion applies to this app’s account and workspace, rather than silently deleting all Servenzo app accounts. It ends access and initiates scoped cleanup; a queued or partially completed cleanup is not a claim of immediate forensic erasure. Identity-provider accounts, Google Play purchase records, mandatory provider retention and independent external copies have separate controls. See the operator and hosting section of this policy for the current deployment and retention settings.

Device access

The app does not request camera, microphone, contacts or location access. POST_NOTIFICATIONS is optional for supported Android reminders; boot/time broadcasts reconcile or invalidate approved alarm authority. INTERNET allows an explicitly configured HTTPS service connection. Native browser sign-in returns through this app’s unique callback scheme.

Children and audience

The publisher intends this app for users aged 13 and older. The app does not ask for a date of birth or build an account-based age profile.

Contact

Contact [email protected] for privacy questions. Do not include private files, child information, habit details or financial records in an initial support message. Sending support email uses your chosen email provider and is separate from this app’s feature data. No support message is sent automatically.

Current local R2 increment — 20 October 2026

The separate duesprig_reserves namespace stores virtual renewal targets in their original currency/date, optional agreement/revision references, explicit pay dates/ceilings, immutable allocation/release/adjustment/reversal entries, readable reasons and content-free idempotency receipts. These are planning records, not bank funds. No money moves, bank account is connected or payment is established by an entry. Projected contributions stay separate from logged allocations; current same-currency source price can update the derived gap without changing original targets or prior ledger amounts. Active form text is not automatically saved; explicit workspace recovery can include it and captured failed postings.

The new feature state remains app-scoped and local. Explicit JSON/file/clipboard exports are independent private copies; recovery can contain active or captured unacknowledged inputs. Deleting local feature data does not erase exports, OS/provider originals, separate app accounts or another product. Provider, installed-device, signed-release and store/public-policy qualification are not inferred from local tests.

Contact [email protected] for support or privacy questions.