Skip to content
AF

Site changelog

34logged changes, rendered from the append-only operational log this site’s daily routine writes to. Not curated for appearance — this is the record.

Log lines below sometimes name KinesteX, the AI motion SDK that funds this site — the log records that relationship the same way the affected pages disclose it.

For changes in the ecosystem rather than on this site, see API changes & deadlines. For how entries get verified, see methodology.

2026-09

  • expand/architecture

    15 hand-drawn mechanism diagrams

    item 42 of ops/GROWTH-50-UPDATES.md — the 15 architecture patterns had no visual; each diagram draws the page's own worked example, no invented figures

    Every numeric value in a diagram transcribed from its page's text and re-verified (dedup 6,000/7,500/2,500; the LAX-LHR midnights; the two-device merge). Gate: all /architecture pages must carry the figure, none outside may.

  • expand/fix,/build,/tools,/paths,/gates

    10 HealthKit fix pages; 6 build guides (cycling, swimming, hiking, hiit, triathlon, kids); 6 tools + hub; 58-title CTR pass; reading paths; command-K palette; hub freshness; bookmarks; gates page (108 refusals, parity-asserted); GSC csv pipeline; stat cards; copy-as-markdown

    items 9-21, 26-28 partial, 33, 36-39, 41, 44, 48-49 of ops/GROWTH-50-UPDATES.md

    Fix pages grounded solely in Apple's error corpus (undocumented cases stated as undocumented). Every widened title carries a differentiator verified against the entry's own body; spot-checked 5/5 including a manual recount of the WHOOP scope table. Tools emit only symbols established in verified on-site content; the query generator refuses to generate for the 3 types Apple leaves unstated.

  • expand/healthkit,/questions

    12 group pages + hub, 5 standalone references (versions, status, category-values, units, health-connect partial), 21 question indexes + hub, /changelog, /corrections

    240 identifiers and 1188 FAQs sat on single URLs; group pages are the middle layer between the flagship table and the thin-page trap, question indexes make existing answers addressable

    Every identifier appears on exactly one group page (gate-asserted, 240/240); 1188 FAQ deep links resolve (gate-asserted). New healthkitWritability.ts derives 14 explicitly read-only types from the same cached Apple corpus, evidence sentences stored. Writers' numbers locked to generated fact packs.

  • blog/blog

    20 posts: healthkit-240-types-ios-8, healthkit-58-silent-types, healthkit-sum-or-average, healthkit-nutrition-is-biggest, healthkit-mobility-types-unused, healthkit-newest-types-roadmap, healthkit-error-that-never-fires, hrv-sdnn-vs-rmssd, ten-metrics-two-platforms, no-data-means-four-things, fitness-api-approval-gates, wearable-api-user-side-cost, free-fitness-apis-are-expensive, fitness-api-talk-to-sales, fitness-api-integration-order, react-native-health-stale, google-fit-timeline, confirmed-vs-reported, how-we-verify, building-the-healthkit-dataset

    the site holds datasets nobody else has (240 HealthKit identifiers, a 24-product directory, a 10-metric verified matrix, an SDK release tracker, 13 graded ecosystem changes) and had never published a finding from any of them

    Every post is anchored on a number computed from the site's own data and checked against a generated FACTS.md; a verifier rejects any numeral not in it. Blog also gained md mirrors, answers.json records, llms-full entries, FAQPage + TechArticle + speakable, and placement on 37 reference pages.

  • expand/build

    weight-loss-app,meal-planning-app,sleep-tracking-app,recovery-app,meditation-app,cycle-tracking-app,step-challenge-app,senior-fitness-app

    the /build cluster already was the B2C app-category cluster but covered ten types; weight loss, sleep, recovery, meditation, cycle tracking, meal planning, step challenges and senior fitness were uncovered search intent with distinct API stacks

    Each carries an AppStack block joined from the generated HealthKit dataset + API directory. No unsourced numbers: directional market claims carry the (reported, verify) hedge. cycle-tracking makes no contraception/fertility/accuracy claim and senior-fitness no frailty or fall-risk claim; both route regulatory questions to /compliance.

2026-08

  • cluster/accessibility

    12 spokes + hub

    gap analysis: no developer-grade fitness accessibility content exists; Apple + Google a11y docs reachable while nutrition/file-format/framework sources are not

    Cluster 21. Cites no WCAG (w3.org unreachable) and makes no legal claims by design.

  • section/datasets,/badges,/embed,/compare-apis,/s

    Open-data program (4 CC BY datasets + DataCatalog), embeddable widgets and badge, compiled cluster downloads, shareable picker results with a dynamic OG card, and the side-by-side API comparison tool.

  • section/alerts,/digest

    Change alerts (watch products, filtered sends) and the monthly digest archive generated from the changes tracker plus page review dates.

  • section/apis

    API directory: 24 product entity pages derived from the provenance-tracked cost model, with computed coverage and change lists.

  • cluster/watch-apps

    watchos-workout-app-anatomy,healthkit-on-apple-watch,apple-watch-background-execution,workoutkit-scheduled-workouts,mirroring-workouts-to-iphone,wear-os-app-anatomy,wear-os-exercise-tracking,wear-os-tiles,wear-os-phone-sync,watch-platform-differences,watch-app-battery,testing-watch-apps

    source-availability research: only Apple and Google developer docs are reachable from this environment, which ruled out nutrition (USDA/OpenFoodFacts), workout file formats (GPX/Garmin FIT) and gym platforms (Mindbody); monetization failed our own cluster boundary rule; watch-app development is fitness-specific, in demand, and fully verifiable

    Cluster 20, 12 spokes + hub. Primary sources fetched this session: HKWorkoutSession, HKLiveWorkoutBuilder, WKExtendedRuntimeSession, WorkoutKit, WidgetKit, Wear OS Health Services, Tiles, Data Layer, standalone-app rules, Glance. Boundary defined against /devices (watch as data source) and /engagement (re-engagement surfaces). No battery/performance/accuracy numbers anywhere, enforced by verifier over entries + rendered prose (0 hits). Bodies by 3 Opus writers; main session audited links, version strings against the fact sheet, quoted-fact survival, review-outcome claims, and FAQ collisions. Also added: empty clusters now publish nothing (hub 404s, omitted from sitemap/nav/homepage).

  • cluster/engagement

    push-notifications-fitness-app,live-activities-workout-tracking,widgets-and-complications,wear-os-ongoing-activity,engagement-sdks-compared,streaks-and-habit-loops,leaderboards-and-challenges,social-features-fitness-app,gamification-in-fitness-apps,camera-coaching-engagement,measuring-retention-fitness-app,ab-testing-engagement-features,engagement-metrics-that-matter,notification-fatigue-and-optout

    user request: which SDKs drive engagement, how to use them, examples; no cluster covered retention, and fitness apps have engagement surfaces (long-running workouts, glanceable progress) most apps do not

    Cluster 19, 14 spokes + hub. Verified primary sources fetched this session: Apple ActivityKit, WidgetKit, GameKit, UNAuthorizationOptions; Google POST_NOTIFICATIONS, Wear OS Ongoing Activity, Play Games leaderboards, Jetpack Glance. Third-party engagement vendor docs (OneSignal/Braze/Airship/CleverTap/Iterable/FCM) and Mindbody all proxy-blocked -> named nowhere and characterized nowhere; the SDK page says so explicitly. Cluster-wide ban on engagement/retention percentages, enforced by a custom verifier over the entries and re-checked against rendered prose (0 hits). camera-coaching-engagement is firstParty with body-markdown disclosure + competitor-wins. Bodies by 3 Opus writers from a fact sheet; main session audited links, bans, meta, FAQ collisions vs all site FAQs.

  • fix/

    responsive-audit

    measured audit: header nav pushed every page 233px wider than every phone viewport; /matrix overflowed via grid/flex min-width:auto on long type identifiers

    Mobile nav disclosure (closes on route change, Escape, outside tap; inline nav from md up), markdown tables get their own scroll container, global overflow-wrap for long API identifiers, min-w-0 on grid/flex items, touch targets >=24px in nav/footer/cards, viewport export with color-scheme + per-scheme theme-color. Verified 377 page/viewport combos across 13 viewports (320px-4K) x light/dark: zero overflow. Added scripts/responsive-audit.mjs + responsive.yml CI so it cannot regress.

  • geo/

    geo-overhaul-15

    llms.txt spec names <page>.md + rel=alternate/describedby as THE discovery mechanism (we used a non-standard /md path and no link relations); Claude-SearchBot and ~45 other citation-producing agents unlisted; no structured answer index; hubs had no CollectionPage

    15 programmatic GEO changes: spec-conventional .md addresses via rewrites (+hub/index mirrors, YAML front matter), rel=alternate+describedby in HTML and HTTP Link headers, robots.txt as a commented route with 58 named agents advertising every machine surface, llms.txt restructured to spec + md links, TechArticle+WebPage graph (lastReviewed on WebPage per its declared domain), glossary DefinedTerm entity graph (30 pages emit about), honest citation-vs-mentions split, answers.json structured index (214 records + FAQ deep links + first_party flags), changes.xml RSS, CollectionPage+ItemList on all 18 hubs, Organization knowsAbout+publishingPrinciples, sitemap lastmod on hubs/indexes, per-answer #faq-N anchors, 13 new GEO gates. Sources fetched this session: llms.txt spec (AnswerDotAI repo), schema.org vocabulary 29.1 (all 49 terms + domains verified), ai.robots.txt registry, Anthropic crawler docs via search, GEO survey. 14 live server checks + 1076 JSON-LD blocks parsed.

  • cluster/devices

    bluetooth-heart-rate-monitor,cycling-sensors-power-cadence,ftms-fitness-machine-service,treadmill-app-integration,indoor-bike-trainer-integration,rowing-machine-data,apple-watch-live-heart-rate,wear-os-health-services,ant-plus-vs-bluetooth,web-bluetooth-fitness,ios-ble-fitness-devices,testing-ble-fitness-devices

    market gap: no coherent developer coverage of live device connectivity (BLE HR, FTMS, watch-as-sensor); existing content is hobbyist repos and forum posts; zero overlap with our 17 clusters

    Cluster 18 Connected Devices: 12 spokes + hub. UUIDs verified against Bluetooth SIG assigned-numbers registry (official bitbucket); Core Bluetooth + HKWorkoutSession via Apple docs JSON API; Health Services via developer.android.com; Web Bluetooth matrix via caniuse dataset; ANT+ wind-down graded reported (official page proxy-blocked) + added to /changes tracker. Bodies by 2 Opus subagents from a session-verified fact sheet; main session audited both batches programmatically (UUID whitelist, link whitelist, hedging checks, cross-batch FAQ dedup) and spot-read prose. Wired: registry, seed 17, sitemap, search-index, llms surfaces, footer, homepage.

  • pillar/

    no-code-fitness-app

    user-requested flagship: no-code + APIs worked example centered on KinesteX; no owning page for the no-code fitness app query family

    Hand-built first-party flagship /no-code-fitness-app: HomeForm worked example, three integration patterns (product-in-an-embed, hosted handshake, key-in-header), KinesteX WebView/iframe embed + Terra Connect widget + Nutritionix natural-language + ExerciseDB + scheduled LLM recap; disclosure above fold, competitor-wins (Sency/QuickPose/MediaPipe), four honest no-code seams named; FlutterFlow REST docs fetched this session (official GitHub docs repo), all KinesteX/Terra/Nutritionix/ExerciseDB claims reused from adversarially-reviewed on-site pages; wired into sitemap, search-index, footer, /ai-fitness-app related

  • enhance/

    motion-system

    static site felt generic next to dev-tool competitors; animation is the standard trust cue for API products

    Zero-dependency motion system: ApiTerminal hero typewriter (3 scenes, SSR renders full scene), Reveal scroll-reveal (server HTML never hidden), StatCounter, ClusterHero packet-flow + hub pulse on every content page, nav underline, gradient pan, upcoming-deadline ping on /changes; prefers-reduced-motion global kill switch; 15 Playwright checks across normal/reduced-motion/no-JS contexts, run twice

  • revamp/

    homepage

    landing page predated the flagship, tools, report, cookbook — sold a site that no longer exists; conversion goal is the Decision Kit signup

    Full homepage rewrite: conversion hero with live-derived stats, start-where-you-are paths, 12 popular API/SDK tiles, 4-tool row, 17-cluster grid with counts, honest trust section with funding disclosure, report+dataset band, deadline band from changes.ts, Decision Kit newsletter block; Header nav → Fitness APIs/Picker/Cookbook/Changes; site.ts title/description/tagline repositioned

  • spoke/cookbook

    refresh-rotation,webhook-receiver,rate-limit-fetcher,day-boundary-rollup,rep-counter,backfill-checkpointer

    zero runnable code on a 230-page developer site

    New cluster 17: 6 dependency-free recipes, 72 node:test tests run by main session (72/72), byte-verbatim page/file check enforced, cookbook-ci.yml runs on every change; llms surfaces + registry + sitemap wired

  • backlogfunnel

    decision-kit

    signups had no incentive and no deliverable

    public/kit bundle (2 new checklists + scorecard + dataset, CC BY) unlocked on signup success screen; works without Resend

  • spokehub

    changes

    the subscribe promise had no public surface; recurring-freshness GEO signal

    Changes & Deadlines tracker seeded with 12 corpus-verified events + 3 watch items; routine appends via DAILY-CONTENT 2d

  • spokewave20-batch

    menstrual-cycle-api,blood-glucose-api,blood-pressure-api,respiratory-rate-api,strava-api-401-unauthorized,healthkit-background-delivery-not-working,polar-api,what-is-rpe,apple-watch-vs-garmin,rook-vs-spike,usda-fooddata-central-vs-open-food-facts,fitness-api-free-tiers-compared,webhooks-vs-polling-for-fitness-data,what-are-oauth-scopes,structured-output-for-workout-plans,caching-fitness-api-responses

    doubling program day 1 (ops/EXPANSION-MAP.md tier 1)

    16 pages, 8 Opus writers, every page fact-verified in main session; global FAQ check 0 collisions across 1001 keys; gates green first run

  • spoke/guides

    evaluate-motion-sdks

    no evaluation protocol exists in the category; funnel play, disclosed

    Bake-off protocol + scorecard CSV; firstParty banner; scored criteria exclude anything shaped like our product; Apple claims verified against live docs this session

  • spokehub

    state-of-fitness-apis-2026

    no citable original research exists in the niche; LLM-citation play

    Annual access-structure report, all numbers computed from dataset (5/5 enumeration diffs exact), CC BY 4.0 JSON+CSV, Dataset JSON-LD, disclosure aside up top

  • spokehub

    fitbit-api-shutdown

    migrate/fitbit-web-api-to-google-health at pos 8 pre-spike; reported ~Sep 2026 deadline

    Event hub, on-site synthesis only, confirmed-vs-reported table, all dates hedged; 8/8 claim traces + 4/4 link checks passed

  • spokehub

    ai-fitness-app

    'ai workout app development'/'build an ai gym app' theme ~40i at pos 40-90, no owning page

    Flagship decision-map hub, 3.9k words, 99 verified internal links, synthesis-only sourcing (7/7 spot-checks passed), 2 KinesteX mentions with verbatim disclosure

  • backlogtool

    cost-planner

    /pricing cluster = highest CTR on site

    Cost-structure planner, zero dollar figures by design, every field provenance-traced to published pages

  • spoke/compare

    apple-watch-vs-whoop

    aggregator/wearable H2H = best CTR pattern; backlog top comparison

    Apple side live-verified; WHOOP side strictly reuses site-verified facts

  • spoke/fix

    healthkit-authorization-denied

    backlog: denied-vs-empty opacity

    All Apple claims fetched this session from developer.apple.com JSON docs; limited-authorization + guest-mode edge cases

  • spoke/fix

    fitbit-error-code-401

    'fitbit error code 401' family 330i pos~9 CTR 0%

    Exact-error-string page; facts reused from integrate/fitbit-api + fix/401 only; generic 401 spoke retitled provider-neutral to stop cannibalization

  • meta-fix/fix

    (pillar)

    'fitbit error code 401' 330i pos~9 CTR 0% on /fix

    Pillar desc now answers the exact query; added unique pillar FAQ; GSC snapshot refreshed 2026-07-06..2026-08-02

  • spoke/compare+/alternatives

    kinestex-vs-sency,kinestex-vs-quickpose,kinestex-vs-mediapipe,kinestex-alternatives

    funnel: picker had zero KinesteX routing

    Interactive: first-party vs. cluster, disclosed + adversarially reviewed; firstParty plumbing + FIRSTPARTY qa gate

  • spoke/fix

    oura-personal-access-token-deprecated

    verbatim PAT-deprecation query 9i pos8

    Interactive: exact-error-string pattern

  • spoke/motion

    mediapipe-vs-movenet

    query 'movenet vs mediapipe' pos~7

    Interactive: 3 pose-model pages (also mediapipe-pose-landmarker-models, apple-vision-body-pose)

  • spokeinteractive

    glossary

    backlog

    Routine died mid-write; interactive session completed the 32-term glossary + DefinedTermSet