Skip to content

Add a screenshots skill for the app store images#119

Merged
luflow merged 1 commit into
mainfrom
skill/screenshot-generation
Jul 26, 2026
Merged

Add a screenshots skill for the app store images#119
luflow merged 1 commit into
mainfrom
skill/screenshot-generation

Conversation

@luflow

@luflow luflow commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Adds .claude/skills/screenshots/ so refreshing the four shipped screenshots in appinfo/screens/ is repeatable instead of guesswork.

What's in it

scripts/seed_demo_data.py — writes the choir demo data (10 appointments, ~110 responses) straight into oc_att_appointments / oc_att_responses. Going through SQL rather than the UI is the point: it produces "everyone has answered" states without logging in as eleven users.

  • Non-destructive — only deletes and re-inserts the reserved ID range 101-199, and is idempotent.
  • Times are relative to the instance clock, so re-running months later still gives sensible data: rehearsals on Tuesdays, concerts on Saturdays, and one appointment running right now, which is what unlocks the live "Start check-in" button.
  • Autodetects the Nextcloud and database containers; reads DB credentials from config.php.
  • Also fixes what quietly spoils the shots: display names (the dev accounts have none, so the UI shows user1), whitelisted_groups plus a Conductor group (members of groups missing from the whitelist collapse into an "Others" row that reads like a data bug), and lang=en with locale=en_GB (lang alone leaves dates German inside an English UI).

SKILL.md — the parts that are judgement, not automation:

  • The sizing lever: keep viewport x deviceScaleFactor at 1952x1344 (the size of the existing set) and trade one against the other to fit more content. Includes working start values per screenshot.
  • Measure element heights with JS instead of guessing, and cut lists between entries.
  • Two traps that cost real time: leftover hover state making a button look selected, and the check-in buttons rendering both sides coloured for a pending attendee — which reads as "marked absent" unless the visible slice also contains a decided row. The seed data arranges present/absent/pending among the first five alphabetical entries for exactly this reason.
  • Generate thumbnails from the PNG, not the JPG, to avoid compressing twice.
  • The info.xml rules that actually bite: the element order is a schema-enforced sequence (screenshot goes after repository), and replacing an image only needs a merge to main while adding an entry needs a release, because the URLs point at refs/heads/main but the entries are release metadata.

Verification

  • seed_demo_data.py --dry-run and a full run both exercised against master-stable34-1; verified via the app's own API that the response summary shows Conductor / Sopran / Alt / Tenor / Bass with no "Others", and that check-in states come out 4 attended / 1 absent / 6 pending with all three visible in the first five rows.
  • Frontmatter matches the existing skills (name + description only); script mode 100755 like the others.
  • Branched from main; no app code touched, so appinfo/** is unchanged and the backend suite is unaffected.

🤖 Generated with Claude Code

Captures how the four shipped screenshots in appinfo/screens/ are produced,
so the next refresh does not start from scratch.

The seeding script writes the choir demo data (10 appointments, ~110
responses) straight into the DB instead of clicking through the UI as eleven
users. Times are relative to the instance clock, so one appointment is always
running and the live check-in button stays reachable. It is limited to the
reserved ID range 101-199 and is idempotent.

It also sets up what silently spoils the shots otherwise: display names (the
dev users have none), whitelisted_groups plus a Conductor group (members of
missing groups collapse into an "Others" row), and lang=en *with* locale=en_GB
(lang alone leaves the dates German).

SKILL.md documents the sizing lever — keep viewport x deviceScaleFactor at
1952x1344 and trade one against the other to fit content — plus measuring
element heights instead of guessing, the hover and check-in-button pitfalls,
and that replacing an image only needs a merge to main while adding an entry
needs a release.
@luflow
luflow merged commit 095f7a5 into main Jul 26, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant