Skip to content

Repository files navigation

Kissa

Kissa

A self-hosted coffee companion that learns how you brew.
Track beans, dial in your grinder, rate every cup — and get suggestions to make the next one better.

No cloud. No accounts. Just coffee.

FeaturesScreenshotsInstallationUsage


Screenshots

Home — pick a method, see your rotation    Map — your coffee origins around the world    Stats — brew activity and scores

Features

  • Brew tracking — Log brews with V60, Moka Pot, Espresso, or French Press recipes that scale by servings
  • Bean & roaster library — Origins, varietals, processes, roast levels, and tasting notes, organized by roaster
  • Grinder dial-in — See "+3 clicks coarser" instead of absolute numbers — always know which way to turn
  • Brew suggestions — Rate each cup on 5 sliders, get a concrete suggestion for next time
  • Freeze & thaw — Pause the aging clock on bags you're saving, with accurate days-off-roast tracking
  • World map & stats — See where your coffee comes from, plus brew activity, top beans, and tasting note trends
  • Offline support — Queue brews and ratings offline, sync when you're back
  • Simple backups — All data in a single SQLite file

Installation

Kissa runs as two Docker containers (API + Web) on a Raspberry Pi or any Linux host.

# Clone the repo
git clone https://github.com/anner-klein/kissa.git
cd kissa

# Configure your Pi's connection details
cp .env.example .env
# Edit .env with your Pi's hostname, SSH user, and password

# Deploy
./deploy.sh --clean

The deploy script builds ARM64 Docker images on your machine, transfers them to the Pi, and starts everything. Takes about 2 minutes.

You can also deploy individual services:

./deploy.sh --api-only --clean
./deploy.sh --web-only --clean

Or use Docker Compose directly on any host:

docker compose -f docker/docker-compose.yml up -d

Once running, open http://<your-pi>:3000 in a browser.

Usage

Brew Flow

  1. Pick a method on the home screen
  2. Choose a bean — each card shows how far to adjust your grinder
  3. Brew with the scaled recipe
  4. Rate the cup — Kissa tells you what to change next time

Managing Beans

Add beans with their origin, roaster, and tasting notes. Each bean can have multiple bags (purchases) with individual roast dates and freshness tracking. Grind settings are saved per bean per method, so they carry over when you buy a new bag.

Backups

Download a backup anytime:

curl -o kissa-backup.db http://<your-pi>:3001/internal/backup/db

Local Development

# Prerequisites: Node.js 22+, pnpm 9+
pnpm install
pnpm db:generate && pnpm db:push && pnpm --filter @kissa/api db:seed
pnpm dev

Web at localhost:3000, API at localhost:3001.

Tech Stack

TypeScript monorepo — Fastify + Prisma + SQLite API, Next.js 15 web app, Tailwind CSS, Zustand, TanStack React Query. Managed with Turborepo and pnpm workspaces.

A Friendly Heads-Up

Kissa was built as a personal, local-network companion — the kind of thing that lives on a Pi in your kitchen, not on the open internet.

There's no authentication, no user accounts, no HTTPS, and no hardening of any kind. It trusts whoever can reach it on the network, which is fine when that network is your home Wi-Fi, and very much not fine on a public server.

Please don't expose Kissa to the internet. If you do, that's on you — I built this to track my coffee, not to withstand the chaos of the world wide web. No guarantees, no liability, just good vibes and hopefully good coffee.

License

This project is open source. See the LICENSE file for details.

About

Coffee tracking app

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages