App Store Connect — HiveJournal listing copy
Every field App Store Connect asks for, filled in and ready to paste. Character limits are Apple's; the count after each field is the actual length of the copy below it.
Bundle ID com.hivejournal.app · SKU hivejournal-ios · Primary language
English (U.S.)
Everything here describes what is in the iOS binary today. It deliberately omits web-only features (voice entry capture, AI cover-image generation, imports, Life Map) and does not claim dark mode — the app has none. Inaccurate metadata is App Review Guideline 2.3, so re-check this file against the build before each submission.
App Information
| Field | Value |
|---|---|
| Name (30) | HiveJournal — 11 |
| Subtitle (30) | Journaling, free in full — 24 |
| Primary category | Lifestyle |
| Secondary category | Productivity |
| Content rights | Contains no third-party content |
| Age rating | 12+ expected — see Age rating questionnaire |
| Copyright | 2026 Point Seven Studio (confirm the legal entity name with the owner) |
Category note. Health & Fitness is the other plausible primary (Rosebud sits there, and we track mood + sleep). Lifestyle is recommended: it's where Day One competes, and it keeps the listing clear of health-data review scrutiny we don't need for a journal.
URLs
| Field | Value | Status |
|---|---|---|
| Privacy Policy URL (required) | https://hivejournal.com/privacy | ✅ live |
| Marketing URL | https://hivejournal.com | ✅ live |
| Support URL (required) | https://hivejournal.com/support | ❌ 404 — does not exist |
Support URL is a blocker. APP_STORE_DEPLOYMENT.md tells you to enter
/support, but there is no such route in apps/frontend/src/app/. App Store
Connect will not accept a submission without a reachable support URL, and
Apple does click it. Pick one before submitting:
- Best: ship a small
/supportpage (contact address, FAQ, link to/privacyand/terms). Also satisfies Play's contact-details requirement and Guideline 1.2's "published point of contact" for user-generated content. - Acceptable stopgap: use
https://hivejournal.comas the support URL and putsupport@hivejournal.comin the App Review notes. Apple has accepted a marketing homepage that visibly carries a contact route; a bare homepage with no contact path gets rejected.
Promotional Text (170)
Editable without a new build — use it for seasonal or launch messaging.
The whole journaling product, free: unlimited entries, moods, notebooks, goals, sleep and AI reflection. No trial, no entry cap, no paywall on the part you came for.
165 characters.
Description (4000)
Full journaling, free — the entire product, not a trial.
Most journaling apps give you a taste and charge for the rest: a cap on entries, AI reflection behind a subscription, your own history locked until you pay. HiveJournal gives you the whole journaling experience for free. Unlimited entries. Moods, tags and notebooks. Goals. Sleep. AI reflection on what you wrote. No entry limit, no trial clock, no paywall on the part you came for.
WRITE
• Unlimited entries in a fast, distraction-free editor
• Mark how you felt and tag entries however you think
• Organize into notebooks — one per project, person, year, or whatever you keep
• Search everything you've written from the top of your journal
TRACK
• Log how you slept, night by night
• Set goals and check in against them
• Watch your stream — entries, sleep and encouragement in one timeline
REFLECT
• AI reflections that read your entries back to you and find the patterns
• Ask JQ, the built-in companion, about anything you've written
• Keep a dream log with steps for the ones you want to chase
SHARE, ONLY IF YOU WANT TO
• Entries are private by default — every one of them
• Share a single entry as a link when you want someone to read it
• Connect with someone through JQ Bridge, or receive an encouragement drop
YOUR JOURNAL STAYS YOURS
• Row-level security means the database itself enforces that only you can read your entries — not just the app
• We never sell your data and there are no third-party trackers or ad SDKs in this app
• Delete your account and everything in it, whenever you want, from Settings
HiveJournal is part of a larger platform you can grow into on the web — stress triage, voice capsules, a writing community, audio fiction — but the journal is complete on its own, on your phone, for free.
Start writing.
—
Privacy Policy: https://hivejournal.com/privacy
Terms of Service: https://hivejournal.com/terms
1,905 characters — well inside the 4,000 limit.
Keywords (100)
Comma-separated, no spaces after commas — spaces count against the limit. "HiveJournal" is already indexed from the app name; don't repeat it here.
journal,diary,mood tracker,ai journal,notebook,gratitude,reflection,sleep log,goals,daily writing
97 characters.
Rationale: the four the runbook and #1684 specify (journal, diary,
mood tracker, ai journal) lead; the rest cover the features we actually
ship and can defend. Apple indexes across comma boundaries, so
mood tracker + sleep log also reach "mood", "tracker", "sleep".
What's New in This Version (4000)
For 1.0.0:
First release. The whole HiveJournal journaling experience, native on iPhone and iPad — unlimited entries, moods, tags, notebooks, goals, sleep tracking, search, AI reflection, and JQ, your companion. Free, in full.
Age rating questionnaire
Answers for App Store Connect's questionnaire. Expected result: 12+.
| Question | Answer |
|---|---|
| Cartoon or Fantasy Violence | None |
| Realistic Violence | None |
| Prolonged Graphic or Sadistic Realistic Violence | None |
| Profanity or Crude Humor | None |
| Mature/Suggestive Themes | None |
| Horror/Fear Themes | None |
| Medical/Treatment Information | None |
| Alcohol, Tobacco, or Drug Use or References | None |
| Simulated Gambling | None |
| Sexual Content or Nudity | None |
| Graphic Sexual Content and Nudity | None |
| Contests | None |
| Unrestricted Web Access | No |
| Gambling and Contests | No |
| User-generated content | Yes — see below |
Unrestricted Web Access — No. The app embeds a WebView in exactly one
place (TurnstileWidget, loading Cloudflare's bot-protection challenge). It
has no browser, no arbitrary URL loading, and no in-app web surfing.
User-generated content — Yes. Journal entries are the user's own and private, but three surfaces carry content authored by other people: encouragement Drops, JQ Bridge connections, and shared-entry links.
⚠️ App Review risk — Guideline 1.2. Apps that display user-generated content must provide (a) a method to filter objectionable content, (b) a mechanism to report offensive content with timely response, (c) the ability to block abusive users, and (d) published contact information. A search of
apps/mobile,apps/backend/src/routesandapps/frontend/srcfound no report and no block affordance anywhere in the product, and there is no support page (see URLs). Because Drops arrive from other users, a reviewer can reasonably invoke 1.2. Recommended before submitting: a report action on any inbound Drop / Bridge message, a block list, and a/supportpage. Not a code change this task can make — filed separately.
App Review Information
Sign-in required: Yes. Provide a demo account.
| Field | Value |
|---|---|
| First name / Last name | (owner) |
| Phone number | (owner) |
| (owner) | |
| Demo account username | TBD — seed a prod account with ~10 entries, 2 notebooks, a goal, and a few nights of sleep so the reviewer sees a populated app, not empty states |
| Demo account password | TBD |
Notes to the reviewer (paste into the Notes field):
HiveJournal is a personal journaling app. Sign in with the demo account above; entries, notebooks, goals and sleep data are pre-populated.
Where to look:
• Journal tab — entries list with search; tap an entry to read, tap + to write one. Mood, tags and notebook are set in the editor.
• Journal tab -> Notebooks / Goals / Sleep — organization and tracking.
• Stream tab — a combined timeline of entries, sleep logs and encouragement notes.
• Settings tab — profile, Journal Analysis (AI reflections), DreamPro, JQ Bridge, and account deletion.
• The floating chat button opens JQ, an AI companion that can answer questions about the signed-in user's own entries.
Privacy: journal content is stored in Supabase Postgres under row-level security, so a user can only ever read their own rows. Entry content is sent to OpenAI when the user requests an AI reflection, when they message JQ, and when an entry is saved without a mood (the server infers one). There are no analytics SDKs, trackers or ad networks in the app.
Account deletion is available in-app: Settings -> Delete Account.
Camera and photo-library access is requested only when the user sets a profile picture or submits a Workout Window check-in photo. Location is requested only for an optional Workout Window check-in and can be denied without affecting journaling.
Turnstile caveat. Sign-in runs a Cloudflare Turnstile challenge whenever a site key is present in the build (#1489). Confirm the reviewer can complete it on the production build — a challenge that fails or hangs in App Review's network environment is an automatic "unable to sign in" rejection. If in doubt, ship 1.0 with no Turnstile site key in the iOS production profile.
Permission purpose strings
Fixed in #1709. What the build now produces, confirmed with
npx expo config --type introspect:
| Key | String in the generated Info.plist |
|---|---|
NSCameraUsageDescription | "$(PRODUCT_NAME) uses the camera so you can take a profile picture or a workout check-in photo." |
NSPhotoLibraryUsageDescription | "$(PRODUCT_NAME) needs your photo library so you can pick a profile picture or a check-in photo." |
NSLocationWhenInUseUsageDescription | "$(PRODUCT_NAME) can tag a workout check-in with where you were. Check-ins work fine without it." |
ITSAppUsesNonExemptEncryption | false — skips the export-compliance prompt |
UIBackgroundModes | ["audio"] — Graphene playback continues in background |
Deliberately absent, and worth knowing why if a reviewer asks:
NSMicrophoneUsageDescription (the app has no recording feature — the string
was being injected by expo-image-picker's plugin),
NSLocationAlwaysUsageDescription and
NSLocationAlwaysAndWhenInUseUsageDescription (we only ever call
requestForegroundPermissionsAsync; declaring background location we don't use
invites the "why do you need this?" round of review).
$(PRODUCT_NAME) is substituted at build time, so the Workout Window flavor
gets its own name in the prompts rather than "HiveJournal".
The location-crash scare was a false alarm
An earlier read of this said app.json declares no location purpose string and
that iOS would therefore terminate the app. It wouldn't have: expo-location
is in legacyExpoPlugins in @expo/prebuild-config, so withLegacyExpoPlugins()
applies its config plugin during expo prebuild whether or not it's listed in
plugins. The real problem was that the auto-injected strings were generic and
included two Always-location variants — which is what #1709 fixed.