11# PyBLE — Public Website Specification
22
33Status: ** FROZEN (pre-v1 and v1 launch surface)** · Owner: project maintainer · Last updated:
4- 2026-09-01
4+ 2026-09-25
55
66This document is the source of truth for the first public website at
77` pyble.dev ` . It specifies only the public site; the Flutter app, PBLE/1, and
@@ -125,25 +125,33 @@ Compatibility copy MUST distinguish platform scope from current support:
125125It MUST NOT imply that Bluetooth hardware or stock MicroPython alone is enough,
126126or promise that every eligible board has a firmware image today.
127127
128- ### 3.1 App beta distribution
128+ ### 3.1 App distribution
129129
130- The currently approved app-testing channels are:
130+ The current app channels, verified on 2026-09-25, are:
131131
132132- the public Apple external-testing invitation at
133133 ` https://testflight.apple.com/join/yU4e8s6d ` ; and
134- - the restricted Android internal-testing listing at
135- ` https://play.google.com/store/apps/details?id=dev.pyble.pyble ` , available
136- only to approved testers signed in with the Google account that was invited.
134+ - PyBLE ** 0.2.0** published on Google Play for Android ** open testing** , at
135+ ` https://play.google.com/store/apps/details?id=dev.pyble.pyble ` .
136+
137+ The project owner confirms the Android publication. The official Google Play
138+ listing identifies SciLabPro and describes open testing for PyBLE 0.2.0. This
139+ supersedes the former invited internal-testing status. It does not establish a
140+ production-track release, worldwide availability, a verified opt-in URL, or
141+ the exact source/build identity of the installed store artifact.
137142
138143While either channel is active, the home page and ` /app ` MUST:
139144
140- - distinguish the iPad external beta from the Android internal test, without
141- implying a production App Store or public Google Play release ;
145+ - distinguish the iPad external beta from the published Android Google Play
146+ open test, without implying a production-track release on either store ;
142147- summarize both channels in the home-page hero and link its primary app action
143148 to ` /app ` ; the hero MUST NOT present the iPad channel as the only available
144149 app test;
145- - explain that an unapproved or signed-out visitor may be unable to open the
146- restricted Google Play listing;
150+ - describe Android as Google Play open testing, with no invited-account or
151+ approved-internal-tester requirement; installation remains subject to Google
152+ Play's account, country, device compatibility, and testing availability;
153+ - keep visible copy, page descriptions, Open Graph/Twitter descriptions, and
154+ setup guidance consistent with these channel states;
147155- provide a normal HTTPS link that works on the device displaying the page;
148156- provide a high-contrast QR code encoding each channel's exact HTTPS
149157 destination for a user viewing the site on another screen; and
@@ -160,7 +168,7 @@ normal navigation.
160168
161169The two home-page invitations MUST appear in one labelled ** Choose your tablet
162170beta** comparison group. Within that group the iPad external-beta and Android
163- invited-internal-test cards MUST be peer siblings, render side by side when the
171+ open-testing cards MUST be peer siblings, render side by side when the
164172viewport permits, and stack without changing order on narrower screens. Each
165173card retains its own accessible heading, exact link, local QR, direct-device
166174instructions, and channel-specific availability warning.
@@ -173,14 +181,23 @@ contract, and corresponding QR asset to change together before deployment.
173181` https://pyble.dev/app ` is the stable first-party app-discovery destination
174182encoded by exact-board firmware. It MUST be a complete statically rendered
175183document, not an external redirect. It MUST have its own canonical metadata,
176- identify the iPad external beta and restricted Android internal test (not
177- production store releases), reuse ` siteConfig.testFlightUrl ` and
178- ` siteConfig.googlePlayInternalTestUrl ` as the approved destination sources,
184+ identify the iPad external beta and published Android Google Play open test,
185+ reuse ` siteConfig.testFlightUrl ` and ` siteConfig.googlePlayUrl ` as the approved
186+ destination sources,
179187present both local authored QR codes plus visible direct-URL fallbacks, and link
180188to ` /flash ` and ` /support ` . Its firmware wording MUST remain release-state-neutral
181189or derive from the same build-selected state as the home page; it MUST NOT copy
182190a version/profile claim that can become stale.
183191
192+ The Android QR asset is ` /google-play/pyble-google-play-qr.svg ` and MUST encode
193+ the exact listing URL above. Its name and accessible description MUST NOT
194+ retain the superseded internal-testing restriction. The existing listing URL
195+ remains the direct installation destination; an inferred or unverified opt-in
196+ URL MUST NOT replace it. Repository documentation MUST distinguish app source
197+ version ` 0.2.0+8 ` , published app version ` 0.2.0 ` , and independent firmware
198+ versions. A public listing does not prove that later source fixes are included
199+ in the store artifact.
200+
184201` /app/ ` MUST permanently normalize to ` /app ` while preserving the query. Exact
185202document routing MUST coexist with the existing ` /app/* ` real-app screenshot
186203asset namespace: adding or redirecting the document MUST NOT capture, rename,
@@ -1126,9 +1143,10 @@ The v1 site is releasable when:
11261143- the hero uses a reviewed real-app capture with meaningful alternative text,
11271144 a visible actual-app caption, and a responsive crop that never obscures the
11281145 pictured Blocks workspace or generated Python;
1129- - the current external iPad beta and restricted Android internal test are each
1130- exposed as an operable link and locally served, exact-URL QR code without
1131- claiming production availability;
1146+ - the current external iPad beta and published Android Google Play open test
1147+ are each exposed as an operable link and locally served, exact-URL QR code,
1148+ with matching page/social descriptions and setup guidance; no current copy
1149+ requires an Android invitation or claims production-track availability;
11321150- ` /app ` is canonical, statically rendered, uses both approved testing-channel
11331151 destination/link/QR contracts, links setup and support, and its slash
11341152 normalization does not break an existing nested ` /app/* ` screenshot asset;
0 commit comments