# Filamenteka

A web application for tracking Bambu Lab filament inventory with automatic color coding.

## Features

- Automatic Color Coding - Table rows are automatically colored based on filament colors
- Search & Filter - Quick search across all filament properties
- Sortable Columns - Click headers to sort by any column
- Gradient Support - Special handling for gradient filaments like Cotton Candy Cloud
- Responsive Design - Works on desktop and mobile devices
- Sale Management - Bulk sale pricing with countdown timers
- Admin Panel - Protected dashboard for inventory management
- Spool Types - Support for both regular and refill spools

## Technology Stack

- **Frontend**: Next.js + React + TypeScript + Tailwind CSS
- **Backend**: Node.js API server (Express)
- **Database**: PostgreSQL (AWS RDS)
- **Infrastructure**: AWS CloudFront + S3 (Frontend), EC2 (API), RDS (Database)
- **CI/CD**: Gitea Actions
- **IaC**: Terraform

## Prerequisites

- Node.js 18+ and npm
- PostgreSQL (for local development)
- AWS Account (for deployment)
- Terraform 1.0+ (for infrastructure)

## Setup Instructions

### 1. Clone the Repository

```bash
git clone https://git.demirix.dev/DaX/Filamenteka.git
cd Filamenteka
```

### 2. Install Dependencies

```bash
npm install
```

### 3. Environment Setup

Create a `.env.local` file for local development:

```bash
NEXT_PUBLIC_API_URL=http://localhost:4000/api
```

### 4. Deploy with Terraform

```bash
cd terraform
cp terraform.tfvars.example terraform.tfvars
# Edit terraform.tfvars with your values

terraform init
terraform plan
terraform apply
```

## Local Development

```bash
# Run development server
npm run dev

# Run tests
npm test

# Run linting
npm run lint

# Check for security issues
npm run security:check
```

Visit http://localhost:3000 to see the app.

## Table Format

The filament table displays these columns:
- **Tip** - Material type (e.g., PLA, PETG, ABS)
- **Finish** - Finish type (e.g., Basic, Matte, Silk)
- **Boja** - Color name (e.g., Mistletoe Green, Hot Pink)
- **Refill** - Number of refill spools
- **Spulna** - Number of regular spools
- **Kolicina** - Total quantity (refill + spulna)
- **Cena** - Price per unit
- **Sale** - Active sale percentage and end date

## Color Mapping

The app includes mappings for common Bambu Lab colors:
- Basic colors: Red, Blue, Green, Yellow, etc.
- Special colors: Mistletoe Green, Indigo Purple, Hot Pink, etc.
- Gradient filaments: Cotton Candy Cloud
- Matte finishes: Scarlet Red, Marine Blue, etc.

Unknown colors default to light gray.

## Deployment

Pushing to `main` triggers automatic deployment via Gitea Actions:
- Frontend changes are built, tested, and deployed to S3/CloudFront
- API changes are deployed to EC2 via AWS SSM

Manual deployment is also available:

```bash
# Frontend
./scripts/deploy-frontend.sh

# API
./scripts/deploy-api-update.sh
```

## Admin Panel

Access the admin panel at `/upadaj` for:
- Managing filament inventory
- Adding/editing/deleting filaments
- Managing color definitions and pricing
- Bulk sale management

## Adding New Colors

Colors can be managed through:
1. **Admin Panel**: Navigate to `/upadaj/colors` to add colors via UI
2. **Code**: Edit `src/data/bambuLabColors.ts` for frontend color display:

```typescript
export const bambuLabColors: Record<string, ColorMapping> = {
  // ... existing colors
  'New Color Name': { hex: '#HEXCODE' },
};
```

## Database Migrations

Run database migrations:

```bash
# Run all pending migrations
npm run migrate

# Clear migration history (development only)
npm run migrate:clear
```

## API Deployment

Deploy API server updates:

```bash
# Use the deployment script
./scripts/deploy-api-update.sh
```

## Troubleshooting

### Color Not Showing
- Check if the color name matches exactly in the database
- Ensure color exists in `colors` table
- Add the color mapping to `bambuLabColors.ts`
- Colors are case-insensitive but spelling must match

### Build Errors
- Run `npm run test:build` to verify build succeeds
- Check TypeScript errors with `npx tsc --noEmit`
- Ensure all environment variables are set

### Database Connection Issues
- Verify PostgreSQL is running
- Check connection string in environment variables
- Ensure database migrations have been run

## License

MIT
