January → October 2026 · newest first · drawn from the project's commit history · page updated 22 October 2026
A milestone map of how Glide was built: the iOS app, the AWS backend, the
science pages, family sharing, privacy hardening, meal AI, the My Lab
insights feed, the nighttime call alarm, a bedside night mode, Glide
Premium. On July 27 the first build went to Apple for review. Since then:
an Apple Watch app, Libre and Medtrum beside Dexcom, mmol/L, the App Store
launch on September 14, two more releases in the next two weeks, on
September 30 Europe, the UK and Canada, and in October a Live Activity,
the first pump data and Nightscout.
Oct 15–22Release 1.0.5
Nightscout, and the pump on the chart
A Nightscout site now works as the CGM source, in beta, with a read-only
token. The pump's boluses and carbs moved onto the Home and Replay charts as
outlined labels, and a bolus also logged in Glide shows once. My Lab got a
“By time of day” view that groups the pump's meals, free for every
profile. Home got a tip a day behind a lightbulb, the Carbs editor shows your
newest photos, and holding the chart lifts the label under your finger.
- Nightscout (beta): readings only, fetched by its own isolated Lambda; API_SECRET never accepted
- Show pump doses (Settings → Display), synced per account; logged bolus within 15 min of a pump bolus hidden
- My Lab: By food | By time of day, from pump meals
- Daily tips: one a day behind the Home lightbulb, off in Settings → Guide
- Follower invite link: the share sheet carries the code, and the link fills it in
🔒 Milestone: the Lock Screen
Oct 7–14Release 1.0.4
The Lock Screen, and the pump
The latest reading now stays on the Lock Screen and in the Dynamic Island
as a Live Activity, updated by a push from the server for each reading, so
it stays current while Glide is closed. Tandem and Glooko pumps connect in
beta; their boluses went to Insights only (1.0.5 put them on the chart). Insights got a
“Where to focus” card that compares your hours with your own best
days, and a share button that makes a PDF for clinic day. When a follower
asks to bolus or treat a low, the person who owns the profile can answer
“On it”.
- Live Activity: Lock Screen card + Dynamic Island, server push per reading over SNS
- Live Activity card always black with white text
- Pumps (beta): Tandem Source and Glooko, stored apart from logged doses
- Forecast uses the pump's ICR/ISF by time of day (Glooko); manual insulin duration
- Insights: Where to focus, What costs time in range, share as PDF
- Owner "On it" answer to follower nudges
Oct 1–6Release 1.0.3
A guide, a syringe, a calmer forecast
An in-app Guide with a tour on first install. A syringe on every bolus chip.
The forecast now absorbs carbs on the 3-hour curve from
Loop, and its cone grows into
place instead of snapping. The change per 5 minutes is computed once on the
server, so phone, watch and push agree. Readings missed during a gap are
filled in after it. And glidebg.com got free
calculators.
- In-app Guide: five pages, Settings → Guide, links open their page
- Bolus: a syringe on the chart chip, the Home button and the Guide swatch
- Forecast: carbs absorb on Loop's 3 h curve, not a 45 min S-curve
- Five-minute change: computed on the server, stored with its reading
- Worker: fill CGM holes from the stored rows, keep late fills
🌍 Milestone: 33 countries
Sep 30EU, UK, Canada
Live in 33 countries
With a consent screen on first launch and privacy sections for Europe and
Canada, Glide went live in 33 countries: the US, Canada, the 27 EU states,
Iceland, Norway, Switzerland and the UK. The same day Carbify moved to
Gemini 3.8 Flash, picked after every candidate answered 90 meal photos and the best ones about 500 more
(the numbers).
- Consent screen on first launch, recorded per account
- www: EEA/UK/Swiss privacy section, subscriptions + EU withdrawal in the Terms
- plans: EU launch live, storefronts verified
- Carb estimator: gemini-3.8-flash at low effort with prompt v7
Sep 21–27Release 1.0.2
Hold, slide, ask
Hold a chart and slide to read any reading. A parent who follows a kid's
profile can long-press Carbify and send “Ask to bolus” or
“Ask to treat low” to the kid's phone. Dexcom accounts outside
the US connect, Libre loses its beta tag, and a one-time Home card replaces
the full-screen paywall.
- Chart hold-and-slide: cursor, time · value readout, one lifted chip
- Follower nudges: "Ask to bolus" / "Ask to treat low" on the Carbify long-press
- Dexcom Share outside the US: a region on connect, stored as cgm.region
- iOS: Premium card replaces the onboarding paywall
Sep 15–20Release 1.0.1
The watch ships, the lab moves
Six days after launch: the Apple Watch app shipped. My Lab's meal-trial scoring
moved from each phone to the server, after a shadow run checked it against
the phone's scorer. Low and signal-loss banners became time-sensitive, so
they get through a Focus. And a test suite now signs up throwaway accounts
and walks the app on the live servers before every release.
- iOS 1.0.1 build 42: ship the Apple Watch app in Release builds
- Server-side trial validity, step 6: iOS reads server verdicts; the client scorer is gone
- Low + lost-signal banners are time-sensitive; recovery banner names the gap
- Simulator integration flows: 6 XCUITest flows on the live stack
Sep 10–11Connectors + units
Not just Dexcom
The Dexcom-only ingestion code became connectors, and Medtrum and FreeStyle
Libre joined Dexcom. Glucose can show in mmol/L, per account: every reading
is still stored in mg/dL and converted only on screen.
- CGM connectors: rename the dexcom map to cgm+connector, split out feed, add Medtrum
- Libre connector (libre_linkup) + upstream watch for the unofficial connectors
- Glucose units: mmol/L display (server + iOS), factor fixed to 18.01559
- Watch: speak glucose in the account's unit
🎉 Milestone: on the App Store
Sep 2–14Build 39 → App Store
Glide 1.0 is live
Two App Review rejections, one on how the subscriptions were described and one
on the in-app purchase images, two resubmissions, then approval. Glide 1.0
went live on the App Store on September 14, and the draft landing page
became glidebg.com with the real App Store link.
- Plans: record the v1.0 submission, 3.1.2 bounce and resubmit, final listing copy
- Checklist: IAP promotional images deleted, build 39 resubmitted
- Home draft: real App Store link (id6778564322), larger download button
- Site: promote the home draft to the homepage
Aug 18–27Subtract, then play
One feature out, twenty-two jokes in
Omnipod bolus scanning came out of the app and the server. And Carbify got
something to say while it looks at a photo: twenty-two captions, each held
four seconds.
- Remove Omnipod bolus scanning from the iOS client
- Cycle fun carb-counting captions while Carbify analyzes a photo
- “Consulting the pancreas. Still no reply.”
- “Asking the toaster for a second opinion…”
Aug 7–17My Lab
Meals that know their name
Matching "the same meal" across months moved to the server, then onto one
global map of meal categories, measured against hand-labeled meals over
four review rounds. My Lab got search, a meal photo on every trial, and
the best and worst time in range for each meal.
- Meal grouping moves server-side: refresh mode, signature v2, poke-based client
- Grouper runs on the global category map: label_v8 x map_v1 shipped
- Trial ledger: meal-photo column replaces the timing badge
- My Lab rows: best/worst trial TIR replaces the peak-rise median
Aug 5–6Push forensics
The case of the late alerts
Test alerts arrived late and out of order. Two days of probes and delivery
logs traced it to Apple's sandbox push service throttling the development
app, not the production path that real phones use. Two fixes stayed: one
push endpoint per device, and a daily sweep that also catches the bug if it
comes back.
- Push delays: isolate to the APNs sandbox environment via a two-device control
- Push: canonical single-message proof of the sandbox/production gap
- Push endpoints: one per device, not one per token
- Push devices: daily sweep that is also the regression detector
Aug 5–7Review + cleanup
Audit, round two
A review of the whole stack found real bugs, and they got fixed that week:
edits and deletes that could go missing, a nighttime alarm that could go
quiet when the CGM feed broke, and a handful of sign-in gaps. Then a
simplification pass deleted about 2,900 lines of dead code.
- Stop the nighttime alarm from going silent when the feed breaks
- Event CRUD: stop silently losing deletes, edits, and photos
- iOS sync + settings: stop losing edits and safety settings
- Dead-code sweep (Tier 1 of the simplification review): ~2.9k lines + 6 MB
Jul 29–Aug 16Apple Watch
Glucose on the wrist
A watch app and two complications that sign in from the phone. watchOS
rations background updates, so the complication draws its number inside a
ring that empties as the reading ages: an old number never looks like a new
one. The watch app stayed out of the App Store build until 1.0.1.
- Apple Watch BG complication: watch app + complication targets
- iOS: hand the Cognito refresh token to the paired watch
- Watch complication: system gauge with age in the end slot
- Watch app: today stats + sparkline + fetch-on-open
Jul 28–31Methods in public
Show the numbers
The day after the submission, glidebg.com got its methods
page: how close the photo carb estimate gets on public benchmarks, with
the average meal size beside every error number. The forecast got
its own page, and the landing page got a real
screen recording of Carbify.
- glidebg.com/science: public methods-and-numbers page
- Science pages v2: estimator-led /science, forecast cone split to /forecast
- Science page: show the denominator behind every error number
- Landing: real screen recording in the Carbify section
🎉 Milestone: submitted to Apple
Jul 27Build 24 → App Review
First App Store submission
Six months after the first commit, Glide went to Apple: build 24
submitted for App Store review — the app's first submission ever —
opening the door to the diabetes-camp TestFlight beta, with review notes
prepared field by field and the support page live at
glidebg.com/support.
- Build 24 submitted to Beta App Review
- Review notes: plain copy/paste blocks per App Store Connect field
- Review notes: preempt the Dexcom-credentials question
- Support page live at glidebg.com/support
Jul 25–27Last-mile hardening
Submission sprint
The final polish before Apple: Dexcom session state encrypted at rest
and phone numbers redacted from logs, night mode's exit made purely the
user's choice (tap or swipe), one formatting seam for every glucose
readout, incremental local-first sync, and the privacy manifest +
VoiceOver + paywall-terms pass.
- Encrypt Dexcom session state at rest + redact phones from logs
- Night mode: remove the auto-exit entirely — exit is the user's choice
- iOS local-first optimizations: incremental sync + 180d My Lab
- App Store submission readiness: privacy manifest, paywall terms, VoiceOver
Jul 22–24Manual run: every scenario
The test gauntlet
Three days of scripted manual testing across the premium and
onboarding flows: every scenario passed, eleven bugs were found and
fixed along the way — including a live production outage in follower
onboarding caught mid-run — and My Lab lost its last manual button as
experiment grouping went automatic.
- Test plan: final results log — every scenario passed
- Subscription re-link: “Use it here” never fired — alert dismissal cleared the receipt first
- My Lab: custom experiments group automatically — no more Re-group button
- Carbify: allow logging 0-carb meals (cheese, eggs)
Jul 20–21Dexcom hardening + Insights trend
Trust the connection
Bad Dexcom credentials stopped failing silently: validated at connect
time, backed off on repeated rejections, and surfaced in-app. Insights
gained a 6-month time-in-range + lows trend card on a local-first
180-day history.
- Dexcom: validate credentials at connect time — bad creds are rejected inline, never stored
- Dexcom worker: back off failed sign-ins (5m/30m/1h) and record auth-failure state
- iOS Insights: TIR + lows trend card, 6m period option
- Onboarding paywall: present full-screen after the first chart renders
Jul 16–17Subscriptions + paywall
Glide Premium
A per-profile subscription arrived end to end in two days: StoreKit 2
purchases, pure-Python receipt verification against a pinned Apple root,
the App Store webhook with monotonic entitlements, server-side gates on
the AI bundle, and a paywall with an annual-default trial.
- Premium: receipt verification against a pinned Apple root
- Premium: one subscription covers everyone on a profile
- Premium: App Store webhook — renewals, grace periods, refunds
- Premium iOS: paywall (annual default, restore, legal) + Settings subscription row
Jul 15Bedside glance view
Night mode
Tap the glucose readout at night and the app becomes a bedside
display: a clock, the big BG number, a ghost sparkline, burn-in drift,
and a keep-awake override.
- Night mode: bedside glance view (clock, stale line, big BG, ghost sparkline, burn-in drift)
- Night mode: keep-awake override while active
- Night mode: auto-exit schedule (first 7am after entry, 12h backstop)
Jul 13–14Trial ledger + ICR history
Dosing gets a ledger
My Lab insights simplified to meal-only clusters and gained a
trial-ledger chart style with absolute glucose guide lines, while the
Home tip grew an ICR dose-history dot strip — plus hard network
deadlines on every refresh path.
- My Lab: trial ledger as a third trial-chart style
- Home tip: ICR dose history as a dot strip
- My Lab: cluster insights by meal category only (drop the time-of-day axis)
- iOS: bound every refresh-path request with hard network deadlines
Jul 1–3Omnipod import + hardening
Audit week
Bolus import from a photo of the pump's history screen landed, then a
full-stack audit swept the foundations: the pickled Dexcom session
became JSON, terminal errors stopped poisoning the offline queue, and
network hiccups no longer masquerade as a dead session.
- Add Omnipod bolus import from a pump-history photo
- Full-stack codebase audit
- Fetcher: replace pickled Dexcom session with JSON session state
- Event sync: stop terminal 4xx from poisoning the offline queue
Jul 1–2Contrastive history tips
Meal tips come home
Logging a meal now answers “what happened last time?”: a
match-mode classifier, a pure-logic tip engine, a post-save Home card
with evidence rows, and one server-persisted feed grouping so every
device shares the same meal vocabulary.
- Meal grouping: add match mode for meal-time history tips
- My Lab: meal-tip engine — what happened last time you ate this
- Meal-time tips v2: move the tip to Home, post-save
- Feed meal grouping: server-persisted per profile, automatic post-save trigger
Jul 1–2Eval suite + hillclimb
The grouper earns its numbers
The meal grouper got the same treatment as the estimator: pairwise
clustering metrics, synthetic suites, human-reviewed ground truth, and a
hillclimb loop that picked the production model — all documented on a
new Science page.
- Grouper eval: pairwise clustering metrics + churn guards
- Grouper eval: synthetic suites (granularity/confusables/brand/scale/recovery)
- Grouper hillclimb: adopt grouper_v2 × claude-haiku-4.5
- Science: add Meal grouper page — eval design, hillclimb record, adopted config
Jun 25–30Appearance, logo, feel
Dark mode & finishing touches
A coat of polish: light/dark/system appearance, the rib-sweep mono-G
logo across app and web, a rubber-band pull-to-refresh haptic, offline
meal-photo caching, and a more legible glucose trace.
- Dark mode: light/dark/system appearance setting (system default)
- iOS + web: rib-sweep mono-G logo (port from prototype)
- Pull-to-refresh: continuous rubber-band haptic that builds
- iOS: cache downloaded meal photos on disk (offline + instant re-open)
Jun 24–30Nighttime call alarm
The 3am safety net
A phone call — not a silenceable banner — for nighttime lows and
signal loss. Ring-only calls, in-app phone verification, and an
Emergency-Bypass helper so the ring cuts through Do Not Disturb.
- Nighttime low alarm: ring-only phone calls
- Nighttime call alarm: iOS Alerts settings + phone verification
- Server: nighttime critical wake-up alarm endpoints
- Alerts: post-save Emergency Bypass helper sheet
Jun 23–26Privacy, consent, COPPA
Launch readiness
Groundwork for a public release: privacy + terms pages, in-app
AI-estimate consent, a 13+ age gate at signup, encryption of Dexcom
passwords at rest, and on-device file protection for the health cache.
- Launch prep: privacy + terms pages, in-app AI-estimate consent
- iOS: 13+ date-of-birth age gate at account creation (COPPA)
- Encrypt Dexcom password at rest with KMS
- iOS: file protection on the health cache + pending meal photos
Jun 22–27Proactive insights feed
My Lab learns to teach
My Lab stopped being a manual experiment tool and became a feed: it
clusters logged meals by food and time of day, isolates clean trials,
and surfaces pooled time-in-range so patterns come to you.
- My Lab: proactive insights feed — meal-anchored trials + clusters
- My Lab insights: meal-identity labels from AI meal grouping
- My Lab: isolation-based trial model + feed cleanup
- Meal grouping: fix mislabeling (cereal→corn); add eval
Jun 17–22Logo prototypes to live Metal
Water-G personality
The product picked up a visual identity: animated water-G prototypes,
generated texture bands, a faceted tube mesh, and a live iOS header
logo.
- logo: animated 3D water-G mesh prototype
- logo: water material — env reflection, depth tint, caustics
- iOS: live animated water-G logo in the header
- iOS water-G logo: faceted 7-sided tube, twist animation
Jun 16–18APNs, USDA, settings
Notifications, barcode, polish
The iOS app filled in the expected edges: push alert infrastructure,
polished settings, square meal camera framing, and exact packaged-food
lookup.
- notifications: APNs setup, device registration
- notifications: per-account config + signal-lost/recovery alerts
- settings: reorganize into a drill-down hub with summaries
- Barcode → USDA packaged-food carb lookup
Jun 15–18Rename complete + deletion
Account is canonical
The identity vocabulary settled: account/profile everywhere, a
migrated Cognito pool, and in-app account deletion.
- rename: user → account across data, code, and Cognito pool
- feat: in-app account deletion
- Followers API: drop legacy user_id aliases
Jun 12–16Datasets, scorecards, model selection
The science lab gets serious
Evaluation became a product system: dataset pages, result matrices,
ground-truth audits, and a production switch to Gemini 3.5 after it won
the scorecard.
- Science: datasets page + dataset linter
- Science matrix: complete gemini-3.5-flash row
- Prod: switch the meal estimator to gemini-3.5-flash
- meal-estimator: clean per-serving ground truth
Jun 5–12Auth lockdown, PHI hygiene, My Lab AI
Privacy hardening sprint
The stack tightened around real-world safety: token-only APIs,
sign-out wipes, no glucose values in logs, EXIF stripping, and AI meal
grouping for My Lab.
- API auth lockdown: Cognito-only gate everywhere, kill api-key relics
- Meal-photo ingest: bake orientation + strip ALL EXIF
- My Lab: AI meal grouping
Jun 1–5Science page + multi-account path
Forecasts and families
Forecasting moved from raw prediction into a documented science
surface, while the identity model became family-ready with Cognito and
profile edges.
- Forecast v0.2: de-bias the projection against real history
- Dashboard: add Science page
- multi-user phase 0: identity module + new tables
- multi-user phase 3: invite codes backend
May 25–30Photos, estimates, offline sync
Carbify era
Meal photos became a real workflow: camera and library picker, AI carb
estimates, text estimates, replay, local outbox sync, and multi-device
tombstones.
- Carbify: photo-based meal carb estimation
- Carbify: server-side carb estimates via Google Gemini
- Offline-first events: local cache, write outbox, idempotent sync
- Multi-device event deletes: server tombstones
May 22–27Ops, charts, events
Dashboard wakes up
The web surface grew from dashboard experiments into monitoring,
settings, bolus/event controls, and the first My Lab pieces.
- Add bolus buttons, CloudWatch metrics, and monitoring stats
- Add event deletion + dashboard parity with iOS app
- Add My Lab experiments
Jan 24–31iOS + Lambda foundation
The first pulse
Glide started as a tight loop: fetch glucose values, keep the latest
reading fresh, cache it locally, and make the status glanceable.
- Initial commit
- Migrate to AWS Lambda backend for glucose data
- Add SwiftData persistence for offline support and incremental fetches
- Add trend data, auto-refresh, and status header to glucose display