Skip to content
Eric Blanchard

All work

Daric

Daric is a small, private home for our household. It replaced a handful of apps with one that does exactly what we need, and it is built so that adding a new part takes minutes.

Type
Personal
Status
Private
When
2026
Role
Design and engineering
  • Next.js 16
  • TypeScript
  • Tailwind CSS 4
  • Firebase Auth
  • Firestore
  • Cloud Messaging
  • Netlify Functions
  • PWA

Decisions worth a look

  • Sign-in is locked to two Google accounts. The allowlist is enforced in three places: the browser, the Firestore rules, and the notification API.
  • Realtime and offline by default: an item added on one phone appears on the other immediately, and Firestore's local cache keeps it working without signal.
  • Notifications are batched, so adding six things sends one push, not six.
  • A 6am digest is built per phone: local weather, that person's tasks, today's reminders and birthdays, and nothing at all on an empty day.
  • Everything is a module. A new shopping list is one definition and two three-line route files; the tile, import screen, notifications and app shortcut follow from it.

What is in it

  • Shared grocery and hardware lists, realtime between both phones.
  • Short and long-term tasks, assignable to either of us or to anyone, with an archive that collects finished tasks after a week.
  • People: the folks we meet, how we know them, follow-ups with as many reminder days as needed, and per-person sharing (private, view-only or editable).
  • A Today page that mirrors the morning digest and can open automatically once a day.
  • List import from a tap-to-import link, a JSON or markdown file, or a paste, with duplicates flagged before anything is written.

Adding a new area

The home screen renders whichever modules this device has switched on. A new area is roughly four steps:

  • A route under app/.
  • A match block in firestore.rules. The catch-all denies anything not explicitly allowed.
  • An entry in the module registry, which gives it a tile and a switch in Settings. New modules default to off.
  • Optionally, a call to notify the other person when something happens.

Design

The palette and type live in one stylesheet as custom properties, exposed to Tailwind, so a single change updates light and dark mode everywhere. App icons are generated by a script rather than drawn by hand, and a daily photo background makes the cards go frosted automatically.