Personal Inventory System Design

Vision

A grep-able, jq-queryable, insurance-ready inventory system that:

  • Lives in domus-captures as single source of truth

  • Generates insurance reports, tax depreciation, location maps

  • Supports QR codes for physical item lookup

  • Tracks lifecycle: purchase → maintenance → disposal

  • Integrates with gopass for receipts/warranties


Architecture Options

Option A: Pure AsciiDoc (Partials)

partials/inventory/
├── electronics/
│   ├── computers.adoc
│   ├── mobile.adoc
│   ├── audio.adoc
│   └── networking.adoc
├── furniture/
├── tools/
├── vehicles/
├── storage/           # What's in each storage unit/box
├── collections/       # Books, music, art
└── _index.adoc        # Rollup totals

Pros: Native to ecosystem, renders in docs Cons: Harder to query programmatically

Option B: YAML Data + AsciiDoc Views

data/inventory/
├── electronics.yml
├── furniture.yml
├── tools.yml
└── schema.yml

pages/inventory/
├── index.adoc         # Summary dashboard
├── by-location.adoc   # Where is everything?
├── by-value.adoc      # Insurance view
├── maintenance.adoc   # What needs attention?
└── recent.adoc        # Recent acquisitions

Pros: jq/yq queryable, scriptable reports Cons: Two systems to maintain

YAML as source of truth + AsciiDoc generated views + CLI tools

data/inventory.yml              # Single YAML file, all items
scripts/inventory/
├── inv                         # CLI wrapper
├── inv-report                  # Generate reports
├── inv-qr                      # Generate QR codes
└── inv-insurance               # Insurance export

pages/inventory/
├── index.adoc                  # include::example$inventory-summary.adoc[]
├── by-location.adoc
├── by-category.adoc
└── maintenance-due.adoc

Proposed Schema (YAML)

# data/inventory.yml
---
schema_version: "1.0"
last_updated: "2026-03-26"

items:
  - id: "ELEC-001"
    name: "Razer Blade 15 Advanced"
    category: "electronics/computers"
    subcategory: "laptop"

    # Acquisition
    acquired_date: "2023-06-15"
    acquired_method: "purchase"  # purchase, gift, inherited, found
    acquired_from: "Amazon"
    purchase_price: 2499.99
    currency: "USD"
    receipt: "gopass://v3/personal/receipts/razer-blade-2023"

    # Current State
    status: "active"  # active, stored, lent, sold, disposed, lost
    condition: "good"  # new, excellent, good, fair, poor, broken
    location:
      type: "room"  # room, box, storage_unit, vehicle, lent_to
      name: "office"
      detail: "desk, left side"

    # Value
    current_value: 1800.00
    insurance_category: "electronics"
    depreciation_method: "straight_line"
    useful_life_years: 5

    # Identification
    serial_number: "RZ09-0421..."
    model_number: "RZ09-0421PEA3-R3U1"
    mac_addresses:
      wifi: "98:BB:1E:1F:A7:13"
      ethernet: "98:BB:1E:1F:A7:14"

    # Warranty & Support
    warranty_expires: "2026-06-15"
    warranty_type: "manufacturer"
    support_url: "https://support.razer.com"
    manual: "gopass://v3/personal/manuals/razer-blade"

    # Maintenance
    maintenance_schedule:
      - task: "Clean fans"
        frequency: "6 months"
        last_done: "2026-01-15"
        next_due: "2026-07-15"
      - task: "Replace thermal paste"
        frequency: "2 years"
        last_done: null
        next_due: "2025-06-15"

    # Relationships
    accessories:
      - "ELEC-045"  # Power adapter
      - "ELEC-046"  # USB-C hub
    parent: null      # For accessories, points to main item

    # Metadata
    tags: ["work", "primary", "portable"]
    notes: "Primary development machine. Has Ubuntu + Windows dual boot."
    photos:
      - "photos/inventory/ELEC-001-front.jpg"
      - "photos/inventory/ELEC-001-serial.jpg"
    qr_code: "INV:ELEC-001"

    # Lifecycle
    disposed_date: null
    disposed_method: null  # sold, donated, recycled, trashed, lost
    disposed_to: null
    disposal_value: null

Category Hierarchy

categories:
  electronics:
    - computers (desktop, laptop, tablet, server)
    - mobile (phone, watch, earbuds)
    - audio (speakers, headphones, microphones)
    - video (cameras, monitors, projectors)
    - networking (routers, switches, access points)
    - storage (drives, NAS, tapes)
    - gaming (consoles, controllers, VR)
    - smart_home (sensors, hubs, assistants)

  furniture:
    - seating (chairs, sofas, stools)
    - tables (desks, dining, coffee)
    - storage (shelves, cabinets, dressers)
    - beds (frames, mattresses)

  tools:
    - power_tools
    - hand_tools
    - measurement
    - safety

  vehicles:
    - cars
    - bikes
    - accessories

  clothing:
    - outerwear
    - footwear
    - accessories

  collections:
    - books
    - music (vinyl, CDs, instruments)
    - art
    - memorabilia

  kitchen:
    - appliances
    - cookware
    - utensils

  outdoor:
    - camping
    - sports
    - garden

  documents:
    - legal (deeds, titles, contracts)
    - financial (tax returns, statements)
    - medical (records, prescriptions)
    - identity (passports, licenses, certificates)

CLI Tool: inv

# Query examples
inv list                           # All active items
inv list --category electronics    # Filter by category
inv list --location office         # Where is it?
inv list --value-above 500         # High-value items
inv list --warranty-expiring 90    # Expiring in 90 days
inv list --maintenance-due         # Needs attention
inv list --status stored           # What's in storage?

# Reports
inv report insurance               # Insurance inventory
inv report depreciation 2026       # Tax depreciation schedule
inv report location                # Room-by-room inventory
inv report value                   # Total asset value by category

# Management
inv add                            # Interactive add
inv edit ELEC-001                  # Edit item
inv move ELEC-001 --location "storage_unit:extra-space:box-12"
inv maintain ELEC-001 --task "Clean fans"  # Log maintenance
inv dispose ELEC-001 --method sold --to "eBay" --value 1200

# Utilities
inv qr ELEC-001                    # Generate QR code
inv qr --all --output labels/      # Generate all QR labels
inv search "razer"                 # Full-text search
inv backup                         # Backup to gopass

Location Schema

locations:
  # Rooms in primary residence
  rooms:
    office:
      building: "home"
      floor: 1
      zones: ["desk", "bookshelf", "closet"]
    bedroom:
      building: "home"
      floor: 2
      zones: ["nightstand", "closet", "dresser"]
    garage:
      building: "home"
      floor: 0
      zones: ["workbench", "shelves", "cabinets"]

  # Storage units
  storage_units:
    extra-space:
      provider: "Extra Space Storage"
      address: "123 Storage Lane"
      unit: "B-247"
      size: "10x10"
      access_code: "gopass://v3/personal/storage/extra-space"
      boxes:
        - id: "box-01"
          label: "Winter Clothes"
          contents_summary: "Coats, boots, ski gear"
        - id: "box-12"
          label: "Electronics Archive"
          contents_summary: "Old laptops, cables, parts"

  # Vehicles (mobile storage)
  vehicles:
    car-primary:
      make: "Toyota"
      model: "Camry"
      zones: ["trunk", "glovebox", "backseat"]

  # Lent items
  lent:
    - person: "Gabriel"
      items: ["TOOL-012", "ELEC-089"]
      since: "2026-02-15"
      expected_return: "2026-04-01"

Insurance Report Output

╔══════════════════════════════════════════════════════════════════╗
║              PERSONAL PROPERTY INVENTORY                         ║
║              Insurance Schedule - 2026-03-26                     ║
╠══════════════════════════════════════════════════════════════════╣
║ Category          │ Items │ Purchase Value │ Current Value       ║
╠═══════════════════╪═══════╪════════════════╪═════════════════════╣
║ Electronics       │    47 │     $32,450.00 │         $24,200.00  ║
║ Furniture         │    23 │     $12,800.00 │          $8,500.00  ║
║ Tools             │    31 │      $4,200.00 │          $3,800.00  ║
║ Collections       │   156 │      $8,900.00 │         $12,400.00  ║
║ Clothing          │    12 │      $2,100.00 │          $1,200.00  ║
║ Kitchen           │    28 │      $3,400.00 │          $2,800.00  ║
╠═══════════════════╪═══════╪════════════════╪═════════════════════╣
║ TOTAL             │   297 │     $63,850.00 │         $52,900.00  ║
╚══════════════════════════════════════════════════════════════════╝

High-Value Items (>$1,000):
1. Razer Blade 15 Advanced (ELEC-001) - $1,800 - office/desk
2. Sony A7 IV Camera (ELEC-023) - $2,400 - office/closet
3. Herman Miller Aeron (FURN-001) - $1,200 - office
...

Items with Photos: 234/297 (79%)
Items with Receipts: 189/297 (64%)
Items with Serial Numbers: 156/297 (53%)

QR Code System

Each item gets a QR code label:

┌─────────────────────┐
│  ▄▄▄▄▄ █▀█ █ ▄▄▄▄▄  │
│  █   █ █▄▀▄█ █   █  │
│  █▄▄▄█ █▀▀▀█ █▄▄▄█  │
│  ▄▄▄▄▄ ▄▀█▀▄ ▄▄▄▄▄  │
│  █   █  ▀▄█▀ █   █  │
│  █▄▄▄█ █▀ ▀█ █▄▄▄█  │
├─────────────────────┤
│  ELEC-001           │
│  Razer Blade 15     │
│  inv://ELEC-001     │
└─────────────────────┘

Scan with phone → opens inventory entry Print labels with inv qr --print ELEC-001


Integration Points

gopass Integration

# Sensitive data stored in gopass, referenced by path
receipt: "gopass://v3/personal/receipts/razer-blade-2023"
manual: "gopass://v3/personal/manuals/razer-blade"
warranty_details: "gopass://v3/personal/warranties/razer-blade"
access_code: "gopass://v3/personal/storage/extra-space"

Worklog Integration

// In WRKLOG-2026-03-26.adoc
== Acquisitions

* Purchased Sony WH-1000XM5 headphones ($348)
  ** Added to inventory: `inv add` → ELEC-094
  ** Receipt stored: `gopass insert v3/personal/receipts/sony-xm5`

Maintenance Reminders

# In cron or daily check
inv list --maintenance-due --format reminder

# Output:
OVERDUE: ELEC-001 - Clean fans (due 2026-07-15, 14 days overdue)
DUE SOON: HVAC-001 - Replace filter (due 2026-04-01, 6 days)
DUE SOON: CAR-001 - Oil change (due 2026-04-15, 20 days)

Implementation Plan

Phase 1: Schema & CLI (Week 1)

  1. Create data/inventory.yml with schema

  2. Create scripts/inv CLI tool (Python/bash)

  3. Add 20 high-value items as proof of concept

  4. Test query patterns

Phase 2: Views & Reports (Week 2)

  1. Create AsciiDoc pages that render from YAML

  2. Implement insurance report generator

  3. Implement depreciation calculator

  4. Add to nav.adoc under Reference

Phase 3: Physical Integration (Week 3)

  1. QR code generator

  2. Print labels for high-value items

  3. Photo documentation workflow

  4. Receipt digitization backlog

Phase 4: Automation (Week 4)

  1. Maintenance reminder cron job

  2. Warranty expiration alerts

  3. Insurance report auto-generation (annual)

  4. Backup to gopass


Decision Points

  1. Architecture: Option C (YAML + AsciiDoc views)?

  2. Scope: Start with electronics only, or full household?

  3. Granularity: Track every item, or only items >$50?

  4. Photos: Required for all items, or optional?

  5. Location detail: Room-level or zone-level (desk vs room)?

  6. Tool: Python CLI or bash+jq?


Prior Art / Inspiration

  • Snipe-IT - Enterprise asset management (too heavy)

  • Grocy - Home inventory (food-focused)

  • Home Assistant - Smart home (device-focused)

  • Plain text accounting - ledger/hledger (financial)

This design takes the plain text accounting philosophy (human-readable, version-controlled, scriptable) and applies it to physical assets.


Draft created: 2026-03-26