-```
-
-**Problèmes :**
-- Le texte ne s'adapte pas toujours à la couleur de la note
-- Les bordures sont hardcoded dans chaque couleur
-- Manque de flexibilité
-
-### Après
-```tsx
-
-
{content}
-
-```
-
-**Avantages :**
-- Texte automatiquement adapté à la couleur de fond
-- Gestion centralisée des bordures
-- Support dark mode par défaut
-- Extensible facilement
-
----
-
-## 🎨 Visualisation des Palettes
-
-### Thème Light Mode
-```
-┌─────────────────────────────────────────┐
-│ Background ████████ #FFFFFF │
-│ Card ████████ #FFFFFF │
-│ Sidebar ████████ #F5F6F8 │
-│ Primary ████████ #356AC0 │ ← Bleu Keep
-│ Text ████████ #2D3748 │
-└─────────────────────────────────────────┘
-```
-
-### Thème Dark Mode
-```
-┌─────────────────────────────────────────┐
-│ Background ████████ #1A202C │
-│ Card ████████ #2D3748 │
-│ Sidebar ████████ #171923 │
-│ Primary ████████ #4A7FD4 │
-│ Text ████████ #F7FAFC │
-└─────────────────────────────────────────┘
-```
-
-### Palette de Notes (mode light)
-```
-┌─────────────────────────────────────────────────────────────┐
-│ Default ████████████ White │
-│ Red ████████████ #FEF2F2 (red-50) │
-│ Orange ████████████ #FFF7ED (orange-50) │
-│ Yellow ████████████ #FEFCE8 (yellow-50) │
-│ Green ████████████ #ECFDF5 (emerald-50) │
-│ Teal ████████████ #F0FDFA (teal-50) │
-│ Blue ████████████ #EFF6FF (blue-50) │
-│ Indigo ████████████ #EEF2FF (indigo-50) │
-│ Violet ████████████ #F5F3FF (violet-50) │
-│ Purple ████████████ #FAF5FF (purple-50) │
-│ Pink ████████████ #FDF2F8 (pink-50) │
-│ Rose ████████████ #FFF1F2 (rose-50) │
-│ Gray ████████████ #F5F5F4 (neutral-100) │
-└─────────────────────────────────────────────────────────────┘
-```
-
----
-
-## 🚀 Avantages de la Proposition
-
-### 1. Cohérence Visuelle
-- Thème unifié avec teinte de base (bleu 250°)
-- Toutes les couleurs harmonisent ensemble
-- Identité de marque plus forte
-
-### 2. Meilleure Accessibilité
-- Respect WCAG AA+ (contraste ≥ 4.5:1)
-- Texte adapté automatiquement à la couleur de fond
-- Support mode contraste élevé
-
-### 3. Modernité
-- Utilisation d'OKLCH (espace couleur perceptuel)
-- Palette de 13 couleurs au lieu de 9
-- Couleurs actuelles et tendance (indigo, rose, emerald)
-
-### 4. Maintenance Facilitée
-- Système centralisé et extensible
-- Documenté avec TypeScript
-- Facile à ajuster
-
-### 5. Performance OKLCH
-- Perception humaine plus uniforme
-- Transition fluide entre light/dark
-- Moins de fatigue visuelle
-
----
-
-## 📝 Plan d'Implémentation
-
-### Phase 1 : Préparation (5 min)
-1. ✅ Créer le fichier `color-harmony-recommendation.ts`
-2. ✅ Documenter la proposition dans ce fichier
-
-### Phase 2 : Migration (30 min)
-1. Mettre à jour `keep-notes/app/globals.css`
-2. Mettre à jour `keep-notes/lib/types.ts`
-3. Mettre à jour les composants concernés
-
-### Phase 3 : Tests (15 min)
-1. Tester en mode light
-2. Tester en mode dark
-3. Tester chaque couleur de note
-4. Vérifier les contrastes WCAG
-
-### Phase 4 : Ajustements (optionnel)
-1. Affiner selon vos préférences
-2. Ajouter d'autres couleurs si nécessaire
-3. Ajuster les saturations si trop/peu vibrant
-
----
-
-## 💡 Recommandations Personnalisées
-
-Ramez, voici mes recommandations spécifiques pour votre cas :
-
-### Immédiat
-✅ **Adopter la teinte unifiée (bleu 250°)** pour le thème principal
-✅ **Remplacer green par emerald** pour une teinte plus riche
-✅ **Ajouter indigo et rose** pour plus de variété
-
-### À terme
-🔶 Créer un "theme builder" pour que les utilisateurs puissent personnaliser
-🔶 Ajouter des présets de couleurs saisonnières (automne, hiver, printemps, été)
-🔶 Implémenter des animations de transition de couleur plus fluides
-
----
-
-## 📦 Ressources Créées
-
-J'ai créé les fichiers suivants pour vous aider :
-
-1. **`keep-notes/lib/color-harmony-recommendation.ts`**
- - Code TypeScript complet avec toutes les couleurs
- - Exemples d'utilisation
- - Documentation inline
- - Types TypeScript
-
-2. **`keep-notes/PROPOSITION-COULEURS.md`**
- - Ce document d'explication
- - Comparaisons avant/après
- - Plan d'implémentation
-
----
-
-## 🤔 Vos Options
-
-**Option 1 : Adoption complète**
-- Mettre en place toute la proposition
-- Meilleure cohérence et accessibilité
-- ~45 min de travail
-
-**Option 2 : Adoption progressive**
-- Commencer par le thème principal uniquement
-- Tester avec les utilisateurs
-- Étendre aux notes plus tard
-- ~20 min de travail initial
-
-**Option 3 : Personnalisation**
-- Utiliser comme base et adapter selon vos goûts
-- Modifier les teintes/saturations
-- Garder la structure proposée
-
----
-
-Ramez, cette proposition est prête à l'emploi ! 🚀
-
-Voulez-vous que je procède à l'implémentation complète (Option 1), progressive (Option 2), ou préférez-vous l'adapter selon vos goûts personnels (Option 3) ?
-
----
-*Analyse et proposition créées par Amelia - Developer Agent* 💻
diff --git a/keep-notes/PROPOSITION-SLATE-MODERNE.md b/keep-notes/PROPOSITION-SLATE-MODERNE.md
deleted file mode 100644
index 7569201..0000000
--- a/keep-notes/PROPOSITION-SLATE-MODERNE.md
+++ /dev/null
@@ -1,242 +0,0 @@
-# 🎨 Proposition : Gris-Bleu (Slate) Moderne
-
-Ramez, excellente idée ! Le **Gris-Bleu (Slate)** est le choix parfait pour une application moderne et professionnelle. C'est élégant, discret et ne fatigue absolument pas les yeux.
-
----
-
-## 🎯 Pourquoi le Slate (Gris-Bleu) ?
-
-### ✅ Avantages majeurs
-
-1. **Ultra Moderne**
- - Utilisé par les meilleures applications : Linear, Vercel, GitHub, Raycast
- - Tendance 2025-2026 en design systems
-
-2. **Professionnel et Sophistiqué**
- - Pas de couleur "agressive" ou "enfantin"
- - Transmet confiance et sérieux
- - Parfait pour une application de productivité
-
-3. **Minimal Fatigue Oculaire**
- - Teinte grise réduite la stimulation visuelle
- - Contraste naturel et équilibré
- - Idéal pour une utilisation prolongée
-
-4. **Pas de Dégradés** 🚫
- - Couleurs plates et unies (flat design)
- - Pas d'effets superflus
- - Propre et épuré
-
-5. **Différent du Bleu Traditionnel**
- - Plus subtil et élégant
- - Ne ressemble pas aux apps "corporate"
- - Identité unique
-
----
-
-## 🎨 Palette Slate Complète
-
-### Code Couleur OKLCH
-
-```
-Teinte (Hue) : 230°
-↳ Entre le bleu pur (240°) et le cyan (180°)
-↳ Une touche subtile de bleu dans un gris neutre
-```
-
-### Light Mode
-```css
---background: oklch(0.985 0.003 230); /* Blanc grisâtre */
---card: oklch(1 0 0); /* Blanc pur */
---sidebar: oklch(0.97 0.004 230); /* Gris-bleu pâle */
---foreground: oklch(0.2 0.02 230); /* Gris-bleu foncé */
---primary: oklch(0.45 0.08 230); /* Gris-bleu doux */
---border: oklch(0.9 0.008 230); /* Gris-bleu très clair */
-```
-
-### Dark Mode
-```css
---background: oklch(0.14 0.005 230); /* Noir grisâtre */
---card: oklch(0.18 0.006 230); /* Gris-bleu foncé */
---sidebar: oklch(0.12 0.005 230); /* Noir grisâtre */
---foreground: oklch(0.97 0.003 230); /* Blanc grisâtre */
---primary: oklch(0.55 0.08 230); /* Gris-bleu plus clair */
---border: oklch(0.28 0.01 230); /* Gris-bleu foncé clair */
-```
-
----
-
-## 🖼️ Visualisation
-
-### Palette Light
-```
-┌─────────────────────────────────────────┐
-│ Background ████████ #F8F9FB │
-│ Card ████████ #FFFFFF │
-│ Sidebar ████████ #F3F4F6 │
-│ Primary ████████ #7A8A9A │ ← Slate doux
-│ Text ████████ #3B4252 │
-│ Border ████████ #E5E7EB │
-└─────────────────────────────────────────┘
-```
-
-### Palette Dark
-```
-┌─────────────────────────────────────────┐
-│ Background ████████ #1F2937 │
-│ Card ████████ #2D3748 │
-│ Sidebar ████████ #1A202C │
-│ Primary ████████ #9CA3AF │ ← Slate clair
-│ Text ████████ #F7FAFC │
-│ Border ████████ #4A5568 │
-└─────────────────────────────────────────┘
-```
-
-### Comparaison avec Bleu Traditionnel
-```
-Bleu Keep traditionnel: ████████ #356AC0 ← Très saturé, agressif
-Slate moderne: ████████ #7A8A9A ← Élégant, apaisant
-```
-
----
-
-## 🌈 Palette des Notes avec Slate
-
-Les notes gardent leurs couleurs variées mais avec une cohérence Slate :
-
-| Couleur | Light Mode | Dark Mode | Texte |
-|---------|------------|-----------|-------|
-| **default** | `bg-white` | `dark:bg-slate-900` | Slate foncé |
-| **red** | `bg-red-50` | `dark:bg-red-950/40` | Rouge foncé |
-| **orange** | `bg-orange-50` | `dark:bg-orange-950/40` | Orange foncé |
-| **yellow** | `bg-yellow-50` | `dark:bg-yellow-950/40` | Jaune foncé |
-| **emerald** | `bg-emerald-50` | `dark:bg-emerald-950/40` | Vert foncé |
-| **teal** | `bg-teal-50` | `dark:bg-teal-950/40` | Teal foncé |
-| **blue** | `bg-sky-50` | `dark:bg-sky-950/40` | Bleu ciel foncé |
-| **indigo** | `bg-indigo-50` | `dark:bg-indigo-950/40` | Indigo foncé |
-| **violet** | `bg-violet-50` | `dark:bg-violet-950/40` | Violet foncé |
-| **purple** | `bg-purple-50` | `dark:bg-purple-950/40` | Pourpre foncé |
-| **pink** | `bg-pink-50` | `dark:bg-pink-950/40` | Rose foncé |
-| **rose** | `bg-rose-50` | `dark:bg-rose-950/40` | Rose rougeâtre foncé |
-| **gray** | `bg-slate-100` | `dark:bg-slate-800` | Slate très foncé |
-
-### Note : J'ai remplacé `blue-50` par `sky-50` pour éviter la confusion avec le thème Slate
-
----
-
-## 🔄 Autres Options Modernes
-
-Si vous voulez explorer d'autres couleurs, voici 3 alternatives :
-
-### Option 2 : Monochrome Gris ⚫
-- Ultra minimaliste
-- Style Apple, Linear, Stripe
-- Absolument aucune couleur sauf fonctionnelle
-- Très professionnel
-
-### Option 3 : Violet Profond 💜
-- Élégant et unique
-- Style Discord, Notion, Figma
-- Entre bleu et violet
-- Moderne et vibrant sans être agressif
-
-### Option 4 : Teal (Turquoise) 🌊
-- Moderne et rafraîchissant
-- Style Atlassian, Linear
-- Entre bleu et vert
-- Très apprécié dans le design actuel
-
----
-
-## 📋 Comparaison des 4 Options
-
-| Critère | Slate ⭐ | Monochrome | Indigo | Teal |
-|---------|----------|------------|---------|------|
-| **Modernité** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
-| **Professionnalisme** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
-| **Fatigue oculaire** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
-| **Unicité** | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
-| **Tendance 2025** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
-| **Popularité** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
-
-**Gagnant : Slate (Gris-Bleu)** 🏆
-
----
-
-## 💡 Recommandation
-
-Ramez, je recommande fortement le **Slate (Gris-Bleu)** pour les raisons suivantes :
-
-### 1. Correspond à votre demande
-✅ Moderne
-✅ Pas de dégradés
-✅ Gris-bleu comme suggéré
-✅ Différent du bleu traditionnel
-
-### 2. Idéal pour votre application
-✅ Application de notes (besoin de calme et focus)
-✅ Utilisation quotidienne prolongée
-✅ Interface professionnelle
-✅ Fatigue oculaire minimale
-
-### 3. Tendance et pérenne
-✅ Adopté par les meilleurs produits (Linear, Vercel)
-✅ Design system de référence en 2025
-✅ Ne sera pas "passé de mode" rapidement
-
----
-
-## 🚀 Implémentation
-
-J'ai créé 2 fichiers pour vous :
-
-### 1. `keep-notes/lib/modern-color-options.ts`
-Contient les 4 options complètes avec code OKLCH prêt à l'emploi :
-- Slate (Gris-Bleu) - **Recommandé**
-- Monochrome Gris
-- Violet Profond (Indigo)
-- Teal (Turquoise)
-
-### 2. Ce document `PROPOSITION-SLATE-MODERNE.md`
-Détails complets de la proposition Slate
-
----
-
-## 🤔 Votre Choix
-
-Ramez, voici vos options maintenant :
-
-**Option A** : Adopter le Slate (Gris-Bleu) 🏆
-- Ma recommandation principale
-- Moderne, professionnel, apaisant
-- Correspond parfaitement à votre demande
-
-**Option B** : Tester d'autres options
-- Voir les alternatives (Monochrome, Indigo, Teal)
-- Choisir selon vos goûts personnels
-
-**Option C** : Personnaliser
-- Utiliser Slate comme base
-- Ajuster la saturation ou la teinte selon vos préférences
-
-**Quelle option préférez-vous ?** 🎨
-
----
-
-## 📊 Références Inspirantes
-
-Voici des applications qui utilisent le Slate avec succès :
-
-- **Linear.app** - Design moderne par excellence
-- **Vercel.com** - Professionalisme et élégance
-- **GitHub.com** - Interface propre et lisible
-- **Raycast.com** - Minimaliste et efficace
-- **Stripe.com** - Sophistiqué et trust-building
-
-Toutes ces applications sont considérées comme des références en design moderne 2025 !
-
----
-
-*Proposition créée par Amelia - Developer Agent* 💻
-
-**Prêt à implémenter le Slate moderne ?** 🚀
diff --git a/keep-notes/README.md b/keep-notes/README.md
index e99674d..09e46f7 100644
--- a/keep-notes/README.md
+++ b/keep-notes/README.md
@@ -1,104 +1,69 @@
-# Memento - Google Keep Clone
+# Keep Notes ✨
-A beautiful and feature-rich Google Keep clone built with modern web technologies.
+Keep Notes est une application avancée de prise de notes hybride, combinant la fluidité d'un outil local moderne avec la puissance de l'Intelligence Artificielle. Conçue pour offrir des performances maximales, elle utilise les dernières avancées de l'écosystème React et Next.js.
-
-
-
-
+## 🚀 Fonctionnalités
-## ✨ Features
+- **Notes & Carnets** : Organisez vos idées rapidement avec des dossiers, codes couleurs, et épinglage.
+- **Support Markdown & Rendu Riche** : Éditez ou affichez vos notes instantanément.
+- **Disposition Masonry** : Grille CSS ultra-rapide (0 JavaScript) avec drag & drop fluide via `@dnd-kit`.
+- **Intégration de l'Intelligence Artificielle** :
+ - **Memory Echo** : Suggestion automatique et connexions entre notes similaires (RAG / Embeddings).
+ - **Auto-Tagging** : Création automatique d'étiquettes pertinentes.
+ - **Organisation par lots** (Batch Organization) : Tri automatique des notes en vrac.
+ - **Amélioration textuelle** : Reformulation, synthèse, ou traduction propulsés par l'IA.
+- **Haute Performance (RSC & Turbopack)** : Rendu Server Components natif pour une hydratation sans délai et développement accéléré via Turbopack.
-- 📝 **Create & Edit Notes**: Quick note creation with expandable input
-- ☑️ **Checklist Support**: Create todo lists with checkable items
-- 🎨 **Color Customization**: 10 beautiful color themes for organizing notes
-- 📌 **Pin Notes**: Keep important notes at the top
-- 📦 **Archive**: Archive notes you want to keep but don't need to see
-- 🏷️ **Labels**: Organize notes with custom labels
-- 🔍 **Real-time Search**: Instantly search through all your notes
-- 🌓 **Dark Mode**: Beautiful dark theme with system preference detection
-- 📱 **Fully Responsive**: Works perfectly on desktop, tablet, and mobile
-- ⚡ **Server Actions**: Lightning-fast CRUD operations with Next.js 16
-- 🎯 **Type-Safe**: Full TypeScript support throughout
+## 📄 Licence et Droits d'Auteur
-## 🚀 Tech Stack
+### **Licence Utilisateur Final (Version actuelle - Personnelle & Non-Commerciale)**
+Ce code source est fourni **strictement pour un usage personnel et éducatif**.
+- **Utilisation non-commerciale uniquement** : Il est interdit d'utiliser ce projet (ou tout code dérivé) pour générer des revenus, construire un produit commercial ou l'intégrer dans un service monétisé.
+- **Redistribution sous condition** : Vous ne pouvez pas redistribuer ou publier cette version sans maintenir cette licence restrictive.
-### Frontend
-- **Next.js 16** - React framework with App Router
-- **TypeScript** - Type safety and better DX
-- **Tailwind CSS 4** - Utility-first CSS framework
-- **shadcn/ui** - Beautiful, accessible UI components
-- **Lucide React** - Modern icon library
+*(Inspiré de Creative Commons Attribution-NonCommercial 4.0 International - CC BY-NC 4.0).*
-### Backend
-- **Next.js Server Actions** - Server-side mutations
-- **Prisma ORM** - Type-safe database client
-- **SQLite** - Lightweight database (easily switchable to PostgreSQL)
+---
-## 📦 Installation
+## 🗺️ Roadmap & Version SaaS Commerciale Publique
-### Prerequisites
-- Node.js 18+
-- npm or yarn
+Une version complète de **Keep Notes** destinée au grand public est prévue et en cours de planification. Cette version cloud s'appuiera sur de toutes nouvelles optimisations d'infrastructure :
-### Steps
+1. **Migration Base de Données** :
+ - Remplacement de SQLite local par **PostgreSQL** afin de supporter l'architecture multi-tenant (plusieurs utilisateurs avec sécurité accrue des données).
+2. **Système de Monétisation (Features IA)** :
+ - Mise en place d'un modèle d'abonnement SaaS (Stripe).
+ - Intégration d'un système de crédit ("AI Credits") pour réguler l'usage des API d'intelligence artificielle (LLMs, Embeddings) de façon soutenable.
+3. **Optimisations Scalabilité** :
+ - Déploiement distribué.
-1. **Clone the repository**
- ```bash
- git clone
- cd keep-notes
- ```
+---
-2. **Install dependencies**
- ```bash
- npm install
- ```
+## 🛠️ Stack Technique
-3. **Set up the database**
- ```bash
- npx prisma generate
- npx prisma migrate dev
- ```
+- **Framework** : Next.js 15 (App Router, Server Components)
+- **Frontend** : React 19, Tailwind CSS, Radix UI primitives
+- **Drag & Drop** : `@dnd-kit/core` & `sortable`
+- **Base de Données** : Prisma ORM, SQLite en env de développement (bientôt PostgreSQL)
+- **Outillage** : Turbopack, TypeScript
-4. **Start the development server**
- ```bash
- npm run dev
- ```
-
-5. **Open your browser**
- Navigate to [http://localhost:3000](http://localhost:3000)
-
-## Getting Started
-
-First, run the development server:
+## 💻 Instructions de Développement
+### Installation
```bash
-npm run dev
-# or
-yarn dev
-# or
-pnpm dev
-# or
-bun dev
+npm install
+# ou
+yarn install
```
-Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
+### Initialisation de la Base de données
+```bash
+npx prisma generate
+npx prisma db push
+```
-You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
-
-This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
-
-## Learn More
-
-To learn more about Next.js, take a look at the following resources:
-
-- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
-- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
-
-You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
-
-## Deploy on Vercel
-
-The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
-
-Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
+### Lancement du serveur (avec Turbopack)
+```bash
+npm run dev
+```
+Ouvrez [http://localhost:3000](http://localhost:3000) dans votre navigateur.
diff --git a/keep-notes/THEMES-HARMONISES-SLATE.md b/keep-notes/THEMES-HARMONISES-SLATE.md
deleted file mode 100644
index c3c7dc8..0000000
--- a/keep-notes/THEMES-HARMONISES-SLATE.md
+++ /dev/null
@@ -1,361 +0,0 @@
-# 🎨 Thèmes Harmonisés avec Slate
-
-Ramez, voici les thèmes **midnight**, **blue** et **sepia** harmonisés avec le thème **Slate** principal.
-
----
-
-## 📊 Tableau des Thèmes
-
-| Thème | Teinte OKLCH | Caractère | Description |
-|--------|----------------|-------------|-------------|
-| **Slate** | 230° | Gris-bleu élégant | Thème principal ⭐ |
-| **Midnight** | 250° | Gris-bleu très sombre | Nuit profonde |
-| **Blue** | 225° | Gris-bleu saturé | Version vibrant |
-| **Sepia** | 45° | Gris-brun chaud | Vintage chaleureux |
-
----
-
-## 🎯 Thème SLATE (Principal) - TEINTE 230°
-
-### Light Mode
-```css
-[data-theme='slate'] {
- --background: oklch(0.985 0.003 230); /* Blanc grisâtre */
- --foreground: oklch(0.2 0.02 230); /* Gris-bleu foncé */
- --card: oklch(1 0 0); /* Blanc pur */
- --card-foreground: oklch(0.2 0.02 230);
- --primary: oklch(0.45 0.08 230); /* Gris-bleu doux */
- --primary-foreground: oklch(0.99 0 0); /* Blanc */
- --secondary: oklch(0.94 0.005 230); /* Gris-bleu très pâle */
- --secondary-foreground: oklch(0.2 0.02 230);
- --muted: oklch(0.92 0.005 230);
- --muted-foreground: oklch(0.6 0.01 230);
- --accent: oklch(0.94 0.005 230);
- --accent-foreground: oklch(0.2 0.02 230);
- --destructive: oklch(0.6 0.18 25); /* Rouge */
- --border: oklch(0.9 0.008 230); /* Gris-bleu très clair */
- --input: oklch(0.98 0.003 230);
- --ring: oklch(0.7 0.005 230);
- --popover: oklch(1 0 0);
- --popover-foreground: oklch(0.2 0.02 230);
- --sidebar: oklch(0.97 0.004 230);
- --sidebar-foreground: oklch(0.2 0.02 230);
- --sidebar-primary: oklch(0.45 0.08 230);
- --sidebar-primary-foreground: oklch(0.99 0 0);
- --sidebar-accent: oklch(0.94 0.005 230);
- --sidebar-accent-foreground: oklch(0.2 0.02 230);
- --sidebar-border: oklch(0.9 0.008 230);
- --sidebar-ring: oklch(0.7 0.005 230);
-}
-```
-
-### Dark Mode
-```css
-[data-theme='slate'].dark {
- --background: oklch(0.14 0.005 230); /* Noir grisâtre */
- --foreground: oklch(0.97 0.003 230); /* Blanc grisâtre */
- --card: oklch(0.18 0.006 230); /* Gris-bleu foncé */
- --card-foreground: oklch(0.97 0.003 230);
- --primary: oklch(0.55 0.08 230); /* Gris-bleu plus clair */
- --primary-foreground: oklch(0.1 0 0); /* Noir */
- --secondary: oklch(0.24 0.006 230);
- --secondary-foreground: oklch(0.97 0.003 230);
- --muted: oklch(0.22 0.006 230);
- --muted-foreground: oklch(0.55 0.01 230);
- --accent: oklch(0.24 0.006 230);
- --accent-foreground: oklch(0.97 0.003 230);
- --destructive: oklch(0.65 0.18 25);
- --border: oklch(0.28 0.01 230);
- --input: oklch(0.2 0.006 230);
- --ring: oklch(0.6 0.01 230);
- --popover: oklch(0.18 0.006 230);
- --popover-foreground: oklch(0.97 0.003 230);
- --sidebar: oklch(0.12 0.005 230);
- --sidebar-foreground: oklch(0.97 0.003 230);
- --sidebar-primary: oklch(0.55 0.08 230);
- --sidebar-primary-foreground: oklch(0.1 0 0);
- --sidebar-accent: oklch(0.24 0.006 230);
- --sidebar-accent-foreground: oklch(0.97 0.003 230);
- --sidebar-border: oklch(0.28 0.01 230);
- --sidebar-ring: oklch(0.6 0.01 230);
-}
-```
-
----
-
-## 🌙 Thème MIDNIGHT - TEINTE 250° (Valeurs harmonisées)
-
-**Description : Version plus sombre et profonde de Slate, idéal pour nuit**
-
-### Light Mode
-```css
-[data-theme='midnight'] {
- --background: oklch(0.94 0.005 250); /* Gris-bleu très pâle */
- --foreground: oklch(0.18 0.03 250); /* Gris-bleu très foncé */
- --card: oklch(0.97 0.006 250); /* Gris-bleu pâle */
- --card-foreground: oklch(0.18 0.03 250);
- --primary: oklch(0.5 0.12 250); /* Gris-bleu saturé */
- --primary-foreground: oklch(0.99 0 0); /* Blanc */
- --secondary: oklch(0.2 0.01 250);
- --secondary-foreground: oklch(0.18 0.03 250);
- --muted: oklch(0.22 0.01 250);
- --muted-foreground: oklch(0.55 0.02 250);
- --accent: oklch(0.25 0.015 250);
- --accent-foreground: oklch(0.18 0.03 250);
- --destructive: oklch(0.6 0.22 25);
- --border: oklch(0.85 0.015 250);
- --input: oklch(0.25 0.01 250);
- --ring: oklch(0.65 0.015 250);
- --popover: oklch(0.97 0.006 250);
- --popover-foreground: oklch(0.18 0.03 250);
- --sidebar: oklch(0.9 0.01 250);
- --sidebar-foreground: oklch(0.18 0.03 250);
- --sidebar-primary: oklch(0.5 0.12 250);
- --sidebar-primary-foreground: oklch(0.99 0 0);
- --sidebar-accent: oklch(0.25 0.015 250);
- --sidebar-accent-foreground: oklch(0.18 0.03 250);
- --sidebar-border: oklch(0.85 0.015 250);
- --sidebar-ring: oklch(0.65 0.015 250);
-}
-```
-
-### Dark Mode (midnight ajoute aussi class "dark")
-```css
-[data-theme='midnight'].dark {
- --background: oklch(0.1 0.01 250); /* Noir profond */
- --foreground: oklch(0.96 0.005 250); /* Blanc grisâtre */
- --card: oklch(0.15 0.015 250); /* Gris-bleu très foncé */
- --card-foreground: oklch(0.96 0.005 250);
- --primary: oklch(0.6 0.12 250); /* Gris-bleu vibrant */
- --primary-foreground: oklch(0.1 0 0); /* Noir */
- --secondary: oklch(0.18 0.015 250);
- --secondary-foreground: oklch(0.96 0.005 250);
- --muted: oklch(0.2 0.015 250);
- --muted-foreground: oklch(0.5 0.02 250);
- --accent: oklch(0.22 0.02 250);
- --accent-foreground: oklch(0.96 0.005 250);
- --destructive: oklch(0.65 0.2 25);
- --border: oklch(0.3 0.02 250);
- --input: oklch(0.22 0.02 250);
- --ring: oklch(0.55 0.02 250);
- --popover: oklch(0.15 0.015 250);
- --popover-foreground: oklch(0.96 0.005 250);
- --sidebar: oklch(0.08 0.01 250);
- --sidebar-foreground: oklch(0.96 0.005 250);
- --sidebar-primary: oklch(0.6 0.12 250);
- --sidebar-primary-foreground: oklch(0.1 0 0);
- --sidebar-accent: oklch(0.22 0.02 250);
- --sidebar-accent-foreground: oklch(0.96 0.005 250);
- --sidebar-border: oklch(0.3 0.02 250);
- --sidebar-ring: oklch(0.55 0.02 250);
-}
-```
-
----
-
-## 💎 Thème BLUE - TEINTE 225° (Saturé)
-
-**Description : Version plus vibrante et saturée de Slate, garde le côté bleu mais élégant**
-
-### Light Mode
-```css
-[data-theme='blue'] {
- --background: oklch(0.985 0.005 225); /* Blanc légèrement bleuté */
- --foreground: oklch(0.18 0.035 225); /* Gris-bleu foncé saturé */
- --card: oklch(1 0 0); /* Blanc pur */
- --card-foreground: oklch(0.18 0.035 225);
- --primary: oklch(0.5 0.15 225); /* Bleu vibrant */
- --primary-foreground: oklch(0.99 0 0); /* Blanc */
- --secondary: oklch(0.93 0.008 225);
- --secondary-foreground: oklch(0.18 0.035 225);
- --muted: oklch(0.9 0.01 225);
- --muted-foreground: oklch(0.58 0.015 225);
- --accent: oklch(0.93 0.01 225);
- --accent-foreground: oklch(0.18 0.035 225);
- --destructive: oklch(0.6 0.2 25);
- --border: oklch(0.87 0.012 225);
- --input: oklch(0.95 0.01 225);
- --ring: oklch(0.65 0.015 225);
- --popover: oklch(1 0 0);
- --popover-foreground: oklch(0.18 0.035 225);
- --sidebar: oklch(0.965 0.008 225);
- --sidebar-foreground: oklch(0.18 0.035 225);
- --sidebar-primary: oklch(0.5 0.15 225);
- --sidebar-primary-foreground: oklch(0.99 0 0);
- --sidebar-accent: oklch(0.93 0.01 225);
- --sidebar-accent-foreground: oklch(0.18 0.035 225);
- --sidebar-border: oklch(0.87 0.012 225);
- --sidebar-ring: oklch(0.65 0.015 225);
-}
-```
-
-### Dark Mode
-```css
-[data-theme='blue'].dark {
- --background: oklch(0.13 0.008 225); /* Noir légèrement bleuté */
- --foreground: oklch(0.97 0.006 225); /* Blanc légèrement bleuté */
- --card: oklch(0.17 0.01 225); /* Gris-bleu foncé */
- --card-foreground: oklch(0.97 0.006 225);
- --primary: oklch(0.6 0.15 225); /* Bleu vibrant plus clair */
- --primary-foreground: oklch(0.1 0 0); /* Noir */
- --secondary: oklch(0.22 0.015 225);
- --secondary-foreground: oklch(0.97 0.006 225);
- --muted: oklch(0.25 0.02 225);
- --muted-foreground: oklch(0.52 0.018 225);
- --accent: oklch(0.25 0.025 225);
- --accent-foreground: oklch(0.97 0.006 225);
- --destructive: oklch(0.65 0.22 25);
- --border: oklch(0.32 0.018 225);
- --input: oklch(0.25 0.02 225);
- --ring: oklch(0.55 0.02 225);
- --popover: oklch(0.17 0.01 225);
- --popover-foreground: oklch(0.97 0.006 225);
- --sidebar: oklch(0.1 0.01 225);
- --sidebar-foreground: oklch(0.97 0.006 225);
- --sidebar-primary: oklch(0.6 0.15 225);
- --sidebar-primary-foreground: oklch(0.1 0 0);
- --sidebar-accent: oklch(0.25 0.025 225);
- --sidebar-accent-foreground: oklch(0.97 0.006 225);
- --sidebar-border: oklch(0.32 0.018 225);
- --sidebar-ring: oklch(0.55 0.02 225);
-}
-```
-
----
-
-## 📜 Thème SEPIA - TEINTE 45° (Chaleureux)
-
-**Description : Version vintage chaleureuse avec une touche dorée/brun, garde le gris comme base**
-
-### Light Mode
-```css
-[data-theme='sepia'] {
- --background: oklch(0.985 0.004 45); /* Blanc légèrement doré */
- --foreground: oklch(0.2 0.015 45); /* Gris-brun foncé */
- --card: oklch(1 0 0); /* Blanc pur */
- --card-foreground: oklch(0.2 0.015 45);
- --primary: oklch(0.45 0.08 45); /* Gris-brun chaud */
- --primary-foreground: oklch(0.99 0 0); /* Blanc */
- --secondary: oklch(0.94 0.008 45);
- --secondary-foreground: oklch(0.2 0.015 45);
- --muted: oklch(0.91 0.01 45);
- --muted-foreground: oklch(0.6 0.012 45);
- --accent: oklch(0.93 0.01 45);
- --accent-foreground: oklch(0.2 0.015 45);
- --destructive: oklch(0.6 0.2 25);
- --border: oklch(0.88 0.012 45);
- --input: oklch(0.97 0.008 45);
- --ring: oklch(0.68 0.01 45);
- --popover: oklch(1 0 0);
- --popover-foreground: oklch(0.2 0.015 45);
- --sidebar: oklch(0.96 0.01 45);
- --sidebar-foreground: oklch(0.2 0.015 45);
- --sidebar-primary: oklch(0.45 0.08 45);
- --sidebar-primary-foreground: oklch(0.99 0 0);
- --sidebar-accent: oklch(0.93 0.01 45);
- --sidebar-accent-foreground: oklch(0.2 0.015 45);
- --sidebar-border: oklch(0.88 0.012 45);
- --sidebar-ring: oklch(0.68 0.01 45);
-}
-```
-
-### Dark Mode
-```css
-[data-theme='sepia'].dark {
- --background: oklch(0.15 0.008 45); /* Noir légèrement bruni */
- --foreground: oklch(0.97 0.005 45); /* Blanc légèrement bruni */
- --card: oklch(0.19 0.01 45); /* Gris-brun foncé */
- --card-foreground: oklch(0.97 0.005 45);
- --primary: oklch(0.55 0.08 45); /* Gris-brun plus clair */
- --primary-foreground: oklch(0.1 0 0); /* Noir */
- --secondary: oklch(0.25 0.015 45);
- --secondary-foreground: oklch(0.97 0.005 45);
- --muted: oklch(0.23 0.02 45);
- --muted-foreground: oklch(0.55 0.012 45);
- --accent: oklch(0.27 0.018 45);
- --accent-foreground: oklch(0.97 0.005 45);
- --destructive: oklch(0.65 0.2 25);
- --border: oklch(0.3 0.018 45);
- --input: oklch(0.27 0.02 45);
- --ring: oklch(0.58 0.02 45);
- --popover: oklch(0.19 0.01 45);
- --popover-foreground: oklch(0.97 0.005 45);
- --sidebar: oklch(0.12 0.01 45);
- --sidebar-foreground: oklch(0.97 0.005 45);
- --sidebar-primary: oklch(0.55 0.08 45);
- --sidebar-primary-foreground: oklch(0.1 0 0);
- --sidebar-accent: oklch(0.27 0.018 45);
- --sidebar-accent-foreground: oklch(0.97 0.005 45);
- --sidebar-border: oklch(0.3 0.018 45);
- --sidebar-ring: oklch(0.58 0.02 45);
-}
-```
-
----
-
-## 🎨 Visualisation des Teintes
-
-### Diagramme des teintes OKLCH :
-
-```
- 45° (Sepia) 225° (Blue)
- │ │
- │ 230° (Slate) │
- │ ← principal → │
- ↓ ↓
- Gris-brun Gris-bleu
- chaleureux saturé
-
- 250° (Midnight)
- │
- ↓
- Gris-bleu
- profond/sombre
-```
-
-### Relation entre les thèmes :
-
-```
-Slate (230°) ⭐ ← THÈME PRINCIPAL
- ├── Midnight (250°) : Version + sombre
- ├── Blue (225°) : Version + saturée
- └── Sepia (45°) : Version chaleureuse
-```
-
----
-
-## ✅ Modifications à faire
-
-Dans `keep-notes/app/globals.css` :
-
-### 1. Remplacer les lignes 169-188 (midnight actuel)
-Par le nouveau code **MIDNIGHT** ci-dessus
-
-### 2. Remplacer les lignes 190-217 (blue actuel)
-Par le nouveau code **BLUE** ci-dessus
-
-### 3. Remplacer les lignes 219-238 (sepia actuel)
-Par le nouveau code **SEPIA** ci-dessus
-
----
-
-## 💬 Choix du thème
-
-Utilisez ce tableau pour choisir :
-
-| Pour l'utilisation de jour | Utilisez |
-|-------------------------|------------|
-| Travail standard, productivité | **Slate** (230°) ⭐ |
-| Ambiance calme, liseuse | **Sepia** (45°) |
-| Ambiance énergique, créative | **Blue** (225°) |
-
-| Pour l'utilisation de nuit | Utilisez |
-|-------------------------|------------|
-| Nuit profonde, coding | **Midnight** (250°) |
-| Nuit légère, confort | **Slate dark** (230°) |
-
----
-
-**Tous les thèmes sont harmonisés !** 🎨
-
-*Thèmes créés par Amelia - Developer Agent* 💻
diff --git a/keep-notes/VISUALISATION-COULEURS.html b/keep-notes/VISUALISATION-COULEURS.html
deleted file mode 100644
index e268b42..0000000
--- a/keep-notes/VISUALISATION-COULEURS.html
+++ /dev/null
@@ -1,521 +0,0 @@
-
-
-
-
-
- Visualisation des Couleurs - Slate Moderne
-
-
-
-
🎨 Visualisation des Couleurs - Options Modernes
-
-
-
🏆 RECOMMANDATION PRINCIPALE : SLATE (GRIS-BLEU)
-
Plus professionnel, moins fatigant, moderne - Sans dégradés !
-
-
-
-
-
📊 Comparaison : Bleu Actuel vs Slate Moderne
-
-
-
-
Bleu Keep Actuel
-
- #356AC0
-
- Bleu saturé
-
-
-
-
Slate Moderne (NOUVEAU)
-
- #7A8A9A
-
- Gris-bleu élégant
-
-
-
-
-
-
-
-
✨ Option 1 : Slate (Gris-Bleu) - Mode Light
-
-
-
- 🏆 SLATE LIGHT
-
-
-
-
-
-
Background
-
#F8F9FB
-
-
-
-
-
-
Card
-
#FFFFFF
-
-
-
-
-
-
Sidebar
-
#F3F4F6
-
-
-
-
-
-
Texte (foreground)
-
#3B4252
-
-
-
-
-
-
Primary (boutons)
-
#7A8A9A
-
-
-
-
-
-
Border
-
#E5E7EB
-
-
-
-
-
-
-
-
-
-
🌙 Option 1 : Slate (Gris-Bleu) - Mode Dark
-
-
-
- 🏆 SLATE DARK
-
-
-
-
-
-
Background
-
#1F2937
-
-
-
-
-
-
Card
-
#2D3748
-
-
-
-
-
-
Sidebar
-
#1A202C
-
-
-
-
-
-
Texte (foreground)
-
#F7FAFC
-
-
-
-
-
-
Primary (boutons)
-
#9CA3AF
-
-
-
-
-
-
Border
-
#4A5568
-
-
-
-
-
-
-
-
-
-
📝 Couleurs des Notes (Light Mode)
-
-
-
Default
-
Note blanche standard
-
-
-
-
Red
-
Note rouge
-
-
-
-
Orange
-
Note orange
-
-
-
-
Yellow
-
Note jaune
-
-
-
-
Green (Emerald)
-
Note verte
-
-
-
-
Teal
-
Note teal
-
-
-
-
Blue (Sky)
-
Note bleue
-
-
-
-
Indigo
-
Note indigo
-
-
-
-
Violet
-
Note violette
-
-
-
-
Purple
-
Note pourpre
-
-
-
-
Pink
-
Note rose
-
-
-
-
Rose
-
Note rose rougeâtre
-
-
-
-
Gray
-
Note grise
-
-
-
-
-
-
-
🔄 Autres Options de Thème
-
-
-
- ⚫ MONOCHROME
-
-
-
-
-
-
Background
-
#FFFFFF
-
-
-
-
-
-
Primary
-
#262626
-
-
-
-
-
-
-
- 💜 INDIGO (Violet)
-
-
-
-
-
-
Background
-
#F9F9FB
-
-
-
-
-
-
Primary
-
#7C3AED
-
-
-
-
-
-
-
- 🌊 TEAL (Turquoise)
-
-
-
-
-
-
Background
-
#F9FAFB
-
-
-
-
-
-
Primary
-
#0F766E
-
-
-
-
-
-
-
-
-
💬 Votre Choix Ramez ?
-
- Regardez les couleurs, choisissez ce que vous préférez, puis dites-moi :
-
-
-
- ✅ SLATE (mon choix)
-
-
- 💜 INDIGO
-
-
- 🌊 TEAL
-
-
- ⚫ MONOCHROME
-
-
-
-
-
-
💡 Ouvrez ce fichier dans votre navigateur pour voir toutes les couleurs !
-
Double-cliquez sur : keep-notes/VISUALISATION-COULEURS.html
-
-
-
diff --git a/keep-notes/fix-locales.js b/keep-notes/fix-locales.js
deleted file mode 100644
index b84510e..0000000
--- a/keep-notes/fix-locales.js
+++ /dev/null
@@ -1,27 +0,0 @@
-const fs = require('fs');
-
-function updateLocale(file, lang) {
- const content = fs.readFileSync(file, 'utf8');
- const data = JSON.parse(content);
-
- if (lang === 'fr') {
- data.ai.clarifyDesc = "Rendre le propos plus clair et compréhensible";
- data.ai.shortenDesc = "Résumer le texte et aller à l'essentiel";
- data.ai.improve = "Améliorer la rédaction";
- data.ai.improveDesc = "Corriger les fautes et le style";
- data.ai.toMarkdown = "Formater en Markdown";
- data.ai.toMarkdownDesc = "Ajouter des titres, des puces et structurer le texte";
- } else if (lang === 'en') {
- data.ai.clarifyDesc = "Make the text clearer and easier to understand";
- data.ai.shortenDesc = "Summarize the text and get to the point";
- data.ai.improve = "Improve writing";
- data.ai.improveDesc = "Fix grammar and enhance style";
- data.ai.toMarkdown = "Format as Markdown";
- data.ai.toMarkdownDesc = "Add headings, bullet points and structure the text";
- }
-
- fs.writeFileSync(file, JSON.stringify(data, null, 2));
-}
-
-updateLocale('./locales/fr.json', 'fr');
-updateLocale('./locales/en.json', 'en');
diff --git a/keep-notes/fix-services.sh b/keep-notes/fix-services.sh
deleted file mode 100644
index 5a10abe..0000000
--- a/keep-notes/fix-services.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-# Services à corriger
-services=(
- "lib/ai/services/batch-organization.service.ts"
- "lib/ai/services/embedding.service.ts"
- "lib/ai/services/auto-label-creation.service.ts"
- "lib/ai/services/contextual-auto-tag.service.ts"
- "lib/ai/services/notebook-suggestion.service.ts"
- "lib/ai/services/notebook-summary.service.ts"
-)
-
-echo "Services to fix:"
-printf '%s\n' "${services[@]}"
diff --git a/keep-notes/fix_ai_lang.py b/keep-notes/fix_ai_lang.py
deleted file mode 100644
index 718a142..0000000
--- a/keep-notes/fix_ai_lang.py
+++ /dev/null
@@ -1,70 +0,0 @@
-import re
-
-# 1. Update types.ts
-with open('lib/ai/types.ts', 'r') as f:
- types_content = f.read()
-
-types_content = types_content.replace(
- 'generateTags(content: string): Promise',
- 'generateTags(content: string, language?: string): Promise'
-)
-with open('lib/ai/types.ts', 'w') as f:
- f.write(types_content)
-
-# 2. Update OllamaProvider
-with open('lib/ai/providers/ollama.ts', 'r') as f:
- ollama_content = f.read()
-
-ollama_content = ollama_content.replace(
- 'async generateTags(content: string): Promise',
- 'async generateTags(content: string, language: string = "en"): Promise'
-)
-
-# Replace the hardcoded prompt build logic
-prompt_logic = """
- const promptText = language === 'fa'
- ? `متن زیر را تحلیل کن و مفاهیم کلیدی را به عنوان برچسب استخراج کن (حداکثر ۱-۳ کلمه).\nقوانین:\n- کلمات ربط را حذف کن.\n- عبارات ترکیبی را حفظ کن.\n- حداکثر ۵ برچسب.\nپاسخ فقط به صورت لیست JSON با فرمت [{"tag": "string", "confidence": number}]\nمتن: "${content}"`
- : language === 'fr'
- ? `Analyse la note suivante et extrais les concepts clés sous forme de tags courts (1-3 mots max).\nRègles:\n- Pas de mots de liaison.\n- Garde les expressions composées ensemble.\n- Normalise en minuscules sauf noms propres.\n- Maximum 5 tags.\nRéponds UNIQUEMENT sous forme de liste JSON d'objets : [{"tag": "string", "confidence": number}].\nContenu de la note: "${content}"`
- : `Analyze the following note and extract key concepts as short tags (1-3 words max).\nRules:\n- No stop words.\n- Keep compound expressions together.\n- Lowercase unless proper noun.\n- Max 5 tags.\nRespond ONLY as a JSON list of objects: [{"tag": "string", "confidence": number}].\nNote content: "${content}"`;
-
- const response = await fetch(`${this.baseUrl}/generate`, {
- method: 'POST',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify({
- model: this.modelName,
- prompt: promptText,
- stream: false,
- }),
- });
-"""
-
-# The original has:
-# const response = await fetch(`${this.baseUrl}/generate`, {
-# method: 'POST',
-# headers: { 'Content-Type': 'application/json' },
-# body: JSON.stringify({
-# model: this.modelName,
-# prompt: `Analyse la note suivante...
-
-ollama_content = re.sub(
- r'const response = await fetch\(`\$\{this\.baseUrl\}/generate`.*?\}\),\n\s*\}\);',
- prompt_logic.strip(),
- ollama_content,
- flags=re.DOTALL
-)
-
-with open('lib/ai/providers/ollama.ts', 'w') as f:
- f.write(ollama_content)
-
-# 3. Update route.ts
-with open('app/api/ai/tags/route.ts', 'r') as f:
- route_content = f.read()
-
-route_content = route_content.replace(
- 'const tags = await provider.generateTags(content);',
- 'const tags = await provider.generateTags(content, language);'
-)
-with open('app/api/ai/tags/route.ts', 'w') as f:
- f.write(route_content)
-
diff --git a/keep-notes/fix_api_labels.py b/keep-notes/fix_api_labels.py
deleted file mode 100644
index ccc8bd0..0000000
--- a/keep-notes/fix_api_labels.py
+++ /dev/null
@@ -1,25 +0,0 @@
-with open('app/api/labels/[id]/route.ts', 'r') as f:
- content = f.read()
-
-# Fix targetUserId logic
-content = content.replace(
- 'if (name && name.trim() !== currentLabel.name && currentLabel.userId) {',
- 'const targetUserIdPut = currentLabel.userId || currentLabel.notebook?.userId || session.user.id;\n if (name && name.trim() !== currentLabel.name && targetUserIdPut) {'
-)
-content = content.replace(
- 'userId: currentLabel.userId,',
- 'userId: targetUserIdPut,'
-)
-
-content = content.replace(
- 'if (label.userId) {',
- 'const targetUserIdDel = label.userId || label.notebook?.userId || session.user.id;\n if (targetUserIdDel) {'
-)
-content = content.replace(
- 'userId: label.userId,',
- 'userId: targetUserIdDel,'
-)
-
-with open('app/api/labels/[id]/route.ts', 'w') as f:
- f.write(content)
-
diff --git a/keep-notes/fix_auto_tag_hook.py b/keep-notes/fix_auto_tag_hook.py
deleted file mode 100644
index ccd87fa..0000000
--- a/keep-notes/fix_auto_tag_hook.py
+++ /dev/null
@@ -1,18 +0,0 @@
-with open('hooks/use-auto-tagging.ts', 'r') as f:
- content = f.read()
-
-if 'useLanguage' not in content:
- content = "import { useLanguage } from '@/lib/i18n'\n" + content
-
-content = content.replace(
- 'export function useAutoTagging(notebookId?: string | null) {',
- 'export function useAutoTagging(notebookId?: string | null) {\n const { language } = useLanguage();'
-)
-
-content = content.replace(
- "language: document.documentElement.lang || 'en',",
- "language: language || document.documentElement.lang || 'en',"
-)
-
-with open('hooks/use-auto-tagging.ts', 'w') as f:
- f.write(content)
diff --git a/keep-notes/fix_date_locale.py b/keep-notes/fix_date_locale.py
deleted file mode 100644
index 475f2f7..0000000
--- a/keep-notes/fix_date_locale.py
+++ /dev/null
@@ -1,41 +0,0 @@
-import re
-
-files_to_fix = [
- 'components/note-inline-editor.tsx',
- 'components/notes-tabs-view.tsx',
- 'components/note-card.tsx'
-]
-
-replacement_func = """import { faIR } from 'date-fns/locale'
-
-function getDateLocale(language: string) {
- if (language === 'fr') return fr
- if (language === 'fa') return faIR
- return enUS
-}"""
-
-for file in files_to_fix:
- with open(file, 'r') as f:
- content = f.read()
-
- # 1. Replace the getDateLocale function
- content = re.sub(
- r'function getDateLocale\(language: string\) \{\s*if \(language === \'fr\'\) return fr\s*return enUS\s*\}',
- "function getDateLocale(language: string) {\n if (language === 'fr') return fr;\n if (language === 'fa') return require('date-fns/locale').faIR;\n return enUS;\n}",
- content
- )
-
- # Also fix translations for "Modifiée" and "Créée" in inline editor (they are currently hardcoded)
- if 'note-inline-editor.tsx' in file:
- content = content.replace(
- "Modifiée {formatDistanceToNow(new Date(note.updatedAt), { addSuffix: true, locale: dateLocale })}",
- "{t('notes.modified') || 'Modifiée'} {formatDistanceToNow(new Date(note.updatedAt), { addSuffix: true, locale: dateLocale })}"
- )
- content = content.replace(
- "Créée {formatDistanceToNow(new Date(note.createdAt), { addSuffix: true, locale: dateLocale })}",
- "{t('notes.created') || 'Créée'} {formatDistanceToNow(new Date(note.createdAt), { addSuffix: true, locale: dateLocale })}"
- )
-
- with open(file, 'w') as f:
- f.write(content)
-
diff --git a/keep-notes/fix_dialog.py b/keep-notes/fix_dialog.py
deleted file mode 100644
index c531b8f..0000000
--- a/keep-notes/fix_dialog.py
+++ /dev/null
@@ -1,102 +0,0 @@
-import re
-
-with open('components/label-management-dialog.tsx', 'r') as f:
- content = f.read()
-
-# Add useNoteRefresh import
-if 'useNoteRefresh' not in content:
- content = content.replace("import { useLanguage } from '@/lib/i18n'", "import { useLanguage } from '@/lib/i18n'\nimport { useNoteRefresh } from '@/context/NoteRefreshContext'")
-
-# Add useNoteRefresh to component
-content = content.replace("const { t } = useLanguage()", "const { t } = useLanguage()\n const { triggerRefresh } = useNoteRefresh()\n const [confirmDeleteId, setConfirmDeleteId] = useState(null)")
-
-# Modify handleDeleteLabel
-old_delete = """ const handleDeleteLabel = async (id: string) => {
- if (confirm(t('labels.confirmDelete'))) {
- try {
- await deleteLabel(id)
- } catch (error) {
- console.error('Failed to delete label:', error)
- }
- }
- }"""
-new_delete = """ const handleDeleteLabel = async (id: string) => {
- try {
- await deleteLabel(id)
- triggerRefresh()
- setConfirmDeleteId(null)
- } catch (error) {
- console.error('Failed to delete label:', error)
- }
- }"""
-content = content.replace(old_delete, new_delete)
-
-# Also adding triggerRefresh() on addLabel and updateLabel:
-content = content.replace(
- "await addLabel(trimmed, 'gray')",
- "await addLabel(trimmed, 'gray')\n triggerRefresh()"
-)
-content = content.replace(
- "await updateLabel(id, { color })",
- "await updateLabel(id, { color })\n triggerRefresh()"
-)
-
-# Inline confirm UI: Change the Trash2 button area
-old_div = """