{"id":51069499,"url":"https://github.com/raphaelchpprt/lamap","last_synced_at":"2026-06-23T09:32:04.527Z","repository":{"id":320878244,"uuid":"1073578524","full_name":"raphaelchpprt/lamap","owner":"raphaelchpprt","description":"🗺️ Plateforme collaborative de cartographie des initiatives sociales, environnementales et solidaires pour trouver facilement où s'engager près de chez soi ⬇️","archived":false,"fork":false,"pushed_at":"2025-11-04T14:32:11.000Z","size":1280,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-04T16:12:20.515Z","etag":null,"topics":["greentech","impact","social-economy","socialtechnology"],"latest_commit_sha":null,"homepage":"https://lamap-w3kg.vercel.app/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raphaelchpprt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":null,"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-10T10:09:03.000Z","updated_at":"2025-11-04T14:32:14.000Z","dependencies_parsed_at":"2025-10-26T14:39:39.281Z","dependency_job_id":null,"html_url":"https://github.com/raphaelchpprt/lamap","commit_stats":null,"previous_names":["raphaelchpprt/lamap"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/raphaelchpprt/lamap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelchpprt%2Flamap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelchpprt%2Flamap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelchpprt%2Flamap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelchpprt%2Flamap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raphaelchpprt","download_url":"https://codeload.github.com/raphaelchpprt/lamap/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelchpprt%2Flamap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34684673,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["greentech","impact","social-economy","socialtechnology"],"created_at":"2026-06-23T09:32:03.312Z","updated_at":"2026-06-23T09:32:04.513Z","avatar_url":"https://github.com/raphaelchpprt.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🗺️ LaMap - Cartographie des initiatives sociales, environnementales et solidaires pour trouver où s'engager près de chez soi\n\n\u003e Plateforme web collaborative de cartographie des initiatives d'économie circulaire, sociale et solidaire (ESS) et associatives en France.\n\n[![Next.js](https://img.shields.io/badge/Next.js-15-black)](https://nextjs.org/)\n[![React](https://img.shields.io/badge/React-19-blue)](https://react.dev/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5-blue)](https://www.typescriptlang.org/)\n[![Tailwind CSS](https://img.shields.io/badge/Tailwind-3-38bdf8)](https://tailwindcss.com/)\n[![shadcn/ui](https://img.shields.io/badge/shadcn%2Fui-latest-000000)](https://ui.shadcn.com/)\n[![Supabase](https://img.shields.io/badge/Supabase-PostGIS-3ECF8E)](https://supabase.com/)\n\n## 🎯 Objectifs du projet\n\nLaMap permet aux utilisateurs de :\n- 📍 Découvrir des initiatives ESS et associatives locales sur une carte interactive\n- ➕ Ajouter de nouvelles initiatives\n- 🔍 Filtrer par type (ressourceries, AMAP, repair cafés, etc.)\n- 🌍 Rechercher dans un rayon géographique\n- 💬 Partager et commenter des initiatives\n\n## 🛠️ Stack technique\n\n| Technologie | Version | Usage |\n|-------------|---------|-------|\n| **Next.js** | 15+ (App Router) | Framework React SSR/SSG |\n| **React** | 19+ | Bibliothèque UI |\n| **TypeScript** | 5+ | Typage statique |\n| **Tailwind CSS** | 3+ | Styling utility-first |\n| **shadcn/ui** | Latest | Bibliothèque de composants (Radix UI) |\n| **Jest** | Latest | Tests unitaires |\n| **React Testing Library** | Latest | Tests composants |\n| **Mapbox GL JS** | Latest | Cartographie WebGL |\n| **Supabase** | Latest (@supabase/ssr) | Backend (PostgreSQL + PostGIS + Auth) |\n| **PostGIS** | Via Supabase | Requêtes géospatiales |\n\n## 📦 Installation\n\n### Prérequis\n\n- Node.js 18+ (recommandé : 20+)\n- npm, yarn, pnpm ou bun\n- Un compte [Supabase](https://supabase.com) (gratuit)\n- Un token [Mapbox](https://www.mapbox.com) (gratuit jusqu'à 50k requêtes/mois)\n\n### 1. Cloner le projet\n\n```bash\ngit clone https://github.com/votre-username/lamap.git\ncd lamap\n```\n\n### 2. Installer les dépendances\n\n```bash\nnpm install\n# ou\nyarn install\n# ou\npnpm install\n```\n\n### 3. Configurer les variables d'environnement\n\nCréez un fichier `.env.local` à la racine :\n\n```bash\n# Mapbox\nNEXT_PUBLIC_MAPBOX_TOKEN=pk.eyJ1...votre_token\n\n# Supabase\nNEXT_PUBLIC_SUPABASE_URL=https://xxx.supabase.co\nNEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGc...votre_key\n```\n\n### 4. Configurer Supabase\n\n#### a) Créer un projet Supabase\n1. Allez sur [supabase.com](https://supabase.com)\n2. Créez un nouveau projet\n3. Notez l'URL et la clé anonyme (dans Settings \u003e API)\n\n#### b) Créer la base de données\n\nExécutez ce SQL dans l'éditeur SQL de Supabase :\n\n```sql\n-- Activer PostGIS\nCREATE EXTENSION IF NOT EXISTS postgis;\n\n-- Table des initiatives\nCREATE TABLE initiatives (\n  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,\n  name TEXT NOT NULL,\n  type TEXT NOT NULL,\n  description TEXT,\n  address TEXT,\n  location GEOGRAPHY(POINT, 4326) NOT NULL,\n  verified BOOLEAN DEFAULT false,\n  image_url TEXT,\n  website TEXT,\n  phone TEXT,\n  email TEXT,\n  opening_hours JSONB,\n  user_id UUID REFERENCES auth.users(id) ON DELETE SET NULL,\n  created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),\n  updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()\n);\n\n-- Index spatial pour performance\nCREATE INDEX initiatives_location_idx ON initiatives USING GIST(location);\nCREATE INDEX initiatives_type_idx ON initiatives(type);\n\n-- Row Level Security\nALTER TABLE initiatives ENABLE ROW LEVEL SECURITY;\n\n-- Politiques RLS\nCREATE POLICY \"Lecture publique\" ON initiatives\n  FOR SELECT USING (true);\n\nCREATE POLICY \"Création authentifiée\" ON initiatives\n  FOR INSERT WITH CHECK (auth.uid() = user_id);\n\nCREATE POLICY \"Modification propriétaire\" ON initiatives\n  FOR UPDATE USING (auth.uid() = user_id);\n```\n\n#### c) Générer les types TypeScript (optionnel)\n\n```bash\nnpx supabase gen types typescript --project-id \u003cvotre-project-id\u003e \u003e src/lib/supabase/types.ts\n```\n\n### 5. Lancer le projet en développement\n\n```bash\nnpm run dev\n```\n\nOuvrez [http://localhost:3000](http://localhost:3000) dans votre navigateur.\n\n## 🧪 Tests\n\n### Lancer tous les tests\n\n```bash\nnpm test\n```\n\n### Lancer les tests en mode watch\n\n```bash\nnpm test -- --watch\n```\n\n### Lancer les tests avec couverture\n\n```bash\nnpm test -- --coverage\n```\n\n## 📁 Structure du projet\n\n```\nlamap/\n├── src/\n│   ├── app/                    # App Router Next.js\n│   │   ├── layout.tsx         # Layout racine\n│   │   ├── page.tsx           # Page d'accueil (carte)\n│   │   ├── globals.css        # Styles globaux\n│   │   └── actions.ts         # Server Actions\n│   ├── components/            # Composants React\n│   │   ├── Initiative/\n│   │   │   └── InitiativeCard.tsx\n│   │   ├── Map/\n│   │   │   └── Map.tsx        # Carte Mapbox\n│   │   ├── ui/                # shadcn/ui components\n│   │   │   ├── button.tsx\n│   │   │   ├── card.tsx\n│   │   │   ├── dialog.tsx\n│   │   │   └── ...\n│   │   ├── AddInitiativeForm.tsx\n│   │   ├── FilterPanel.tsx\n│   │   └── MapView.tsx        # Vue principale\n│   ├── lib/\n│   │   ├── supabase/\n│   │   │   ├── client.ts      # Client Supabase navigateur\n│   │   │   ├── server.ts      # Client Supabase Server Components\n│   │   │   └── types.ts       # Types générés de la DB\n│   │   └── utils.ts           # Utilitaires (cn, etc.)\n│   ├── types/\n│   │   └── initiative.ts      # Types TypeScript métier\n│   └── __tests__/             # Tests Jest\n│       ├── components/        # Tests unitaires\n│       ├── integration/       # Tests d'intégration\n│       └── lib/               # Tests des utilitaires\n├── docs/                      # 📚 Documentation projet\n│   ├── QUICKSTART.md\n│   ├── CONTEXT_ENGINEERING_GUIDELINES.md\n│   ├── LEARNING_CONTEXT.md\n│   ├── MAP_TROUBLESHOOTING.md\n│   ├── BEST_PRACTICES.md\n│   ├── STATUS.md\n│   └── ...\n├── public/                    # Assets statiques\n├── scripts/                   # Scripts utilitaires\n│   └── check-map.sh          # Vérification configuration\n├── __mocks__/                 # Mocks Jest (Mapbox, Supabase)\n├── .github/                   # Configuration GitHub\n│   └── copilot-instructions.md\n├── .env.local                 # Variables d'environnement (non versionné)\n├── jest.config.js\n├── jest.setup.js\n├── tailwind.config.ts\n├── tsconfig.json\n├── components.json            # Configuration shadcn/ui\n└── package.json\n```\n\n## 🎨 Conventions de code\n\n### TypeScript\n- **Strict mode** activé\n- Toujours typer les props, fonctions et retours\n- Utiliser les interfaces pour les objets\n- Utiliser les types unions pour les énumérations\n\n### Composants React\n- **Server Components** par défaut\n- Ajouter `'use client'` uniquement si nécessaire (interactivité)\n- Props typées avec des interfaces\n- Nommage : PascalCase\n\n### Styling\n- Tailwind CSS utility-first\n- Palette personnalisée LaMap (vert ESS)\n- Classes responsive : mobile-first\n\n### Tests\n- Un fichier de test par composant\n- Nommage : `ComponentName.test.tsx`\n- Tester : rendu, interactions, accessibilité\n- Utiliser `@testing-library/react`\n\n## 🚀 Déploiement\n\n### Vercel (recommandé)\n\n```bash\nnpm run build\nvercel deploy\n```\n\n### Autres plateformes\n\nLe projet Next.js peut être déployé sur :\n- Netlify\n- AWS Amplify\n- Railway\n- Fly.io\n- Docker (avec `next/standalone`)\n\nVoir la [documentation Next.js](https://nextjs.org/docs/app/building-your-application/deploying).\n\n## 📚 Documentation\n\n### Documentation du projet\n\n- **[📖 Guide de démarrage rapide](./docs/QUICKSTART.md)** - Installation et premiers pas\n- **[🏗️ Architecture \u0026 Décisions](./docs/CONTEXT_ENGINEERING_GUIDELINES.md)** - Guidelines de développement\n- **[🎓 Contexte d'apprentissage](./docs/LEARNING_CONTEXT.md)** - Approche pédagogique\n- **[🗺️ Dépannage de la carte](./docs/MAP_TROUBLESHOOTING.md)** - Résolution des problèmes Mapbox\n- **[🧩 Configuration shadcn/ui](./docs/SHADCN_CONFIG.md)** - Composants installés\n- **[📦 Dépendances](./docs/DEPENDENCIES.md)** - Liste des packages utilisés\n- **[✅ Bonnes pratiques](./docs/BEST_PRACTICES.md)** - Conventions de code\n- **[📊 État du projet](./docs/STATUS.md)** - Fonctionnalités et roadmap\n- **[📝 Résumés des sessions](./docs/SESSION_SUMMARY.md)** - Historique du développement\n\n### Ressources externes\n\n- [Next.js Docs](https://nextjs.org/docs)\n- [Mapbox GL JS](https://docs.mapbox.com/mapbox-gl-js/api/)\n- [Supabase Docs](https://supabase.com/docs)\n- [PostGIS](https://postgis.net/documentation/)\n- [shadcn/ui](https://ui.shadcn.com/)\n\n## 🤝 Contribuer\n\nLes contributions sont les bienvenues ! Pour contribuer :\n\n1. Fork le projet\n2. Créez une branche (`git checkout -b feature/AmazingFeature`)\n3. Committez vos changements (`git commit -m 'Add some AmazingFeature'`)\n4. Push vers la branche (`git push origin feature/AmazingFeature`)\n5. Ouvrez une Pull Request\n\n### Guidelines\n- Respecter les conventions de code\n- Ajouter des tests pour les nouvelles fonctionnalités\n- Mettre à jour la documentation\n- Suivre le [Conventional Commits](https://www.conventionalcommits.org/)\n\n## 👤 Auteur\n\n**Raphael** - Projet de formation Next.js + TypeScript + Cartographie\n\n---\n\n**Status du projet :** 🚧 En développement actif\n\n**Dernière mise à jour :** 10 octobre 2025\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphaelchpprt%2Flamap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraphaelchpprt%2Flamap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphaelchpprt%2Flamap/lists"}