- Rename directory keep-notes -> memento-note with all code references - Prisma: SQLite -> PostgreSQL (both app and MCP server schemas) - Sync MCP schema with main app (add missing fields, relations, indexes) - Delete 17 SQLite migrations (clean slate for PostgreSQL) - Remove SQLite dependencies (@libsql/client, better-sqlite3, etc.) - Fix MCP server: hardcoded Windows DB paths -> DATABASE_URL env var - Fix MCP server: .dockerignore excluded index-sse.js (SSE mode broken) - MCP Dockerfile: node:20 -> node:22 - Docker Compose: add postgres service, remove SQLite volume - Generate favicon.ico, icon-192.png, icon-512.png, apple-icon.png - Update layout.tsx icons and manifest.json for PNG icons - Update all .env files for PostgreSQL - Rewrite README.md with updated sections - Remove mcp-server/node_modules and prisma/client-generated from git tracking Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
308 lines
10 KiB
TypeScript
308 lines
10 KiB
TypeScript
/**
|
|
* OPTIONS DE COULEURS MODERNES - PAS DE DÉGRADÉS
|
|
* =================================================
|
|
*
|
|
* Alternatives au bleu traditionnel pour un design contemporain
|
|
*/
|
|
|
|
// =============================================================================
|
|
// OPTION 1: GRIS-BLEU (SLATE) - RECOMMANDÉE ✅
|
|
// =============================================================================
|
|
/**
|
|
* Gris-bleu moderne et professionnel
|
|
* Inspiré par Linear, Vercel, GitHub
|
|
* Très élégant, discret et apaisant pour les yeux
|
|
*/
|
|
export const SLATE_THEME = {
|
|
name: 'Gris-Bleu (Slate)',
|
|
description: 'Moderne, professionnel et apaisant - comme Linear/Vercel',
|
|
|
|
light: {
|
|
// Backgrounds
|
|
background: 'oklch(0.985 0.003 230)', // Blanc grisâtre très léger
|
|
card: 'oklch(1 0 0)', // Blanc pur
|
|
sidebar: 'oklch(0.97 0.004 230)', // Gris-bleu très pâle
|
|
input: 'oklch(0.98 0.003 230)', // Gris-bleu pâle
|
|
|
|
// Textes
|
|
foreground: 'oklch(0.2 0.02 230)', // Gris-bleu foncé
|
|
'foreground-secondary': 'oklch(0.45 0.015 230)', // Gris-bleu moyen
|
|
'foreground-muted': 'oklch(0.6 0.01 230)', // Gris-bleu clair
|
|
|
|
// Primary (le point coloré de l'interface)
|
|
primary: 'oklch(0.45 0.08 230)', // Gris-bleu doux
|
|
'primary-hover': 'oklch(0.4 0.09 230)', // Gris-bleu plus foncé
|
|
'primary-foreground': 'oklch(0.99 0 0)', // Blanc
|
|
|
|
// Accents
|
|
accent: 'oklch(0.94 0.005 230)', // Gris-bleu très pâle
|
|
'accent-foreground': 'oklch(0.2 0.02 230)',
|
|
|
|
// Borders
|
|
border: 'oklch(0.9 0.008 230)', // Gris-bleu très clair
|
|
'border-hover': 'oklch(0.82 0.01 230)',
|
|
|
|
// Functional
|
|
success: 'oklch(0.65 0.15 145)', // Vert emerald
|
|
warning: 'oklch(0.75 0.12 70)', // Jaune/orange
|
|
destructive: 'oklch(0.6 0.18 25)', // Rouge
|
|
},
|
|
|
|
dark: {
|
|
// Backgrounds
|
|
background: 'oklch(0.14 0.005 230)', // Noir grisâtre léger
|
|
card: 'oklch(0.18 0.006 230)', // Gris-bleu foncé
|
|
sidebar: 'oklch(0.12 0.005 230)', // Noir grisâtre
|
|
input: 'oklch(0.2 0.006 230)',
|
|
|
|
// Textes
|
|
foreground: 'oklch(0.97 0.003 230)', // Blanc grisâtre
|
|
'foreground-secondary': 'oklch(0.75 0.008 230)',
|
|
'foreground-muted': 'oklch(0.55 0.01 230)',
|
|
|
|
// Primary
|
|
primary: 'oklch(0.55 0.08 230)', // Gris-bleu plus clair
|
|
'primary-hover': 'oklch(0.6 0.09 230)',
|
|
'primary-foreground': 'oklch(0.1 0 0)',
|
|
|
|
// Accents
|
|
accent: 'oklch(0.24 0.006 230)',
|
|
'accent-foreground': 'oklch(0.97 0.003 230)',
|
|
|
|
// Borders
|
|
border: 'oklch(0.28 0.01 230)',
|
|
'border-hover': 'oklch(0.38 0.012 230)',
|
|
|
|
// Functional
|
|
success: 'oklch(0.7 0.15 145)',
|
|
warning: 'oklch(0.8 0.12 70)',
|
|
destructive: 'oklch(0.65 0.18 25)',
|
|
},
|
|
} as const;
|
|
|
|
// =============================================================================
|
|
// OPTION 2: MONOCHROME GRIS (MINIMALISTE)
|
|
// =============================================================================
|
|
/**
|
|
* Noir et blanc avec subtilités de gris
|
|
* Style minimaliste ultra-moderne (Linear, Stripe, Apple)
|
|
* Absolument pas de couleur sauf pour les fonctionnalités
|
|
*/
|
|
export const MONOCHROME_THEME = {
|
|
name: 'Monochrome Gris',
|
|
description: 'Minimaliste et élégant - style Linear/Apple',
|
|
|
|
light: {
|
|
background: 'oklch(0.99 0 0)', // Blanc pur
|
|
card: 'oklch(1 0 0)', // Blanc pur
|
|
sidebar: 'oklch(0.96 0 0)', // Gris très pâle
|
|
input: 'oklch(0.98 0 0)',
|
|
|
|
foreground: 'oklch(0.15 0 0)', // Noir pur
|
|
'foreground-secondary': 'oklch(0.45 0 0)', // Gris moyen
|
|
'foreground-muted': 'oklch(0.6 0 0)', // Gris clair
|
|
|
|
primary: 'oklch(0.2 0 0)', // Gris foncé
|
|
'primary-hover': 'oklch(0.15 0 0)', // Noir
|
|
'primary-foreground': 'oklch(1 0 0)', // Blanc
|
|
|
|
accent: 'oklch(0.95 0 0)', // Gris très pâle
|
|
'accent-foreground': 'oklch(0.2 0 0)',
|
|
|
|
border: 'oklch(0.89 0 0)', // Gris très clair
|
|
'border-hover': 'oklch(0.75 0 0)',
|
|
|
|
success: 'oklch(0.6 0.15 145)', // Vert subtil
|
|
warning: 'oklch(0.7 0.12 70)', // Jaune subtil
|
|
destructive: 'oklch(0.55 0.18 25)', // Rouge subtil
|
|
},
|
|
|
|
dark: {
|
|
background: 'oklch(0.1 0 0)', // Noir pur
|
|
card: 'oklch(0.14 0 0)', // Gris très foncé
|
|
sidebar: 'oklch(0.08 0 0)', // Noir pur
|
|
input: 'oklch(0.16 0 0)',
|
|
|
|
foreground: 'oklch(0.98 0 0)', // Blanc pur
|
|
'foreground-secondary': 'oklch(0.7 0 0)', // Gris moyen
|
|
'foreground-muted': 'oklch(0.5 0 0)', // Gris foncé
|
|
|
|
primary: 'oklch(0.85 0 0)', // Gris clair
|
|
'primary-hover': 'oklch(0.9 0 0)', // Blanc
|
|
'primary-foreground': 'oklch(0.1 0 0)', // Noir
|
|
|
|
accent: 'oklch(0.2 0 0)', // Gris foncé
|
|
'accent-foreground': 'oklch(0.98 0 0)',
|
|
|
|
border: 'oklch(0.25 0 0)', // Gris foncé
|
|
'border-hover': 'oklch(0.35 0 0)',
|
|
|
|
success: 'oklch(0.65 0.15 145)',
|
|
warning: 'oklch(0.75 0.12 70)',
|
|
destructive: 'oklch(0.6 0.18 25)',
|
|
},
|
|
} as const;
|
|
|
|
// =============================================================================
|
|
// OPTION 3: VIOLET PROFOND (INDIGO)
|
|
// =============================================================================
|
|
/**
|
|
* Violet profond élégant et moderne
|
|
* Entre le bleu et le violet
|
|
* Très professionnel (Discord, Notion, Figma)
|
|
*/
|
|
export const INDIGO_THEME = {
|
|
name: 'Violet Profond',
|
|
description: 'Élégant et moderne - style Discord/Notion',
|
|
|
|
light: {
|
|
background: 'oklch(0.99 0.005 260)', // Blanc légèrement violacé
|
|
card: 'oklch(1 0 0)',
|
|
sidebar: 'oklch(0.96 0.006 260)',
|
|
input: 'oklch(0.97 0.005 260)',
|
|
|
|
foreground: 'oklch(0.2 0.015 260)', // Gris-violet foncé
|
|
'foreground-secondary': 'oklch(0.45 0.012 260)',
|
|
'foreground-muted': 'oklch(0.6 0.008 260)',
|
|
|
|
primary: 'oklch(0.55 0.18 260)', // Violet profond
|
|
'primary-hover': 'oklch(0.5 0.2 260)', // Violet plus foncé
|
|
'primary-foreground': 'oklch(0.99 0 0)',
|
|
|
|
accent: 'oklch(0.94 0.008 260)',
|
|
'accent-foreground': 'oklch(0.2 0.015 260)',
|
|
|
|
border: 'oklch(0.9 0.01 260)',
|
|
'border-hover': 'oklch(0.82 0.012 260)',
|
|
|
|
success: 'oklch(0.65 0.15 145)',
|
|
warning: 'oklch(0.75 0.12 70)',
|
|
destructive: 'oklch(0.6 0.18 25)',
|
|
},
|
|
|
|
dark: {
|
|
background: 'oklch(0.14 0.008 260)', // Noir légèrement violacé
|
|
card: 'oklch(0.18 0.01 260)', // Gris-violet foncé
|
|
sidebar: 'oklch(0.12 0.008 260)',
|
|
input: 'oklch(0.2 0.01 260)',
|
|
|
|
foreground: 'oklch(0.97 0.005 260)', // Blanc légèrement violacé
|
|
'foreground-secondary': 'oklch(0.75 0.008 260)',
|
|
'foreground-muted': 'oklch(0.55 0.01 260)',
|
|
|
|
primary: 'oklch(0.65 0.18 260)', // Violet plus clair
|
|
'primary-hover': 'oklch(0.7 0.2 260)',
|
|
'primary-foreground': 'oklch(0.1 0 0)',
|
|
|
|
accent: 'oklch(0.24 0.01 260)',
|
|
'accent-foreground': 'oklch(0.97 0.005 260)',
|
|
|
|
border: 'oklch(0.28 0.012 260)',
|
|
'border-hover': 'oklch(0.38 0.015 260)',
|
|
|
|
success: 'oklch(0.7 0.15 145)',
|
|
warning: 'oklch(0.8 0.12 70)',
|
|
destructive: 'oklch(0.65 0.18 25)',
|
|
},
|
|
} as const;
|
|
|
|
// =============================================================================
|
|
// OPTION 4: TEAL (TURQUOISE)
|
|
// =============================================================================
|
|
/**
|
|
* Turquoise/teal moderne et rafraîchissante
|
|
* Entre le bleu et le vert
|
|
* Très appréciée dans le design moderne (Linear, Atlassian)
|
|
*/
|
|
export const TEAL_THEME = {
|
|
name: 'Teal (Turquoise)',
|
|
description: 'Moderne et rafraîchissant - style Atlassian/Linear',
|
|
|
|
light: {
|
|
background: 'oklch(0.99 0.003 195)', // Blanc légèrement teinté
|
|
card: 'oklch(1 0 0)',
|
|
sidebar: 'oklch(0.96 0.004 195)',
|
|
input: 'oklch(0.97 0.003 195)',
|
|
|
|
foreground: 'oklch(0.2 0.015 195)', // Gris-teal foncé
|
|
'foreground-secondary': 'oklch(0.45 0.012 195)',
|
|
'foreground-muted': 'oklch(0.6 0.008 195)',
|
|
|
|
primary: 'oklch(0.55 0.14 195)', // Teal moderne
|
|
'primary-hover': 'oklch(0.5 0.16 195)', // Teal plus foncé
|
|
'primary-foreground': 'oklch(0.99 0 0)',
|
|
|
|
accent: 'oklch(0.94 0.005 195)',
|
|
'accent-foreground': 'oklch(0.2 0.015 195)',
|
|
|
|
border: 'oklch(0.9 0.008 195)',
|
|
'border-hover': 'oklch(0.82 0.01 195)',
|
|
|
|
success: 'oklch(0.65 0.15 145)',
|
|
warning: 'oklch(0.75 0.12 70)',
|
|
destructive: 'oklch(0.6 0.18 25)',
|
|
},
|
|
|
|
dark: {
|
|
background: 'oklch(0.14 0.005 195)', // Noir légèrement teinté
|
|
card: 'oklch(0.18 0.006 195)', // Gris-teal foncé
|
|
sidebar: 'oklch(0.12 0.005 195)',
|
|
input: 'oklch(0.2 0.006 195)',
|
|
|
|
foreground: 'oklch(0.97 0.003 195)', // Blanc légèrement teinté
|
|
'foreground-secondary': 'oklch(0.75 0.006 195)',
|
|
'foreground-muted': 'oklch(0.55 0.008 195)',
|
|
|
|
primary: 'oklch(0.65 0.14 195)', // Teal plus clair
|
|
'primary-hover': 'oklch(0.7 0.16 195)',
|
|
'primary-foreground': 'oklch(0.1 0 0)',
|
|
|
|
accent: 'oklch(0.24 0.006 195)',
|
|
'accent-foreground': 'oklch(0.97 0.003 195)',
|
|
|
|
border: 'oklch(0.28 0.01 195)',
|
|
'border-hover': 'oklch(0.38 0.012 195)',
|
|
|
|
success: 'oklch(0.7 0.15 145)',
|
|
warning: 'oklch(0.8 0.12 70)',
|
|
destructive: 'oklch(0.65 0.18 25)',
|
|
},
|
|
} as const;
|
|
|
|
// =============================================================================
|
|
// RÉSUMÉ DES OPTIONS
|
|
// =============================================================================
|
|
|
|
/**
|
|
* Comparaison des options :
|
|
*
|
|
* | Option | Modernité | Professionnalisme | Fatigue oculaire | Unicité |
|
|
* |--------|-----------|-------------------|------------------|----------|
|
|
* | Slate (Gris-Bleu) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
|
|
* | Monochrome | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
|
|
* | Indigo | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
|
|
* | Teal | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
|
|
*
|
|
* Recommandation : Slate (Gris-Bleu)
|
|
* - Le plus professionnel
|
|
* - Fatigue oculaire minimale
|
|
* - Très moderne et tendance
|
|
* - Différent du bleu traditionnel
|
|
* - Cohérent avec votre suggestion
|
|
*/
|
|
|
|
export type ThemeOption = 'slate' | 'monochrome' | 'indigo' | 'teal';
|
|
|
|
/**
|
|
* Pour choisir le thème :
|
|
*
|
|
* function getTheme(option: ThemeOption) {
|
|
* switch(option) {
|
|
* case 'slate': return SLATE_THEME;
|
|
* case 'monochrome': return MONOCHROME_THEME;
|
|
* case 'indigo': return INDIGO_THEME;
|
|
* case 'teal': return TEAL_THEME;
|
|
* }
|
|
* }
|
|
*/
|