Organization-level defaults for getapps.cafe.
| Path | What it is |
|---|---|
profile/README.md |
The public org profile at github.com/getappscafe |
profile/build_menu.py |
Regenerates the poster and app grid from the live site |
scripts/repo_metadata.py |
Fills in missing repo description / website / topics across the org |
.github/workflows/repo-metadata.yml |
Runs that script daily at 18:00 ICT |
profile/icons/ |
One 128×128 icon per app, pulled from getapps.cafe |
profile/poster.png |
Isometric hero poster — real app UI as sheared 3D panels |
profile/poster-dark.png |
Same poster in the site's dark theme; README picks via <picture> |
profile/avatar.svg |
Org avatar, source — traced from the getapps.cafe app icon |
profile/avatar.png |
Org avatar, 512×512 — upload at Settings → Profile picture |
Poster colours come from getapps.cafe/styles.css (:root and
:root[data-theme="dark"]) — see THEMES in the build script. Keep them in sync
with the site rather than inventing values.
The poster showcases the apps listed in SHOWCASE. Only some apps publish UI
screenshots, so that list can only be drawn from those — the script fails loudly
if a chosen app has none.
FREE_EXTRA lists apps we serve free that the site still files as paid. They get
added to On the House and marked 🆓 while staying in their own category — the
same "derived row" convention the site uses. Remove an entry once the site itself
moves the app, or the override becomes a silent no-op.
When apps are added, renamed, or ship out of "coming soon", rerun:
pip install pillow && brew install librsvg
python3 profile/build_menu.pyIt refreshes icons/, re-renders poster.png, and rewrites only the block between
the MENU-START / MENU-END markers — the release bot's WEEKLY-REPORT section and
everything else stay untouched. Prices, plan details, and copy are not generated
— edit those by hand.
The poster needs the Avenir Next system font (macOS); elsewhere it falls back to PIL's default face and the headline will look off.
Regenerate the avatar PNG after editing the SVG:
rsvg-convert -w 512 -h 512 profile/avatar.svg -o profile/avatar.pngEvery repo should carry a description, a website, and topics. repo_metadata.py
fills in whatever is missing, taking the wording from the live menu so a repo says
the same thing the storefront does. It also repoints getapps.cafe/app/<slug>
links when the menu drops a slug, and only ever writes to fields that are empty.
python3 scripts/repo_metadata.py # dry run, prints the plan
python3 scripts/repo_metadata.py --applyIt runs itself daily at 18:00 ICT (0 11 * * * — GitHub cron is UTC and
Vietnam has no DST). Scheduled workflows only fire from the default branch.
One-time setup: the job needs an Actions secret ORG_REPO_TOKEN — a PAT with
Administration: write on the org's repositories. GITHUB_TOKEN cannot edit other
repos, so without the secret the job fails loudly rather than silently doing nothing.
Repos with no matching app are listed in the run summary rather than guessed at.
To cover one, add it to KNOWN (non-app repos) or ALIAS (repo name differs from
the menu slug). Per-app topics are curated in TOPICS; apps missing there still get
platform, framework, and category tags.