{"id":35028084,"url":"https://github.com/milocartal/tanuclick","last_synced_at":"2026-05-06T13:12:34.183Z","repository":{"id":330011864,"uuid":"1076315172","full_name":"milocartal/tanuclick","owner":"milocartal","description":"Un mini CRM personnel, simple et futé, pour trier, ranger et tisser des liens.","archived":false,"fork":false,"pushed_at":"2025-12-22T19:03:22.000Z","size":466,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-24T08:34:20.306Z","etag":null,"topics":["crm","next-auth","nextjs","prisma","t3-stack","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/milocartal.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-14T17:28:39.000Z","updated_at":"2025-12-22T19:03:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/milocartal/tanuclick","commit_stats":null,"previous_names":["milocartal/tanuclick"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/milocartal/tanuclick","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milocartal%2Ftanuclick","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milocartal%2Ftanuclick/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milocartal%2Ftanuclick/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milocartal%2Ftanuclick/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/milocartal","download_url":"https://codeload.github.com/milocartal/tanuclick/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milocartal%2Ftanuclick/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32695136,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T08:33:17.875Z","status":"ssl_error","status_checked_at":"2026-05-06T08:33:17.221Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["crm","next-auth","nextjs","prisma","t3-stack","typescript"],"created_at":"2025-12-27T06:37:25.519Z","updated_at":"2026-05-06T13:12:34.175Z","avatar_url":"https://github.com/milocartal.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003e🚀 TanuClick\u003c/h1\u003e\n  \u003cp\u003e\u003cstrong\u003eCRM professionnel et intuitif pour gérer vos contacts et relations d'affaires\u003c/strong\u003e\u003c/p\u003e\n  \n  \u003cp\u003e\n    \u003ca href=\"https://nextjs.org\"\u003e\u003cimg src=\"https://img.shields.io/badge/Next.js-16-black?logo=next.js\" alt=\"Next.js 15\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://react.dev\"\u003e\u003cimg src=\"https://img.shields.io/badge/React-19-61DAFB?logo=react\" alt=\"React 19\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://www.typescriptlang.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/TypeScript-5-blue?logo=typescript\" alt=\"TypeScript\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://trpc.io\"\u003e\u003cimg src=\"https://img.shields.io/badge/tRPC-Type--Safe-2596BE?logo=trpc\" alt=\"tRPC\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://www.prisma.io/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Prisma-ORM-2D3748?logo=prisma\" alt=\"Prisma\"\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n---\n\n## 📋 Table des matières\n\n- [À propos](#-à-propos)\n- [Fonctionnalités](#-fonctionnalités)\n- [Stack technique](#-stack-technique)\n- [Installation](#-installation)\n- [Scripts disponibles](#-scripts-disponibles)\n- [Structure du projet](#-structure-du-projet)\n- [Tests](#-tests)\n- [Déploiement](#-déploiement)\n- [Documentation](#-documentation)\n- [Licence](#-licence)\n\n## 📖 À propos\n\n**TanuClick** est un système de gestion de la relation client (CRM) moderne conçu pour les professionnels et entreprises qui souhaitent gérer efficacement leurs contacts, suivre leurs interactions et organiser leurs relations d'affaires.\n\nConstruit avec les technologies web les plus récentes, TanuClick offre une expérience utilisateur fluide, sécurisée et performante, tout en garantissant la protection de vos données.\n\n## ✨ Fonctionnalités\n\n### Gestion des contacts\n- **Contacts structurés** : Nom, entreprise, titre, email, téléphone, site web\n- **Classification** : Catégorisez vos contacts (Client, Fournisseur, Partenaire, Personnel, Concurrent, Lead)\n- **Notes et contexte** : Ajoutez des informations détaillées pour chaque contact\n- **Slugs uniques** : URLs propres et SEO-friendly pour chaque contact\n\n### Organisation\n- **Tags personnalisés** : Organisez vos contacts avec un système de tags flexible\n- **Liens associés** : Attachez des URLs pertinentes à chaque contact (LinkedIn, portfolio, etc.)\n- **Recherche et filtres** : Trouvez rapidement vos contacts\n\n### Suivi des activités\n- **Timeline d'interactions** : Notes, appels, emails, réunions, tâches\n- **Historique complet** : Gardez une trace de toutes vos interactions\n- **Horodatage automatique** : Suivez quand chaque activité a eu lieu\n\n### Sécurité\n- **Authentification sécurisée** : NextAuth.js avec hash des mots de passe (Argon2)\n- **Multi-utilisateurs** : Chaque utilisateur a ses propres données isolées\n- **Protection des données** : Validation stricte côté serveur avec Zod\n\n## 🛠 Stack technique\n\nCe projet est construit avec la [T3 Stack](https://create.t3.gg/), garantissant type-safety et productivité maximale :\n\n- **Framework** : [Next.js 15](https://nextjs.org) avec App Router\n- **Frontend** : [React 19](https://react.dev), [Tailwind CSS](https://tailwindcss.com)\n- **Backend** : [tRPC](https://trpc.io) pour une API type-safe\n- **Base de données** : MySQL avec [Prisma ORM](https://prisma.io)\n- **Authentification** : [NextAuth.js](https://next-auth.js.org)\n- **Tests** : [Vitest](https://vitest.dev) + [React Testing Library](https://testing-library.com) + [Playwright](https://playwright.dev)\n- **UI Components** : [Radix UI](https://www.radix-ui.com/) avec composants personnalisés\n- **Validation** : [Zod](https://zod.dev) pour les schémas et validations\n- **Formulaires** : [React Hook Form](https://react-hook-form.com/)\n- **Gestionnaire de packages** : pnpm\n\n## 📝 Scripts disponibles\n\n```bash\n# Développement\npnpm dev              # Démarrer en mode développement (avec Turbo)\npnpm build            # Construire pour la production\npnpm start            # Démarrer en production\n\n# Qualité du code\npnpm lint             # Linter le code\npnpm lint:fix         # Corriger automatiquement les erreurs de lint\npnpm format:check     # Vérifier le formatage\npnpm format:write     # Formater le code\npnpm typecheck        # Vérifier les types TypeScript\npnpm check            # Lint + typecheck\n\n# Base de données\npnpm db:push          # Pousser le schéma vers la base de données\npnpm db:generate      # Générer et appliquer une migration\npnpm db:studio        # Ouvrir Prisma Studio (interface graphique)\n\n# Tests\npnpm test             # Lancer les tests unitaires\npnpm test:watch       # Mode watch pour les tests\npnpm test:coverage    # Tests avec rapport de couverture\npnpm test:ui          # Interface graphique Vitest\npnpm test:e2e         # Tests E2E avec Playwright\npnpm test:e2e:ui      # Interface Playwright\n```\n\n## 🗂 Structure du projet\n\n```\ntanuclick/\n├── prisma/\n│   ├── schema.prisma          # Schéma de base de données\n│   └── seed.js                # Données de seed\n├── src/\n│   ├── app/                   # Pages Next.js (App Router)\n│   │   ├── _components/       # Composants de l'application\n│   │   ├── api/              # Routes API (NextAuth, tRPC)\n│   │   ├── dashboard/        # Interface principale\n│   │   └── login/            # Authentification\n│   ├── lib/\n│   │   ├── models/           # Schémas Zod et validations\n│   │   └── utils.ts          # Utilitaires\n│   ├── server/\n│   │   ├── api/              # Configuration tRPC et routers\n│   │   ├── auth/             # Configuration NextAuth\n│   │   └── db.ts             # Client Prisma\n│   ├── styles/\n│   │   └── globals.css       # Styles globaux Tailwind\n│   └── trpc/                 # Configuration client tRPC\n├── docs/                      # Documentation complète\n├── e2e/                       # Tests end-to-end Playwright\n└── public/                    # Fichiers statiques\n```\n\n## 🏗️ Architecture\n\nTanuClick est construit selon les principes de la **T3 Stack** avec une architecture modulaire :\n\n- **App Router** : Nouvelle architecture Next.js 15 avec Server Components\n- **Type-Safety** : De bout en bout avec TypeScript, tRPC et Zod\n- **Server Components** : Optimisation des performances avec React Server Components\n- **API Routes** : Routes tRPC pour une API type-safe\n- **ORM** : Prisma pour une gestion de base de données type-safe\n\nVoir [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) pour plus de détails.\n\n## 🔐 Authentification\n\nLe système utilise NextAuth.js avec un système de credentials sécurisé :\n- Mots de passe hashés avec Argon2\n- Sessions sécurisées\n- Protection CSRF automatique\n\n## 📊 Base de données\n\nLe schéma Prisma comprend :\n- **User** : Utilisateurs de l'application\n- **Contact** : Contacts avec informations détaillées\n- **Tag** : Tags pour organiser les contacts\n- **Link** : Liens associés aux contacts\n- **Activity** : Historique des interactions\n\n## 🎨 UI Components\n\nComposants réutilisables basés sur Radix UI :\n- Button, Input, Textarea\n- Dialog, Popover, Tooltip\n- Select, Command (Autocomplete)\n- Table, Card, Badge\n- Et plus encore...\n\n## 🎯 Statut et Roadmap\n\n### ✅ Version actuelle (v1.0 - Production Ready)\n\n**Interface complète**\n- Dashboard avec statistiques en temps réel\n- Gestion complète des contacts (CRUD)\n- Timeline d'activités et interactions\n- Système de tags et organisation\n- Paramètres utilisateur\n\n**Sécurité et authentification**\n- NextAuth.js avec hash Argon2\n- Vérification email\n- Protection CSRF\n- Sessions sécurisées\n- Isolation des données par utilisateur\n\n**Qualité et performance**\n- 53 tests unitaires ✅\n- Tests E2E Playwright ✅\n- Type-safety complète (TypeScript + tRPC + Zod)\n- Performance optimisée (Next.js 15, Turbo)\n- SEO complet (sitemap, robots.txt, metadata, Open Graph)\n\n**Conformité légale**\n- RGPD compliant\n- Privacy Policy\n- Terms of Service\n- Legal Notice\n\n### 🔮 Roadmap v2.0\n\n**Fonctionnalités à venir**\n- 📊 **Export/Import** : CSV et Excel\n- 📅 **Vue calendrier** : Planification visuelle\n- 🌙 **Dark mode** : Thème sombre\n- 🎨 **Tags colorés** : Personnalisation visuelle\n- 📱 **PWA** : Application installable\n- 🔔 **Notifications** : Rappels et alertes\n- 📈 **Analytics** : Statistiques avancées\n- 🤝 **Collaboration** : Partage d'équipe\n- 🌍 **Multilingue** : Support i18n\n\nVoir [TODO.md](TODO.md) pour la liste complète et contribuer.\n\n## 🧪 Tests\n\nLe projet dispose d'une suite de tests complète garantissant la qualité du code :\n\n### Tests unitaires et d'intégration\n- ✅ **53 tests unitaires** avec Vitest et React Testing Library\n- ✅ Composants UI (Button, Input, Card, Dialog, etc.)\n- ✅ Routers tRPC (Contact, Activity, Tag)\n- ✅ Validation des données avec Zod\n- ✅ Couverture de code avec rapports détaillés\n\n### Tests End-to-End\n- ✅ **Tests E2E** avec Playwright\n- ✅ Scénarios d'authentification complets\n- ✅ Flux de création etet à jour disponible dans le dossier `/docs` :\n\n| Document | Description |\n|----------|-------------|\n| [Installation](docs/INSTALLATION.md) | Guide d'installation pas à pas |\n| [Usage](docs/USAGE.md) | Manuel utilisateur complet |\n| [Architecture](docs/ARCHITECTURE.md) | Architecture technique détaillée |\n| [Development](docs/DEVELOPMENT.md) | Guide pour les développeurs |\n| [API](docs/API.md) | Référence API tRPC complète |\n| [Deployment](docs/DEPLOYMENT.md) | Guide de déploiement (Vercel, Docker, etc.) |\n| [Testing](docs/TESTING.md) | Guide des tests (unitaires, E2E) |\n| [SEO](docs/SEO.md) | Configuration SEO et documents légaux |\n| [Favicons](docs/FAVICONS.md) | Guide de génération des icônes |\n| [FAQ](docs/FAQ.md) | Questions fréquemment posées |\n| [Performance](PERFORMANCE.md) | Optimisations et bonnes pratiques |\n\n## 🤝 Support et Contact\n\nPour toute question ou support :\n- 📧 **Email** : contact@cart-all.com\n- 🐛 **Issues** : [GitHub Issues](https://github.com/votre-username/tanuclick/issues)\n- 💬 **Discussions** : [GitHub Discussions](https://github.com/votre-username/tanuclick/discussions)\n\n## ⚖️ Licence\n\n**Licence propriétaire - Tous droits réservés**\n\nCopyright © 2025 TanuClick. Tous droits réservés.\n\nCe logiciel et sa documentation sont la propriété de TanuClick. L'utilisation, la reproduction, la distribution ou la modification de ce logiciel sans autorisation écrite préalable sont strictement interdites.\n\nPour toute demande de licence commerciale, contactez : contact@tanuclick.com\n\nVoir le fichier [LICENSE](LICENSE) pour plus de détails.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003e\u003cstrong\u003eDéveloppé avec ❤️ en utilisant la \u003ca href=\"https://create.t3.gg/\"\u003eT3 Stack\u003c/a\u003e\u003c/strong\u003e\u003c/p\u003e\n  \u003cp\u003e\n    \u003ca href=\"https://nextjs.org\"\u003eNext.js\u003c/a\u003e •\n    \u003ca href=\"https://react.dev\"\u003eReact\u003c/a\u003e •\n    \u003ca href=\"https://www.typescriptlang.org/\"\u003eTypeScript\u003c/a\u003e •\n    \u003ca href=\"https://trpc.io\"\u003etRPC\u003c/a\u003e •\n    \u003ca href=\"https://www.prisma.io/\"\u003ePrisma\u003c/a\u003e •\n    \u003ca href=\"https://tailwindcss.com\"\u003eTailwind CSS\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmilocartal%2Ftanuclick","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmilocartal%2Ftanuclick","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmilocartal%2Ftanuclick/lists"}