1. Wiki
  2. Before It's Gone
v1.3.

Before It's Gone by AetherAssembly

Latest release CI status COPR build status OBS build status apt repo version
Apt repository temporarily unavailable: The AetherAssembly apt repository is currently down. For now, download the latest .deb from the Releases page and install it manually below.

An offline-first app, available as a desktop (Electron) app or self-hosted PWA, that tracks what's in your fridge, freezer, and pantry before it expires. No account required; all data stays on your device.

Download GitHub → GitLab mirror →

Features

Inventory

  • Barcode scanning with local profile storage and Open Food Facts lookup: product name, category, kcal/100g, and allergens filled in automatically.
  • Expiry date tracking with shelf-life presets; dates are stored accurately and never recalculated.
  • Color-coded cards: amber (expiring soon) · rose (expired). Desktop notifications warn you before things go bad or run low.
  • Search, filter, and sort: find items by name, barcode, or category; filter by location; sort by expiry date, date added, or name.
  • Tag filtering: click any tag chip to narrow the list (AND semantics).
  • Stats dashboard: expiring this week · expiring soon · expired · total units at a glance; collapsible charts by location, by category, and a 7-day expiry countdown.
  • Expiry timeline view: toggle from list view to a horizontal timeline showing all items color-coded by status.
  • Item photos: attach a photo to any item; thumbnail shown on the card, full image in the detail drawer.
  • Item detail drawer: click any card to open a slide-in drawer with all fields and an inline edit form.
  • Quantity management: − Use one with low-stock alerts · + Add one · 5-second undo toast.
  • Recurring items: auto-restock to a configured quantity when an item is depleted to zero.
  • Quick-add buttons: re-add things you buy often from item history in one click.
  • Bulk select: delete or move multiple items at once; clear all with a confirmation guard.
  • Drag-and-drop: drag any card onto a location chip above the grid to move it instantly.
  • Keyboard shortcuts: N add item · / search · Esc close drawer · ? show shortcut list.
  • Custom storage locations: add locations beyond the built-in fridge / freezer / pantry.

Lists & tracking

  • Shopping list: auto-populated from items below their low-stock threshold; copy or export as plain text.
  • Waste log: expired items are logged when deleted, grouped by month, and clearable.
  • Recipe suggestions: dismissible banner of TheMealDB recipes when 3+ items are expiring.

Scanner

  • In-browser barcode scanner (PWA): when accessing the self-hosted PWA from a phone or tablet, a Scan barcode button opens the device camera directly via @zxing/browser, with no QR relay needed.
  • Phone barcode scanner (desktop): scan a QR code on any phone browser to open a camera page that feeds barcodes into the desktop app.
  • Manual expiry date: on the phone review card overrides the shelf-life prediction; date and days fields stay in sync.

UI

  • Dark and light mode: toggle in the header, persisted across sessions.
  • Animated background: subtle hue-shift animation on the background.
  • Glass panels: frosted glass effect on all panels via backdrop-filter.
  • Toast notifications: success, warning, and error toasts; auto-dismiss after 3 seconds.
  • Responsive layout: controls stack vertically on narrow screens; 44 px touch targets.
  • Loading skeletons: shimmer placeholder cards shown while inventory loads.

Settings & data

  • Settings panel: default location, default shelf life, expiry warning window (configurable days), per-type notification toggles.
  • Import and export: back up to JSON or CSV; import from JSON or CSV; batch barcode import from a plain-text file (one barcode per line, enriched via Open Food Facts).
  • Email notifications: optional daily/weekly digest and alerts via Resend or SMTP; pause/snooze controls; HTML templates. Desktop app only.
  • Optional cloud sync: bring your own Supabase project; offline-first by default; last-write-wins merge; no mandatory account.

Stack

LayerTech
FrameworkElectron 43
LanguageTypeScript 6
BundlerVite
StorageIndexedDB + localStorage (local only)
Barcode lookupOpen Food Facts API (optional, on-demand)
Recipe suggestionsTheMealDB API (free tier, no key needed)
EmailResend or SMTP (optional, desktop only)
Cloud syncSupabase (optional, bring your own project)
Packagingelectron-builder

Platforms

PlatformFormats
Linux (x86_64)AppImage · .deb (Debian/Ubuntu/Raspbian) · .rpm (Fedora/RHEL/openSUSE) · PKGBUILD (Arch)
Linux (arm64)AppImage · .deb · .rpm
macOSDMG
WindowsNSIS installer · Portable .exe
Not sure which to pick?
  • Windows: download the NSIS installer; it works like any standard Windows app installer.
  • macOS: download the DMG file and drag the app to your Applications folder.
  • Linux (most distros): the AppImage works on almost any Linux system with no installation; just download and run it.
  • Debian/Ubuntu/Raspberry Pi OS: the apt repo is currently down; install the latest .deb manually from the Releases page for now.
  • Fedora/RHEL: enable the COPR repo for automatic updates via dnf upgrade.
  • Arch Linux: download the PKGBUILD from the Releases page and run makepkg -si.

See the Installation page for step-by-step instructions.

Self-Hosted PWA

Run Before It's Gone as an installable Progressive Web App on any device on your LAN or Tailscale network, with no Electron required. Barcode scanning uses the device camera directly in the browser.

# Generate a self-signed certificate (run once)
mkdir -p docker/certs
openssl req -x509 -newkey rsa:4096 -keyout docker/certs/key.pem \
  -out docker/certs/cert.pem -days 3650 -nodes \
  -subj "/CN=before-its-gone-local"

# Build and start
npm run docker:pwa:up

Open https://<your-server-ip> from any device on the same network. Use the browser's Add to Home Screen prompt to install it as an app. For Tailscale, run tailscale cert <hostname> to provision a trusted cert and avoid the self-signed warning.

Development

Prerequisites

  • Node.js >= 22.12.0
  • npm >= 10

Setup

git clone https://github.com/AetherAssembly/Before-Its-Gone.git
cd Before-Its-Gone
npm install

Run

npm run dev              # Electron app with hot reload
npm run dev:web          # Web only: binds to 0.0.0.0:5173 (LAN-accessible)

On Linux the app auto-detects Wayland. To override:

BIG_LINUX_DISPLAY_BACKEND=x11 npm run dev      # force X11
BIG_LINUX_DISPLAY_BACKEND=wayland npm run dev  # force Wayland

Test

npm run test             # unit tests (packages/core)
npm run test:coverage    # with branch coverage report (target: ≥ 80%)

Build & package

npm run build                      # compile only
npm run package:linux              # → AppImage + .deb + .rpm (x86_64)
npm run package:linux:arm64        # → AppImage + .deb + .rpm (arm64, cross-compiled)
npm run package:macos              # → DMG  (run on macOS)
npm run package:windows            # → .exe  (run on Windows)
npm run docker:pwa:up              # build and start self-hosted PWA container
npm run docker:pwa:down            # stop the container

npm Packages

The core logic and UI component are published to GitHub Packages for use in your own projects.

# configure npm to use GitHub Packages for @aetherAssembly
echo "@aetherAssembly:registry=https://npm.pkg.github.com" >> .npmrc

npm install @aetherAssembly/core
npm install @aetherAssembly/ui
PackageDescription
@aetherAssembly/coreInventory logic, IndexedDB storage, expiry calculations, import/export, email templates
@aetherAssembly/uiInventoryCard React component
License notice: both packages are published under AGPL-3.0-only. If you use them in your own project, including as a network service, your project must also be released under AGPL-3.0 and its source made available to users. Contact support@aetherassembly.org to discuss a commercial licence.

Docs

Privacy

By default, all data is stored locally in IndexedDB, with no account required. Optional features make additional outbound requests:

  • Barcode lookup: Open Food Facts receives the barcode value you scan. User-triggered only.
  • Recipe suggestions: TheMealDB receives the name of an expiring item as an ingredient query. Fires automatically when 3+ items are expiring; dismissible.
  • Email notifications: your chosen provider (Resend or your own SMTP server) receives item names and expiry data to compose digest emails. Credentials are stored locally in userData/email-settings.json.
  • Cloud sync: your Supabase project receives your full inventory. Opt-in only; disabled by default.

See PRIVACY_POLICY.md for the full policy.

Last updated: 2026-10-04 AetherAssembly/Before-Its-Gone → GitLab mirror → License: GNU AGPLv3