Back to Cases
#arrow-left

Unibrix

Engineering / Knowledge Base

#menu

Cases / Consumer Mobile / SipLogger

BLOG_ARCHIVE

#logo
#close
Start building now
#arrow-right
Get in touch
#envelope
LET'S BUILD

Ready to start your project?

Tell us about your challenge. We'll engineer a solution that scales with precision.

We typically respond within 24 hours
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
PROJECT OVERVIEW

SipLogger

[ ON-DEVICE BAC ESTIMATION FOR IPHONE AND IPAD ]

Watson TBW and Widmark modelling, on device, with no network calls.

CATEGORY
Consumer Health / iOS Application
TIMELINE
March to July 2026
COMPONENTS
iOS app, estimation model, Live Activities, 8 locales, product site
STATUS
● DELIVERED
SERVICES PROVIDED
Product Ideation
Domain Modelling
Web Development
Mobile Dev
Localization
UX/UI Design
TECHNOLOGY STACK
iOS 17.0+
HealthKit
Live Activities
Dynamic Island
GitHub Pages
GitHub Actions
Diagram showing index.html as a hand-built 5 pages file branching to four outputs: Rendered page for browsers, .html.md mirror for retrieval agents, JSON-LD graph for search engines, and llms.txt for model context.
Four smartphone screens showing features of a BAC tracking app: 1) Real-time BAC curve with drink details and an 'Add Drink' button. 2) Drink menu with categories like Beer, Wine, Spirits, and customizable portion sizes and drinking pace. 3) Drinking history with stats on total alcohol, drinks per session, and BAC peaks for recent days. 4) Science-based BAC estimate graph for a session on March 4, 2026, listing drinks, peak BAC, and baseline reached. The app interface uses a dark purple theme with white text.
01
STEP 01 β€” Project overview

Assembly Requirements

MODULE INVENTORY (5 COMPONENTS)

SipLogger is a free educational BAC calculator for iPhone and iPad, published on the App Store at version 1.2 and rated 18+. It estimates blood alcohol content over time from logged drinks and body parameters using Watson Total Body Water personalisation over the Widmark model, and presents the result as a curve rather than as a single number.

Alcohol estimation sits in an awkward position as a product category. The arithmetic is simple enough to look authoritative, and a confidently presented number invites exactly the decision the model cannot support. Much of the category also monetises through subscription, advertising or resale of the data, which sets the product incentives against the person using it.

Unibrix built SipLogger as its own product and shipped it free, with no subscription, no advertising and no in-app purchase. Estimation runs entirely on the device. The app holds no account, talks to no server and makes no network calls, so no drinking history exists in anyone's database to be sold, leaked or subpoenaed.

The editorial position follows from the same reasoning. Every figure is labelled an estimate carrying roughly 20 percent variance, the app declines to advise on driving under any circumstance, and three explainer articles on the product site set out where the model breaks down in the same detail as they set out how it works.

Primary focus
#dot
Estimating from body composition rather than weight alone
#dot
Modelling each drink's absorption on its own timeline
#dot
Presenting a curve over time rather than a single verdict
#dot
Keeping every calculation and every record on the device
#dot
Qualifying every figure as an estimate at its point of use
What we delivered
#dot
A free iOS 17 app for iPhone and iPad, rated 18 plus
#dot
Watson TBW personalisation over the Widmark model
#dot
A library of 40 plus drink templates with custom entries
#dot
Live Activities for the Lock Screen and Dynamic Island
#dot
Read-only HealthKit intake for four body parameters
#dot
Eight localisations with metric and imperial units
02
STEP 02 β€” CHALLENGES IDENTIFIED

Assembly Requirements

MODULE INVENTORY (5 COMPONENTS)
REQUIRED CAPABILITIES
A
#checked
Distribution factor
Widmark's fixed factor, 0.68 for men and 0.55 for women, is a 1930s population average that ignores body composition. The factor is instead derived from Watson Total Body Water, estimated from height, weight, age and sex, so two people of equal weight do not receive an identical curve.
B
#checked
Absorption timing
Treating a session as a single dose assumes every drink arrived at once. Each drink carries its own timestamp and its own absorption curve, so four drinks spread over an evening and the same four taken together produce visibly different peaks.
C
#checked
Estimate framing
A confident number invites a decision the model cannot support. Every figure is labelled estimated, the variance is published as roughly 20 percent, and the app reports when the level is projected to approach baseline without ever expressing that as fitness to drive.
D
#checked
Healthkit boundary
Health data earns its access by being narrow. The app reads four values, weight, height, biological sex and date of birth, never writes back to HealthKit, keeps them on the device for local calculation, and works without the permission when it is declined.
03
STEP 03 β€” ASSEMBLY PROCESS

Solution Architecture

MODULE INVENTORY (4 COMPONENTS)
MODULE 3.1
● ESTIMATION MODEL

Widmark's 1930s model estimates BAC from alcohol consumed, body weight, a distribution factor and an elimination rate of roughly 0.015 percent per hour. Its weakest term is the distribution factor, fixed at 0.68 for men and 0.55 for women, because two people of identical weight can carry very different body water.

Watson and colleagues published equations in 1980 that estimate total body water from height, weight, age and biological sex. Deriving the distribution factor from estimated TBW rather than a population constant is what makes the curve personal, and it is the refinement the product is built around.

Diagram titled 'Model Composition' explaining where each input lands in two models: Widmark and Watson. Widmark supplies include alcohol mass accumulation, elimination at about 0.015% per hour, and time since drinking began. Watson supplies include total body water from 4 inputs, a distribution factor per person, and replaces the 0.68 / 0.55 constant. Stated limits show variance at roughly 20 percent, assumptions of average absorption, constant elimination, accurate logging, and a note that no fitness-to-drive judgment is ever offered. Distribution factors compare Widmark's 1930s population average for men (r=0.68) and women (r=0.55) to Watson's total body water derived factor based on height, weight, age, and sex, highlighting the factor reflects the body, not the average.
MODULE 3.2
● SESSION LIFECYCLE

A session begins when the first drink is logged and stays open until it is closed. Drinks come from a library of more than 40 templates carrying preset volume and ABV, or from custom entries at any volume and strength, and each one is timestamped as it is added rather than attributed to the session as a whole.

Because absorption is modelled per drink, pace becomes visible in the curve instead of being averaged away. While a session is open a Live Activity carries the current estimate and the projected return toward baseline onto the Lock Screen and the Dynamic Island. Closed sessions retain their peak, duration and full drink log in history.

Diagram showing session surfaces and lifecycle of a drink tracking app, with three sections: In the app shows live curve, drink timeline, projected return to baseline; Lock Screen shows live activity with current estimate and session timer; History shows peak estimate, duration, and full drink log per session. The session lifecycle flowchart includes: Start (session opens), Log drink (volume + ABV), Absorb (own timeline), Recompute (curve updates), Live Activity (lock screen), and Archive (to history). Each drink has its own timestamp; sessions are not pooled.
MODULE 3.3
● DEVICE BOUNDARY

The privacy position is architectural rather than contractual. There is no account, no backend and no cloud sync, and the published policy states that the app makes no network calls at all. Session logs, profile values and settings are held in local device storage, and the app carries no third-party SDK, analytics or advertising.

HealthKit access is optional and one-directional. The app reads exactly four values and each maps to a specific term in the model: weight into Widmark, height into the Watson TBW calculation, biological sex into the distribution factor and date of birth into age adjustment. Nothing is written back, and declining the permission leaves the app fully usable.

Diagram titled 'What crosses the boundary' about data handling showing two sections: 'Stays on device' with session logs, profile, and calculations, and 'Does not exist' with accounts, third-party SDKs, and analytics. Below, 'The one asymmetry' compares an app with no analytics to a product site using GA4 behind a consent gate. At the bottom, 'Device Boundary' highlights data on the device including HealthKit (read only, 4 values), Drink log (timestamped), Model (Watson + Widmark), and History (sessions and peaks), with no server or account and a note that the app makes no network calls, indicating local computation with no egress.
MODULE 3.4
● REACH AND SURFACE

The app ships in eight languages, English, Ukrainian, Polish, French, Spanish, German, Czech and Italian, with metric and imperial units throughout. Units matter more than usual here: a standard drink is 14 grams of alcohol in the United States and 8 in the United Kingdom, so the same logged pour means different things by locale.

The product site is a static five-page project on GitHub Pages carrying the landing page, a privacy policy and three explainer articles on estimation accuracy, the Widmark formula and standard drink sizes. The HTML is the source of truth and a GitHub Actions job regenerates a Markdown twin of every page on push, alongside an llms.txt summary and a robots.txt naming 11 AI crawlers.

Diagram titled 'Published Surfaces' with subtitle 'Beyond the app store listing' showing four categories: Landing with features and method and 16-question FAQ; Explainers with accuracy, Widmark, and standard drink; Policy with privacy, app and site, HealthKit disclosures; and Agent layer with Markdown twins, llms.txt, JSON-LD.
04
STEP 04 β€” RESULTS

Delivered Impact

MODULE INVENTORY (5 COMPONENTS)
No Network Calls
DATA BOUNDARY
The app holds no account and makes
no requests. Drink history and body
parameters never leave the device
they were entered on.
Watson + Widmark
ESTIMATION METHOD
Total body water personalisation
over Widmark's model, with each
drink's absorption timed individually
rather than pooled.
8 Languages
LOCALISATION
English, Ukrainian, Polish,
French, Spanish, German, Czech
and Italian, each with metric
and imperial unit support.
PERFORMANCE OUTCOMES
A
#checked
Shipped a free iOS app with no subscription, advertising or in-app purchase
A
#checked
Replaced Widmark's fixed distribution factor with Watson body composition
A
#checked
Eliminated every account, server and network call from the product
A
#checked
Extended the app to eight locales with metric and imperial units
A
#checked
Established an editorial standard that labels every figure an estimate
ASSEMBLY PHILOSOPHY
We don't just code.
We build systems.
Piece by piece,
designed to snap perfectly
into your vision.
#dot-circle
#dot-circle
#dot-circle
#dot-circle
START BUILDING NOW
#arrow-right