Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/app-discovery-qa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
branches: [main]
paths:
- apps.html
- index.html
- apps_data.json
- guides/**
- sitemap.xml
Expand All @@ -17,6 +18,7 @@ on:
branches: [main]
paths:
- apps.html
- index.html
- apps_data.json
- guides/**
- sitemap.xml
Expand Down
4 changes: 2 additions & 2 deletions docs/APP_DISCOVERY_GROWTH_RELEASE_2026-10-27.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ bash scripts/publish_app_discovery.sh --apply
bash scripts/check_app_discovery_live.sh
```

Only these files transfer: `apps.html`, `sitemap.xml`, `guides/quick-games/index.html`, `guides/daily-habits/index.html`. Every other VPS file, including privacy, support, policy, payment and ads assets, stays untouched. To override environment use `APP_SITE_DEPLOY_HOST` and `APP_SITE_DEPLOY_ROOT` with a known-safe absolute path. The script refuses unknown flags/invalid targets.
Only these files transfer: `index.html`, `apps.html`, `sitemap.xml`, `guides/quick-games/index.html`, `guides/daily-habits/index.html`. The homepage links are tracked with `discovery_nav_click` and let visitors reach the search or guides without scrolling 92 cards. Every other VPS file, including privacy, support, policy, payment and ads assets, stays untouched. To override environment use `APP_SITE_DEPLOY_HOST` and `APP_SITE_DEPLOY_ROOT` with a known-safe absolute path. The script refuses unknown flags/invalid targets.

**Publish gate:** a dry-run is not publication. Only mark live once `check_app_discovery_live.sh` reports HTTP 200 and matches `id="find-app"`, both guide canonical URLs, guide click event and sitemap entries. After manual publication consider Google Search Console URL inspection and sitemap submission if the `appdevelopsk.com` property is available.
**Publish gate:** a dry-run is not publication. Only mark live once `check_app_discovery_live.sh` reports HTTP 200 and matches the homepage `discovery-links`, `id="find-app"`, both guide canonical URLs, guide click event and sitemap entries. After manual publication consider Google Search Console URL inspection and sitemap submission if the `appdevelopsk.com` property is available.

## Growth experiment — acquisition, not vanity pageviews

Expand Down
12 changes: 12 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@
location: a.closest('footer') ? 'footer' : (a.closest('.hero') ? 'hero' : 'other'),
link_url: href
});
} else if (a.classList.contains('discovery-link')) {
gtag('event', 'discovery_nav_click', { guide: a.getAttribute('data-guide') || 'catalog', origin: 'homepage' });
} else if (a.classList.contains('app-card')) {
gtag('event', 'app_view', { app: href.replace(/^support\//, '').replace(/\/$/, '') });
} else if (/pickly\.blog|toolify365\.com|fxea365\.com/.test(href)) {
Expand Down Expand Up @@ -298,6 +300,11 @@
.stats { grid-template-columns: repeat(2, 1fr); }
.hero { padding-top: 100px; }
}

.discovery-links{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;max-width:1100px;margin:10px auto 30px;padding:0 24px}
.discovery-links a{display:inline-flex;align-items:center;gap:6px;border:1px solid rgba(155,169,255,.5);border-radius:999px;padding:10px 16px;color:var(--text-primary);background:rgba(108,123,255,.13);text-decoration:none;font-weight:650;font-size:.91rem}
.discovery-links a:hover,.discovery-links a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

</style>

<!-- impact.com トラッキングタグ(所有権確認+アフィリ計測: リンク自動変換/インプレッション) -->
Expand Down Expand Up @@ -425,6 +432,11 @@ <h3 data-i18n="cat_travel">Travel &amp; Maps</h3>
<h2 data-i18n="featured_title">Featured Apps</h2>
<p data-i18n="featured_desc">A selection of our most popular apps across categories</p>
</div>
<nav class="discovery-links" aria-label="Discover SK Apps by purpose">
<a class="discovery-link" data-guide="catalog" href="/apps">🔎 Find an app</a>
<a class="discovery-link" data-guide="quick-games" href="/guides/quick-games/">🎮 Quick games</a>
<a class="discovery-link" data-guide="daily-habits" href="/guides/daily-habits/">📅 Daily habits</a>
</nav>
<div class="apps-grid">
<a class="app-card" href="support/snaplingo/">
<img class="app-icon" src="icons/snaplingo.png" alt="SnapLingo" loading="lazy">
Expand Down
3 changes: 3 additions & 0 deletions scripts/check_app_discovery_live.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ fetch() {
-o "$tmp/$filename" -w '%{http_code}' "$base$route")
[[ "$code" == 200 ]] || { echo "FAIL HTTP $code $base$route" >&2; exit 1; }
}
fetch '/' 'index.html'
grep -Fq 'class="discovery-links"' "$tmp/index.html" || { echo 'FAIL homepage discovery links are stale' >&2; exit 1; }
grep -Fq 'discovery_nav_click' "$tmp/index.html" || { echo 'FAIL homepage discovery tracking is stale' >&2; exit 1; }
fetch '/apps' 'apps.html'
grep -Fq 'id="find-app"' "$tmp/apps.html" || { echo 'FAIL catalog search is stale' >&2; exit 1; }
grep -Fq 'catalog_store_click' "$tmp/apps.html" || { echo 'FAIL store-click attribution is stale' >&2; exit 1; }
Expand Down
2 changes: 1 addition & 1 deletion scripts/publish_app_discovery.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ root="${APP_SITE_DEPLOY_ROOT:-/var/www/html}"
if [[ ! "$host" =~ ^[a-zA-Z0-9_.@-]+$ || ! "$root" =~ ^/var/www/[a-zA-Z0-9_./-]+$ ]]; then
echo 'Invalid APP_SITE_DEPLOY_HOST or APP_SITE_DEPLOY_ROOT' >&2; exit 2
fi
files=(apps.html sitemap.xml guides/quick-games/index.html guides/daily-habits/index.html)
files=(index.html apps.html sitemap.xml guides/quick-games/index.html guides/daily-habits/index.html)
for file in "${files[@]}"; do
[[ -s "$file" ]] || { echo "Missing source file: $file" >&2; exit 2; }
done
Expand Down
8 changes: 8 additions & 0 deletions tests/catalog-growth.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,11 @@ test('guide landing pages link only to listed published applications and are dis
assert.doesNotMatch(page,/aggregateRating|ratingValue|100% free|guaranteed/i);
}
});

test('homepage sends visitors to catalog and both indexable guides without a search gate',()=>{
const home=read('index.html');
assert.match(home,/class="discovery-links"/);
assert.match(home,/href="\/apps"/);
for (const slug of guides) assert.match(home,new RegExp('href="/guides/'+slug+'/"'));
assert.match(home,/discovery_nav_click/);
});
Loading