diff --git a/readme.md b/readme.md
index bb01c20699d93da2dc5490af31528777e9bc4070..c161f3112545776004deccbcdfd46805117db7c2 100644
--- a/readme.md
+++ b/readme.md
@@ -65,4 +65,6 @@ Clean what you don't need: keep bootstrap-grid.scss with the files & folders imp
     @import "utilities/display";
     @import "utilities/flex";
 
-Import the bootrap-grid.scss in your style.scss
+Import the bootrap-grid.scss in your style.scss as following:
+
+`@import '~scss/bootstrap-grid.scss';`
diff --git a/webapp/src/app/app.module.ts b/webapp/src/app/app.module.ts
index 2d9e72fbd4c9f4672bcaa7c9a0c8be27abbd72a3..fe0fb589839779c492157c34382ca44f3306f4b4 100644
--- a/webapp/src/app/app.module.ts
+++ b/webapp/src/app/app.module.ts
@@ -1,12 +1,14 @@
 import { BrowserModule } from '@angular/platform-browser';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 import { NgModule } from '@angular/core';
+import { HttpClientModule } from '@angular/common/http';
 
 import { AppMaterialModule } from './app.material.module';
 
 import { AppComponent } from './app.component';
 import { AppRoutingModule } from './app-routing.module';
 import { CoreModule } from './core/core.module';
+import { GeosourceModule } from './geosource/geosource.module';
 
 
 @NgModule({
@@ -16,8 +18,10 @@ import { CoreModule } from './core/core.module';
   imports: [
     BrowserModule,
     BrowserAnimationsModule,
+    HttpClientModule,
     AppMaterialModule,
     CoreModule,
+    GeosourceModule,
     AppRoutingModule
   ],
   providers: [],
diff --git a/webapp/src/app/core/components/footer/footer.component.html b/webapp/src/app/core/components/footer/footer.component.html
index 6800e0eb1bdd02470a1e7a55dab3a9ed7d615d50..797c90ef00d15392ad050b8111424c1c85048b4c 100644
--- a/webapp/src/app/core/components/footer/footer.component.html
+++ b/webapp/src/app/core/components/footer/footer.component.html
@@ -1,3 +1,14 @@
-<p>
-  footer works!
-</p>
+<div class="container">
+  <div class="row">
+    <div class="col-sm-10">
+      <a routerLink="/app">CONDITIONS GÉNÉRALES D’UTILISATION</a>
+      <a class="left-border" routerLink="/app">MENTIONS LÉGALES</a>
+      <a class="left-border" routerLink="/app">CONTACT</a>
+      <a class="left-border" routerLink="/app">PLAN DU SITE</a>
+    </div>
+
+    <div class="col-sm-2 footer-logo" >
+      <img src="./assets/img/logo.svg" height="25px" alt="" >
+    </div>
+  </div>
+</div>
\ No newline at end of file
diff --git a/webapp/src/app/core/components/footer/footer.component.scss b/webapp/src/app/core/components/footer/footer.component.scss
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..24d90af5cb3bbcbd63e736ee484b085903e9238a 100644
--- a/webapp/src/app/core/components/footer/footer.component.scss
+++ b/webapp/src/app/core/components/footer/footer.component.scss
@@ -0,0 +1,12 @@
+@import '~@angular/material/theming';
+
+.footer-logo {
+  text-align: right;
+}
+
+.left-border {
+  border-left: 2px solid black;
+  padding-left: 10px;
+  margin-left: 5px;
+}
+
diff --git a/webapp/src/app/core/components/main/main.component.html b/webapp/src/app/core/components/main/main.component.html
index bfa5088f191e9dc19dae414a23c66f29c10a30fa..068953fb09a0d944b2af7d0b9515aa5f125e815b 100644
--- a/webapp/src/app/core/components/main/main.component.html
+++ b/webapp/src/app/core/components/main/main.component.html
@@ -1,9 +1,7 @@
 <app-header></app-header>
 
-<div class="container-fluid">
-  <p>
-    main works!
-  </p>
+<div class="container">
+  <router-outlet></router-outlet>
 </div>
 
-<app-footer></app-footer>
+<app-footer></app-footer>
\ No newline at end of file
diff --git a/webapp/src/app/core/core-routing.module.ts b/webapp/src/app/core/core-routing.module.ts
index 90928dee8fee6426218ddb728ebd039c707db39e..92b0fd24aee71ac0d10b49a2e54c9f32683840ee 100644
--- a/webapp/src/app/core/core-routing.module.ts
+++ b/webapp/src/app/core/core-routing.module.ts
@@ -1,9 +1,23 @@
 import { NgModule } from '@angular/core';
 import { Routes, RouterModule } from '@angular/router';
 import { MainComponent } from './components/main/main.component';
+import { DatasetsComponent } from '../geosource/components/datasets/datasets.component';
 
 const routes: Routes = [
-  { path: 'app', component: MainComponent }
+  {
+    path: 'app',
+    component: MainComponent,
+    children: [
+      {
+        path: '',
+        redirectTo: 'geosource',
+        pathMatch: 'full'
+      },
+      {
+        path: 'geosource',
+        component: DatasetsComponent
+      }
+    ]}
 ];
 
 @NgModule({
diff --git a/webapp/src/app/geosource/components/datasets/datasets.component.html b/webapp/src/app/geosource/components/datasets/datasets.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..153e25d5e3cf9c61591a2e42c0440958372d3d79
--- /dev/null
+++ b/webapp/src/app/geosource/components/datasets/datasets.component.html
@@ -0,0 +1,5 @@
+<div class="row">
+  <mat-card *ngFor="let dataset of datasets" class="col-md-6">
+    {{ dataset.title }}
+  </mat-card>
+</div>
\ No newline at end of file
diff --git a/webapp/src/app/geosource/components/datasets/datasets.component.scss b/webapp/src/app/geosource/components/datasets/datasets.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/webapp/src/app/geosource/components/datasets/datasets.component.spec.ts b/webapp/src/app/geosource/components/datasets/datasets.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8fdfa87224e29c777b99133abc10bedd1439fd2d
--- /dev/null
+++ b/webapp/src/app/geosource/components/datasets/datasets.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { DatasetsComponent } from './datasets.component';
+
+describe('DatasetsComponent', () => {
+  let component: DatasetsComponent;
+  let fixture: ComponentFixture<DatasetsComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [ DatasetsComponent ]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(DatasetsComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/webapp/src/app/geosource/components/datasets/datasets.component.ts b/webapp/src/app/geosource/components/datasets/datasets.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..594e5f72ec02c61b060e37f748df0934df612500
--- /dev/null
+++ b/webapp/src/app/geosource/components/datasets/datasets.component.ts
@@ -0,0 +1,27 @@
+import { Component, OnInit } from '@angular/core';
+import { DatasetService } from '../../services/dataset.service';
+import { Dataset } from '../../models';
+
+@Component({
+  selector: 'app-datasets',
+  templateUrl: './datasets.component.html',
+  styleUrls: ['./datasets.component.scss']
+})
+export class DatasetsComponent implements OnInit {
+
+  datasets: Array<Dataset>;
+
+  constructor(
+    private datasetService: DatasetService
+  ) { }
+
+  ngOnInit() {
+    this.datasetService.getDatasets().subscribe(
+      (res) => {
+        this.datasets = res;
+      }, (err) => {
+
+      });
+  }
+
+}
diff --git a/webapp/src/app/geosource/geosource-routing.module.ts b/webapp/src/app/geosource/geosource-routing.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..07772e3fde93bd52e57689cf141c066bb16ad1d8
--- /dev/null
+++ b/webapp/src/app/geosource/geosource-routing.module.ts
@@ -0,0 +1,11 @@
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+import { DatasetsComponent } from './components/datasets/datasets.component';
+
+const routes: Routes = [];
+
+@NgModule({
+  imports: [RouterModule.forChild(routes)],
+  exports: [RouterModule]
+})
+export class GeosourceRoutingModule { }
diff --git a/webapp/src/app/geosource/geosource.module.ts b/webapp/src/app/geosource/geosource.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ee7201abc31cffde510ebed94a4c096b5641816c
--- /dev/null
+++ b/webapp/src/app/geosource/geosource.module.ts
@@ -0,0 +1,20 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+
+import { GeosourceRoutingModule } from './geosource-routing.module';
+import { DatasetsComponent } from './components/datasets/datasets.component';
+import { GeosourceServices } from './services';
+import { AppMaterialModule } from '../app.material.module';
+
+@NgModule({
+  imports: [
+    CommonModule,
+    GeosourceRoutingModule,
+    AppMaterialModule
+  ],
+  declarations: [DatasetsComponent],
+  providers: [
+    ...GeosourceServices
+  ]
+})
+export class GeosourceModule { }
diff --git a/webapp/src/app/geosource/models/dataset.model.ts b/webapp/src/app/geosource/models/dataset.model.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ed65e8c7f880d9ce34ff017dd36cf088f2e5978c
--- /dev/null
+++ b/webapp/src/app/geosource/models/dataset.model.ts
@@ -0,0 +1,11 @@
+export interface DatasetInterface {
+  'title': string;
+}
+
+export class Dataset {
+  'title': string;
+
+  constructor(data?: DatasetInterface) {
+    Object.assign(this, data);
+  }
+}
diff --git a/webapp/src/app/geosource/models/index.ts b/webapp/src/app/geosource/models/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..60c330768c71f2a4244aa7912296dda0f0f961ee
--- /dev/null
+++ b/webapp/src/app/geosource/models/index.ts
@@ -0,0 +1 @@
+export * from './dataset.model';
diff --git a/webapp/src/app/geosource/services/dataset.service.spec.ts b/webapp/src/app/geosource/services/dataset.service.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..64c3f06307e172dc5db9e00b1297ccdbfe1fabdc
--- /dev/null
+++ b/webapp/src/app/geosource/services/dataset.service.spec.ts
@@ -0,0 +1,15 @@
+import { TestBed, inject } from '@angular/core/testing';
+
+import { DatasetService } from './dataset.service';
+
+describe('DatasetService', () => {
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      providers: [DatasetService]
+    });
+  });
+
+  it('should be created', inject([DatasetService], (service: DatasetService) => {
+    expect(service).toBeTruthy();
+  }));
+});
diff --git a/webapp/src/app/geosource/services/dataset.service.ts b/webapp/src/app/geosource/services/dataset.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c2726b083897dc4148e68cc5dcb81e6c9a92a33f
--- /dev/null
+++ b/webapp/src/app/geosource/services/dataset.service.ts
@@ -0,0 +1,29 @@
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { Dataset } from '../models';
+import { Observable } from 'rxjs/Observable';
+
+// To be removed when using real api
+import 'rxjs/add/observable/of';
+
+@Injectable()
+export class DatasetService {
+
+  constructor(
+    private http: HttpClient
+  ) { }
+
+  getDatasets(): Observable<Array<Dataset>> {
+    // return this.http.request<Dataset>('GET', 'https://elastic2.recette.data.grandlyon.com/elastic/*.meta/_search?pretty', {
+    //   body: {
+    //     'query': {
+    //       'query_string': { 'query': '*', 'fuzziness': 0 }
+    //     }
+    //   }
+    // });
+    let a = new Array<Dataset>();
+    a = [{'title': 'Velov'}, {'title': 'Velov'}];
+    return Observable.of(a);
+  }
+
+}
diff --git a/webapp/src/app/geosource/services/index.ts b/webapp/src/app/geosource/services/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9e482ccb5a65ef56691a3785faa87bbcc45aeb64
--- /dev/null
+++ b/webapp/src/app/geosource/services/index.ts
@@ -0,0 +1,7 @@
+import { DatasetService } from './dataset.service';
+
+export * from './dataset.service';
+
+export const GeosourceServices = [
+  DatasetService
+];
\ No newline at end of file
diff --git a/webapp/src/favicon.ico b/webapp/src/favicon.ico
index 8081c7ceaf2be08bf59010158c586170d9d2d517..5619a8f1cf3db720725e00d80636e23de406e8de 100644
Binary files a/webapp/src/favicon.ico and b/webapp/src/favicon.ico differ
diff --git a/webapp/src/index.html b/webapp/src/index.html
index 7f7cdaad218c56a1538acb7013c1c0e9c1eac4e6..19bf6b53a8f01ed953e9cbe1d89ffdff55d3f5fb 100644
--- a/webapp/src/index.html
+++ b/webapp/src/index.html
@@ -1,5 +1,6 @@
 <!doctype html>
 <html lang="en">
+
 <head>
   <meta charset="utf-8">
   <title>Webapp</title>
@@ -8,7 +9,14 @@
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <link rel="icon" type="image/x-icon" href="favicon.ico">
 </head>
+
 <body>
-  <app-root></app-root>
+  <app-root>
+    <section class="AppLoader">
+      <img src="assets/img/logo.svg" alt="Grand Lyon, la métropole"> 
+      
+    </section>
+  </app-root>
 </body>
-</html>
+
+</html>
\ No newline at end of file
diff --git a/webapp/src/styles.scss b/webapp/src/styles.scss
index df64f3c452e1de8a5b7dad7bfe21e7db81cc51c6..049daecb441b79e4f5024056279f82e40eb1a1c5 100644
--- a/webapp/src/styles.scss
+++ b/webapp/src/styles.scss
@@ -10,6 +10,8 @@ body {
   height: 100%;
 }
 
+@import "~theming/shared/loader";
+
 h1, h2, h3 {
   font-size: 2em;
   font-weight: 700;
diff --git a/webapp/src/theming/_all-theme.scss b/webapp/src/theming/_all-theme.scss
index 50310d0330dc28b2fbba8590f60ac6e6e5396e86..d7f8f19200f01d5f29747ee7705c397a8a7c48f7 100644
--- a/webapp/src/theming/_all-theme.scss
+++ b/webapp/src/theming/_all-theme.scss
@@ -6,14 +6,14 @@
 // Theming des éléments transverses
 
 // @import "shared/form-theme";
-// @import "shared/loader-theme";
+@import "shared/loader-theme";
 // @import "shared/table-theme";
 
-// @mixin app-shared-theme($theme) {
+@mixin app-shared-theme($theme) {
 //   @include app-shared-form-theme($theme);
-//   @include app-shared-loader-theme($theme);
+  @include app-shared-loader-theme($theme);
 //   @include app-shared-table-theme($theme);
-// }
+}
 
 // // Theming des composants Angular
 
diff --git a/webapp/src/theming/shared/_loader-theme.scss b/webapp/src/theming/shared/_loader-theme.scss
new file mode 100644
index 0000000000000000000000000000000000000000..51e5fa01628bb7f46206e990d1d5bc76be165740
--- /dev/null
+++ b/webapp/src/theming/shared/_loader-theme.scss
@@ -0,0 +1,10 @@
+@import '~@angular/material/theming';
+
+@mixin app-shared-loader-theme($theme) {
+  $background: map-get($theme, background);
+
+  .AppLoader {
+    background: mat-color($background, background);
+  }
+}
+
diff --git a/webapp/src/theming/shared/_loader.scss b/webapp/src/theming/shared/_loader.scss
new file mode 100644
index 0000000000000000000000000000000000000000..f0256fc74891949eb590fae68f9bc81567344f3d
--- /dev/null
+++ b/webapp/src/theming/shared/_loader.scss
@@ -0,0 +1,12 @@
+.AppLoader {
+  display:flex;
+  align-items: center;
+  justify-content: center;
+  height:100vh;
+  img {
+    margin-left: 0px;
+    width: 70%;
+    text-align: center;
+  }
+}
+
diff --git a/webapp/tslint.json b/webapp/tslint.json
index 9963d6c3954caaaced81c9015113cb579316c32a..3dc3ff9ef2067ce2c93dff7964b091c237001f68 100644
--- a/webapp/tslint.json
+++ b/webapp/tslint.json
@@ -29,7 +29,7 @@
     "interface-over-type-literal": true,
     "label-position": true,
     "max-line-length": [
-      true,
+      false,
       140
     ],
     "member-access": false,