Glide · Timeline

Glide, from first pulse to its first App Store submission.

January → July 2026 · drawn from the project's commit history · page updated 30 July 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 — and on July 27, the first build ever submitted to Apple for App Store review.

555
commits, first pulse to submission
23
milestones on this page
6 mo
prototype to App Review

Commit density

monthly through February, then weekly
Two quiet months of prototype, then a sustained sprint: 47–87 commits a week from late May through the July 27 submission.
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
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
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
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
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 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 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 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 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 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 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 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 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)
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
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–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 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 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 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 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 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 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
🎉 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

Glide displays data from a third-party CGM and is not affiliated with or endorsed by Dexcom. Not a medical device; not medical advice. Questions? [email protected] · Privacy · Terms · Support · Status

← glidebg.com