Skip to main content

AnyTracker Inventory Management System Design: Technical Deep Dive

Β· 5 min read
Max Kaido
Architect

Comprehensive research and design for implementing practical inventory management in AnyTracker, addressing real-world pain points like multivitamin tracking, substance symbol generation, and route of administration integration.

Background & Problem Statement​

AnyTracker currently lacks practical inventory management capabilities, creating significant friction for real-world usage. The current system only supports passive inventory viewing (consumption history) without active management features.

Real-World Pain Points​

  • Physical Reality: Users manage 20+ bottles with different pills/capsules
  • Combination Substances: Single pills containing multiple active ingredients
  • Batch Intake: Users take 4+ different substances simultaneously
  • Form Factor Complexity: Need to specify capsules vs liquid vs tablets vs powders
  • Dosage Unit Mismatch: Users think in "1 capsule" not "400mg magnesium glycinate"
  • Route of Administration: Oral, intranasal, inhaled routes affect bioavailability and safety

Current FDD Gap​

FDD Requirement (FR-7): "Manage user substance inventory ('pharmacy') with customizable dosing and rapid-access interfaces"

Reality: Only passive inventory viewing exists. No active management, no rapid-access, no customizable dosing.

Proposed Solution Architecture​

Core Design Principles​

  1. Substance-First Tracking: Track actual chemical compounds, not "pills" or brand names
  2. Scientific Notation Priority: Use chemical names over brand names, with LLM resolution for brand→scientific mapping
  3. Symbol Learning System: Auto-generate short symbols and teach users gradually
  4. Partial Dosing Support: Allow fractional pill consumption
  5. Route of Administration Awareness: Track oral/intranasal/inhaled routes
  6. Primary/Secondary Feature Separation: Core tracking vs quantity management

Feature Prioritization​

Primary Purpose: Simplify substance tracking through inventory-based resolution Secondary Purpose: Quantity management and low-stock warnings

Technical Design Challenges​

1. The Multivitamin Graph Pollution Problem​

Problem: Tracking multivitamins with 20+ components could pollute the Neo4j graph database by implicitly providing component ordering and creating excessive relationship complexity.

Solution Options:

Option A: Component Expansion​

// User input: "took 1 multivitamin"
// Creates nodes for each component:
CREATE (consumption:Consumption)-[:CONTAINS]->(vitc:Substance {name: "vitamin C", dose: 500})
CREATE (consumption)-[:CONTAINS]->(zinc:Substance {name: "zinc", dose: 15})
CREATE (consumption)-[:CONTAINS]->(b12:Substance {name: "vitamin B12", dose: 100})

Pros: Individual substance analytics, clean component tracking Cons: Loses co-administration context, potential graph bloat

Option B: Composite Tracking​

// Track as single composite entity
CREATE (consumption:Consumption)-[:OF_SUBSTANCE]->(multi:CompositeSubstance {
name: "multivitamin-complex",
components: ["vitamin C:500mg", "zinc:15mg", "vitamin B12:100mcg"]
})

Pros: Preserves co-administration, avoids graph pollution Cons: Loses individual component analytics

Option C: Hybrid Approach​

// Track individual components with batch correlation
CREATE (batch:ConsumptionBatch {id: uuid(), timestamp: now()})
CREATE (batch)-[:CONTAINS]->(vitc_consumption:Consumption {substance: "vitamin C", dose: 500})
CREATE (batch)-[:CONTAINS]->(zinc_consumption:Consumption {substance: "zinc", dose: 15})
CREATE (batch)-[:CONTAINS]->(b12_consumption:Consumption {substance: "vitamin B12", dose: 100})

Pros: Individual analytics + co-administration context Cons: Increased complexity, more nodes

2. Substance Symbol Generation System​

Requirement: Auto-generate consistent, learnable abbreviations for substances.

Examples:

  • magnesium glycinate β†’ MgGly
  • omega-3 EPA/DHA β†’ O3
  • vitamin D3 β†’ VitD3
  • N-acetylcysteine β†’ NAC

Generation Strategies:

Option A: Algorithmic Generation​

function generateSymbol(substanceName: string): string {
// Extract chemical elements + form
// magnesium glycinate β†’ Mg + Gly β†’ MgGly
// vitamin D3 β†’ Vit + D3 β†’ VitD3
}

Option B: Curated Dictionary​

const SUBSTANCE_SYMBOLS = {
'magnesium glycinate': 'MgGly',
'omega-3': 'O3',
'vitamin D3': 'VitD3',
// ... curated list
};

Option C: LLM-Generated with Consistency Rules​

// Use LLM to generate symbols with rules:
// - Max 6 characters
// - Chemical element abbreviations when possible
// - Consistent across similar substances

3. Route of Administration (ROA) Integration​

Routes to Support:

  • Oral (default): pills, capsules, liquids, powders
  • Intranasal: nasal sprays, insufflated powders
  • Inhaled: vaporized, smoked substances

Integration Questions:

  • Should ROA be required for all substances?
  • Should ROA be inferred from form factor?
  • How to handle substances with multiple possible ROAs?

Example Scenarios:

"add ketamine 50mg powder intranasal" // ROA explicit
"add magnesium glycinate 400mg capsules" // ROA implied (oral)
"add NAC 600mg powder" // ROA ambiguous (oral or intranasal?)

4. Brand Name β†’ Scientific Resolution​

Challenge: Users often know brand names but we want to track scientific names.

LLM Resolution Examples:

User: "add Thorne magnesium bisglycinate"
LLM: Resolves to "magnesium glycinate"
Bot: "Added MgGly (magnesium glycinate) from Thorne brand"

User: "add NOW omega-3"
LLM: Needs more info β†’ "What's the EPA/DHA content?"

Questions:

  • How reliable is LLM supplement knowledge?
  • Should we maintain a brandβ†’scientific mapping database?
  • How to handle unknown brands?

5. Partial Dosing Precision​

User Scenarios:

"took half MgGly" β†’ 200mg magnesium glycinate
"took 1.5 O3" β†’ 1.5x standard dose
"took quarter VitD3" β†’ 0.25x standard dose

Precision Questions:

  • How precise should fractional tracking be?
  • Should we round to reasonable increments?
  • How to handle liquid measurements (drops, ml)?

6. Inventory Quantity Management (Secondary Feature)​

Default Behavior:

  • New inventory items default to 30 units
  • Warn when <10 units remaining
  • Don't enforce quantity tracking

Natural Language Examples:

"add magnesium glycinate 400mg capsules" // Defaults to 30
"add omega-3 softgels, bottle of 120" // Explicit quantity
"update MgGly to 15 remaining" // Quantity update
"MgGly running low (8 remaining)" // Auto warning

Proposed Natural Language Interface​

Inventory Management​

# Basic Addition
"add magnesium glycinate 400mg capsules"
β†’ "Added MgGly (magnesium glycinate) 400mg capsules to inventory (30 units)"

# With Quantity
"add omega-3 with 300mg EPA 200mg DHA softgels, bottle of 180"
β†’ "Added O3 (omega-3) 300mg EPA + 200mg DHA softgels to inventory (180 units)"

# With ROA
"add NAC 600mg powder intranasal"
β†’ "Added NAC (N-acetylcysteine) 600mg powder (intranasal) to inventory (30 units)"

# Brand Resolution
"add Thorne magnesium bisglycinate"
β†’ "Added MgGly (magnesium glycinate) from Thorne brand to inventory (30 units)"

Batch Tracking​

# Symbol-Based Tracking
"took 2 MgGly, 1 O3, half VitD3"
β†’ Tracks: 800mg magnesium glycinate + 500mg EPA/300mg DHA + 2500IU vitamin D3

# Mixed Natural Language
"had my morning stack: 2 magnesium + 1 omega-3 + half multivitamin"
β†’ LLM resolves to inventory items and tracks individual components

# Complex Combinations
"took 1 MultiV" (where MultiV is a stored multivitamin)
β†’ Tracks all individual components with batch correlation

Inventory Management​

# Quantity Updates
"update MgGly to 15 remaining"
"MgGly is empty"
"refilled O3 with 120 softgels"

# Inventory Queries
"show my inventory"
"what's running low?"
"how much MgGly left?"

Implementation Questions Requiring Decisions​

1. Multivitamin Tracking Strategy​

Question: How should we handle multivitamins with 20+ components? Options: Component expansion, composite tracking, or hybrid approach? Impact: Graph database structure, analytics capabilities, query complexity

2. Symbol Generation Method​

Question: How should substance symbols be generated? Options: Algorithmic, curated dictionary, or LLM-generated? Impact: User learning curve, consistency, maintenance overhead

3. ROA Requirements​

Question: Should route of administration be required, optional, or inferred? Options: Always required, required for non-oral, or inferred from form? Impact: User friction, data completeness, safety considerations

4. Brand Name Resolution Reliability​

Question: How much should we rely on LLM knowledge for brand→scientific mapping? Options: Full LLM reliance, hybrid with database, or user-guided resolution? Impact: Accuracy, user experience, maintenance requirements

5. Partial Dosing Granularity​

Question: How precise should fractional dose tracking be? Options: Exact fractions, rounded increments, or user-specified precision? Impact: Data accuracy, user experience, storage requirements

6. Inventory Enforcement Level​

Question: Should inventory be required for tracking, or optional enhancement? Options: Required (add-to-inventory-then-track), optional, or hybrid? Impact: User onboarding friction, data completeness, system complexity

Next Steps​

  1. Decision Phase: Review technical options and make architectural decisions
  2. FDD Creation: Create formal FDD document based on decisions
  3. Implementation Planning: Break down into development phases
  4. Prototype Development: Start with core inventory management features
  5. User Testing: Validate natural language interface with real usage patterns

Technical Considerations for Implementation​

Database Schema Changes​

  • New Inventory table with substance definitions
  • Enhanced Consumption tracking with inventory references
  • Symbol mapping and ROA fields
  • Quantity tracking and warning thresholds

LLM Integration Points​

  • Brand name resolution
  • Natural language parsing for complex inputs
  • Symbol generation and consistency
  • Batch intake parsing

Graph Database Implications​

  • Multivitamin component handling strategy
  • Batch correlation modeling
  • ROA relationship modeling
  • Inventory-consumption linkage

This comprehensive analysis provides the foundation for making informed architectural decisions about the AnyTracker inventory management system.