Repository navigation
First-run setup: the Wi-Fi network is a dropdown, Cloud is Recommended, and the phone setup asks one thing at a time (W-1073) - #374
Merged
wr merged 14 commits intoOct 18, 2026
Conversation
…d, and the phone setup asks one thing at a time (W-1073) - The kit's setup portal shows the networks as one dropdown, strongest first, with "Other…" for a hidden network, instead of a list that could run off the screen plus a separate Network field. An open network hides the password. Save waits for a network to be chosen. A frame that knows its network has it chosen already. - Under Server, Featherframe Cloud is tagged Recommended and Self-hosted Advanced. - Cloud's "Set up your frame" page is three steps: detection source, then a BirdWeather station (skipped for a BirdNET-Pi or BirdNET-Go), then the email. Still one form and one POST; a page shown again for an error opens on that error's step. Without its script, every step shows at once. Refs: W-1073
… is, a normal sign-up, future tense (W-1073)
- Step 1 asks "Do you have a bird detector?" with No (a BirdWeather station
near you, no equipment) or Yes, BirdNET-Pi / Yes, BirdNET-Go.
- The station step says what BirdWeather is, and "Use my location" is
"Find stations near me", above the ZIP code search.
- The last step is "Create your account": Email, "We'll send you a link to
confirm it."
- What happens next is said in the future tense, on the kit's setup page and
in the welcome email ("your frame will show a QR code").
- The page sits at the top, so nothing above a step moves between steps.
- docs/STYLE.md: future tense for what comes next; sign-ups read like
everyone else's.
Refs: W-1073
…first, BirdNET and your own server behind a link (W-1073)
- Cloud's setup page is two steps. Step 1 is "Choose a station near you",
in plain words ("Your frame will show the birds heard by a station near
you. Stations are microphones that people set up at home and share on
BirdWeather."), each station "2 mi away · 38 kinds of birds this week".
"I have a BirdNET-Pi or BirdNET-Go" swaps in a choice of the two. Step 2
is Create your account. No question is answered with a default "No".
- The kit's Wi-Fi page asks only for the Wi-Fi on Cloud: the server choice
is behind "I have my own Featherframe server". A frame already on its own
server shows the choice open.
- docs/STYLE.md: first run is written for someone who has never heard of
BirdNET; the first-run pages may say "birds".
Refs: W-1073
… a plain own-server switch (W-1073)
- Cloud's setup page opens each step on the setup screens' own wren, cut
from the boot art: flying in on step 1, perched on step 2 (two small webp
files bundled into the Worker and served like its icons, so a page load
wakes nothing). The big wordmark, the title, the bar and "Step 1 of 2" give
way to a smaller wordmark and two dots beside each step's heading.
- The station search has the usual location arrow inside the field ("Use
current location"), beside Find, instead of a "Find stations near me"
button.
- "I have my own BirdNET station" is the link to a detector of one's own.
- The kit's Wi-Fi page: "I have my own Featherframe server" opens one field,
Your Featherframe server (blank finds it on the network), and becomes "Use
Featherframe Cloud instead". No second choice to make.
Refs: W-1073
… it, the frame turns to it (W-1073) The wren from the boot screens said nothing about what happens. Step 1 now opens on a small strip: Audubon's singing Carolina Wren (cut in colour from Havell plate 78), notes travelling to a garden microphone, a dot to a Featherframe, and the frame turning from the Northern Cardinal to the Carolina Wren plate as the gray kit draws it. It plays once; with reduced motion it is its last frame. Step 2 shows the frame with the wren. Three small webp files, served like the Worker's icons. Refs: W-1073
…a feeder, "New detection", the frame turns to it (W-1073) The song-to-microphone strip read like a diagram. Step 1 now opens on the marketing page's own scene: the U.S. Fish and Wildlife Service's cardinal at a feeder (public domain), the phone's "New detection · Northern Cardinal · Just now" sliding in, and the walnut frame on the feeder repainting from the Carolina Wren to the cardinal. It plays once; with reduced motion it is its end. Step 2 shows the walnut frame with the cardinal. Three small webp files, served like the Worker's icons. Refs: W-1073
…nal scene, then one question a screen (W-1073) After a look at Sonos's and Oura's setup flows on Mobbin: the page is now full screens, not a card. A welcome on the cardinal at the feeder with the "New detection" and the frame repainting, "Hear a bird outside. See it on your frame.", Get started and "I already have an account" (straight to the email, as Sign in). Then "Choose a station near you" and "Create your account": a big title, one line, the field, the button at the bottom of the screen, a back arrow and "1 of 2". Same form and POST underneath. Refs: W-1073
…me hanging off its foot (W-1073) The welcome's scene is now the site's own U.S. Fish and Wildlife Service cardinal video (public domain), cropped to 4:3, 720 wide, no sound, 300 KB, looping, with the walnut frame overlapping the video's bottom edge. It plays only on the welcome, and with reduced motion it is its still. Safari asks for a video in byte ranges and plays nothing from a server that answers each with the whole file, so the Worker answers that file by range (util.rangeResponse, tested). Checked in WebKit: it asks bytes=0-1, then the rest, and plays. Refs: W-1073
The welcome's video is now the site's four clips joined into one 24 s loop (cardinal, Eastern Bluebird, Tufted Titmouse, Black-capped Chickadee; six seconds each, each cropped to keep its bird clear of the frame; 740 KB). The page follows the video's clock: a bird's "New detection" a moment after it lands, then the frame repaints to its illustration. The walnut frames are the site's renders, the bluebird's and the chickadee's laid onto the cardinal's from the site's screen images and toned to match. With reduced motion, or no script, it is the cardinal, still. Checked a full cycle in WebKit. Refs: W-1073
… (W-1073) Three of the four clips are CC BY-SA: the credit for the one playing sits in the video's corner, in the site's own words. Refs: W-1073
…arer errors and stations (W-1073) The welcome's frame is cut in two, the walnut over a screen of its own, so a repaint flashes only the screen. The page shows the kit being set up: the 13-inch colour frame for an EE02, the 10-inch gray one otherwise, from what the kit reported of its panel. A location or search that fails is a callout that says what to do, not a muted line. Each station shows its distance on the right, and the nearest is tagged Closest. Choosing BirdNET-Pi or BirdNET-Go says what happens next. The email hint promises the address is never shared or sold. Refs: W-1073
wr
force-pushed
the
wells/w-1073-first-run-setup-wi-fi-network-as-a-dropdown-cloud
branch
from
October 18, 2026 14:24
9e1a842 to
18173fc
Compare
…t alarm (W-1073) Body text and list rows are 17 px, field labels 15 px. The chosen station or detector is tinted and ringed in the accent, where its 7 % tint was nearly the page's own gray. A location that is off, a place not found and no stations nearby are notices; only a failed request is a warning, and the notice's lines are balanced so no word stands alone. The video's credit fades between clips and stops short of the frame. The wordmark's face is preloaded and never shown in a stand-in. The email step opens with its field focused, and while a field has the keyboard up the button follows the form, so the keyboard never covers it. Refs: W-1073
…a tooltip (W-1073) The chosen station or detector is a warm tint with its radio filled in the accent; the ring around it is gone. Location off, a browser that can't share it, or a location not found is a tooltip from the location button, over the page, gone at the next tap or keystroke, so nothing below moves; the button shows the page's spinner while it looks. The buttons, the radio and the Closest tag take their fill from --accent-fill, so the accent can be a gradient. Refs: W-1073
…W-1073) Wells's pick of the colorways: the buttons, the chosen radio and the Closest tag are a vertical walnut gradient, barely lighter at the top, with a faint top edge; dark mode lightens the same way. Links stay walnut. Refs: W-1073
wr
deleted the
wells/w-1073-first-run-setup-wi-fi-network-as-a-dropdown-cloud
branch
October 18, 2026 16:59
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three changes to the first run, from the walkthrough of a new kit.
Screens, today and after, side by side: https://claude.ai/artifact/T4omY22whjoz3UnwBW1kUB (private to Wells)
What changed
Written for someone who has never heard of BirdNET (a kit opened as a gift): the default path needs no technical word, and the technical choices are a link off it.
firmware/src/ff_portal.h): the networks are one dropdown, strongest first, with Other… for a hidden network, instead of a list that could run off the screen plus a separate Network field (the Macintosh mini setup page's pattern). It starts on "Choose a network", not the strongest network nearby, which may be a neighbour's; Save waits for a choice. An open network hides the password. A frame that knows its network (the KEY3 hold) has it chosen.hosted/src/pages.ts), after a look at Sonos's and Oura's setup flows: full screens, as a phone app's setup is drawn, not a card. A column on a computer.util.rangeResponse, tested), since Safari plays nothing otherwise; a full cycle checked in WebKit. "Hear a bird outside. See it on your frame." "Your frame will show the latest bird heard near you, as a 19th-century illustration. Setting it up takes about two minutes." Get started, and I already have an account, which goes straight to the email as Sign in ("We'll email you a code to add this frame.").site/public, bundled into the Worker and served like its icons.docs/STYLE.md: future tense for what comes next; sign-ups read like everyone else's; first run is written for someone who has never heard of BirdNET, with technical choices as a link and never "No" as a default answer; the first-run pages may say "birds".Verified
vitest319 passed (new: the steps, the error's step, the colour kit's frame, telling the kits apart, what comes next for an own detector);tsc --noEmitclean.display: block; no script errors.firmware/tools/portal_preview.pyand driven in headless Chrome at phone width: choosing a network fills the form, an open network hides the password, Other… shows Network name, the placeholder blocks Save, a known frame's network is chosen, Save goes through to Connected, no script errors, light and dark.Not covered
wrangler deploy; that deploy is also the first bundle with.webpand.mp4files (newrulesglobs beside the PNGs, about 800 KB in all; a dry run needs Docker, which isn't running here).Wiki, when this ships
The setup page and Change Wi-Fi steps describe the old list and the one-page setup. This goes to the wiki with the release and the deploy, not before (
check_copy.py --wikiclean):Refs W-1073