App Store assets and metadata #81

Open
opened 2026-03-26 03:50:13 +00:00 by forgejo_admin · 3 comments

Type

Feature

Lineage

project-capacitor-mobile → Board item (westside first consumer)

Repo

forgejo_admin/westside-app

User Story

As Lucas
I want App Store listing assets prepared
So that the app has a professional App Store presence

Context

App Store Connect requires: app icon (1024x1024), screenshots (multiple device sizes), privacy policy URL, app description, keywords, categories. Fastlane deliver can automate metadata submission.

Blocked by: Apple Developer enrollment (pal-e-platform #164).

File Targets

Files to create:

  • fastlane/metadata/ — App Store metadata (description, keywords, etc.)
  • fastlane/screenshots/ — device screenshots
  • App icon assets (1024x1024 source + generated sizes)
  • Privacy policy page (static route or external URL)

Files NOT to touch:

  • Application logic
  • Existing routes

Acceptance Criteria

  • App icon 1024x1024 created (Westside Kings & Queens branding)
  • Screenshots captured for required device sizes
  • Privacy policy URL live and accessible
  • App description written with keywords
  • Category set: Sports
  • Pricing set: Free
  • fastlane deliver can push metadata to App Store Connect

Test Expectations

  • fastlane deliver --validate_only passes
  • Privacy policy URL returns 200

Constraints

  • Lucas provides branding direction for icon and screenshots
  • Privacy policy must cover: data collected, Keycloak auth, Stripe payments
  • Screenshots from TestFlight builds (real app, not mockups)

Checklist

  • Icon created
  • Screenshots captured
  • Privacy policy live
  • Metadata written
  • project-capacitor-mobile — App Store Requirements architecture
### Type Feature ### Lineage `project-capacitor-mobile` → Board item (westside first consumer) ### Repo `forgejo_admin/westside-app` ### User Story As Lucas I want App Store listing assets prepared So that the app has a professional App Store presence ### Context App Store Connect requires: app icon (1024x1024), screenshots (multiple device sizes), privacy policy URL, app description, keywords, categories. Fastlane deliver can automate metadata submission. Blocked by: Apple Developer enrollment (pal-e-platform #164). ### File Targets Files to create: - `fastlane/metadata/` — App Store metadata (description, keywords, etc.) - `fastlane/screenshots/` — device screenshots - App icon assets (1024x1024 source + generated sizes) - Privacy policy page (static route or external URL) Files NOT to touch: - Application logic - Existing routes ### Acceptance Criteria - [ ] App icon 1024x1024 created (Westside Kings & Queens branding) - [ ] Screenshots captured for required device sizes - [ ] Privacy policy URL live and accessible - [ ] App description written with keywords - [ ] Category set: Sports - [ ] Pricing set: Free - [ ] `fastlane deliver` can push metadata to App Store Connect ### Test Expectations - [ ] `fastlane deliver --validate_only` passes - [ ] Privacy policy URL returns 200 ### Constraints - Lucas provides branding direction for icon and screenshots - Privacy policy must cover: data collected, Keycloak auth, Stripe payments - Screenshots from TestFlight builds (real app, not mockups) ### Checklist - [ ] Icon created - [ ] Screenshots captured - [ ] Privacy policy live - [ ] Metadata written ### Related - `project-capacitor-mobile` — App Store Requirements architecture
Author
Owner

Issue #81 Ticket Scope Review

TEMPLATE COMPLIANCE

Checked against template-issue (the canonical Forgejo issue template).

Required Section Present Notes
### Lineage Partial Listed as inline "Lineage:" text, not an H3 heading. Content is correct: project-capacitor-mobile with board context. However, since plans are obsolete (kanban-over-plans), this should reference the board item directly. Acceptable.
### Repo Yes forgejo_admin/westside-app
### User Story Partial Has the "As/I want/So that" intent but compressed into one sentence. Missing the explicit "So that ____" clause -- "so that the app has a professional App Store presence" is implied but should be explicit in template format.
### Context Yes Good. Explains App Store Connect requirements, mentions fastlane deliver, and identifies the blocker.
### File Targets Partial See findings below.
### Acceptance Criteria Yes 7 items with checkboxes.
### Test Expectations Yes 2 items.
### Constraints Yes 3 constraints listed.
### Checklist MISSING Template requires: - [ ] PR opened, - [ ] Tests pass, - [ ] No unrelated changes. Not present.
### Related MISSING Template requires related project slug(s). Should reference project-capacitor-mobile.

Also note: All sections use bold inline labels ("Type:", "User Story:") instead of H3 markdown headings (### User Story). This is a cosmetic divergence from template-issue but does not block agent execution.

TRACEABILITY

Label Exists on project-capacitor-mobile Verified
story:cap-appstore Yes -- User Stories table, key cap-appstore: "As Lucas, I want to submit an app to the App Store with correct metadata and pass review" PASS
arch:appstore Yes -- Architecture Component IDs table: "App Store Connect -- Metadata, assets, review submission, Fastlane deliver" PASS
type:feature N/A (type labels are generic, not project-traced) PASS
consumer:westside Correct -- westside-app is the consumer repo PASS

Board item #373 on board-capacitor-mobile links to this issue in backlog column. Traceability chain is intact.

FILE TARGET SPECIFICITY

This is the main concern. File targets are too vague for agent execution:

  1. fastlane/metadata/ -- This is a directory. Fastlane deliver expects a specific structure (en-US/description.txt, en-US/keywords.txt, en-US/release_notes.txt, en-US/name.txt, en-US/subtitle.txt, en-US/promotional_text.txt, en-US/privacy_url.txt, en-US/support_url.txt, en-US/marketing_url.txt, review_information/ with review contact info). The agent needs to know which files to create.

  2. fastlane/screenshots/ -- Directory only. Apple requires specific device screenshot dimensions (6.7" -- iPhone 15 Pro Max at 1290x2796, 6.5" -- iPhone 14 Plus at 1284x2778, 5.5" -- iPhone 8 Plus at 1242x2208, and optionally iPad). The agent needs to know which device sizes are required.

  3. "App icon assets (1024x1024 source + generated sizes)" -- No file path. Should specify: source file location (e.g., assets/icon-1024.png), generated output path (e.g., ios/App/App/Assets.xcassets/AppIcon.appiconset/), and whether a generation script is expected.

  4. "Privacy policy page" -- No path. Is this a new SvelteKit route (src/routes/privacy/+page.svelte)? A static HTML file? A standalone URL hosted elsewhere? Agent cannot execute without this decision.

ACCEPTANCE CRITERIA ASSESSMENT

Criterion Testable Issue
App icon 1024x1024 created Partially No path to verify. "Westside Kings & Queens branding" is subjective -- Lucas must approve.
Screenshots for required device sizes Partially "Required" is undefined. Which sizes? How many per size?
Privacy policy URL live and accessible Yes But URL path undefined.
App description with keywords Partially No keyword list or character limits specified.
Category: Sports Yes Clear.
Pricing: Free Yes Clear.
fastlane deliver --validate_only passes Yes Excellent -- this is the gold standard test.

DEPENDENCY ANALYSIS

Stated dependency: "Blocked by Apple Developer enrollment (pal-e-platform #164)" -- Correct. Apple Developer account is required for App Store Connect access, and #164 is on the board in backlog.

Missing dependency: The Constraints section states "Screenshots sourced from TestFlight builds (production app, not mockups)." This means issue #80 (TestFlight iteration) is ALSO a blocker -- you cannot capture production screenshots without a working TestFlight build. This dependency is not listed in the blocking statement.

Downstream: Issue #82 (App Store submission) correctly lists #81 as a blocker. Chain is: #164 (enrollment) and #80 (TestFlight) block #81 (assets) blocks #82 (submission).

ITEMS TO FIX

  1. Add ### Checklist section -- Template requires it. Add the standard: - [ ] PR opened, - [ ] Tests pass, - [ ] No unrelated changes.

  2. Add ### Related section -- Must reference project-capacitor-mobile.

  3. Expand File Targets with specific paths:

    • List the specific fastlane/metadata/en-US/ files to create
    • Specify app icon source path and generation output path
    • Decide and document the privacy policy page path (SvelteKit route vs. static file)
    • Specify screenshot device sizes and naming convention
  4. Add #80 (TestFlight iteration) as an explicit blocker -- Constraints say screenshots come from TestFlight builds, so TestFlight must work first.

  5. Specify screenshot device sizes in Acceptance Criteria -- Replace "required device sizes" with the actual Apple-required dimensions (minimum: 6.7" and 6.5" iPhone).

VERDICT: NEEDS WORK

Five items to fix before this ticket is ready for next_up. The traceability is solid (story and arch labels map correctly to project-capacitor-mobile), the user story intent is clear, and the fastlane test expectation is excellent. The gaps are in file target specificity (too vague for agent execution) and two missing template sections. Fix those and this is ready to move.

## Issue #81 Ticket Scope Review ### TEMPLATE COMPLIANCE Checked against `template-issue` (the canonical Forgejo issue template). | Required Section | Present | Notes | |---|---|---| | `### Lineage` | Partial | Listed as inline "Lineage:" text, not an H3 heading. Content is correct: `project-capacitor-mobile` with board context. However, since plans are obsolete (kanban-over-plans), this should reference the board item directly. Acceptable. | | `### Repo` | Yes | `forgejo_admin/westside-app` | | `### User Story` | Partial | Has the "As/I want/So that" intent but compressed into one sentence. Missing the explicit "So that ____" clause -- "so that the app has a professional App Store presence" is implied but should be explicit in template format. | | `### Context` | Yes | Good. Explains App Store Connect requirements, mentions fastlane deliver, and identifies the blocker. | | `### File Targets` | Partial | See findings below. | | `### Acceptance Criteria` | Yes | 7 items with checkboxes. | | `### Test Expectations` | Yes | 2 items. | | `### Constraints` | Yes | 3 constraints listed. | | `### Checklist` | **MISSING** | Template requires: `- [ ] PR opened`, `- [ ] Tests pass`, `- [ ] No unrelated changes`. Not present. | | `### Related` | **MISSING** | Template requires related project slug(s). Should reference `project-capacitor-mobile`. | **Also note:** All sections use bold inline labels ("**Type:**", "**User Story:**") instead of H3 markdown headings (`### User Story`). This is a cosmetic divergence from template-issue but does not block agent execution. ### TRACEABILITY | Label | Exists on project-capacitor-mobile | Verified | |---|---|---| | `story:cap-appstore` | Yes -- User Stories table, key `cap-appstore`: "As Lucas, I want to submit an app to the App Store with correct metadata and pass review" | PASS | | `arch:appstore` | Yes -- Architecture Component IDs table: "App Store Connect -- Metadata, assets, review submission, Fastlane deliver" | PASS | | `type:feature` | N/A (type labels are generic, not project-traced) | PASS | | `consumer:westside` | Correct -- westside-app is the consumer repo | PASS | Board item #373 on `board-capacitor-mobile` links to this issue in backlog column. Traceability chain is intact. ### FILE TARGET SPECIFICITY This is the main concern. File targets are too vague for agent execution: 1. **`fastlane/metadata/`** -- This is a directory. Fastlane deliver expects a specific structure (`en-US/description.txt`, `en-US/keywords.txt`, `en-US/release_notes.txt`, `en-US/name.txt`, `en-US/subtitle.txt`, `en-US/promotional_text.txt`, `en-US/privacy_url.txt`, `en-US/support_url.txt`, `en-US/marketing_url.txt`, `review_information/` with review contact info). The agent needs to know which files to create. 2. **`fastlane/screenshots/`** -- Directory only. Apple requires specific device screenshot dimensions (6.7" -- iPhone 15 Pro Max at 1290x2796, 6.5" -- iPhone 14 Plus at 1284x2778, 5.5" -- iPhone 8 Plus at 1242x2208, and optionally iPad). The agent needs to know which device sizes are required. 3. **"App icon assets (1024x1024 source + generated sizes)"** -- No file path. Should specify: source file location (e.g., `assets/icon-1024.png`), generated output path (e.g., `ios/App/App/Assets.xcassets/AppIcon.appiconset/`), and whether a generation script is expected. 4. **"Privacy policy page"** -- No path. Is this a new SvelteKit route (`src/routes/privacy/+page.svelte`)? A static HTML file? A standalone URL hosted elsewhere? Agent cannot execute without this decision. ### ACCEPTANCE CRITERIA ASSESSMENT | Criterion | Testable | Issue | |---|---|---| | App icon 1024x1024 created | Partially | No path to verify. "Westside Kings & Queens branding" is subjective -- Lucas must approve. | | Screenshots for required device sizes | Partially | "Required" is undefined. Which sizes? How many per size? | | Privacy policy URL live and accessible | Yes | But URL path undefined. | | App description with keywords | Partially | No keyword list or character limits specified. | | Category: Sports | Yes | Clear. | | Pricing: Free | Yes | Clear. | | `fastlane deliver --validate_only` passes | Yes | Excellent -- this is the gold standard test. | ### DEPENDENCY ANALYSIS **Stated dependency:** "Blocked by Apple Developer enrollment (pal-e-platform #164)" -- Correct. Apple Developer account is required for App Store Connect access, and #164 is on the board in backlog. **Missing dependency:** The Constraints section states "Screenshots sourced from TestFlight builds (production app, not mockups)." This means issue #80 (TestFlight iteration) is ALSO a blocker -- you cannot capture production screenshots without a working TestFlight build. This dependency is not listed in the blocking statement. **Downstream:** Issue #82 (App Store submission) correctly lists #81 as a blocker. Chain is: #164 (enrollment) and #80 (TestFlight) block #81 (assets) blocks #82 (submission). ### ITEMS TO FIX 1. **Add `### Checklist` section** -- Template requires it. Add the standard: `- [ ] PR opened`, `- [ ] Tests pass`, `- [ ] No unrelated changes`. 2. **Add `### Related` section** -- Must reference `project-capacitor-mobile`. 3. **Expand File Targets with specific paths:** - List the specific `fastlane/metadata/en-US/` files to create - Specify app icon source path and generation output path - Decide and document the privacy policy page path (SvelteKit route vs. static file) - Specify screenshot device sizes and naming convention 4. **Add #80 (TestFlight iteration) as an explicit blocker** -- Constraints say screenshots come from TestFlight builds, so TestFlight must work first. 5. **Specify screenshot device sizes in Acceptance Criteria** -- Replace "required device sizes" with the actual Apple-required dimensions (minimum: 6.7" and 6.5" iPhone). ### VERDICT: NEEDS WORK Five items to fix before this ticket is ready for `next_up`. The traceability is solid (story and arch labels map correctly to `project-capacitor-mobile`), the user story intent is clear, and the fastlane test expectation is excellent. The gaps are in file target specificity (too vague for agent execution) and two missing template sections. Fix those and this is ready to move.
Author
Owner

Ticket Fix (QA review remediation)

Missing Sections Added

### Checklist

  • Icon created (1024x1024 source)
  • Screenshots captured for required sizes
  • Privacy policy URL live
  • Metadata written and validated
  • PR opened
  • fastlane deliver --validate_only passes

### Related

  • project-capacitor-mobile — App Store Requirements architecture section
  • sop-capacitor-mobile-lifecycle — pipeline context

File Targets (specific paths)

Files to create:

  • fastlane/metadata/en-US/description.txt — App Store description
  • fastlane/metadata/en-US/keywords.txt — search keywords
  • fastlane/metadata/en-US/name.txt — app display name
  • fastlane/metadata/en-US/privacy_url.txt — privacy policy URL
  • fastlane/screenshots/en-US/ — device screenshots
  • static/privacy.html — privacy policy page (static route)
  • fastlane/metadata/app_icon.png — 1024x1024 source icon

Missing Dependency (added)

Blocked by #80 (TestFlight iteration) — screenshots must come from real TestFlight builds, not mockups. Also blocked by #164 (Apple Developer enrollment, blocker:external — budget).

Screenshot Device Sizes (specified)

Apple requires:

  • 6.7" (iPhone 15 Pro Max): 1290 x 2796
  • 6.5" (iPhone 14 Plus): 1284 x 2778
  • 5.5" (iPhone 8 Plus): 1242 x 2208
    Minimum: 6.7" and 5.5" required. Others optional.
## Ticket Fix (QA review remediation) ### Missing Sections Added **### Checklist** - [ ] Icon created (1024x1024 source) - [ ] Screenshots captured for required sizes - [ ] Privacy policy URL live - [ ] Metadata written and validated - [ ] PR opened - [ ] `fastlane deliver --validate_only` passes **### Related** - `project-capacitor-mobile` — App Store Requirements architecture section - `sop-capacitor-mobile-lifecycle` — pipeline context ### File Targets (specific paths) Files to create: - `fastlane/metadata/en-US/description.txt` — App Store description - `fastlane/metadata/en-US/keywords.txt` — search keywords - `fastlane/metadata/en-US/name.txt` — app display name - `fastlane/metadata/en-US/privacy_url.txt` — privacy policy URL - `fastlane/screenshots/en-US/` — device screenshots - `static/privacy.html` — privacy policy page (static route) - `fastlane/metadata/app_icon.png` — 1024x1024 source icon ### Missing Dependency (added) Blocked by #80 (TestFlight iteration) — screenshots must come from real TestFlight builds, not mockups. Also blocked by #164 (Apple Developer enrollment, `blocker:external` — budget). ### Screenshot Device Sizes (specified) Apple requires: - 6.7" (iPhone 15 Pro Max): 1290 x 2796 - 6.5" (iPhone 14 Plus): 1284 x 2778 - 5.5" (iPhone 8 Plus): 1242 x 2208 Minimum: 6.7" and 5.5" required. Others optional.
Author
Owner

Issue #81 Re-Review

ORIGINAL FINDINGS (5)

# Finding Status
1 Missing ### Checklist section FIXED -- 6-item checklist added (icon, screenshots, privacy URL, metadata, PR, fastlane validate)
2 Missing ### Related section FIXED -- references project-capacitor-mobile (architecture) and sop-capacitor-mobile-lifecycle (pipeline context)
3 Vague file targets (no specific paths or structure) FIXED -- 7 specific file paths provided (fastlane/metadata/en-US/description.txt, keywords.txt, name.txt, privacy_url.txt, fastlane/screenshots/en-US/, static/privacy.html, fastlane/metadata/app_icon.png)
4 Missing dependency on #80 (TestFlight iteration) FIXED -- "Blocked by #80 (TestFlight iteration)" and "Blocked by #164 (Apple Developer enrollment)" both added
5 Screenshot device sizes not specified FIXED -- Apple dimensions listed: 6.7" (1290x2796), 6.5" (1284x2778), 5.5" (1242x2208), minimum requirements (6.7" and 5.5") noted

All 5 findings addressed.

TRACEABILITY VERIFICATION

Check Result
story:cap-appstore exists in project-capacitor-mobile user stories PASS -- "I want to submit an app to the App Store with correct metadata and pass review"
arch:appstore exists in project-capacitor-mobile architecture table PASS -- "App Store Connect: Metadata, assets, review submission, Fastlane deliver"
Board item #373 on board-capacitor-mobile links to this issue PASS -- labels story:cap-appstore,arch:appstore,type:feature,consumer:westside
project-capacitor-mobile note exists and is active PASS -- slug verified in pal-e-docs
sop-capacitor-mobile-lifecycle note exists and is active PASS -- slug verified in pal-e-docs
User story matches issue scope PASS -- both target App Store listing preparation (metadata, assets, privacy policy)

Full traceability triangle intact: User Story (cap-appstore) <> Architecture (arch:appstore) <> Board Item (#373).

REMAINING OBSERVATIONS (non-blocking)

  1. Cosmetic heading format: Original issue uses bold inline labels instead of H3 markdown headings for some sections. Not a blocker -- content is correct and complete.

  2. Fix delivered as comment, not issue body edit: The Checklist, Related, and file path specifics live in Comment 2 rather than being edited into the issue body. This is functional but means the implementer must read both the issue body and the fix comment to get the full specification. Consider editing the issue body to incorporate the fixes for single-source-of-truth clarity. Non-blocking.

  3. Domain labels: Issue has domain:backend, domain:devops, domain:frontend which is broad. The actual work is primarily domain:devops (Fastlane metadata) and domain:frontend (privacy policy page, app icon). Minor.

VERDICT: APPROVED

All 5 findings from the original review are resolved. Traceability is verified end-to-end. Ticket is ready to advance to next_up (subject to blockers #80 and #164 clearing first).

## Issue #81 Re-Review ### ORIGINAL FINDINGS (5) | # | Finding | Status | |---|---------|--------| | 1 | Missing `### Checklist` section | FIXED -- 6-item checklist added (icon, screenshots, privacy URL, metadata, PR, fastlane validate) | | 2 | Missing `### Related` section | FIXED -- references `project-capacitor-mobile` (architecture) and `sop-capacitor-mobile-lifecycle` (pipeline context) | | 3 | Vague file targets (no specific paths or structure) | FIXED -- 7 specific file paths provided (`fastlane/metadata/en-US/description.txt`, `keywords.txt`, `name.txt`, `privacy_url.txt`, `fastlane/screenshots/en-US/`, `static/privacy.html`, `fastlane/metadata/app_icon.png`) | | 4 | Missing dependency on #80 (TestFlight iteration) | FIXED -- "Blocked by #80 (TestFlight iteration)" and "Blocked by #164 (Apple Developer enrollment)" both added | | 5 | Screenshot device sizes not specified | FIXED -- Apple dimensions listed: 6.7" (1290x2796), 6.5" (1284x2778), 5.5" (1242x2208), minimum requirements (6.7" and 5.5") noted | All 5 findings addressed. ### TRACEABILITY VERIFICATION | Check | Result | |-------|--------| | `story:cap-appstore` exists in `project-capacitor-mobile` user stories | PASS -- "I want to submit an app to the App Store with correct metadata and pass review" | | `arch:appstore` exists in `project-capacitor-mobile` architecture table | PASS -- "App Store Connect: Metadata, assets, review submission, Fastlane deliver" | | Board item #373 on `board-capacitor-mobile` links to this issue | PASS -- labels `story:cap-appstore,arch:appstore,type:feature,consumer:westside` | | `project-capacitor-mobile` note exists and is active | PASS -- slug verified in pal-e-docs | | `sop-capacitor-mobile-lifecycle` note exists and is active | PASS -- slug verified in pal-e-docs | | User story matches issue scope | PASS -- both target App Store listing preparation (metadata, assets, privacy policy) | Full traceability triangle intact: User Story (cap-appstore) <> Architecture (arch:appstore) <> Board Item (#373). ### REMAINING OBSERVATIONS (non-blocking) 1. **Cosmetic heading format**: Original issue uses bold inline labels instead of H3 markdown headings for some sections. Not a blocker -- content is correct and complete. 2. **Fix delivered as comment, not issue body edit**: The Checklist, Related, and file path specifics live in Comment 2 rather than being edited into the issue body. This is functional but means the implementer must read both the issue body and the fix comment to get the full specification. Consider editing the issue body to incorporate the fixes for single-source-of-truth clarity. Non-blocking. 3. **Domain labels**: Issue has `domain:backend`, `domain:devops`, `domain:frontend` which is broad. The actual work is primarily `domain:devops` (Fastlane metadata) and `domain:frontend` (privacy policy page, app icon). Minor. ### VERDICT: APPROVED All 5 findings from the original review are resolved. Traceability is verified end-to-end. Ticket is ready to advance to `next_up` (subject to blockers #80 and #164 clearing first).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
forgejo_admin/westside-landing#81
No description provided.