AnyTracker Inventory Management System Design: Technical Deep Dive
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β
- Substance-First Tracking: Track actual chemical compounds, not "pills" or brand names
- Scientific Notation Priority: Use chemical names over brand names, with LLM resolution for brandβscientific mapping
- Symbol Learning System: Auto-generate short symbols and teach users gradually
- Partial Dosing Support: Allow fractional pill consumption
- Route of Administration Awareness: Track oral/intranasal/inhaled routes
- 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βMgGlyomega-3 EPA/DHAβO3vitamin D3βVitD3N-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β
- Decision Phase: Review technical options and make architectural decisions
- FDD Creation: Create formal FDD document based on decisions
- Implementation Planning: Break down into development phases
- Prototype Development: Start with core inventory management features
- User Testing: Validate natural language interface with real usage patterns
Technical Considerations for Implementationβ
Database Schema Changesβ
- New
Inventorytable with substance definitions - Enhanced
Consumptiontracking 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.
