Skip to content

cubicj/CubicJ-Brewing

Repository files navigation

CubicJ Brewing

License: MIT Platform Version

한국어

An Obsidian plugin for coffee brewing — real-time BLE scale integration, guided brew flow, and structured record keeping, all inside your vault.

Currently supports Acaia Pearl S on Windows. Other Acaia models and platforms are planned.

Real-time BLE brewing session with live weight chart
Live brewing session — real-time weight tracking and profile chart via Acaia Pearl S

Features

  • Real-time scale connection — Acaia Pearl S via Bluetooth, no companion app required
  • Guided brew flow — 5-step accordion UI (method → bean → parameters → brew → save)
  • Filter & espresso modes with method-specific parameter sets
  • Live brew profile chart — weight-over-time curve recorded during brewing, with hover readout of weight, flow rate, and time
  • Bean inventory — roast days, remaining weight, status tracking
  • Brew history — per-bean and daily records with profile charts, equipment used, and inline memo editing
  • Equipment registry — grinders, drippers, filters, baskets, accessories
  • Vault-native storage — all data as plain files, Obsidian Sync compatible
  • Multi-language — English and Korean, community-extensible

Platform Strategy

isDesktopOnly: false — this is intentional. The plugin provides useful read-only features on mobile.

Desktop Mobile
Bean inventory (beans block) Full Full
Brew history (brews block) Full Full
Daily brew records (brew-day block) Full Full
Brew detail modal Inline chart "View Chart" button
Data Manager Full Full
BLE scale connection Acaia Pearl S Not available
Brewing sidebar Live brew flow Not available
Live profile chart Real-time canvas Not available

Desktop-only features (BLE, BrewingView, live chart) are loaded conditionally via Platform.isDesktop — they are never imported on mobile.

Desktop Requirements

  • Windows with Bluetooth LE support
  • Acaia Pearl S scale

macOS/Linux support depends on @stoprocent/noble platform compatibility. Not tested yet.

Installation

  1. Download cubicj-brewing.zip from the latest release
  2. Extract the zip — you should see main.js, manifest.json, styles.css, and a noble/ folder
  3. Copy all contents into <your-vault>/.obsidian/plugins/cubicj-brewing/
  4. Restart Obsidian → Settings → Community plugins → Enable "CubicJ Brewing"

The noble/ folder contains the native BLE addon — do not omit it.

Usage

Bean Inventory (beans code block)

Place a beans code block in any note to create a bean inventory hub:

```beans
```

Bean inventory with roast days and remaining weight
Bean inventory — roast days, remaining weight, and status tracking per bean

  • Active / Finished sections — beans grouped by status
  • Roast days — automatically calculated from roast date
  • Remaining weight — click to set, add, or subtract (with optional scale auto-read)
  • Status toggle — mark as finished or repurchase with new roast date
  • New bean button — creates a bean note with frontmatter template and a brews block

The beans block is not created automatically — add it manually to a note of your choice (e.g., a "Coffee Dashboard" note). One block per vault is enough.

Bean Notes

Each bean is a regular note with type: bean frontmatter:

---
type: bean
roaster: My Roaster
status: active
roast_date: 2026-03-01
weight: 200
---

The plugin discovers beans via Obsidian's metadata cache — no special folder structure required.

Brew Records (brews code block)

Each bean note includes a brews code block (auto-inserted on creation) that shows its brew history:

```brews
```

Brew records table with date, method, and memo
Per-bean brew history table

Brew detail modal with profile chart
Brew detail — extraction parameters and weight-over-time profile chart

Daily Brew Records (brew-day code block)

Place a brew-day code block in a daily note named YYYY-MM-DD.md to show that day's brew records grouped by bean:

```brew-day
```

Records are sorted newest first and use the note's date as the local day boundary.


Architecture

TypeScript · vitest · esbuild CommonJS bundle
Layer Key Components
BLE Binary protocol codec, packet buffer (fragmentation handling), typed EventEmitter service
Brew State 6-step finite state machine with step guards and discriminated union records
Signal Median spike filter, time-aware EMA trend line
Storage File-adapter abstraction, JSON CRUD with schema validation, corrupt-file backup
Views Accordion manager, stepper component, Canvas 2D chart, code block processors

Development

npm run dev          # watch mode, repo-local only
npm run watch        # same repo-local watch mode
npm run build        # test → typecheck → production build
npm run test         # vitest (single run)
npm run test:watch   # vitest (watch mode)
npm run check        # typecheck only
npm run lint         # eslint
npm run dev:windows  # watch + copy to the Windows Obsidian plugin target
npm run deploy:windows # build + copy to the Windows Obsidian plugin target

Build from Source

git clone https://github.com/cubicj/CubicJ-Brewing.git
cd CubicJ-Brewing
npm install
npm run build
npm run release      # generate release zip

Acknowledgments

License

MIT

About

Obsidian plugin for coffee brewing — Acaia Pearl S BLE scale integration, guided brew flow, and structured record keeping

Topics

Resources

License

MIT, OFL-1.1 licenses found

Licenses found

MIT
LICENSE
OFL-1.1
FONT-LICENSE-OFL.txt

Stars

4 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors