diff --git a/src/main/java/ch/hepia/Main.java b/src/main/java/ch/hepia/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..fc487a61550ca4ec5aadb13e965eaae23526d72f
--- /dev/null
+++ b/src/main/java/ch/hepia/Main.java
@@ -0,0 +1,34 @@
+package ch.hepia;
+
+import ch.hepia.config.AppConfig;
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+
+import java.io.IOException;
+
+
+/**
+ * Starts up the app.
+ */
+public class Main extends Application {
+
+	/**
+	 * Mein starter
+	 * @param args The passed arguments
+	 */
+	public static void main(String[] args) {
+		launch(args);
+	}
+
+	@Override
+	public void start(Stage stage) throws IOException {
+		Parent root = FXMLLoader.load(Main.class.getResource("/fxml/ConnectionWindow.fxml"));
+		Scene scene = new Scene(root, AppConfig.APP_WIDTH, AppConfig.APP_HEIGHT);
+
+		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
new file mode 100644
index 0000000000000000000000000000000000000000..1f7f5e083adcfb01c788916ba6909e415519a8ef
--- /dev/null
+++ b/src/main/java/ch/hepia/ui/ConnectionController.java
@@ -0,0 +1,76 @@
+package ch.hepia.ui;
+
+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());
+			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
new file mode 100644
index 0000000000000000000000000000000000000000..829ded0106f334353d3209aff341ac7942291971
--- /dev/null
+++ b/src/main/resources/fxml/ConnectionWindow.fxml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.geometry.Insets?>
+<?import javafx.scene.control.*?>
+<?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 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>
+      </Label>
+   </top>
+   <center>
+      <GridPane BorderPane.alignment="CENTER">
+        <columnConstraints>
+          <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
+          <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
+            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
+        </columnConstraints>
+        <rowConstraints>
+          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
+          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
+          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
+        </rowConstraints>
+         <children>
+            <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>
+</BorderPane>
diff --git a/src/main/resources/fxml/MainWindow.fxml b/src/main/resources/fxml/MainWindow.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..df15eceb11d4e6656f83d662e0c1f9ec21ad5d2e
--- /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 destination..." />
+            <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