feat: implement label management with sidebar, hacker theme, and Docker support

- Add label selection on chart with visual highlight (size 2x, color change)
- Implement keyboard delete handler (Delete/Backspace keys)
- Add comprehensive label management sidebar with:
  - Collapsible label annotations section
  - Search by timestamp
  - Filter by type (Break Up, Break Down, All)
  - Individual delete buttons
  - Count display
  - Click to select/highlight on chart
- Transform UI with hacker theme:
  - Matrix green (#00ff41) on dark background (#0a0e0a)
  - Monospace font (JetBrains Mono)
  - Glow effects on button hover and active states
  - Custom scrollbar styling
  - Terminal-inspired aesthetic
- Add Docker deployment:
  - Multi-stage Dockerfile with standalone output
  - docker-compose.yml with volume persistence
  - Non-root user (nextjs) for security
  - Health check endpoint integration
- Tailwind and CSS enhancements:
  - Custom colors (matrix, matrixDim, neonRed, etc.)
  - Glow box shadows and animations
  - Selection and scrollbar styling
This commit is contained in:
Marko Djordjevic 2026-02-12 15:12:59 +01:00
parent 74b84073a9
commit a1fa86fe55
14 changed files with 509 additions and 42 deletions

View file

@ -4,25 +4,25 @@
@layer base {
:root {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
--card: 222.2 84% 4.9%;
--card-foreground: 210 40% 98%;
--popover: 222.2 84% 4.9%;
--popover-foreground: 210 40% 98%;
--primary: 217.2 91.2% 59.8%;
--primary-foreground: 222.2 47.4% 11.2%;
--secondary: 217.2 32.6% 17.5%;
--secondary-foreground: 210 40% 98%;
--muted: 217.2 32.6% 17.5%;
--muted-foreground: 215 20.2% 65.1%;
--accent: 217.2 32.6% 17.5%;
--accent-foreground: 210 40% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 210 40% 98%;
--border: 217.2 32.6% 17.5%;
--input: 217.2 32.6% 17.5%;
--ring: 224.3 76.3% 48%;
--background: 120 100% 4%;
--foreground: 120 100% 50%;
--card: 120 100% 6%;
--card-foreground: 120 100% 50%;
--popover: 120 100% 4%;
--popover-foreground: 120 100% 50%;
--primary: 120 100% 50%;
--primary-foreground: 120 100% 4%;
--secondary: 120 100% 8%;
--secondary-foreground: 120 100% 50%;
--muted: 120 100% 10%;
--muted-foreground: 120 100% 40%;
--accent: 120 100% 50%;
--accent-foreground: 120 100% 4%;
--destructive: 348 100% 50%;
--destructive-foreground: 120 100% 4%;
--border: 120 100% 10%;
--input: 120 100% 8%;
--ring: 120 100% 50%;
--radius: 0.5rem;
}
}
@ -33,6 +33,24 @@
}
body {
@apply bg-background text-foreground;
font-family: Arial, Helvetica, sans-serif;
font-family: 'JetBrains Mono', 'Fira Code', 'Courier New', monospace;
}
}
@layer base {
::selection {
@apply bg-matrix/40 text-matrix;
}
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
@apply bg-matrixDark;
}
::-webkit-scrollbar-thumb {
@apply bg-matrix rounded;
}
}