# Analyse de l'Arbre Source - ChartBastan ## Vue d'ensemble de la Structure ``` chartbastan/ │ ├── _bmad/ # Configuration BMad (workflow/agents) │ ├── _config/ # Configuration des agents et workflows │ ├── bmm/ # Configuration BMM │ └── core/ # Core BMad system │ ├── _bmad-output/ # Artefacts de planification et implémentation │ ├── analysis/ # Analyses et brainstorming │ ├── implementation-artifacts/ # 38 fichiers d'implémentation détaillée │ └── planning-artifacts/ # PRD, Architecture, Epics, UX │ ├── backend/ # Backend FastAPI (Part: api) │ │ │ ├── alembic/ # Migrations de base de données │ │ ├── versions/ # Scripts de migration (10 fichiers) │ │ ├── env.py # Configuration Alembic │ │ └── script.py.mako # Template de migration │ │ │ ├── app/ # Code principal de l'application │ │ ├── api/ # Endpoints REST (2 fichiers) │ │ │ ├── dependencies.py # Dépendances d'API │ │ │ └── __init__.py │ │ │ │ │ ├── lib/ # Bibliothèques partagées │ │ │ └── badges.py # Système de badges │ │ │ │ │ ├── main.py # Point d'entrée FastAPI ⚡ │ │ │ │ │ ├── middleware/ # Middleware │ │ │ ├── auth.py # Middleware d'authentification │ │ │ └── cors.py # Middleware CORS │ │ │ │ │ ├── ml/ # Services Machine Learning (5 services) │ │ │ ├── sentiment_analyzer.py # Analyse de sentiment (VADER) │ │ │ ├── prediction_calculator.py # Calcul de prédictions │ │ │ └── [autres services ML] │ │ │ │ │ ├── models/ # Modèles SQLAlchemy (12 modèles) │ │ │ ├── user.py # Modèle utilisateur │ │ │ ├── match.py # Modèle match │ │ │ ├── prediction.py # Modèle prédiction │ │ │ ├── user_prediction.py # Prédictions utilisateur │ │ │ ├── tweet.py # Données Twitter │ │ │ ├── reddit_post.py # Données Reddit │ │ │ ├── rss_article.py # Données RSS │ │ │ ├── sentiment_score.py # Scores de sentiment │ │ │ ├── energy_score.py # Scores d'énergie │ │ │ ├── api_key.py # Clés API tierces │ │ │ └── badge.py # Système de badges │ │ │ │ │ ├── schemas/ # Schémas Pydantic (14 fichiers) │ │ │ ├── user.py │ │ │ ├── match.py │ │ │ ├── prediction.py │ │ │ ├── tweet.py │ │ │ ├── reddit_post.py │ │ │ ├── energy_score.py │ │ │ ├── sentiment_score.py │ │ │ ├── badge.py │ │ │ ├── leaderboard.py │ │ │ ├── backtesting.py │ │ │ ├── public.py │ │ │ └── [autres schémas] │ │ │ │ │ ├── queues/ # Gestion RabbitMQ (4 fichiers) │ │ │ │ │ ├── scrapers/ # Scrapers de données (4 scrapers) │ │ │ ├── twitter_scraper.py # Scraper Twitter │ │ │ ├── reddit_scraper.py # Scraper Reddit │ │ │ ├── rss_scraper.py # Scraper RSS │ │ │ └── README.md # Documentation scraper │ │ │ │ │ ├── services/ # Services métier (8 services) │ │ │ │ │ └── workers/ # Workers asynchrones (4 workers) │ │ │ ├── scripts/ # Scripts utilitaires │ │ └── generate_historical_matches.py # Génération de données de test │ │ │ ├── tests/ # Tests unitaires (30 fichiers) │ │ ├── conftest.py # Configuration pytest │ │ ├── test_api_*.py # Tests API │ │ ├── test_*.py # Tests divers │ │ └── run_tests.py # Script d'exécution des tests │ │ │ ├── workers/ # Scripts d'exécution des workers │ │ ├── run_energy_worker.py │ │ ├── run_scraping_worker.py │ │ └── run_sentiment_worker.py │ │ │ ├── requirements.txt # Dépendances Python │ ├── alembic.ini # Configuration Alembic │ ├── run_server.bat # Script démarrage Windows │ └── run_server.sh # Script démarrage Linux/Mac │ ├── chartbastan/ # Frontend Next.js (Part: frontend) │ │ │ ├── public/ # Assets statiques │ │ └── [fichiers SVG pour icônes] │ │ │ ├── src/ # Code source │ │ │ │ │ ├── app/ # App Router Next.js (22 fichiers) │ │ │ ├── layout.tsx # Layout racine 📄 │ │ │ ├── page.tsx # Page d'accueil 🏠 │ │ │ ├── login/ # Page de login │ │ │ ├── register/ # Page d'inscription │ │ │ ├── dashboard/ # Dashboard principal │ │ │ ├── matches/ # Pages de matchs │ │ │ ├── predictions/ # Pages de prédictions │ │ │ ├── leaderboard/ # Classements │ │ │ ├── history/ # Historique │ │ │ ├── badges/ # Badges │ │ │ ├── referrals/ # Parrainage │ │ │ ├── api/ # API Routes Next.js │ │ │ │ └── auth/ # Routes d'authentification │ │ │ └── [autres pages et routes] │ │ │ │ │ ├── components/ # Composants React (72+ composants) │ │ │ │ │ │ │ ├── ui/ # Composants UI shadcn/ui │ │ │ │ ├── button.tsx # Boutons │ │ │ │ ├── card.tsx # Cartes │ │ │ │ ├── input.tsx # Inputs │ │ │ │ ├── dropdown-menu.tsx # Menus déroulants │ │ │ │ ├── tooltip.tsx # Tooltips │ │ │ │ ├── badge.tsx # Badges UI │ │ │ │ ├── alert.tsx # Alertes │ │ │ │ ├── switch.tsx # Switches │ │ │ │ ├── label.tsx # Labels │ │ │ │ └── skeleton.tsx # Skeletons de chargement │ │ │ │ │ │ │ ├── dashboard/ # Composants Dashboard │ │ │ │ ├── DashboardWrapper.tsx │ │ │ │ ├── RealTimeEnergyChart.tsx │ │ │ │ ├── EnergyWave.tsx │ │ │ │ ├── ConfidenceMeter.tsx │ │ │ │ ├── MatchList.tsx │ │ │ │ ├── MatchListItem.tsx │ │ │ │ ├── PredictionCard.tsx │ │ │ │ ├── RefreshIndicator.tsx │ │ │ │ ├── EnergyWaveTooltip.tsx │ │ │ │ └── ConfidenceTooltip.tsx │ │ │ │ │ │ │ ├── matches/ # Composants Matchs │ │ │ │ │ │ │ ├── predictions/ # Composants Prédictions │ │ │ │ │ │ │ ├── leaderboard/ # Composants Classement │ │ │ │ ├── LeaderboardItem.tsx │ │ │ │ ├── PersonalRank.tsx │ │ │ │ └── RankBadge.tsx │ │ │ │ │ │ │ ├── history/ # Composants Historique │ │ │ │ ├── PredictionHistoryItem.tsx │ │ │ │ ├── AccuracyRate.tsx │ │ │ │ └── SuccessBadge.tsx │ │ │ │ │ │ │ ├── badges/ # Composants Badges │ │ │ │ ├── BadgeCard.tsx │ │ │ │ └── BadgeShare.tsx │ │ │ │ │ │ │ ├── referrals/ # Composants Parrainage │ │ │ │ ├── referralLink.tsx │ │ │ │ └── rewardsList.tsx │ │ │ │ │ │ │ ├── notifications/ # Composants Notifications │ │ │ │ ├── NotificationPanel.tsx │ │ │ │ ├── NotificationPreferences.tsx │ │ │ │ ├── NotificationToast.tsx │ │ │ │ ├── NotificationSwitch.tsx │ │ │ │ ├── PredictionNotificationSettings.tsx │ │ │ │ └── SuccessAnimation.tsx │ │ │ │ │ │ │ ├── calendar/ # Composants Calendrier │ │ │ │ ├── EnergyCalendar.tsx │ │ │ │ ├── CalendarMatchItem.tsx │ │ │ │ └── CalendarFilters.tsx │ │ │ │ │ │ │ ├── comparison/ # Composants Comparaison │ │ │ │ ├── ComparisonChart.tsx │ │ │ │ └── ComparisonCard.tsx │ │ │ │ │ │ │ ├── share/ # Composants Partage │ │ │ │ ├── ShareButton.tsx │ │ │ │ └── ShareMenu.tsx │ │ │ │ │ │ │ ├── auth/ # Composants Authentification │ │ │ │ ├── LoginForm.tsx │ │ │ │ └── RegisterForm.tsx │ │ │ │ │ │ │ ├── landing/ # Composants Landing Page │ │ │ │ ├── HeroSection.tsx │ │ │ │ └── EmailCaptureForm.tsx │ │ │ │ │ │ │ ├── onboarding/ # Composants Onboarding │ │ │ │ ├── Step1HowItWorks.tsx │ │ │ │ ├── Step2HowToUse.tsx │ │ │ │ └── Step3FirstSteps.tsx │ │ │ │ │ │ │ ├── navigation/ # Composants Navigation │ │ │ │ ├── TopTabs.tsx │ │ │ │ └── BottomNav.tsx │ │ │ │ │ │ │ ├── errors/ # Composants Erreurs │ │ │ │ └── RateLimitError.tsx │ │ │ │ │ │ │ ├── limits/ # Composants Limites │ │ │ │ ├── PredictionCounter.tsx │ │ │ │ ├── LimitReached.tsx │ │ │ │ └── PremiumWall.tsx │ │ │ │ │ │ │ └── [tests] # Tests des composants │ │ │ │ │ ├── db/ # Base de données Drizzle │ │ │ └── [configuration Drizzle] │ │ │ │ │ ├── hooks/ # React Hooks personnalisés (9 hooks) │ │ │ │ │ ├── lib/ # Utilitaires et API client (7 fichiers) │ │ │ └── [services d'API, helpers] │ │ │ │ │ ├── middleware/ # Middleware Next.js (3 fichiers) │ │ │ │ │ ├── scripts/ # Scripts de migration (3 scripts) │ │ │ │ │ ├── services/ # Services API (27 services) │ │ │ ├── auth.ts │ │ │ ├── matches.ts │ │ │ ├── predictions.ts │ │ │ ├── [autres services] │ │ │ │ │ ├── stores/ # Zustand stores (2 stores) │ │ │ ├── notificationStore.ts │ │ │ └── onboarding-store.ts │ │ │ │ │ └── tests/ # Tests (48 fichiers) │ │ ├── components/ │ │ └── [autres tests] │ │ │ ├── drizzle/ # Migrations Drizzle │ │ └── [migrations et schema] │ │ │ ├── components.json # Configuration shadcn/ui │ ├── drizzle.config.ts # Configuration Drizzle │ ├── eslint.config.mjs # Configuration ESLint │ ├── next.config.ts # Configuration Next.js │ ├── package.json # Dépendances Node.js │ ├── postcss.config.mjs # Configuration PostCSS │ ├── tsconfig.json # Configuration TypeScript │ ├── vitest.config.ts # Configuration Vitest │ └── chartbastan.db* # Base de données SQLite │ ├── docs/ # Documentation du projet 📚 │ ├── project-scan-report.json # État du workflow de scan │ ├── project-structure.md # Structure du projet │ ├── project-parts-metadata.md # Métadonnées des parties │ ├── existing-documentation-inventory.md # Documentation existante │ ├── user-provided-context.md # Contexte utilisateur │ ├── technology-stack.md # Stack technologique │ ├── architecture-patterns.md # Patterns d'architecture │ └── [autres fichiers générés] │ ├── check-prerequisites.js # Script de vérification des prérequis └── [autres fichiers de configuration] ``` --- ## Points d'Entrée Principaux ### Frontend (chartbastan/) **Point d'entrée principal:** `src/app/page.tsx` - Page d'accueil de l'application - Route: `/` **Point d'entrée Next.js:** `src/app/layout.tsx` - Layout racine qui enveloppe toute l'application - Définit l'UI globale et les providers **Configuration:** - `package.json` - Dépendances et scripts - `next.config.ts` - Configuration Next.js - `tsconfig.json` - Configuration TypeScript ### Backend (backend/) **Point d'entrée principal:** `app/main.py` ⚡ - Application FastAPI - Démarre le serveur Uvicorn sur le port 8000 **Configuration:** - `requirements.txt` - Dépendances Python - `alembic.ini` - Configuration des migrations --- ## Répertoires Critiques ### Frontend | Répertoire | But | Contenu Clé | |------------|------|--------------| | `src/app/` | Routes et pages Next.js | `page.tsx`, `layout.tsx`, `/dashboard/` | | `src/components/` | Composants React réutilisables | 72+ composants UI | | `src/services/` | Services API | Communication avec le backend | | `src/stores/` | État global | Zustand stores | | `src/hooks/` | React Hooks personnalisés | Logique réutilisable | | `src/lib/` | Utilitaires | Helpers et fonctions d'aide | ### Backend | Répertoire | But | Contenu Clé | |------------|------|--------------| | `app/api/` | Endpoints REST | Dépendances d'API | | `app/models/` | Modèles SQLAlchemy | 12 modèles de données | | `app/schemas/` | Schémas Pydantic | Validation de données | | `app/services/` | Logique métier | 8 services | | `app/scrapers/` | Scrapers de données | Twitter, Reddit, RSS | | `app/ml/` | Services ML | Sentiment, prédictions | | `app/workers/` | Workers async | Tâches asynchrones | | `tests/` | Tests unitaires | 30 tests | --- ## Points d'Intégration Frontend-Backend ### Communication API **Frontend → Backend:** - Services dans `src/services/` appellent `http://localhost:8000` - Exemple: `src/services/matches.ts` → `GET http://localhost:8000/api/matches` **Base de données partagée:** - `chartbastan/chartbastan.db` - Accessible par frontend (Drizzle) et backend (SQLAlchemy) --- ## Documentation et Artefacts **_bmad-output/:** - `planning-artifacts/` - PRD, Architecture, Epics - `implementation-artifacts/` - 38 fichiers d'implémentation - `analysis/` - Analyses et brainstorming **docs/:** - Documentation générée par ce workflow - Structure, stack, architecture --- ## Scripts Utilitaires ### Backend | Script | But | |--------|------| | `run_server.bat` | Démarrer le serveur FastAPI (Windows) | | `run_server.sh` | Démarrer le serveur FastAPI (Linux/Mac) | | `scripts/generate_historical_matches.py` | Générer des données de test | ### Frontend | Script (package.json) | But | |---------------------|------| | `npm run dev` | Démarrer le serveur de développement | | `npm run build` | Build de production | | `npm run start` | Démarrer le serveur de production | | `npm run lint` | Exécuter ESLint | | `npm run type-check` | Vérifier les types TypeScript | | `npm run test` | Exécuter les tests Vitest | --- ## Base de Données **SQLite (Phase 1):** - Frontend: `chartbastan/chartbastan.db` (Drizzle ORM) - Backend: Accès à la même base (SQLAlchemy) **Migrations:** - Frontend: `drizzle/migrations/` - Backend: `alembic/versions/` **Phase 2+:** PostgreSQL (production) --- ## Résumé **Total de fichiers source:** - Backend: ~100+ fichiers Python - Frontend: ~300+ fichiers TypeScript/TSX **Architecture:** - Frontend: Next.js App Router avec composants React - Backend: FastAPI avec architecture en couches - Communication: REST API - Base de données: SQLite partagée **Points clés:** - Entry point frontend: `src/app/page.tsx` - Entry point backend: `app/main.py` - Integration: Services `src/services/` → API `http://localhost:8000` - Database: SQLite partagée à `chartbastan/chartbastan.db`