Production-ready improvements: security hardening, Redis sessions, retry logic, updated pricing
Changes: - Removed hardcoded admin credentials (now requires env vars) - Added Redis session storage with in-memory fallback - Improved CORS configuration with warnings for development mode - Added retry_with_backoff decorator for translation API calls - Updated pricing: Starter=, Pro=, Business= - Stripe price IDs now loaded from environment variables - Added redis to requirements.txt - Updated .env.example with all new configuration options - Created COMPREHENSIVE_REVIEW_AND_PLAN.md with deployment roadmap - Frontend: Updated pricing page, new UI components
This commit is contained in:
134
frontend/tailwind.config.js
Normal file
134
frontend/tailwind.config.js
Normal file
@@ -0,0 +1,134 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
module.exports = {
|
||||
content: [
|
||||
"./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
|
||||
"./src/components/**/*.{js,ts,jsx,tsx,mdx}",
|
||||
"./src/app/**/*.{js,ts,jsx,tsx,mdx}",
|
||||
],
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
// Enhanced Dark Theme Colors
|
||||
background: '#0a0a0a',
|
||||
surface: '#141414',
|
||||
'surface-elevated': '#1a1a1a',
|
||||
'surface-hover': '#1f1f1f',
|
||||
foreground: '#fafafa',
|
||||
'text-primary': '#fafafa',
|
||||
'text-secondary': '#a1a1aa',
|
||||
'text-tertiary': '#71717a',
|
||||
'text-inverse': '#0a0a0a',
|
||||
'text-muted': '#71717a',
|
||||
|
||||
card: '#141414',
|
||||
'card-foreground': '#fafafa',
|
||||
popover: '#141414',
|
||||
'popover-foreground': '#fafafa',
|
||||
|
||||
primary: '#3b82f6',
|
||||
'primary-hover': '#2563eb',
|
||||
'primary-light': '#60a5fa',
|
||||
'primary-foreground': '#ffffff',
|
||||
|
||||
accent: '#8b5cf6',
|
||||
'accent-hover': '#7c3aed',
|
||||
'accent-foreground': '#ffffff',
|
||||
|
||||
secondary: '#272727',
|
||||
'secondary-foreground': '#fafafa',
|
||||
|
||||
muted: '#1f1f1f',
|
||||
'muted-foreground': '#71717a',
|
||||
|
||||
border: '#272727',
|
||||
'border-subtle': '#1f1f1f',
|
||||
'border-strong': '#2f2f2f',
|
||||
input: '#272727',
|
||||
|
||||
destructive: '#ef4444',
|
||||
'destructive-foreground': '#ffffff',
|
||||
success: '#10b981',
|
||||
'success-foreground': '#ffffff',
|
||||
warning: '#f59e0b',
|
||||
'warning-foreground': '#000000',
|
||||
|
||||
ring: '#3b82f6',
|
||||
'ring-offset': '#0a0a0a',
|
||||
|
||||
sidebar: '#0f0f0f',
|
||||
'sidebar-foreground': '#fafafa',
|
||||
'sidebar-primary': '#3b82f6',
|
||||
'sidebar-primary-foreground': '#ffffff',
|
||||
'sidebar-accent': '#272727',
|
||||
'sidebar-accent-foreground': '#fafafa',
|
||||
'sidebar-border': '#1f1f1f',
|
||||
'sidebar-ring': '#3b82f6',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'system-ui', '-apple-system', 'sans-serif'],
|
||||
mono: ['JetBrains Mono', 'SF Mono', 'Monaco', 'Cascadia Code', 'monospace'],
|
||||
},
|
||||
fontSize: {
|
||||
xs: '0.75rem', // 12px
|
||||
sm: '0.875rem', // 14px
|
||||
base: '1rem', // 16px
|
||||
lg: '1.125rem', // 18px
|
||||
xl: '1.25rem', // 20px
|
||||
'2xl': '1.5rem', // 24px
|
||||
'3xl': '1.875rem', // 30px
|
||||
'4xl': '2.25rem', // 36px
|
||||
'5xl': '3rem', // 48px
|
||||
'6xl': '3.75rem', // 60px
|
||||
},
|
||||
lineHeight: {
|
||||
tight: '1.25',
|
||||
normal: '1.5',
|
||||
relaxed: '1.625',
|
||||
},
|
||||
spacing: {
|
||||
xs: '0.25rem', // 4px
|
||||
sm: '0.5rem', // 8px
|
||||
md: '0.75rem', // 12px
|
||||
lg: '1rem', // 16px
|
||||
xl: '1.5rem', // 24px
|
||||
'2xl': '2rem', // 32px
|
||||
'3xl': '3rem', // 48px
|
||||
'4xl': '4rem', // 64px
|
||||
},
|
||||
borderRadius: {
|
||||
sm: 'calc(var(--radius) - 4px)',
|
||||
md: 'calc(var(--radius) - 2px)',
|
||||
lg: 'var(--radius)',
|
||||
xl: 'calc(var(--radius) + 4px)',
|
||||
},
|
||||
boxShadow: {
|
||||
sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',
|
||||
md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',
|
||||
lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',
|
||||
xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',
|
||||
glow: '0 0 20px rgb(59 130 246 / 0.15)',
|
||||
},
|
||||
animationDuration: {
|
||||
fast: '150ms',
|
||||
normal: '200ms',
|
||||
slow: '300ms',
|
||||
slower: '500ms',
|
||||
},
|
||||
animationTimingFunction: {
|
||||
easeOut: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
|
||||
easeIn: 'cubic-bezier(0.55, 0.055, 0.675, 0.19)',
|
||||
easeInOut: 'cubic-bezier(0.645, 0.045, 0.355, 1)',
|
||||
},
|
||||
screens: {
|
||||
xs: '640px',
|
||||
sm: '768px',
|
||||
md: '1024px',
|
||||
lg: '1280px',
|
||||
xl: '1440px',
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
require('@tailwindcss/postcss'),
|
||||
],
|
||||
}
|
||||
Reference in New Issue
Block a user