GREEN18

Green18 — Privacy Policy

Effective date:

The short version

Green18 collects no personal data. It has no accounts, no sign-in, no analytics, no advertising and no third-party software. When your phone is online, Green18 may make anonymous requests for shared player data — the same football facts for everyone — and nothing about you or your league is sent. Everything you enter stays on your device unless you choose to export it yourself.

What Green18 stores, and where

Green18 is a local-first app. The following is stored on your device only, in the app's own private storage:

DataWhat it isWhere
LeaguesThe league parameters you enter (name, scoring, roster, draft order, team labels)App documents (per-league store)
DraftsThe pick-by-pick draft log, your queue and favourites, and the derived board stateApp documents (per-league store, with a last-known-good backup)
Draft philosophy and preferencesYour answers to the preference questions and the strategy weights they produceApp documents (part of the league record)
Your completed draftsAn archive of drafts you recorded, used only on your device to inform Green18's own draft-value modelApp documents
Setup progressWhich league-setup steps you have finishedApp preferences (UserDefaults, private to Green18)
Shared player dataCopies of the shared football data described below, if a newer copy was fetchedApp documents

None of this is transmitted anywhere by Green18. Green18 does not read your contacts, location, photos, calendar, microphone, camera, health data or any other system data, and asks for no permissions. (If you use iCloud Backup or back your iPhone up to a computer, iOS may include Green18's data in that backup under Apple's terms — that is your device backup, not something Green18 sends or syncs.)

What Green18 does NOT do

The one thing Green18 sends: anonymous requests for shared data

The app ships with all of its football data inside it and works with airplane mode on. When your phone is online, Green18 may check for a newer copy of that shared football data (player status, injuries, depth charts, projections, schedule) from Green18's own server, hosted on Microsoft Azure. It does this when the app opens or returns to the foreground (at most once every five minutes) and when you pull to refresh.

Those requests are anonymous. They ask for the same file everyone gets and carry nothing about you, your league, your roster, your picks or your preferences — no account, no identifier, no cookies, no query. Like any internet request they include:

Green18's server keeps no request logs: request logging on the storage that serves the shared data is switched off, so your IP address and the headers above are used only to answer the request and are not retained. Green18 never uploads anything.

(DesignSystem's PlayerImage component contains a dormant remote-image code path with no caller in this app, disabled by the compile-time flag PortraitResolver.remoteFetchEnabled = false.)

Your controls

Children

Green18 is rated 4+ and collects no data from anyone, including children. It is not directed at children.

Third-party data inside the app (not about you)

The app contains football facts licensed from a third party. None of it is personal data about you:

This build carries no data from Fantasy Football Calculator or any other market-data provider — Average Draft Position is not shipped or shown. It also carries no player photographs: Green18 shows a synthesized initials tile for every player and team, never a photograph of a real person.

Attribution for the data above is shown in the app under Settings → Data sources, alongside a statement that player photographs are not included. Green18 is not affiliated with, endorsed by or sponsored by the NFL, the NFL Players Association, any NFL club or any fantasy platform.

Changes to this policy

If a future version of Green18 changes what it stores or transmits, this policy and the app's privacy manifest will change together, and the App Store listing's privacy answers will be updated before that version ships.

Contact

manager@green18.app — the same address entered in App Store Connect. See also the Support page.


Appendix — technical cross-check (for reviewers and for the build gate)

Not part of the user-facing policy; kept with it so the three artifacts cannot drift apart unnoticed (docs/privacy-label-audit.md is the 2026-09-05 audit of this table).

Claim above PrivacyInfo.xcprivacy Code ASC App Privacy (docs/app-store-metadata.md)
No tracking NSPrivacyTracking = false, NSPrivacyTrackingDomains = [] the only networking API in Sources/ is the board-refresh transport (Sources/DraftEngine/Refresh/BoardTransport.swift): anonymous GET of shared board files, no cookies, no identifiers, no query — pinned by PrivacyInvariantTests "Data Not Collected"
No data collected NSPrivacyCollectedDataTypes = [] no analytics/telemetry code; no third-party SDKs; requests carry no user datum (docs/privacy-invariant-audit.md §1–2); IP / User-Agent / If-None-Match are in flight only and not retained (no request logging on the public boards container — infra/azure/refresh/main.bicep), which Apple's App Privacy definition of "collect" excludes "Data Not Collected"
Setup progress in UserDefaults NSPrivacyAccessedAPICategoryUserDefaults, reason CA92.1 Sources/Green18App/AppShell.swift (@AppStorage("green18.setupProgress.v1", store: AppShell.preferencesStore)) — the only call site; no app group n/a (on-device, not collected)
No other required-reason APIs only one entry in NSPrivacyAccessedAPITypes PrivacyInvariantTests.testPrivacyManifestRequiredReasonAPIsEqualTheSetFoundInSources greps all three targets for Apple's symbol lists: declared set == used set; embedded frameworks use none n/a
In-app statement agrees Settings → Data note (SettingsScreen.swift, settings-local-only-note): "works fully offline … never uploaded … may fetch shared player data anonymously — nothing about you or your league is sent"