Skip to content
Radoslav Radoslavov

Web app · Independent product

Gregory logo: a smiling white robot face on a teal circle.

Gregory

A shared family grocery list: one household, one list, items ticked off in the shop and grouped by category so trips are quicker.

Gregory homepage with the headline 'Never forget the milk again.' and cards for shared households, category grouping and offline use.
The Gregory landing page

Overview

Gregory is a grocery assistant for households. Family members join the same household with an invite code, add what is needed and tick items off while shopping, so nobody has to remember the list on their own.

Platforms: Web · Installable to the home screen

Problem

Household shopping lists end up split across messages, notes and memory, and items get bought twice or forgotten.

Who it's for

Families and shared households.

Key features

  • Shared household lists, joined with a single invite code, with creator, manager and member roles
  • Lists with an optional target date; finished lists tidy themselves away after 48 hours
  • Items with quantity, notes, a category and an optional photo to pick the right product
  • Items grouped by category, and the app remembers which category your household uses for each item
  • Lists refresh automatically while the app is open, so everyone sees the latest changes
  • Installable to the home screen; pages you have already opened stay available without a connection
  • Interface available in English, Bulgarian, German, French and Romanian
  • Free to use, with an optional donation

My role

Owner and builder of the product.

Technology

Next.js, React, TypeScript, Tailwind CSS, Cloudflare Workers, Cloudflare D1, Drizzle ORM, Cloudflare R2, Kinde

Challenges & trade-offs

  • Private item photos: they sit in a private bucket and are served only to signed-in members of the household that owns the list, with limits on file size and type. They are removed a day after the list's target date.
  • Keeping everyone's list fresh without websockets: the app refreshes while the tab is visible and when you come back to it, which is simple, cheap and enough for a shopping list.
  • Honest offline support: the app installs to the home screen and shows pages it has already loaded without a connection, while changes need a connection by design.
  • Consent-aware cookies: the language preference is only stored with functional consent, and no analytics are used.

Facing a similar problem?

Tell me what you're trying to build or fix. I'm happy to talk about project enquiries, product collaborations and professional conversations.