Mark CipollaLogo

Mark Cipolla

The mental load of running a household mostly arrives as email. School notices, sports rosters, party invitations, appointment reminders: all of it lands in one person's inbox, and that person becomes the household's scheduler by default.

household.email

Ruby on RailsHotwireTurboStimulusPostgreSQLSolid QueueHotwire NativeStripeDocker
household.email

household.email gives every family its own mailbox, like yourfamily@household.email. Hand that address to the school, the swim club and the dentist, or forward mail to it from wherever it already arrives. Everything sent there becomes a shared triage queue that the whole household can see, rather than a pile in one person's personal inbox.

The household inbox: a queue of school, bank and sports club emails, each with a one-line summary and a not-yet-actioned badge, and the selected message open beside it.

Incoming mail is parsed, and an AI pass pulls out the events, dates and actions hiding in it. Nothing is filed without a human confirming it first: the extracted event is a suggestion you review, edit or discard. Once confirmed, it lands on the shared calendar, or becomes a todo, a chore, or a line on a shopping list.

A school excursion email open in the household inbox, with a Suggestions panel below it offering the excursion as a calendar event, and the permission note and the packed lunch as todos, all three marked Pending.

Around the inbox sits the rest of the household: a shared calendar with recurring events and birthdays, todos with assignment and due dates, rotating chores, shopping lists, and meal planning with a recipe box you can fill by forwarding a recipe to the same address. Google Calendar and Google Tasks sync both ways, and there's a read-only iCal feed for anyone who would rather stay in their own calendar app.

The household dashboard: two rows of tiles — inbox, senders, calendar, todos, chores, transport, the meal plan, shopping and recipes — each with a line on what is waiting there, above panels of not-yet-actioned email and this week's events.The household calendar in month view, with a dentist appointment, a swim lesson, a school excursion and a working bee spread across the month.The chores screen listing weekly, fortnightly, monthly and daily chores, each with the household member whose turn is next, and a completed-this-week list below.A shared grocery list with seven items left to buy, grouped into Cleaning, Dairy, Fruit & veg and Pantry, over a bought section holding what is already in the trolley.

It's a Rails 8 monorepo. The web app is the single source of truth for the UI: Hotwire with Turbo morphing and Stimulus, Sprockets and importmaps, so there's no Node build step. PostgreSQL does all the heavy lifting, including background jobs (Solid Queue), caching (Solid Cache) and websockets (Solid Cable), which means no Redis to run. iOS and Android ship as Hotwire Native shells around the same views, so there's no second mobile UI codebase to keep in step. A reMarkable 2 client written in Rust is the one exception: the tablet has no browser, so it reads the JSON API and draws the week's meals on e-ink itself.

The AI pass runs on open-weight models we host ourselves on Modal, rather than sending a household's mail to a third-party model provider. The provider is a single environment variable, so it can move again without touching the extraction code.

The whole thing deploys as a single Docker image run in several roles, web and workers, onto a VPS with Kamal. GitHub Actions runs the test suite across five shards alongside Brakeman, RuboCop and Packwerk boundary checks, then builds and pushes the image; staging deploys itself on green, and production is a one-click workflow.

household.email is in early access, building out a waitlist ahead of a wider launch.

Mark lives and works on unceded Wurundjeri land in Naarm / Melbourne, Australia, and acknowledges the traditional custodians of the land on which he lives, paying respects to elders past and present, recognising the resilience, strength and pride of the Aboriginal and Torres Strait Islander communities.