feat: implement secure multi-tenancy, RBAC, and premium dark mode
All checks were successful
Build and Deploy / build-and-push (push) Successful in 1m54s

- Enforced tenant isolation and Role-Based Access Control across all API routes

- Implemented secure profile avatar upload using multer and UUIDs

- Redesigned UI with a premium "Onyx & Gold" Charcoal dark mode

- Added Funnel Stage and Origin filters to Dashboard and User Detail pages

- Replaced "Referral" with "Indicação" across the platform and database

- Optimized Dockerfile and local environment setup for reliable deployments

- Fixed frontend syntax errors and improved KPI/Chart visualizations
This commit is contained in:
Cauê Faleiros
2026-03-03 17:16:55 -03:00
parent b7e73fce3d
commit 20bdf510fd
32 changed files with 2810 additions and 1140 deletions

View File

@@ -111,7 +111,7 @@ export const USERS: User[] = [
];
const generateMockAttendances = (count: number): Attendance[] => {
const origins = ['WhatsApp', 'Instagram', 'Website', 'LinkedIn', 'Referral'] as const;
const origins = ['WhatsApp', 'Instagram', 'Website', 'LinkedIn', 'Indicação'] as const;
const stages = Object.values(FunnelStage);
const products = ['Plano Premium', 'Plano Básico', 'Suíte Enterprise', 'Consultoria'];
@@ -163,9 +163,36 @@ export const MOCK_ATTENDANCES = generateMockAttendances(300);
// Visual Constants
export const COLORS = {
primary: '#facc15', // Yellow-400
secondary: '#1e293b', // Slate-800
success: '#22c55e',
warning: '#f59e0b',
danger: '#ef4444',
charts: ['#3b82f6', '#10b981', '#6366f1', '#f59e0b', '#ec4899', '#8b5cf6'],
secondary: '#18181b', // Zinc-900
success: '#10b981', // Emerald-500
warning: '#f59e0b', // Amber-500
danger: '#ef4444', // Red-500
// Prettier, modern SaaS palette for general charts
charts: [
'#818cf8', // Soft Indigo
'#4ade80', // Soft Emerald
'#fb923c', // Soft Orange
'#22d3ee', // Soft Cyan
'#f472b6', // Soft Pink
'#a78bfa' // Soft Violet
],
// Brand-specific colors for Lead Origins
origins: {
'WhatsApp': '#25D366',
'Instagram': '#E4405F',
'LinkedIn': '#0077B5',
'Website': '#f87171', // Coral Red (Distinct from LinkedIn blue)
'Indicação': '#f59e0b'
},
// Semantic palette for Funnel Stages
funnel: {
'Sem atendimento': '#64748b', // Slate-500
'Identificação': '#818cf8', // Indigo-400
'Negociação': '#fb923c', // Orange-400
'Ganhos': '#10b981', // Emerald-500
'Perdidos': '#f87171' // Red-400
}
};