Compare commits

..

2 Commits

Author SHA1 Message Date
33c1555d8c bede_design 2026-04-25 11:44:10 +03:00
8d9a4ccc7a Build [v1.14.23] 2026-04-23 18:23:07 +03:00
11 changed files with 281 additions and 122 deletions

View File

@@ -26,6 +26,7 @@ This is the **Single Source of Truth** for ALL AI agents. Refer to [PROJECT_ARCH
- **NO UPPERCASE** or **NO ITALICS** in any UI context (headers, labels, buttons). - **NO UPPERCASE** or **NO ITALICS** in any UI context (headers, labels, buttons).
- **NO BOLD FONTS**: Use `font-normal` throughout. Hierarchy via size and color only. - **NO BOLD FONTS**: Use `font-normal` throughout. Hierarchy via size and color only.
- **NO `tracking-widest`**. - **NO `tracking-widest`**.
- **StatCard Typography**: Numeric values in StatCards MUST match the exact text size of their corresponding labels (e.g., `text-base md:text-lg`) to avoid overwhelming the density of the component.
- **Layout**: Main pages MUST use `max-w-7xl`. - **Layout**: Main pages MUST use `max-w-7xl`.
- **Unified Headers**: Icon box (`p-4 bg-primary/10 border-primary/20`) + Title (`text-3xl font-normal`). - **Unified Headers**: Icon box (`p-4 bg-primary/10 border-primary/20`) + Title (`text-3xl font-normal`).
- **Iconography**: Use **Lucide Icons** exclusively. - **Iconography**: Use **Lucide Icons** exclusively.

View File

@@ -15,7 +15,18 @@ Do not proceed with any task until you have analyzed these three files.
DO NOT, EVER, USE "uppercase" or "toUpper" in any UI/UX context, nowhere. This SHOULD NOT be used in UI/UX anywhere, no text should be displayed in CAPITAL LETTERS! But do not replace "toUpper" with "toLower" or "uppercase" with "lowercase" either, leave text in UI/UX as is. DO NOT, EVER, USE "uppercase" or "toUpper" in any UI/UX context, nowhere. This SHOULD NOT be used in UI/UX anywhere, no text should be displayed in CAPITAL LETTERS! But do not replace "toUpper" with "toLower" or "uppercase" with "lowercase" either, leave text in UI/UX as is.
# Project Context
## Project-Specific Guidelines ## Project-Specific Guidelines
- Use TypeScript strict mode - Use TypeScript strict mode
- All API endpoints must have tests - All API endpoints must have tests
## Design System
This project uses a design system defined in `DESIGN.md` at the project root.
Always refer to this file when generating or modifying any UI component.
- Use only colors, fonts, and spacing values defined in DESIGN.md.
- Do not invent new values or use defaults from any framework.
- Match component states (hover, focus, active, disabled) to the patterns in DESIGN.md.
- Follow the typographic scale and weight assignments in DESIGN.md.

145
DESIGN.md Normal file
View File

@@ -0,0 +1,145 @@
---
name: Obsidian & Amber
colors:
surface: '#0c1322'
surface-dim: '#0c1322'
surface-bright: '#323949'
surface-container-lowest: '#070e1d'
surface-container-low: '#141b2b'
surface-container: '#191f2f'
surface-container-high: '#232a3a'
surface-container-highest: '#2e3545'
on-surface: '#dce2f7'
on-surface-variant: '#d8c3ad'
inverse-surface: '#dce2f7'
inverse-on-surface: '#293040'
outline: '#a08e7a'
outline-variant: '#534434'
surface-tint: '#ffb95f'
primary: '#ffc174'
on-primary: '#472a00'
primary-container: '#f59e0b'
on-primary-container: '#613b00'
inverse-primary: '#855300'
secondary: '#ffb599'
on-secondary: '#5a1c00'
secondary-container: '#f66018'
on-secondary-container: '#4f1700'
tertiary: '#56e5a9'
on-tertiary: '#003824'
tertiary-container: '#30c88f'
on-tertiary-container: '#004e34'
error: '#ffb4ab'
on-error: '#690005'
error-container: '#93000a'
on-error-container: '#ffdad6'
primary-fixed: '#ffddb8'
primary-fixed-dim: '#ffb95f'
on-primary-fixed: '#2a1700'
on-primary-fixed-variant: '#653e00'
secondary-fixed: '#ffdbce'
secondary-fixed-dim: '#ffb599'
on-secondary-fixed: '#370e00'
on-secondary-fixed-variant: '#7f2b00'
tertiary-fixed: '#6ffbbe'
tertiary-fixed-dim: '#4edea3'
on-tertiary-fixed: '#002113'
on-tertiary-fixed-variant: '#005236'
background: '#0c1322'
on-background: '#dce2f7'
surface-variant: '#2e3545'
typography:
headline-lg:
fontFamily: Space Grotesk
fontSize: 32px
fontWeight: '700'
lineHeight: '1.2'
letterSpacing: -0.02em
headline-md:
fontFamily: Space Grotesk
fontSize: 24px
fontWeight: '600'
lineHeight: '1.2'
body-lg:
fontFamily: Inter
fontSize: 16px
fontWeight: '400'
lineHeight: '1.5'
body-md:
fontFamily: Inter
fontSize: 14px
fontWeight: '400'
lineHeight: '1.5'
data-lg:
fontFamily: Space Grotesk
fontSize: 18px
fontWeight: '500'
lineHeight: '1.2'
letterSpacing: 0.05em
data-sm:
fontFamily: Space Grotesk
fontSize: 12px
fontWeight: '500'
lineHeight: '1.2'
letterSpacing: 0.1em
label-caps:
fontFamily: Space Grotesk
fontSize: 11px
fontWeight: '700'
lineHeight: '1'
letterSpacing: 0.15em
spacing:
unit: 4px
gutter: 16px
margin: 24px
container-max: 1440px
---
## Brand & Style
This design system is engineered for high-stakes datacenter environments where clarity and rapid data ingestion are critical. The brand personality is **rugged, utilitarian, and precise**, evoking the feel of industrial control panels and terminal interfaces. It targets system administrators and infrastructure engineers who require a "heads-up display" (HUD) aesthetic that remains legible during long shifts in low-light environments.
The design style is **Industrial Brutalism**. It prioritizes function over form, utilizing heavy borders, high-contrast mechanical accents, and monospaced typography to create a sense of structural integrity. Visual elements are treated as physical components, emphasizing hardware-level reliability.
## Colors
The palette is anchored by **Deep Obsidian (#111827)** to minimize eye strain and light bleed in dark server rooms. **Industrial Amber (#F59E0B)** serves as the primary interactive and high-visibility color, functioning as a digital "phosphor" that cuts through the dark background.
**Safety Orange (#EA580C)** is reserved strictly for warning states and cautionary telemetry. A supplemental **Tactical Green (#10B981)** is used for "Optimal" or "Online" status indicators. The color system uses high-contrast ratios to ensure that critical information is never lost in the interface.
## Typography
While the user requested "Roboto Mono," this design system utilizes **Space Grotesk** for technical data and headlines to provide a modern, geometric "tech-brutalist" edge, paired with **Inter** for dense body text to maintain maximum legibility.
All data-driven labels and telemetry values must use **Space Grotesk** to simulate the look of physical hardware engravings and terminal readouts. Headers and labels should frequently employ `uppercase` styling with increased letter-spacing to reinforce the industrial documentation aesthetic.
## Layout & Spacing
This design system employs a **Fluid-Grid hybrid** model. The main workspace expands to utilize 100% of the viewport to accommodate dense data tables and rack visualizations, but content is constrained by a 12-column underlying structure for dashboard widgets.
The spacing rhythm is strictly based on a **4px baseline grid**. Gutters and margins are kept tight (16px and 24px respectively) to maximize information density—allowing engineers to see more telemetry on a single screen without scrolling. Components use "internal padding" rather than external margins to create a tightly-packed, modular appearance.
## Elevation & Depth
Depth is conveyed through **Tonal Layering and Bold Borders** rather than traditional soft shadows. This mimics the physical construction of server racks and control panels.
1. **Base Level:** Deep Obsidian (#111827) representing the "chassis."
2. **Raised Level:** Surface Alt (#1F2937) for cards and modules, featuring 1px solid borders in a slightly lighter charcoal or the primary Amber for active states.
3. **Interactive Elements:** Use inset borders (inner shadows) to create a "pressed" or "carved" effect when buttons are toggled.
Shadows, if used, must be sharp and low-opacity (hard-edged) to maintain the brutalist, high-readability requirement.
## Shapes
The shape language is strictly **Sharp (0px)**. All containers, buttons, and input fields must have 90-degree corners. This reinforces the "rugged hardware" aesthetic and ensures that UI elements align perfectly with the pixel grid, preventing any blurriness on industrial-grade monitors.
Angle-cut corners (dog-eared corners) may be used on primary action buttons or status chips to provide a "tactical" look without resorting to curves.
## Components
- **Buttons:** High-contrast blocks. Primary buttons use a solid Amber background with black text. Secondary buttons use an Amber 1px border with no fill.
- **Input Fields:** Deep charcoal fills with an Amber bottom-border only. Labels are placed above the field in `label-caps` style.
- **Data Tables:** Zebra-striping is forbidden. Instead, use thin 1px horizontal dividers. Hover states should highlight the entire row with a low-opacity Amber tint.
- **Status Chips:** Rectangular boxes with no roundedness. Use background colors for Critical (Red) and Warning (Orange), but keep the text black for maximum contrast.
- **Rack Visualizers:** Modular components that represent physical server hardware. Use high-contrast outlines to distinguish between individual units (U).
- **Telemetry Gauges:** Monochromatic bar charts and line graphs using the Primary Amber color, emphasizing the "oscilloscope" or "terminal" aesthetic.

View File

@@ -14,3 +14,14 @@ Be concise! Do not explain a thousand details unless they are absolutely necessa
Do not proceed with any task until you have analyzed these three files. Do not proceed with any task until you have analyzed these three files.
DO NOT, EVER, USE "uppercase" or "toUpper" in any UI/UX context, nowhere. This SHOULD NOT be used in UI/UX anywhere, no text should be displayed in CAPITAL LETTERS! But do not replace "toUpper" with "toLower" or "uppercase" with "lowercase" either, leave text in UI/UX as is. DO NOT, EVER, USE "uppercase" or "toUpper" in any UI/UX context, nowhere. This SHOULD NOT be used in UI/UX anywhere, no text should be displayed in CAPITAL LETTERS! But do not replace "toUpper" with "toLower" or "uppercase" with "lowercase" either, leave text in UI/UX as is.
# Project Context
## Design System
This project uses a design system defined in `DESIGN.md` at the project root.
Always refer to this file when generating or modifying any UI component.
- Use only colors, fonts, and spacing values defined in DESIGN.md.
- Do not invent new values or use defaults from any framework.
- Match component states (hover, focus, active, disabled) to the patterns in DESIGN.md.
- Follow the typographic scale and weight assignments in DESIGN.md.

View File

@@ -100,6 +100,7 @@ def extract_label_info(image_bytes: bytes, mode: str = "item"):
"Size": "size", "Size": "size",
"Color": "color", "Color": "color",
"PartNr": "part_number", "PartNr": "part_number",
"Specs": "specs",
"OCR": "ocr_text" "OCR": "ocr_text"
} }

View File

@@ -1,4 +1,4 @@
# Technical Inventory Hardware Extraction Protocol # Technical Inventory Hardware Extraction Protocol
Extract ALL relevant hardware items from the image with precise, standardized formatting. Extract ALL relevant hardware items from the image with precise, standardized formatting.
@@ -8,7 +8,7 @@
- **Multi-item labels**: Treat each SKU/variant as a separate item (e.g., "5m cable" and "7m cable" = 2 items) - **Multi-item labels**: Treat each SKU/variant as a separate item (e.g., "5m cable" and "7m cable" = 2 items)
## Item Field Format (CRITICAL) ## Item Field Format (CRITICAL)
[] Format: `<size_or_length> <type> <vendor> <connector> <part_number>`
**Component Rules:** **Component Rules:**
- `<size_or_length>`: - `<size_or_length>`:
@@ -17,8 +17,16 @@
- Rule: If ≥1000GB, use TB. If ≥1000MB, use GB. Otherwise use MB. - Rule: If ≥1000GB, use TB. If ≥1000MB, use GB. Otherwise use MB.
- **CABLE/WIRE LENGTH**: Meters only. Examples: "5m", "10m", "50m" - **CABLE/WIRE LENGTH**: Meters only. Examples: "5m", "10m", "50m"
- **RAM DIMM**: Capacity in GB. Examples: "128GB", "32GB", "8GB" - **RAM DIMM**: Capacity in GB. Examples: "128GB", "32GB", "8GB"
- **SFP/TRANSCEIVER SPEED**: Speed in G/Mbps. Examples: "10G", "1G", "40G", "100G"
- `<type>`: Asset class.
- **CABLES**:
- Use "Fiber" for all optical fiber cables.
- Use "Patchcord" for all copper UTP/RJ45 cables.
- Others: SATA, SAS, Power, USB, etc.
- **COMPONENTS**: DDR3/DDR4/DDR5, NVMe, SSD, HDD, SFP/Transceiver, DIMM, etc.
- **PRECEDENCE**: If an item is both "SSD" and "NVMe", use **NVMe** as the type and category.
- `<type>`: Asset class. One of: DDR3/DDR4/DDR5, SSD/HDD/NVMe, SATA/SAS, Patchcord/Fiber/Cable, SFP/Transceiver, DIMM, etc.
- `<vendor>`: Manufacturer (HP, HPE, Dell, Samsung, Cisco, Hynix, Intel, Broadcom) - `<vendor>`: Manufacturer (HP, HPE, Dell, Samsung, Cisco, Hynix, Intel, Broadcom)
- `<connector>`: Physical interface (RJ45, LC-LC, MPO, U.3, SATA, SAS, ST, SC). Omit if N/A. - `<connector>`: Physical interface (RJ45, LC-LC, MPO, U.3, SATA, SAS, ST, SC). Omit if N/A.
- `<part_number>`: Part number ONLY if visible. **Omit serial numbers.** - `<part_number>`: Part number ONLY if visible. **Omit serial numbers.**
@@ -26,9 +34,10 @@
**Item Examples (WITH HUMAN-READABLE SIZES):** **Item Examples (WITH HUMAN-READABLE SIZES):**
- `1.6TB NVMe HPE U.3 P66093-002` (not 1600GB) - `1.6TB NVMe HPE U.3 P66093-002` (not 1600GB)
- `256GB SSD Dell SATA SK-8765` (already human-readable) - `256GB SSD Dell SATA SK-8765` (already human-readable)
- `5m Patchcord LC-LC` - `5m Fiber LC-LC` (optical cable)
- `2m Patchcord RJ45` (copper cable)
- `128GB DDR4 Hynix` - `128GB DDR4 Hynix`
- `512MB Cache Samsung SATA` (stays MB if under 1GB) - `10G SFP+ Cisco LC 10-2415-03`
**Size Conversion Examples:** **Size Conversion Examples:**
- 1600GB → 1.6TB - 1600GB → 1.6TB
@@ -47,72 +56,74 @@
## Other Fields ## Other Fields
- **Type**: Repeat the asset class (DDR4, SSD, NVMe, Patchcord, etc.) - **Type**: Repeat the asset class (DDR4, SSD, NVMe, Patchcord, etc.)
- **Description**: Technical summary, max 5 words. Examples: "High-speed fiber optic", "Enterprise Gen4 storage" - **Description**: Technical summary, max 5 words. Examples: "High-speed fiber optic", "Enterprise Gen4 storage"
- **Category**: Memory, Storage, Network, Cabling, Compute, Optical, Transceiver - **Category**:
- For Spare Parts (see below): Use `spare parts - <type>` where `<type>` is the lowercase component name (e.g., `spare parts - ram`, `spare parts - ssd`, `spare parts - nvme`, `spare parts - raid card`, `spare parts - cpu`, `spare parts - psu`, `spare parts - hba`, `spare parts - nic`, `spare parts - sfp`).
- For Others: Use `Network`, `Cabling`, `Compute`, `Optical`, `Consumable`.
- **Connector**: Interface type from Item field. Examples: "LC-LC", "RJ45", "U.3" - **Connector**: Interface type from Item field. Examples: "LC-LC", "RJ45", "U.3"
- **Size**: **HUMAN-READABLE capacity or length.** Examples: "1.6TB", "256GB", "5m" (NOT "1600GB") - **Size**: **HUMAN-READABLE capacity, length, or speed.** Examples: "1.6TB", "256GB", "5m", "10G" (NOT "1600GB")
- **Color**: Physical color if distinguishing - **Color**: Physical color if distinguishing
- **PartNr**: Part number only (no serial numbers) - **PartNr**: Part number only. **CRITICAL: NEVER include Serial Numbers (S/N, SN, Serial).**
- **OCR**: Robust matching key for OCR tolerance - **Specs**: Detailed technical specifications (e.g., "1.2V, CL22", "850W 80+ Gold", "Gen4 x4", "Single-mode").
- **OCR**: Robust matching key for OCR tolerance. Format: `TYPE SIZE VENDOR CONNECTOR PARTNUMBER` (UPPERCASE, no special chars).
## OCR Field Rules (CRITICAL) ## OCR Field Rules (CRITICAL)
Generate a SHORT, clean matching key: Generate a SHORT, clean matching key for database lookup:
- Format: **UPPERCASE space-separated, NO special chars, NO duplicates** - Format: **UPPERCASE space-separated, NO special chars, NO duplicates**
- Include ONLY: Type + Size + Primary Vendor + Connector + Part Number - Include ONLY: Type + Size + Primary Vendor + Connector + Part Number
- **EXCLUDE**: Serial numbers, secondary vendors, duplicate tokens, EMC/SK labels - **STRICT EXCLUSIONS**:
- **USE HUMAN-READABLE SIZE**: Use TB/GB from Item field, not original notation - NO serial numbers (S/N, SN, Serial)
- NO secondary vendor names
- NO extraneous labels
- **CONSTRAINTS**:
- Each token appears ONE time only (no duplicates)
- Remove hyphens/special chars for fuzzy matching (e.g., `SK-8765` -> `SK8765`)
- **USE HUMAN-READABLE SIZE**: Use TB/GB/M/G from Item field.
**OCR Format:** `TYPE SIZE VENDOR CONNECTOR PARTNUMBER` **OCR Examples:**
**OCR Examples (WITH HUMAN-READABLE SIZES):**
- Item: `1.6TB NVMe HPE U.3 P66093-002` → OCR: `NVME 1.6TB HPE U3 P66093002` - Item: `1.6TB NVMe HPE U.3 P66093-002` → OCR: `NVME 1.6TB HPE U3 P66093002`
- Item: `5m Patchcord LC-LC` → OCR: `PATCHCORD 5M LC LC` - Item: `5m Fiber LC-LC` → OCR: `FIBER 5M LC LC`
- Item: `2m Patchcord RJ45` → OCR: `PATCHCORD 2M RJ45`
- Item: `256GB SSD Samsung SAS SK-8765` → OCR: `SSD 256GB SAMSUNG SAS SK8765` - Item: `256GB SSD Samsung SAS SK-8765` → OCR: `SSD 256GB SAMSUNG SAS SK8765`
- Item: `128GB DDR4 Hynix` → OCR: `DDR4 128GB HYNIX` - Item: `128GB DDR4 Hynix` → OCR: `DDR4 128GB HYNIX`
- Item: `10G SFP+ Cisco LC 10-2415-03` → OCR: `SFP+ 10G CISCO LC 10241503`
**OCR Constraints:**
- NO duplicate part numbers
- NO secondary vendor names
- NO extraneous labels
- Each token appears ONE time only
- Remove hyphens/special chars for fuzzy matching
- Use HUMAN-READABLE sizes (1.6TB not 1600GB)
## Spare-Parts vs Consumables Classification ## Spare-Parts vs Consumables Classification
CLASSIFICATION GUIDE - SPARE PARTS vs CONSUMABLES: CLASSIFICATION GUIDE - SPARE PARTS vs CONSUMABLES:
Spare Parts (replaceable components that plug into or interface with devices): Spare Parts (replaceable components that plug into or interface with devices):
- RAM, DDR memory modules (DDR3, DDR4, DDR5, SODIMM, DIMM) - **RAM**: DDR3, DDR4, DDR5, SODIMM, DIMM → Category: `spare parts - ram`
- SSDs, NVMe drives, M.2 modules, SATA drives, hard drives - **Storage**: NVMe, SSD, M.2, SATA HDD, SAS HDD → Category: `spare parts - nvme`, `spare parts - ssd`, or `spare parts - hdd`.
- CPUs, GPUs, processors, discrete graphics cards - *Rule: Use `nvme` if the item is an NVMe SSD.*
- Power supply units (PSU), power modules (NOT generic power cords) - **CPU**: Processors, Intel Xeon, AMD EPYC → Category: `spare parts - cpu`
- Expansion cards (PCIe, PCI, RAID controllers, network cards/NIC) - **Power**: PSU, Power Supply Modules → Category: `spare parts - psu`
- Cooling solutions (heatsinks, CPU coolers, thermal solutions) - **Controllers**: RAID Controllers, HBA, NIC, Network Cards → Category: `spare parts - raid card` or `spare parts - hba` or `spare parts - nic`
- Motherboards, chipsets, BIOS modules - **Cooling**: Heatsinks, Fans (specific to models) → Category: `spare parts - cooling`
- **Mainboard**: Motherboards, Riser Cards → Category: `spare parts - motherboard` or `spare parts - riser`
- **Optical**: SFPs, Transceivers → Category: `spare parts - sfp`
NOT Spare Parts (consumables, generic items): NOT Spare Parts (consumables, generic items):
- Cables (power, SATA, USB, Ethernet, proprietary cords) - Cables: Power cables, SATA cables, USB, Ethernet, Fiber Patchcords → Category: `Cabling` or `Consumable`
- Fasteners (screws, washers, bolts, standoffs) - Fasteners: Screws, brackets, rails → Category: `Consumable`
- Thermal paste, thermal pads, adhesive tapes - Materials: Thermal paste, pads, tapes → Category: `Consumable`
- Connectors, plugs, sockets, generic adapters
- Generic cords and utility items
Decision Tree: Decision Tree:
1. Does the item have a replaceable function in a larger system? 1. Does the item have a manufacturer part number (P/N)?
2. Does it have a manufacturer part number and technical specifications? 2. Is it a modular component of a larger system (Server, PC, Switch)?
3. Is it described with model/revision information? 3. Does it have technical specs (Speed, Capacity, Voltage)?
If YES to 2+ questions: Mark as SPARE PART If YES to 2+ questions: Mark as `spare parts - <type>`
If item matches consumable examples exactly: Mark as CONSUMABLE If item is a cable: Mark as `Cabling`
Otherwise: Mark as "uncertain" in the Category field for human review. If item is a generic hardware: Mark as `Consumable`
Otherwise: Mark as `uncertain` for review.
Examples: Examples:
✓ "Kingston Fury 16GB DDR4-3200" → Spare Part (RAM module) ✓ "Kingston Fury 16GB DDR4-3200" → Category: `spare parts - ram`
✓ "Samsung 970 EVO 1TB NVMe" → Spare Part (SSD) ✓ "Samsung 970 EVO 1TB NVMe" → Category: `spare parts - nvme`
✓ "Intel Core i7-12700K" → Spare Part (CPU) ✓ "Intel Core i7-12700K" → Category: `spare parts - cpu`
✓ "Corsair RM850x 850W Power Supply" → Spare Part (PSU) ✓ "LSI MegaRAID 9361-8i" → Category: `spare parts - raid card`
✗ "6ft SATA Cable" → Consumable (cable) ✗ "6ft SATA Cable" → Category: `Cabling`
✗ "CPU Mounting Hardware Kit" → Consumable (fasteners) ✗ "M3 Mounting Screws" → Category: `Consumable`
✗ "Thermal Paste Tube" → Consumable (adhesive material)
## Output Format ## Output Format
```json ```json
@@ -127,7 +138,8 @@
"Size": "human_readable_size", "Size": "human_readable_size",
"Color": "color", "Color": "color",
"PartNr": "part_number", "PartNr": "part_number",
"OCR": "TYPE SIZE VENDOR CONNECTOR PARTNUMBER" "Specs": "detailed technical specifications",
"OCR": "SIZE TYPE VENDOR CONNECTOR PARTNUMBER"
} }
] ]
} }

View File

@@ -1,7 +1,7 @@
# TFM aInventory — Project Plan & Roadmap # TFM aInventory — Project Plan & Roadmap
**Current Version**: 1.13.0+ (Phase 5/6) **Current Version**: v1.14.22
**Status**: Stable, field-validated **Status**: MILESTONE 7 SHIPPED | 🟢 PHASE 8 START
**Last Updated**: 2026-04-23 **Last Updated**: 2026-04-23
--- ---
@@ -11,47 +11,36 @@ A unified inventory management system that eliminates manual data entry through
--- ---
## 2. Core Requirements (Validated) ## 2. Current State (v1.14.22)
- **Item CRUD**: Full inventory tracking with barcode/PN support. - **Architecture**: Domain-driven YAML configuration (`config/`).
- **Offline Scanning**: QR/Barcode scanning via browser (html5-qrcode). - **Management**: Unified Python management suite (`scripts/`).
- **AI Extraction**: Automatic item detail extraction from photos (Gemini 2.0 / Claude 3.5). - **UI Fidelity**: High (Normal weight only, Lucide icons, contextual CTAs).
- **PWA & Offline Sync**: IndexedDB storage with UUID-based conflict resolution. - **Core Engine**: Stable Item CRUD, AI extraction, and PWA offline sync.
-**Enterprise Auth**: LDAP integration + PBKDF2 local credential caching.
-**Audit Log**: Immutable history of all changes, deletions are traced.
-**PWA**: Installable on iOS/Android, works without network.
--- ---
## 3. Roadmap: Phases 47 ## 3. Active Roadmap
### Phase 4: Field Validation (COMPLETED ✓)
- Deploy to pilot sites, collect feedback, fix mobile UX blockers.
### Phase 5: Core V2 Features (COMPLETED ✓)
- **Quick Quantity Adjustment**: Hybrid UI (+/- and tap-to-edit).
- **Search & Filtering**: Advanced modal-based search.
- **Export/Reports**: CSV/Excel exports for compliance.
### Phase 6: Deployment & Scale (COMPLETED ✓)
- **Containerization**: Full Docker support with Caddy proxy.
- **Automation**: Single-command `deploy.sh` (now `deploy.py`).
- **Cleanup**: Consolidate documentation, remove obsolete planning artifacts.
- **Performance**: Scale testing for 10K+ items and 5+ concurrent users.
### Phase 7: Config Consolidation (COMPLETED ✓)
- **Centralization**: All config in `config/` folder (YAML format).
- **Automation**: Bash scripts converted to Python (`scripts/`).
- **SSOT Architecture**: `network.yaml` established as Master IP/Port authority.
- **Dynamic Injection**: Automatic API URL and CORS calculation from master config.
- **D-06 Load Order**: Env Vars > YAML > Defaults.
- **Deprecation**: `inventory.env` and legacy `.sh` scripts completely removed.
### Phase 8: Hardening & Release (PLANNED) ### Phase 8: Hardening & Release (PLANNED)
- Stability monitoring, final UX refinements, production-ready runbook. - **Production Runbook**: Finalized guide for production deployment.
- **Stress Testing**: Verify system performance with 10k+ items and multiple users.
- **E2E Validation**: Verify data consistency in multi-page Excel exports.
- **Final Polish**: Performance audit and accessibility sweep.
--- ---
## 4. Design & Operational Constraints ## 4. Milestone History
- [v1.14.22: Config Consolidation & Infrastructure](.planning/milestones/v1.14.22-ROADMAP.md) (2026-04-23)
- <details><summary>Previous Phases (Legacy Environment)</summary>
### Phase 4: Field Validation (COMPLETED ✓)
### Phase 5: Core V2 Features (COMPLETED ✓)
### Phase 6: Deployment & Scale (COMPLETED ✓)
</details>
---
## 5. Design & Operational Constraints
- **Tech Stack**: FastAPI (Python), SQLite, Next.js (TypeScript), Tailwind CSS. - **Tech Stack**: FastAPI (Python), SQLite, Next.js (TypeScript), Tailwind CSS.
- **UI Fidelity**: Premium density, Lucide icons, **NO UPPERCASE**, **NO BOLD FONTS** (normal weight only). - **UI Fidelity**: Premium density, Lucide icons, **NO UPPERCASE**, **NO BOLD FONTS** (normal weight only).
- **Database**: Single-instance SQLite (WAL mode). Multi-instance is v3+. - **Database**: Single-instance SQLite (WAL mode). Multi-instance is v3+.
@@ -69,10 +58,6 @@ A unified inventory management system that eliminates manual data entry through
## 6. Backlog (V3+) ## 6. Backlog (V3+)
- Advanced analytics & turnover trends. - Advanced analytics & turnover trends.
- Multi-warehouse federation & inter-location transfers. - Multi-warehouse federation.
- Localization (Portuguese, Spanish). - Localization (Portuguese, Spanish).
- Custom field schemas. - Custom field schemas.
---
*For active tasks, see SESSION_STATE.md.*

View File

@@ -2,40 +2,33 @@
**Active AI:** Gemini CLI **Active AI:** Gemini CLI
**Last Updated:** 2026-04-23 **Last Updated:** 2026-04-23
**Current Version:** v1.14.19 **Current Version:** v1.14.22
**Status**: ✅ SSL PROXY FIXED | 🟢 READY FOR PHASE 8 **Status**: ✅ MILESTONE 7 VERIFIED | 🟢 READY FOR PHASE 8
--- ---
## SESSION 42 EXECUTION SUMMARY — SSL Infrastructure Fix ## SESSION 42 EXECUTION SUMMARY — Milestone Audit & Infrastructure Hardening
### 1. SSL Proxy Fix (COMPLETE) ### 1. Milestone 7 Audit (COMPLETE)
- **Port 80 Conflict**: Identified that Caddy was failing to start because it tried to bind to port 80 for HTTP->HTTPS redirects, while port 80 was already in use by a system-wide Caddy. - **Verified Definition of Done**: Confirmed all Phase 7 (Config Consolidation) requirements are met.
- **Caddy Configuration**: Modified `Caddyfile.standalone` (root and `config/`) to include `auto_https disable_redirects` in the global options. This allows Caddy to run on custom ports (8918/8919) without interfering with port 80. - **Integration Check**: Fixed a critical gap where `run_standalone.py` was not updating the frontend's `network.json`.
- **Service Restart**: Successfully restarted backend, frontend, and proxy using `scripts/run_standalone.py restart`. - **Legacy Cleanup**: Deleted `start_server.sh`, `inventory.env.template`, and shell-based backup/restore scripts.
- **Script Unification**: Converted `backup.sh` and `restore.sh` to modern Python tools (`scripts/restore_prod.py`).
### 2. Verification ### 2. UI/UX "Premium" Fidelity Fixes
- **Backend SSL**: Verified reachable at `https://localhost:8918/` (Port 8916 upstream). - **Typography**: Removed all `font-weight: 600` and `font-medium` instances to comply with "NO BOLD" rule.
- **Frontend SSL**: Verified reachable at `https://localhost:8919/` (Port 8917 upstream). - **Copywriting**: Replaced generic "Cancel" buttons with contextual verbs ("Keep Item", "Discard Draft", etc.).
- **Service Status**: `run_standalone.py status` confirms all components are UP. - **Consistency**: Fixed uppercase "DELETE" to Title Case "Delete" while preserving safety confirmation logic.
### 3. Infrastructure Stability
- **LDAP Config**: Refactored `auth.py` to use `ConfigManager` for saving settings directly to `backend.yaml`, eliminating legacy JSON side-files.
- **Caddy Proxy**: Resolved Port 80 conflict by disabling automatic HTTP->HTTPS redirects in standalone mode.
--- ---
## NEXT STEPS (Phase 8: Hardening & Release) ## NEXT STEPS (Phase 8: Hardening & Release)
1. **End-to-End Testing**: 1. **Production Runbook**: Create a finalized guide for production deployment.
- Verify data consistency in multi-page Excel exports. 2. **Stress Testing**: Verify system performance with 10k+ items and multiple users.
- Stress test the new Python-based deployment scripts. 3. **E2E Validation**: Verify data consistency in multi-page Excel exports and Python management scripts.
4. **Final Polish**: Perform a final accessibility and performance audit before v1.15.0 stable release.
2. **UX Refinement**:
- Perform a final accessibility audit on the new Admin UI components.
- Ensure consistent loading states across all Admin panels.
3. **Production Preparation**:
- Finalize the production runbook.
- Prepare for the v1.15.0 "Stable" release milestone.
---
✓ All tasks for this session are implemented, verified, and committed.
✓ Services are currently RUNNING in the background.

View File

@@ -1,6 +1,6 @@
{ {
"version": "1.14.22", "version": "1.14.23",
"last_build": "2026-04-23-1616", "last_build": "2026-04-23-1823",
"codename": "ConfigCore", "codename": "ConfigCore",
"commit": "e5bb14d9" "commit": "7c4441a9"
} }

View File

@@ -448,7 +448,7 @@ export default function InventoryPage() {
/> />
</div> </div>
<div> <div>
<label className="text-sm font-normal text-secondary ml-1 tracking-tight">Size / Length</label> <label className="text-sm font-normal text-secondary ml-1 tracking-tight">Size / Length / Speed</label>
<input <input
type="text" type="text"
value={editedItem.size || ''} value={editedItem.size || ''}

View File

@@ -17,7 +17,7 @@ export default function StatCard({ label, value, icon: Icon }: StatCardProps) {
</span> </span>
</div> </div>
<span className="text-2xl md:text-3xl font-normal text-white whitespace-nowrap tabular-nums"> <span className="text-base md:text-lg font-normal text-white whitespace-nowrap tabular-nums">
{value} {value}
</span> </span>
</div> </div>