Components Inventory - Elixir/Phoenix Implementation

A modern, idiomatic Elixir/Phoenix port of the original PHP-based component inventory management system.

Features

Improvements over the original PHP version:

  1. Modern Architecture

    • Phoenix LiveView for real-time, reactive UI without JavaScript
    • Ecto for type-safe database operations
    • Proper separation of concerns with Phoenix contexts
    • Built-in validation and error handling
  2. Enhanced User Experience

    • Real-time search with no page refreshes
    • Responsive design with Tailwind CSS
    • Loading states and better feedback
    • Improved mobile experience
  3. Better Data Management

    • Full-text search with PostgreSQL
    • Hierarchical categories with parent-child relationships
    • Proper foreign key constraints
    • Database migrations for schema management
  4. Security & Reliability

    • CSRF protection built-in
    • SQL injection prevention through Ecto
    • Session-based authentication
    • Input validation and sanitization

🔧 Core Functionality

  • Component Management: Add, edit, delete, and track electronic components
  • Inventory Tracking: Monitor component quantities with increment/decrement buttons
  • Search & Filter: Fast search across component names, descriptions, and keywords
  • Category Organization: Hierarchical category system for better organization
  • Category Management: Add, edit, delete categories through the web interface with hierarchical support
  • Datasheet Links: Direct links to component datasheets
  • Position Tracking: Track component storage locations
  • Real-time Updates: All changes are immediately reflected in the interface

Setup

  1. Install dependencies:

    mix deps.get
    
  2. Set up the database:

    mix ecto.create
    mix ecto.migrate
    mix run priv/repo/seeds.exs
    
  3. Start the server:

    mix phx.server
    
  4. Visit the application: Open http://localhost:4000

Authentication

The application uses a simple password-based authentication system:

  • Default password: changeme
  • Set custom password via environment variable: AUTH_PASSWORD=your_password

Database Schema

Categories

  • id: Primary key
  • name: Category name (required)
  • description: Optional description
  • parent_id: Foreign key for hierarchical categories
  • Supports unlimited nesting levels

Components

  • id: Primary key
  • name: Component name (required)
  • description: Detailed description
  • keywords: Search keywords
  • position: Storage location/position
  • count: Current quantity (default: 0)
  • datasheet_url: Optional link to datasheet
  • image_filename: Optional image file name
  • category_id: Required foreign key to categories

Architecture

Contexts

  • ComponentsElixir.Inventory: Business logic for components and categories
  • ComponentsElixir.Auth: Simple authentication system

Live Views

  • ComponentsElixirWeb.LoginLive: Authentication interface
  • ComponentsElixirWeb.ComponentsLive: Main component management interface
  • ComponentsElixirWeb.CategoriesLive: Category management interface

Key Features

  • Real-time updates: Changes are immediately reflected without page refresh
  • Infinite scroll: Load more components as needed
  • Search optimization: Uses PostgreSQL full-text search for long queries, ILIKE for short ones
  • Responsive design: Works on desktop and mobile devices

API Comparison

Original PHP New Elixir/Phoenix Improvement
getItems.php Inventory.list_components/1 Type-safe, composable queries
getCategories.php Inventory.list_categories/0 Proper associations, hierarchical support
addItem.php Inventory.create_component/1 Built-in validation, changesets
Manual editing Inventory.update_component/2 NEW: Full edit functionality with validation
changeAmount.php Inventory.update_component_count/2 Atomic operations, constraints
Manual category management CategoriesLive + Inventory.create_category/1 NEW: Full category CRUD with web interface
imageUpload.php (Future: Phoenix file uploads) Planned improvement
Session management Phoenix sessions + LiveView Built-in CSRF protection

Future Enhancements

  1. Image Upload: Implement Phoenix file uploads for component images
  2. Bulk Operations: Import/export components via CSV
  3. API Endpoints: REST API for external integrations
  4. User Management: Multi-user support with roles and permissions
  5. Advanced Search: Filters by category, stock level, etc.
  6. Barcode/QR Codes: Generate and scan codes for quick inventory updates

Development

Running Tests

mix test

Code Quality

mix format
mix credo

Database Management

# Reset database
mix ecto.reset

# Add new migration
mix ecto.gen.migration add_feature

# Check migration status
mix ecto.migrations

Deployment

For production deployment:

  1. Set environment variables:

    export AUTH_PASSWORD=your_secure_password
    export SECRET_KEY_BASE=your_secret_key
    export DATABASE_URL=postgresql://user:pass@host/db
    
  2. Build release:

    MIX_ENV=prod mix release
    
  3. Run migrations:

    _build/prod/rel/components_elixir/bin/components_elixir eval "ComponentsElixir.Release.migrate"
    

Contributing

This is a modernized, idiomatic Elixir/Phoenix implementation that maintains feature parity with the original PHP version while providing significant improvements in code quality, security, and user experience.

The application follows Phoenix and Elixir best practices:

  • Contexts for business logic
  • LiveView for interactive UI
  • Ecto for database operations
  • Comprehensive error handling
  • Input validation and sanitization
Description
A modern, comprehensive electronic component inventory management system built with Elixir/Phoenix LiveView.
Readme 691 KiB
Languages
Elixir 75.1%
PostScript 16.7%
HTML 4.5%
CSS 1.3%
JavaScript 1.1%
Other 1.3%