UMBRA/frontend
Kyle Pope dbad9c69b3 Phase 1: Docker infrastructure optimization
- Add .dockerignore for backend and frontend (DC-1: eliminates node_modules/
  and .env from build context)
- Delete start.sh with --reload flag (DC-2: superseded by Dockerfile CMD)
- Create entrypoint.sh with exec uvicorn (DW-5: proper PID 1 signal handling)
- Pin base images to patch-level tags (DW-1: reproducible builds)
- Reorder Dockerfile: create appuser before COPY, use --chown (DW-2)
- Switch to npm ci for lockfile-enforced installs (DW-3)
- Add network segmentation: backend_net + frontend_net (DW-4: db unreachable
  from frontend container)
- Add deploy.resources limits to all services (DW-6: OOM protection)
- Refactor proxy-params.conf to include security headers, deduplicate from
  nginx.conf location blocks (DW-7)
- Add image/svg+xml to gzip_types (DS-1)
- Add wget healthcheck for frontend service (DS-2)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 00:03:46 +08:00
..
2026-02-15 16:13:41 +08:00
2026-02-15 16:13:41 +08:00
2026-02-15 16:13:41 +08:00
2026-02-15 16:13:41 +08:00
2026-02-15 16:13:41 +08:00
2026-02-15 16:13:41 +08:00

UMBRA Frontend

A modern, dark-themed React application for managing your life - todos, calendar events, reminders, projects, people, and locations.

Tech Stack

  • React 18 with TypeScript
  • Vite for fast builds
  • Tailwind CSS v3 for styling
  • shadcn/ui components (manually implemented)
  • React Router v6 for routing
  • TanStack Query v5 for data fetching
  • Axios for HTTP requests
  • FullCalendar for calendar view
  • Lucide React for icons
  • date-fns for date formatting
  • sonner for toast notifications

Features

  • PIN-based authentication with setup wizard
  • Dark theme with customizable accent colors (cyan, blue, purple, orange, green)
  • Dashboard with stats and widgets
  • Todos with priority, category, and recurrence
  • Calendar with event management
  • Reminders with dismiss functionality
  • Projects with tasks and progress tracking
  • People management with relationships
  • Locations categorization
  • Responsive design with collapsible sidebar

Getting Started

Prerequisites

  • Node.js 20 or higher
  • npm or yarn

Installation

# Install dependencies
npm install

# Start development server
npm run dev

# Build for production
npm run build

# Preview production build
npm run preview

Development

The application expects a backend API at /api. During development, Vite proxies /api requests to http://localhost:8000.

Project Structure

frontend/
├── src/
│   ├── components/
│   │   ├── auth/          # Authentication components
│   │   ├── calendar/      # Calendar page and forms
│   │   ├── dashboard/     # Dashboard widgets
│   │   ├── layout/        # Layout components (sidebar, etc)
│   │   ├── locations/     # Locations management
│   │   ├── people/        # People management
│   │   ├── projects/      # Projects and tasks
│   │   ├── reminders/     # Reminders management
│   │   ├── settings/      # Settings page
│   │   ├── todos/         # Todos management
│   │   └── ui/            # shadcn/ui components
│   ├── hooks/             # Custom React hooks
│   ├── lib/               # Utilities (API client, utils)
│   ├── types/             # TypeScript type definitions
│   ├── App.tsx            # Main app with routing
│   ├── main.tsx           # Entry point
│   └── index.css          # Global styles
├── Dockerfile             # Production Docker image
├── nginx.conf             # Nginx configuration
└── package.json

Docker Deployment

Build and run with Docker:

# Build image
docker build -t umbra-frontend .

# Run container
docker run -p 80:80 umbra-frontend

Environment Variables

No environment variables required. API base URL is configured to /api and proxied by nginx in production.

Customization

Accent Colors

Accent colors are defined in src/hooks/useTheme.ts and can be changed in Settings. The application uses CSS custom properties for theming.

Adding New Pages

  1. Create component in src/components/<feature>/
  2. Add route in src/App.tsx
  3. Add navigation item in src/components/layout/Sidebar.tsx

License

Private project - all rights reserved.