> For the complete documentation index, see [llms.txt](https://docs.devonyx.fr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devonyx.fr/getting-started/architecture-stack.md).

# Architecture & Stack

### Vue d'ensemble

Dashfarm suit une architecture **trois tiers classique :** un clien web (React), une API REST (Node.js / Express), et une base de## données relationnelle (MySQL). L'ensemble est déployé sur un VPS Debian 12 ainsi que Nginx.

### Stack technique réelle

#### Frontend

| Élément      | Choix                   | Version   |
| ------------ | ----------------------- | --------- |
| Framework    | React                   | 18.2      |
| Langage      | TypeScript              | \~6.x     |
| Build tool   | Vite                    | 8.x       |
| Styling      | Tailwind CSS            | 4.x       |
| Routing      | React Router DOM        | 7.x       |
| Cartographie | Leaflet + react-leaflet | 1.9 / 4.2 |
| Animations   | Framer Motion           | 12.x      |
| Icônes       | Lucide React            | 1.14      |

#### Backend

| Élément            | Choix                    | Version           |
| ------------------ | ------------------------ | ----------------- |
| Runtime            | Node.js                  | ≥ 18 (testé 23.9) |
| Framework          | Express                  | 5.x               |
| Type de modules    | ESM (`"type": "module"`) | —                 |
| Driver MySQL       | mysql2 (promise)         | 3.6               |
| Authentification   | jsonwebtoken (JWT)       | 9.x               |
| Hash mots de passe | bcrypt                   | 6.x               |
| CORS               | cors                     | 2.8               |
| Variables d'env    | dotenv                   | 17.x              |
| Dev server         | tsx watch                | 4.x               |

#### Base de données

* **MySQL** (compatible MariaDB)
* Administration via **phpMyAdmin** en environnement de dev
* Schéma SQL versionné dans `/BDD/schema.sql`
* Jeu de données de test dans `/BDD/data.sql`

#### Infrastructure

* **VPS Debian 12**
* **Nginx** en reverse proxy + terminaison SSL/TLS (Let's Encrypt)
* **PM2** pour la supervision du process Node.js
* **UFW** pour le firewall
* **Certbot** pour le renouvellement automatique des certificats

### Justifications des choix

#### Pourquoi React + TypeScript + Vite ?

React est largement maîtrisé par l'équipe et bénéficie d'un  écosystème mature.TypeScript apporte la sécurité de typage indispensable pour modéliser proprement les entités métier (parcelles, cultures, alertes) et éviter les erreurs en mappant les données API. Vite remplace avantageusement  Create React App grâce à son démarrage instantané et son hot module replacement performant.

#### Pourquoi Node.js + Express ?

Le langage JavaScript unifié front et back simplifie la cohérence du code et la montée en compétence de l'équipe. Express reste le framework Node de référence : minimaliste, documenté, et largement adopté en production. Son architecture asynchrone est adaptée à un usage REST.

#### Pourquoi MySQL ?

Les relations entre entités (utilisateur -> parcelles -> cultures -> observations / alertes) sont fortement structurées. Une base relationnelle est donc plus appropriée qu'une base NoSQL. MySQL est mature,  bien outillé (phpMyAdmin), et inclus par défaut dans la plupart des hébergements.

#### Pourquoi JWT pour l'auth ?

L'authentification par JWT est **stateless** : le serveur n'a pas besoin de stocker les sessions. Cela simplifie le déploiement et permet une éventuelle évolution vers une app mobile ou plusieurs frontends sans refonte de la couche authentification.

#### Pourquoi Ngnx + PM2 ?

Nginx gère efficacement le SSL et sert directement les fichiers statiques du build frontend, déchargeant le serveur Node. PM2 redémarre automatiquement l'API en cas de crash et centralise les logs, ce qui est essentiel pour une mise en production fiable.

#### Schéma d'architecture

<figure><img src="/files/7UZ7VPhZEstc9XgbTQIg" alt=""><figcaption></figcaption></figure>

### Flux de données type

1. L'utilisateur se connecte via le frontend React -> POST `/api/auth/login` .
2. L'API vérifie les credentials (bcrypt) et retourne un JWT.
3. Le token est stocké dans `localStorage`  côté client.
4. Toutes les requêtes suivantes ajoutent le header `Authorization: Bearer <token>` .
5. L'utilisateur consulte ses parcelles, cultures, et alertes.
6. Le moteur d'alertes peut être déclenché manuellement via POST `/api/alertes/run`  : il compare la dernière météo aux règles configurées et crée les alertes correspondantes.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.devonyx.fr/getting-started/architecture-stack.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
