Vadym Samoilenko
45c6b2e720
design: comprehensive dark theme UI refresh (ui-ux-pro-max)
...
- index.css: new OLED-optimised CSS variables (rgba borders, layered
backgrounds, --ease/--duration tokens), global cursor:pointer on
buttons, focus-visible ring, input focus glow, .ac-card utility
- Sidebar: replace emoji icons with inline SVGs, add Dashboard/Upload
nav links with active states, + button for new sheet, better
sheet-item active treatment, polished context menu
- TopBar: SVG chevron back button, user avatar initials pill,
fixed 52px height, consistent spacing
- DashboardPage: hover lift on action cards, rgba-border sheet list,
dashed empty states, SVG icons
- SheetPage: sticky sub-header with saving indicator
- CommandBar: SVG mic + send icons, pill quick-starter chips,
rounded-lg inputs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 14:55:20 +00:00
Vadym Samoilenko
f42a390e8b
fix: improve dark theme contrast and add navigation back button
...
- index.css: bump text-secondary #888→#b0b0b0, text-muted #555→#787878,
border slightly lighter for better readability on dark backgrounds
- TopBar: add '← Dashboard' back button on all non-dashboard pages
- Sidebar: make AC logo clickable to navigate home
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 14:50:07 +00:00
Vadym Samoilenko
0b2b61ee2d
fix: call fetchMe after token acquire regardless of loading state
...
loading starts as true in the store, so the previous condition
`!user && !loading` prevented fetchMe from ever being called after
the Azure AD redirect — causing a permanent Loading spinner.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 14:46:43 +00:00
Vadym Samoilenko
08710e1a16
fix: verify JWT signature via JWKS and fix auth dev bypass condition
...
- msal_auth.py: replace verify_signature=False with real JWKS verification
using PyJWKClient; validates RS256 signature, aud=clientId, issuer v2.0
- App.tsx: split DEV bypass from empty-accounts case — in production,
accounts.length === 0 now correctly triggers loginRedirect instead of
calling fetchMe without a token
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 14:44:22 +00:00
Vadym Samoilenko
dc1add0b1b
fix: always call fetchMe() on mount — loading:true blocked initial auth check
2026-03-23 14:37:10 +00:00
Vadym Samoilenko
15bf9d3935
feat: add full AI provider config to .env.example and docker-compose
...
- All OpenAI, Gemini, Anthropic model/timeout/temperature settings
- Brief extraction processing config (models, cost limits, concurrency)
- File upload and WebSocket settings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 14:30:16 +00:00
Vadym Samoilenko
16bc9d0c0d
fix: run git pull as SUDO_USER to use correct SSH keys
2026-03-23 14:25:44 +00:00
Vadym Samoilenko
dad8f7573a
Add deploy script, .env.example, and Apache reverse proxy config
...
- deploy.sh: idempotent Ubuntu deployment (git pull → docker build →
extract frontend → copy to /var/www/html/ac-helper/ → restart container)
- .env.example: production template with APP_PORT=8100
- docker-compose.yml: port now ${APP_PORT:-8100}:8000, updated proxy
comment to Apache VirtualHost snippet
- .gitignore: whitelist .env.example
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 14:05:33 +00:00
Vadym Samoilenko
38a550bd5f
Phase 8: Polish — error boundaries, loading states, Handsontable v17 fixes
...
- ErrorBoundary component for top-level render error recovery
- SheetPage: sheetError + loading states before table render
- main.tsx: registerAllModules() for Handsontable v17
- index.html: Montserrat font preconnect
- App.tsx: AdminRoute + ErrorBoundary wrappers
- .gitignore: exclude *.bak files
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 13:36:12 +00:00
Vadym Samoilenko
72c50b2c92
Initial commit — AC Tool unified application
...
Merges ac-helper (PHP Activation Calendar) and brief-extractor (Python AI)
into a single Docker app with React/TypeScript frontend.
Features:
- Brief upload → AI extraction → review → Activation Calendar import
- Handsontable v17 spreadsheet with dependent dropdowns (148 categories)
- AI natural language commands via Gemini (YOLO mode, voice input)
- Azure AD MSAL SPA PKCE authentication, user roles (user/admin)
- CSV Activation Calendar export
- Real-time WebSocket job progress
- Admin: user management, dropdown Excel upload
- Multi-stage Dockerfile, docker-compose, nginx proxy instructions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 13:24:46 +00:00