diff --git a/guides/ai-tools/index.html b/guides/ai-tools/index.html index d52a1bd..8c9d81d 100644 --- a/guides/ai-tools/index.html +++ b/guides/ai-tools/index.html @@ -33,6 +33,10 @@ .more{padding:15px 0}footer{border-top:1px solid #394458;padding:18px 0;color:#c9d2e0;margin-top:28px} @media(max-width:580px){.app{gap:12px;padding:15px}.app img{width:54px;height:54px}} @media(prefers-color-scheme:light){body{background:#f8f9fc;color:#172034}.app,.choice{background:#fff;border-color:#d7deea}.app p,.lead,footer{color:#424e60}.eyebrow{color:#305baf!important}} + +/* In-depth app information before opening the third-party store. */ +a.app-detail{display:inline-block;margin:8px 0 0 12px;color:inherit;text-decoration:underline;text-underline-offset:3px;font-weight:700} +a.app-detail:focus-visible{outline:2px solid currentColor;outline-offset:3px} @@ -51,25 +55,25 @@

Apps to explore

Debate Me - AI Debate Practice app icon

Practise an argument

Debate Me - AI Debate Practice

A structured way to improve your reasoning through AI-assisted debate practice. AI debate practice to sharpen your arguments and win any discussion.

-See on Google Play +See on Google Play Features & FAQs
Speakly - AI Voice Diary app icon

Reflect with voice

Speakly - AI Voice Diary

For speaking a journal entry instead of typing a daily note. Voice diary with AI — record, transcribe and track your mood by speaking.

-See on Google Play +See on Google Play Features & FAQs
Pantry AI - Smart Food Manager app icon

Organise food at home

Pantry AI - Smart Food Manager

For tracking ingredients and expiry dates rather than remembering everything. Pantry tracker & food inventory: cut waste, track expiry dates, plan meals.

-See on Google Play +See on Google Play Features & FAQs
NameCraft app icon

Brainstorm names

NameCraft

For generating naming ideas for a character, pet, business or project. AI name generator for baby, character, pet, business & username ideas.

-See on Google Play +See on Google Play Features & FAQs

Not sure what to pick?

@@ -81,5 +85,16 @@

Apps to explore

if(typeof window.gtag==='function')window.gtag('event','guide_store_click',{guide:'ai-tools',app:a.dataset.app}); })); + + diff --git a/guides/daily-habits/index.html b/guides/daily-habits/index.html index 6ee7596..1bf17cc 100644 --- a/guides/daily-habits/index.html +++ b/guides/daily-habits/index.html @@ -17,6 +17,10 @@ @@ -31,14 +35,25 @@

Daily habit apps for journaling, reflection and routines

  • Need a simple reminder? Try a hydration reminder instead of a longer journaling ritual.
  • Apps to explore

    Each option is different. Choose one that matches the kind of break or routine you want, then check its Google Play listing for supported features and availability.

    -
    Daylapse: Daily Timelapse app icon

    For one photo a day

    Daylapse: Daily Timelapse

    Take one photo a day, keep your streak and watch it become a timelapse

    See on Google Play
    -
    FutureMe - AI Prediction app icon

    For future-self reflections

    FutureMe - AI Prediction

    AI future predictions: write letters to your future self about love & career

    See on Google Play
    -
    Water Reminder - Hydration app icon

    For a hydration routine

    Water Reminder - Hydration

    Water tracker and hydration reminders to drink enough water every day

    See on Google Play
    -
    Daily Reflect app icon

    For gratitude and daily reflection

    Daily Reflect

    Daily journal for gratitude, wins & mood — build a positive daily habit

    See on Google Play
    +
    Daylapse: Daily Timelapse app icon

    For one photo a day

    Daylapse: Daily Timelapse

    Take one photo a day, keep your streak and watch it become a timelapse

    See on Google Play Features & FAQs
    +
    FutureMe - AI Prediction app icon

    For future-self reflections

    FutureMe - AI Prediction

    AI future predictions: write letters to your future self about love & career

    See on Google Play Features & FAQs
    +
    Water Reminder - Hydration app icon

    For a hydration routine

    Water Reminder - Hydration

    Water tracker and hydration reminders to drink enough water every day

    See on Google Play Features & FAQs
    +
    Daily Reflect app icon

    For gratitude and daily reflection

    Daily Reflect

    Daily journal for gratitude, wins & mood — build a positive daily habit

    See on Google Play Features & FAQs

    Already know what you want? Search all published apps or explore quick games.

    + + diff --git a/guides/decision-helpers/index.html b/guides/decision-helpers/index.html index fa2bafe..f352e0e 100644 --- a/guides/decision-helpers/index.html +++ b/guides/decision-helpers/index.html @@ -33,6 +33,10 @@ .more{padding:15px 0}footer{border-top:1px solid #394458;padding:18px 0;color:#c9d2e0;margin-top:28px} @media(max-width:580px){.app{gap:12px;padding:15px}.app img{width:54px;height:54px}} @media(prefers-color-scheme:light){body{background:#f8f9fc;color:#172034}.app,.choice{background:#fff;border-color:#d7deea}.app p,.lead,footer{color:#424e60}.eyebrow{color:#305baf!important}} + +/* In-depth app information before opening the third-party store. */ +a.app-detail{display:inline-block;margin:8px 0 0 12px;color:inherit;text-decoration:underline;text-underline-offset:3px;font-weight:700} +a.app-detail:focus-visible{outline:2px solid currentColor;outline-offset:3px} @@ -51,25 +55,25 @@

    Apps to explore

    Food Roulette app icon

    Where to eat

    Food Roulette

    When you need a nearby restaurant suggestion rather than another list to compare. What to eat? Spin the food roulette to pick a nearby restaurant in seconds.

    -See on Google Play +See on Google Play Features & FAQs
    Movie Roulette: Film Picker app icon

    What to watch

    Movie Roulette: Film Picker

    When the evening decision is about a film and you already know your mood. Movie picker: spin to decide what to watch by mood, genre and platform.

    -See on Google Play +See on Google Play Features & FAQs
    What To Do: Activity Picker app icon

    What to do right now

    What To Do: Activity Picker

    When you have free time but cannot decide on an activity. Activity picker to beat boredom — spin and decide what to do right now.

    -See on Google Play +See on Google Play Features & FAQs
    PickWhirl: Spin to Decide app icon

    Which option to pick

    PickWhirl: Spin to Decide

    When you want to spin among everyday possibilities, including chores and plans. Can't decide? Spin to pick chores, dinner, movies & more in one tap..

    -See on Google Play +See on Google Play Features & FAQs

    Not sure what to pick?

    @@ -81,5 +85,16 @@

    Apps to explore

    if(typeof window.gtag==='function')window.gtag('event','guide_store_click',{guide:'decision-helpers',app:a.dataset.app}); })); + + diff --git a/guides/quick-games/index.html b/guides/quick-games/index.html index 238bae4..f2158b5 100644 --- a/guides/quick-games/index.html +++ b/guides/quick-games/index.html @@ -17,6 +17,10 @@ @@ -32,15 +36,26 @@

    Quick mobile games for a short break

  • Want to think rather than react? Pick a logic challenge or a trivia quiz.
  • Apps to explore

    Each option is different. Choose one that matches the kind of break or routine you want, then check its Google Play listing for supported features and availability.

    -
    Blur: Guess the Image app icon

    For picture guessing

    Blur: Guess the Image

    Guess the photo as it slowly unblurs — a fun image guessing brain game

    See on Google Play
    -
    Instant Judge: Vote in 3s app icon

    For quick opinion votes

    Instant Judge: Vote in 3s

    Vote on photos & scenarios in 3 seconds and see what the community thinks

    See on Google Play
    -
    Dotchi: This or That Polls app icon

    For A-or-B polls with friends

    Dotchi: This or That Polls

    Pick A or B on everyday questions. Vote, see results and compare opinions with friends.

    See on Google Play
    -
    Nodo - Daily Node Puzzle app icon

    For logic puzzles

    Nodo - Daily Node Puzzle

    Daily logic puzzle: solve number node networks and climb the leaderboard

    See on Google Play
    -
    BrainBurst - Daily Trivia Quiz app icon

    For daily trivia

    BrainBurst - Daily Trivia Quiz

    Daily trivia quiz with 1v1 battles and fresh AI questions to grow your knowledge

    See on Google Play
    +
    Blur: Guess the Image app icon

    For picture guessing

    Blur: Guess the Image

    Guess the photo as it slowly unblurs — a fun image guessing brain game

    See on Google Play Features & FAQs
    +
    Instant Judge: Vote in 3s app icon

    For quick opinion votes

    Instant Judge: Vote in 3s

    Vote on photos & scenarios in 3 seconds and see what the community thinks

    See on Google Play Features & FAQs
    +
    Dotchi: This or That Polls app icon

    For A-or-B polls with friends

    Dotchi: This or That Polls

    Pick A or B on everyday questions. Vote, see results and compare opinions with friends.

    See on Google Play Features & FAQs
    +
    Nodo - Daily Node Puzzle app icon

    For logic puzzles

    Nodo - Daily Node Puzzle

    Daily logic puzzle: solve number node networks and climb the leaderboard

    See on Google Play Features & FAQs
    +
    BrainBurst - Daily Trivia Quiz app icon

    For daily trivia

    BrainBurst - Daily Trivia Quiz

    Daily trivia quiz with 1v1 battles and fresh AI questions to grow your knowledge

    See on Google Play Features & FAQs

    Already know what you want? Search all published apps or explore daily habits.

    + + diff --git a/scripts/test_guide_detail_links.py b/scripts/test_guide_detail_links.py new file mode 100644 index 0000000..be30365 --- /dev/null +++ b/scripts/test_guide_detail_links.py @@ -0,0 +1,83 @@ +"""Check every editorial guide's store and support-detail navigation. + +Run from checkout: python3 -m unittest discover -s scripts -p 'test_guide_detail_links.py' -v +""" +from pathlib import Path +import re +import unittest + +ROOT = Path(__file__).resolve().parent.parent +GUIDES = { + "quick-games": {"blur", "instant-judge", "twotaku", "nodo", "brain-burst"}, + "daily-habits": {"true-me", "future-me", "water-reminder", "gratitude-log"}, + "decision-helpers": {"food-roulette", "movie-roulette", "what-to-do", "chore-roulette"}, + "ai-tools": {"debate-me", "voice-memo", "pantry-ai", "name-maker"}, +} +ARTICLE = re.compile(r'
    ([\s\S]*?)
    ') +STORE = re.compile(r'([^<]+)", article) + self.assertIsNotNone(title_match) + self.assertIn( + f'aria-label="Features and FAQs for {title_match.group(1)}"', + article, + ) + detail_path, detail_slug = details[0] + self.assertEqual((detail_path, detail_slug), (app, app)) + self.assertNotIn(app, seen, "duplicate app card") + self.assertTrue( + (ROOT / "support" / detail_slug / "index.html").is_file(), + f"missing support page for {detail_slug}", + ) + seen.add(app) + self.assertTrue(expected.issubset(seen)) + + def test_guide_click_events_do_not_replace_store_events(self): + for guide in GUIDES: + with self.subTest(guide=guide): + html = self.read(guide) + self.assertIn("'guide_store_click'", html) + self.assertIn("'app_detail_click'", html) + self.assertIn("placement: 'guide_card'", html) + self.assertIn(f"guide: '{guide}'", html) + self.assertEqual(html.count("document.querySelectorAll('a[data-guide-detail]')"), 1) + self.assertIn("typeof window.gtag === 'function'", html) + self.assertNotIn("query: input.value", html) + + def test_detail_links_remain_first_party_and_store_links_remain_external(self): + for guide in GUIDES: + with self.subTest(guide=guide): + html = self.read(guide) + self.assertEqual( + len(DETAIL.findall(html)), + len(STORE.findall(html)), + ) + self.assertNotIn('class="app-detail" href="https://', html) + for article in ARTICLE.findall(html): + self.assertIn("play.google.com/store/apps/details?id=", article) + + +if __name__ == "__main__": + unittest.main()