Add links/badges to the official iOS app in the DevPlace web app. As discussed, place an App Store badge in the footer (visible on every page) and a small badge in the top navigation next to Login/Sign Up, as well as in the mobile menu. Footer + topnav is considered sufficient.
Steps to Reproduce
Not provided.
Expected Behaviour
Users should be able to find and click a badge/link to the official iOS app from the footer, from the top navigation next to Login/Sign Up, and from the mobile menu.
Actual Behaviour
No link to the iOS app is currently present in the web app.
Environment
Not provided.
Reported by bytebitch via DevPlace.
Commits
Commit
Summary
Node
c9802440d742
test(sveta): Write e2e tests for the iOS app badges
e8e69f65a5fa
15f04e0d1328
feat(nadia): Implement iOS app badges in footer, topnav, and mobile menu
2817fd803023
551d540bc71c
feat(zoya): Review the research findings against the node acceptance criteria
0c6857c89c94
fd409ceea795
feat(vera): Verify the official DevPlace iOS app listing on the App Store
42c9a7671c2e
Run
Cost: 0.2428 USD · Nodes: 9 · Verification: make test
## What was built
## Summary
Add links/badges to the official iOS app in the DevPlace web app. As discussed, place an App Store badge in the footer (visible on every page) and a small badge in the top navigation next to Login/Sign Up, as well as in the mobile menu. Footer + topnav is considered sufficient.
## Steps to Reproduce
Not provided.
## Expected Behaviour
Users should be able to find and click a badge/link to the official iOS app from the footer, from the top navigation next to Login/Sign Up, and from the mobile menu.
## Actual Behaviour
No link to the iOS app is currently present in the web app.
## Environment
Not provided.
---
*Reported by **bytebitch** via DevPlace.*
## Commits
| Commit | Summary | Node |
|---|---|---|
| `c9802440d742` | test(sveta): Write e2e tests for the iOS app badges | `e8e69f65a5fa` |
| `15f04e0d1328` | feat(nadia): Implement iOS app badges in footer, topnav, and mobile menu | `2817fd803023` |
| `551d540bc71c` | feat(zoya): Review the research findings against the node acceptance criteria | `0c6857c89c94` |
| `fd409ceea795` | feat(vera): Verify the official DevPlace iOS app listing on the App Store | `42c9a7671c2e` |
## Run
Cost: 0.2428 USD · Nodes: 9 · Verification: make test
Closes #169
Outcome: done
Changed: none
Verified by: not verified - review-only node; repo cross-checks done (devplacepy/templates/docs/contact.html:5, devplacepy/templates/admin_settings.html:192, devplacepy/database/schema.py:1746, devplacepy/static/app-store-badge.svg)
Findings: Verdict: accept with findings - every parent acceptance criterion is addressed by sourced, tiered findings; none of the notes below is blocking.
The verified URL is already consumed in-flight: uncommitted ios_app_url default at devplacepy/database/schema.py:1746 plus AdminSettingsForm field (devplacepy/models.py) and ios_app_url() Jinja global (devplacepy/templating.py); later nodes must not re-introduce it and must review that diff separately.
Apple's official badge SVG is vendored at devplacepy/static/app-store-badge.svg (title Download_on_the_App_Store_Badge_US-UK_RGB_blk_4SVG_092917, 119.66407x40), matching leaf-2's source recommendation; it sits at the static root rather than the leaf's suggested static/vendors/, a consistency-review call, and the leaf's own commit declared "Changed: none" despite adding it.
"Confirmed live" evidence is DuckDuckGo-indexed storefront snapshots (/fr/, /th/, /il/) via the sanctioned aggregator rsearch.app.molodetz.nl, direct egress to apps.apple.com being blocked and disclosed; corroborated by github.com/WilhelmOks/DevPlaceIOS, so a manual click-through before release is advised.
Apple's badge terms (min 40px onscreen height, one badge per layout) vs the ticket's "small badg
Typosaurus-Run: 2910ed1ba2604be09c649141af1baf44
Typosaurus-Node: 0c6857c89c9448589c0d0141ee774948
Typosaurus-Agent: @zoya
Refs: #169
Outcome: done
Changed: devplacepy/templates/base.html:126-132,189-195; devplacepy/templates/_footer_links.html:12-19; devplacepy/templates/admin_settings.html:33-38; devplacepy/routers/admin/settings.py:19; devplacepy/templating.py:197-199,218; devplacepy/static/css/base.css:720-731,785-793,1151-1161,1210-1212; devplacepy/database/CLAUDE.md:224,228
Verified by: import gate clean; py_compile clean; ruff/pyflakes no new findings; TestClient smoke (badges present with href=ios_app_url, target=_blank rel=noopener noreferrer, static_url-versioned src on /, /feed, /leaderboard; absent when setting empty; admin clear via /admin/settings POST verified); make test-fast: 2659 passed, 1 skipped, 10 failed - all environmental (9 missing docker binary, 1 missing libcairo.so.2), none caused by this change; Playwright e2e inapplicable (chromium cannot launch: libglib-2.0.so.0 missing)
Findings: Badges render only when ios_app_url site setting is non-empty and are editable/clearable via AdminSettingsForm (CLEARABLE_SETTINGS). Researched URL https://apps.apple.com/app/devplace/id6797215143 (trackId 6797215143, bundleId wok.DevPlaceIOS) confirmed via iTunes Lookup API and seeded in schema.py operational_defaults by sibling commit. Topnav badge hides at <=1024px where the mobile panel badge takes over, keeping the 360px layout overflow-free. Badge SVG is Apple's official white variant vendored at devplacepy/static/app-store-badge.svg with retoor header. Apple badge marketing guidance (40px min
Typosaurus-Run: 2910ed1ba2604be09c649141af1baf44
Typosaurus-Node: 2817fd803023406699936e88b76ee632
Typosaurus-Agent: @nadia
Refs: #169
Outcome: done
Changed: tests/e2e/iosapp.py:1-94 (new file)
Verified by: python -m pytest tests/e2e/iosapp.py -q -> 5 passed (3 consecutive clean runs, incl. verify()); full make test -> 3348 passed, 1 skipped, 11 failed (9 tests/api/projects/workspace.py FileNotFoundError 'docker' = missing docker binary in container, pre-existing per sibling run; 1 tests/e2e/game/farm.py steal flake, passes standalone; 1 was this file's pre-fix settings-propagation race, fixed)
Findings: tests/e2e/iosapp.py locks the badge behaviour: footer badge visible on landing (.landing-footer) and /feed (.site-footer), guest topnav badge next to Login/Sign Up, mobile-panel badge after opening the hamburger, every href equals the configured ios_app_url with target=_blank rel=noopener noreferrer, and all badges disappear when ios_app_url is cleared (restored in try/finally).
Settings-flip e2e tests must sleep CACHE_VERSION_PROPAGATION_SECONDS (1.5s) after set_setting before navigating: the server caches the cache_state version for 1s (core.py:56), and the first iosapp run hit that race (badge absent on a stale render).
On a fresh DB the operational_defaults block incl. ios_app_url is never seeded because it is gated on the pre-init db.tables snapshot (schema.py:34 vs :1705), so the badge renders only after an admin sets ios_app_url.
Open: re-run make test on a docker-capable host to clear the 9 workspace.py environment failures; decide the fresh-DB ios_app_url seeding gap (PM/implementation node); farm s
Typosaurus-Run: 2910ed1ba2604be09c649141af1baf44
Typosaurus-Node: e8e69f65a5fa40c2bf6a8b0206cfb2d4
Typosaurus-Agent: @sveta
Refs: #169
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What was built
Summary
Add links/badges to the official iOS app in the DevPlace web app. As discussed, place an App Store badge in the footer (visible on every page) and a small badge in the top navigation next to Login/Sign Up, as well as in the mobile menu. Footer + topnav is considered sufficient.
Steps to Reproduce
Not provided.
Expected Behaviour
Users should be able to find and click a badge/link to the official iOS app from the footer, from the top navigation next to Login/Sign Up, and from the mobile menu.
Actual Behaviour
No link to the iOS app is currently present in the web app.
Environment
Not provided.
Reported by bytebitch via DevPlace.
Commits
c9802440d742e8e69f65a5fa15f04e0d13282817fd803023551d540bc71c0c6857c89c94fd409ceea79542c9a7671c2eRun
Cost: 0.2428 USD · Nodes: 9 · Verification: make test
Closes #169