Saltar al contenido

Proyecto personal

Between Contractions

Built a calm, privacy-first contraction timer for the web, iOS, Android, watches, widgets, and optional real-time partner coordination.

Rol
Creator
Trayectoria
- Present
Duración
10 mo
En esta página 1 sección

Project notes

Active project

A calm timer for a moment that already asks enough

Estimated reading time
About 3 minutes
In this project story
6 sections

I built Between Contractions while Alejandra and I were waiting for our son, Aarón. The product begins with one deliberately simple action: tap when a contraction starts and tap again when it ends.

From there, it calculates duration, start-to-start frequency, and recent patterns without turning labor into a dashboard. The timer is available in the browser, on the App Store, and on Google Play.

Goals

  • Reduce cognitive load with one large, obvious timing action and clear recent history.

  • Keep the core private with local-first storage, no ads, no analytics SDK, and no required account.

  • Support real households with English and Spanish, light and dark themes, accessibility, widgets, and watch companions.

  • Treat timing as guidance by presenting the 5-1-1 pattern as a prompt to follow a care plan, never as a diagnosis.

What I built

  • A bilingual Astro website and browser timer

    that works without installation and keeps its history on the current device.

  • Native Apple experiences

    for iPhone and iPad, with SwiftUI, SwiftData, widgets, Live Activities, Apple Watch support, private iCloud continuity, and a companion macOS surface.

  • Native Android experiences

    with Kotlin, Jetpack Compose, Room, Glance widgets, and Wear OS support.

  • Optional Partner Sync

    for households that choose to coordinate a live timer across devices and platforms.

  • A small Hono and Cloudflare backend

    for the explicit shared features, separated from the local-first core timer.

Technical highlights

Web

Astro, TypeScript, Lumen UI, browser storage, bilingual content, and static delivery.

Apple

Swift, SwiftUI, SwiftData, WidgetKit, WatchConnectivity, and native system integrations.

Android

Kotlin, Jetpack Compose, Room, Glance, and Wear OS.

Shared delivery

Turborepo, pnpm, automated checks, release preflights, accessibility coverage, and platform-specific test suites.

Privacy is an architecture decision

The timer does not need a backend to perform its main job. Browser history stays on the current device. Personal Apple history can use private iCloud continuity across the person’s own devices, while optional Partner Sync coordinates a shared timer through a separate service. The local timer remains useful offline.

That separation kept the product promise legible: the free timer is useful on its own, while Partner Sync remains an explicit choice rather than hidden infrastructure.

One family story, two products

Aaronmgz is the warm public space I built while our family waits for Aarón. Between Contractions came from the practical side of the same chapter: preparing for labor and protecting attention when the moment arrives.

The two projects now point to each other because neither story is complete in isolation.

Try the browser timer or read why I built Between Contractions.

De este proyecto

Dentro del trabajo.

Engineering notes

Between Contractions: Local-First Partner Sync

How I designed optional cross-platform Partner Sync without making a contraction timer depend on the network, an account, or a central history database.

Leer artículo

Product story

Why I Built Between Contractions

How waiting for Aarón became a calm, private contraction timer across the web, iOS, Android, watches, widgets, and partner devices.

Leer artículo

Comparte este artículo

Compártelo.

Creator

RoadScore

Built a bilingual, offline road-trip card game that turns one passenger-operated phone into a shared scoreboard, deck library, and private trip journal.

Leer el caso de estudio

Creator

Aaronmgz

Built a growing family web platform with a nautical personal site, public message board, baby-shower experience, admin tools, and a shared Cloudflare API.

Leer el caso de estudio