-
Notifications
You must be signed in to change notification settings - Fork 0
Docs/refine apple design skills #3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
brbndon
wants to merge
21
commits into
main
Choose a base branch
from
docs/refine-apple-design-skills
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
21 commits
Select commit
Hold shift + click to select a range
3396aab
chore(oss): polish public storefront for sharing
brbndon 6564a8e
docs(archive): restore website preview working directory
brbndon 16fbe54
docs(e2e): add consumer testing contract guidance
brbndon 20cf213
docs(skills): refine Apple design craft, glass, and motion defaults
brbndon 21007cb
chore: ignore local TinyFish research outputs
brbndon f02999a
docs(skills): route design motion/glass and close craft activation gaps
brbndon 1b82799
docs(skills): fix host skill paths and optional Maestro contract
brbndon 18b3670
docs(verification): add iOS UI evidence contract
brbndon cdfe7df
docs(foundation): document system-first Liquid Glass guidance
brbndon 77aafb2
fix(bootstrap): make consumer UI E2E contract tool-neutral
brbndon 8a755e5
fix(workflow): sync AGENTS template inspection contract
brbndon 57e7746
docs(quality): neutralize playbook and cover UI evidence boundaries
brbndon 34c98f4
fix(audit): close reusable guidance findings
brbndon 7977ec0
docs(workflow): expose multi-service app patterns
brbndon 2c657e5
fix(audit): close reusable guidance findings
brbndon fa021f6
docs(templates): add LiquidOrbLoader portable loading mark
brbndon e5564e9
docs(templates): sync LiquidOrbLoader with soft-glow Harborlight UI
brbndon 9f59eeb
docs(templates): sync LiquidOrbLoader with audit fixes
brbndon 5f23dbb
docs(web-marketing): document proven landing page recipe
brbndon 66160ea
docs(web-marketing): fix screenshot height and unify overflow check w…
brbndon 7786a22
docs(design-skills): address PR review on validator, recipe, template
brbndon File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
131 changes: 131 additions & 0 deletions
131
.agents/skills/apple-app-marketing-site/references/landing-page-recipe.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,131 @@ | ||
| # Homepage recipe — anatomy, real screenshots, verification | ||
|
|
||
| This reference is the complete homepage spec — self-contained, with no | ||
| external checkout required before building. Structure, tokens, and workflow | ||
| stay identical across products; only frontmatter content changes. A consumer | ||
| example may exist at `GroupTripMoney/web/` where that checkout is available; | ||
| it is optional and illustrative only, never the source of truth. | ||
|
|
||
| ## Homepage anatomy (section order) | ||
|
|
||
| All copy lives in frontmatter `as const` arrays at the top of | ||
| `src/pages/index.astro` (`screens`, `benefits`, `testimonialPlaceholders`, | ||
| `pricingPoints`, `faqs`) so the next product swap only edits data. | ||
|
|
||
| 1. **Hero** — eyebrow, `h1.display-title` (two short lines), `.lede`, CTA | ||
| trio, CSS device mockup right. | ||
| CTA trio: status pill (`span.btn.btn-coming-soon`, `role="status"`, | ||
| `aria-describedby` → microcopy note), `a.btn.btn-secondary[href="#screens"]` | ||
| "See it in action", text link to `/help/`. | ||
| 2. **Trust strip** — thin divider + centered row of three privacy/product | ||
| promises that match the app's real behavior. | ||
| 3. **Screenshot gallery** (`id="screens"`) — exactly 4 real captures, one | ||
| per main app screen. Mobile: horizontal | ||
| `snap-x snap-mandatory` scroll, `w-[72vw] max-w-[16.5rem]` cards; `sm+`: | ||
| `grid sm:grid-cols-2 lg:grid-cols-4`. Each item: `figure` → rounded frame | ||
| (`rounded-[1.4rem] ring-1 ring-black/10 shadow-soft`) → `img` | ||
| (`width="640" height="1391"`, `loading="lazy"`, descriptive `alt`) → | ||
| `figcaption` (bold title + muted caption). Never CSS illustrations here — | ||
| only captures of the real app. | ||
| 4. **Benefits** — full-bleed `#efeff1` band, `ul.grid sm:grid-cols-2 | ||
| lg:grid-cols-3` of 6 cards (`rounded-[1.25rem] border border-line | ||
| bg-surface p-6 shadow-soft`) with uppercase kicker, `h3`, muted body. | ||
| One benefit per real capability. | ||
| 5. **Clarity / product visual** — two-column grid; calm diagram card | ||
| (flat cards, `shadow-soft`, no stickers/gradients) + copy + short bullet | ||
| list with 5px ink dot markers. | ||
| 6. **Social proof placeholders** — full-bleed band, `md:grid-cols-3` quote | ||
| cards: `blockquote` in curly quotes + `footer` with 36px initials avatar | ||
| (soft pastel bg), name, context line. Pre-launch: array is | ||
| `testimonialPlaceholders` with a `// PLACEHOLDER` comment — never present | ||
| invented people as real customers. | ||
| 7. **Pricing** — centered; one card (`max-w-md`, `rounded-[1.5rem]`, | ||
| `p-8 md:p-10`) with app name + "Free" (or real price), border-t bullet | ||
| list with ink dots, full-width coming-soon status pill, microcopy. Only | ||
| state pricing facts the product really has. | ||
| 8. **FAQ** — `max-w-3xl border-t border-line` list of 5 native | ||
| `details.faq-item` rows (`border-b border-line`, `+`/`−` circle | ||
| indicators), plus a muted line linking `/help/`. Answers describe the | ||
| app's real behavior (accounts? money movement? storage? launch timing). | ||
| 9. **Final CTA / privacy band** — dark `bg-night rounded-[1.5rem]` panel: | ||
| eyebrow + `h2` (product promise), body combining privacy posture + launch | ||
| status (`#a1a1a6`), right column with `a.btn.btn-on-dark` | ||
| → `#screens` and underline link → `/privacy/`. | ||
|
|
||
| Section rhythm: page canvas (`#f5f5f7`) alternating with full-bleed | ||
| `#efeff1` bands; `py-24 md:py-32` section padding; `site-shell` | ||
| (`min(1120px, calc(100% - 2.5rem))`). | ||
|
|
||
| ## Honesty conventions | ||
|
|
||
| - Pre-launch CTAs are **status controls**, not fake buttons: `role="status"` | ||
| + `aria-describedby` + microcopy ("The App Store listing is not available | ||
| yet."). No dead App Store links. | ||
| - Social proof is placeholder data until real users exist, marked in code. | ||
| - Every claim traces to something the app actually does — read the app | ||
| source first; never invent features, pricing, or privacy posture. | ||
|
|
||
| ## Capturing real screenshots | ||
|
|
||
| Fixture mode first: launch the app with its fixture launch argument (e.g. | ||
| `-useFixtureData` seeding an in-memory container) via XcodeBuildMCP | ||
| (`build_run_sim` with `launchArgs`). Then drive navigation with a throwaway | ||
| Maestro flow in `/tmp` — never the repo's committed `.maestro/` suite: | ||
|
|
||
| - Do **not** include `launchApp` in the flow: Maestro restarts the app and | ||
| its `arguments:` map does not reproduce `-useFixtureData` on iOS, so the | ||
| app relaunches without fixtures. Drive the already-running app. | ||
| - `assertVisible` only text guaranteed on screen (below-fold assertions | ||
| fail); scroll first (`swipe: {direction: UP}`) for below-fold shots. | ||
| - Tap rows/buttons by text; tap tab bars by percentage points across the | ||
| bar at ~94% height (e.g. 17% / 50% / 83% for a three-tab bar). Toolbar | ||
| buttons exist only on the screen that owns them — inspect the current | ||
| screen before tapping. | ||
| - Maestro terminates the app between runs: one flow covering every screen, | ||
| or relaunch with fixtures before each flow. | ||
| - Assert distinctive text on every screen before screenshotting; names on | ||
| `takeScreenshot` map to content. | ||
|
|
||
| Downscale to 640px wide into `web/public/screenshots/`: | ||
| `sips --resampleWidth 640 shot.png --out web/public/screenshots/name.png` | ||
| (optionally `xcrun simctl io booted screenshot /tmp/x.png` for full-res). | ||
| Delete unused captures; register each in the `screens` array. | ||
|
|
||
| ## Verification pass (mandatory) | ||
|
|
||
| 1. `cd web && npm run build` — all routes emit, no errors. | ||
| 2. `npm run preview -- --port 4321`; every route and asset returns 200 | ||
| (`/`, `/help/`, `/support/`, `/privacy/`, `/terms/`, screenshots, favicon). | ||
| 3. Browser automation (agent-browser CLI or equivalent): desktop 1440×900 — | ||
| no console/page errors; no horizontal overflow | ||
| (`document.documentElement.scrollWidth <= innerWidth`); **every link** | ||
| clicked (scroll the element into view first — below-fold clicks miss), | ||
| URLs/hashes confirmed; support form: empty submit shows per-field errors | ||
| and focuses the first invalid field, valid submit reveals the toast and a | ||
| correctly built `mailto:` href; help search filters with result count and | ||
| empty state; FAQ `<details>` toggles; skip link (Tab → Enter → `#main`); | ||
| `img` naturalWidth > 0 with non-empty `alt`; heading order h1→h2→h3 | ||
| without jumps; `role="status"` pills present. | ||
| 4. Mobile 390×844 (plus the 320px minimum width): overflow still false | ||
| (gallery scrolls internally); menu | ||
| toggle sets `aria-expanded` and a nav link closes it. | ||
| 5. Full-page screenshots at both widths; if the model cannot view images, | ||
| pixel-sample the PNGs (canvas `#f5f5f7`, bands `#efeff1`, night | ||
| `#1d1d1f`, white cards) to confirm sections render. | ||
| 6. Re-sweep all routes for console errors; commit only intended files | ||
| (revert incidental lockfile churn). | ||
|
|
||
| Regenerate screenshots whenever the app UI changes — stale captures are | ||
| worse than none. | ||
|
|
||
| ## Per-project swap table | ||
|
|
||
| | What changes | Where | | ||
| | --- | --- | | ||
| | Product name, domain, support email | `astro.config.mjs`, `BaseLayout` meta, `Header`/`Footer`, `SupportForm` address | | ||
| | Screenshots | recapture from THIS app | | ||
| | Reviews / social proof | `testimonialPlaceholders` array | | ||
| | Hero, benefits, FAQ, pricing copy | frontmatter arrays on `index.astro` | | ||
| | Privacy / trust claims | `TrustStrip`, final band — match real posture | | ||
| | Phone mockup content | `PhoneMockup.astro` (illustrative) | | ||
| | Favicon / brand mark | `public/favicon.*`, `BrandMark.astro` | | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This recipe is mandatory for the marketing-site skill, which is advertised for iOS or macOS apps, but the real-screenshot path only tells agents to launch with
build_run_simand drive an iOS Maestro flow. For a macOS app landing page, following this blocks screenshot capture or produces the wrong app evidence instead of usingbuild_run_macos/macOS screenshots or a platform-neutral branch; split this section by platform before making it required.AGENTS.md reference: AGENTS.md:L3-L3
Useful? React with 👍 / 👎.