diff --git a/src/main/java/ch/hepia/Main.java b/src/main/java/ch/hepia/Main.java
index e7dbfaacf533303364b3e784b94015b1a9475412..fc487a61550ca4ec5aadb13e965eaae23526d72f 100644
--- a/src/main/java/ch/hepia/Main.java
+++ b/src/main/java/ch/hepia/Main.java
@@ -1,5 +1,6 @@
 package ch.hepia;
 
+import ch.hepia.config.AppConfig;
 import javafx.application.Application;
 import javafx.fxml.FXMLLoader;
 import javafx.scene.Parent;
@@ -15,7 +16,7 @@ import java.io.IOException;
 public class Main extends Application {
 
 	/**
-	 * Main starter
+	 * Mein starter
 	 * @param args The passed arguments
 	 */
 	public static void main(String[] args) {
@@ -25,9 +26,8 @@ public class Main extends Application {
 	@Override
 	public void start(Stage stage) throws IOException {
 		Parent root = FXMLLoader.load(Main.class.getResource("/fxml/ConnectionWindow.fxml"));
-		Scene scene = new Scene(root, 1000, 565);
+		Scene scene = new Scene(root, AppConfig.APP_WIDTH, AppConfig.APP_HEIGHT);
 
-		stage.setTitle("Hepia Net");
 		stage.setScene(scene);
 		stage.show();
 	}
diff --git a/src/main/java/ch/hepia/config/AppConfig.java b/src/main/java/ch/hepia/config/AppConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..75392f61204b8b92c396f2dba22bcc5574cea242
--- /dev/null
+++ b/src/main/java/ch/hepia/config/AppConfig.java
@@ -0,0 +1,13 @@
+package ch.hepia.config;
+
+/**
+ * The variables of the app
+ */
+public final class AppConfig {
+	public static final String APP_NAME = "TransportWave";
+	public static final Integer APP_WIDTH = 1000;
+	public static final Integer APP_HEIGHT = 565;
+
+	public static final String RABBITMQ_HOSTNAME = "redgrave.science";
+	public static final Integer RABBITMQ_PORT = 5672;
+}
diff --git a/src/main/java/ch/hepia/models/User.java b/src/main/java/ch/hepia/models/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..ce13b64522f7b7a187c06c92e463a27aba6a5ce5
--- /dev/null
+++ b/src/main/java/ch/hepia/models/User.java
@@ -0,0 +1,19 @@
+package ch.hepia.models;
+
+import java.util.Objects;
+
+/**
+ * Represents an user.
+ */
+public class User {
+
+	private String username;
+
+	public User(String username){
+		this.username = username;
+	}
+
+	public String getUsername(){
+		return username;
+	}
+}
diff --git a/src/main/java/ch/hepia/ui/ConnectionController.java b/src/main/java/ch/hepia/ui/ConnectionController.java
index f7e1c7af86fe481c64d907268677ac370bc07112..c8f27683fc5b8484e988f8bacdcfc645e918a460 100644
--- a/src/main/java/ch/hepia/ui/ConnectionController.java
+++ b/src/main/java/ch/hepia/ui/ConnectionController.java
@@ -1,5 +1,77 @@
 package ch.hepia.ui;
 
-public class ConnectionController {
+import ch.hepia.Main;
+import ch.hepia.config.AppConfig;
+import javafx.animation.FadeTransition;
+import javafx.event.ActionEvent;
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.fxml.Initializable;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.Label;
+import javafx.scene.control.TextField;
+import javafx.stage.Stage;
+import javafx.stage.WindowEvent;
+import javafx.util.Duration;
 
+import java.net.URL;
+import java.util.ResourceBundle;
+
+public class ConnectionController implements Initializable {
+
+	@FXML
+	private Label appNameLabel;
+
+	@FXML
+	private Label appConnectionStatusLabel;
+
+	@FXML
+	private TextField usernameSelectionTextField;
+
+	@FXML
+	private Label errorLabel;
+
+	@FXML
+	private Button handleConfirmButton;
+
+	@FXML
+	public void handleConfirmButton(ActionEvent event) throws Exception {
+		handleConfirmButton.setDisable(true);
+		String oldText = handleConfirmButton.getText();
+		handleConfirmButton.setText("Veuillez patienter...");
+		if (usernameSelectionTextField.getText().isEmpty()){
+			FadeTransition fadeIn = new FadeTransition(Duration.millis(3000));
+			errorLabel.setText("Veuillez rentrer un nom d'utilisateur.");
+			errorLabel.setVisible(true);
+			fadeIn.setNode(errorLabel);
+			fadeIn.setFromValue(1.0);
+			fadeIn.setToValue(0.0);
+			fadeIn.setCycleCount(1);
+			fadeIn.setAutoReverse(false);
+			fadeIn.playFromStart();
+		} else {
+			// User user = new User(UsernameSelectionTextField.getText());
+			// TODO Send connection event to all
+			Stage stage = (Stage) handleConfirmButton.getScene().getWindow();
+			Parent root = FXMLLoader.load(Main.class.getResource("/fxml/MainWindow.fxml"));
+			Scene scene = new Scene(root, AppConfig.APP_WIDTH, AppConfig.APP_HEIGHT);
+
+			stage.close();
+			stage.setScene(scene);
+			stage.show();
+
+
+		}
+		handleConfirmButton.setText(oldText);
+		handleConfirmButton.setDisable(false);
+	}
+
+	@Override
+	public void initialize(URL location, ResourceBundle resources) {
+		// Faire les initialisations avant affichage ici.
+		appNameLabel.setText(AppConfig.APP_NAME);
+		appConnectionStatusLabel.setText("Merci de rentrer votre nom. Il permettra de vous identifier.");
+	}
 }
diff --git a/src/main/resources/fxml/ConnectionWindow.fxml b/src/main/resources/fxml/ConnectionWindow.fxml
index c08acfafec892cc6294beaa4701a9d75259b3bc8..829ded0106f334353d3209aff341ac7942291971 100644
--- a/src/main/resources/fxml/ConnectionWindow.fxml
+++ b/src/main/resources/fxml/ConnectionWindow.fxml
@@ -1,16 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<?import java.lang.*?>
+<?import javafx.geometry.Insets?>
 <?import javafx.scene.control.*?>
-<?import javafx.scene.text.*?>
-<?import javafx.scene.control.Label?>
-<?import javafx.scene.control.ProgressIndicator?>
 <?import javafx.scene.layout.*?>
 <?import javafx.scene.text.Font?>
-
 <BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="565.0" prefWidth="1000.0" style="-fx-background-color: #bababa;" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ch.hepia.ui.ConnectionController">
    <top>
-      <Label alignment="CENTER" contentDisplay="CENTER" prefHeight="80.0" prefWidth="1000.0" style="-fx-background-color: #35B1EE;" text="AppNameLabel" textAlignment="CENTER" textFill="WHITE" BorderPane.alignment="CENTER">
+      <Label id="AppNameLabel" fx:id="appNameLabel" alignment="CENTER" contentDisplay="CENTER" prefHeight="80.0" prefWidth="1000.0" style="-fx-background-color: #35B1EE;" text="AppNameLabel" textAlignment="CENTER" textFill="WHITE" BorderPane.alignment="CENTER">
          <font>
             <Font size="35.0" />
          </font>
@@ -29,8 +25,25 @@
           <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
         </rowConstraints>
          <children>
-            <ProgressIndicator maxHeight="50.0" maxWidth="50.0" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="CENTER" />
-            <Label alignment="CENTER" style="-fx-padding: 10px;" text="AppConnectionStatusLabel" textAlignment="CENTER" textFill="WHITE" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="BASELINE" />
+            <Label id="AppConnectionStatusLabel" fx:id="appConnectionStatusLabel" alignment="CENTER" text="AppConnectionStatusLabel" textAlignment="CENTER" textFill="WHITE" wrapText="true" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="BASELINE">
+               <GridPane.margin>
+                  <Insets top="10.0" />
+               </GridPane.margin></Label>
+            <Button mnemonicParsing="false" fx:id="handleConfirmButton" onAction="#handleConfirmButton" text="Se connecter" GridPane.columnIndex="1" GridPane.halignment="RIGHT" GridPane.rowIndex="1">
+               <GridPane.margin>
+                  <Insets right="10.0" />
+               </GridPane.margin>
+            </Button>
+            <TextField fx:id="usernameSelectionTextField" maxWidth="205.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
+               <GridPane.margin>
+                  <Insets left="10.0" />
+               </GridPane.margin>
+            </TextField>
+            <Label id="AppConnectionStatusLabel" fx:id="errorLabel" alignment="CENTER" text="ErrorLabel" textAlignment="CENTER" textFill="RED" visible="false" wrapText="true" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="BOTTOM">
+               <GridPane.margin>
+                  <Insets bottom="40.0" />
+               </GridPane.margin>
+            </Label>
          </children>
       </GridPane>
    </center>
diff --git a/src/main/resources/fxml/MainWindow.fxml b/src/main/resources/fxml/MainWindow.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..6f48fb7abcd0c8286bc7ca25a32760a19318fdfd
--- /dev/null
+++ b/src/main/resources/fxml/MainWindow.fxml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.text.*?>
+<?import javafx.scene.paint.*?>
+<?import javafx.scene.shape.*?>
+<?import javafx.scene.control.*?>
+<?import java.lang.*?>
+<?import javafx.scene.layout.*?>
+<?import javafx.collections.FXCollections?>
+
+<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="565.0" prefWidth="1000.0" style="-fx-background-color: #fafafa;" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
+   <top>
+      <Pane maxHeight="48.0" maxWidth="1000.0" minHeight="48.0" minWidth="32.0" prefHeight="48.0" prefWidth="32.0" style="-fx-background-color: #35B1EE;" BorderPane.alignment="CENTER">
+         <children>
+            <ComboBox id="stopComboBox" fx:id="stopComboBox" editable="true" layoutX="12.0" layoutY="10.0" prefHeight="27.0" prefWidth="275.0" promptText="Tapez le nom d'un arrĂȘt..." />
+            <Line endY="48.0" layoutX="300.0" startY="1.0">
+               <stroke>
+                  <LinearGradient>
+                     <stops>
+                        <Stop color="#35b1ee" />
+                        <Stop color="#004dff" offset="1.0" />
+                     </stops>
+                  </LinearGradient>
+               </stroke>
+            </Line>
+            <ComboBox id="directionComboBox" fx:id="directionComboBox" editable="true" layoutX="310.0" layoutY="10.0" prefHeight="27.0" prefWidth="282.0" promptText="Choisissez votre direction" />
+            <Line endY="48.0" layoutX="603.0" layoutY="-1.0" startY="1.0">
+               <stroke>
+                  <LinearGradient>
+                     <stops>
+                        <Stop color="#35b1ee" />
+                        <Stop color="#004dff" offset="1.0" />
+                     </stops>
+                  </LinearGradient>
+               </stroke>
+            </Line>
+         </children>
+      </Pane>
+   </top>
+   <right>
+      <Pane prefHeight="517.0" prefWidth="326.0" BorderPane.alignment="CENTER" />
+   </right>
+   <center>
+      <Pane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
+         <children>
+            <Label id="StopLabel" fx:id="StopLabel" layoutX="14.0" layoutY="14.0" text="ArrĂȘt : CHANGEZ-MOI" textFill="#4c7ba8">
+               <font>
+                  <Font size="28.0" />
+               </font>
+            </Label>
+            <Line endX="100.0" layoutX="115.0" layoutY="49.0" startX="-100.0" stroke="#4c7ba8" />
+         </children>
+      </Pane>
+   </center>
+</BorderPane>
diff --git a/src/main/resources/img/close.png b/src/main/resources/img/close.png
new file mode 100644
index 0000000000000000000000000000000000000000..3378727278afcac737f2b9ca973ea6a92cb95585
Binary files /dev/null and b/src/main/resources/img/close.png differ