diff --git a/index.md b/index.md
index 50f0bbdd9c4d7bbf530291b95d2ed0e7dbbba24f..8f3dcd7d27ad5bfb79925ace09a59b8e2525882f 100644
--- a/index.md
+++ b/index.md
@@ -1,17 +1,154 @@
-# Hello World
+# Ne soyez plus l'esclave de Doctrine
+
+---
+## Hello!
+
+<div style="width: 50%; float: left;">
+Grégoire Paris
+</div>
+<div style="width: 50%; float: right;">
+Maxime Veber
+</div>
+
+---
+### Une application classique
+
+<pre style="width: 50%; float: left;">
+.
+├── AppBundle
+    ├── Admin
+    ├── AppBundle.php
+    ├── Controller
+    ├── DataFixtures
+    ├── DependencyInjection
+    ├── Entity
+    ├── Form
+    ├── Listeners
+    ├── OAuth
+    ├── Resources
+    ├── Tag
+    └── Twig
+</pre>
+
+---
+### Vous avez dit entité ?
 
 ```php
-<?php
+class TypicalArticle
+{
+    private $id;
+    private $content;
+
+    public function getId() { return $this->id; }
+    public function getContent() { return $this->content; }
+    public function setContent($content)
+    {
+        $this->content = $content;
+        return $this;
+    }
+}
+```
+
+Notes:
+- Pas de validation
+- Pas de règles métier
+- Aucune logique (pas de tests nécessaires)
 
-final class Countdown
+---
+### Nous aimons le DDD
+
+- Séparer le **domaine** de l'infrastructure
+- Représenter les **règles métier** dans les entités
+- Avoir une API expressive
+
+---
+### Doctrine n'a pas besoin de setters
+
+```php
+class NotThatTypicalArticle
 {
-    private $ryan;
+    private $id;
+    private $content;
+
+    public function __construct(string $content)
+    {
+        $this->content = $content;
+    }
+
+    // getters
 }
 ```
 
+Notes:
+- intégrité du domaine
+- Pas de setters par défaut, ni Doctrine ni sf n'en ont besoin
+
 ---
+### Les règles métier
+
+```php
+class Article
+{
+    private $id;
+    private $content;
 
+    public function __construct(string $content)
+    {
+        if (empty($content)) {
+            throw new ArticleHasNoContent();
+        }
+        $this->content = $content;
+    }
 
+    // getters
+}
+```
+
+Note:
+- Impossible de persister une entité invalide
+- Validation compliquée quand on a trop de propriétés
+
+---
+### Les value objects
+
+```php
+class ArticleContent
+{
+    private $content;
+    private $lastModification;
+
+    public function __construct(string $content)
+    {
+        if (empty($content)) {
+            throw new ArticleHasNoContent();
+        }
+        $this->content = $content;
+        $this->lastModification = new \DatetimeImmutable();
+    }
+}
+```
+
+Note:
+- Déportation de la validation dans les value objects
+- Début d'arborescence
+- Doctrine Embeddables
+- Custom types
+
+---
+### Les constructeurs nommés
+
+```php
+class BetterArticle
+{
+    public static function createFromNative(string $content)
+    {
+        return new self(new ArticleContent($content));
+    }
+}
+
+```
+
+---
 # Emoji test
 
 💩