diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4450c01a894a1f0f4f582edb67019753499d9332..c6a49b66d582222647faf3ed7a66cae71769b893 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,20 +1,28 @@
+image: node:alpine # Much smaller than other variants, faster and more resource effective
+
 stages:
-  - install
-  - build
+  - install_dependencies
+  - lint
+  - build_project
 
 cache:
+  key: "${CI_COMMIT_REF_SLUG}" # Branch-specific cache keys to have separate caches across branches.
   paths:
     - node_modules/
-  key: "$CI_BUILD_REF_NAME" # Separate cache for each branch
 
 install_dependencies:
-  stage: install
-  image: node:latest
+  stage: install_dependencies
   script:
     - npm install
 
+lint:
+  stage: lint
+  script:
+    - npm run lint
+  allow_failure: true  
+
 build_project:
-  stage: build
-  image: node:latest
+  stage: build_project
   script:
-    - npm run build
\ No newline at end of file
+    - npm run build
+
diff --git a/src/assets/items/david.jpg b/src/assets/items/david.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8c1ac13073b50a49950aedf26a40b234fe7187a0
Binary files /dev/null and b/src/assets/items/david.jpg differ
diff --git a/src/assets/items/galaxy.jpg b/src/assets/items/galaxy.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4b27cc7551cd7dc918098bd6b323b6734604da85
Binary files /dev/null and b/src/assets/items/galaxy.jpg differ
diff --git a/src/assets/items/goofy.jpg b/src/assets/items/goofy.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..270d8c456cbdde85cb3f721adeb43f7118e2fd95
Binary files /dev/null and b/src/assets/items/goofy.jpg differ
diff --git a/src/assets/items/panda.webp b/src/assets/items/panda.webp
new file mode 100644
index 0000000000000000000000000000000000000000..d4e6d6e132d7a139b8f3babdee6ad6adef80b06d
Binary files /dev/null and b/src/assets/items/panda.webp differ
diff --git a/src/assets/items/sus.jpg b/src/assets/items/sus.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ae3f79f0045917f508d5e708b647f7a414dac561
Binary files /dev/null and b/src/assets/items/sus.jpg differ
diff --git a/src/assets/items/v-buck.png b/src/assets/items/v-buck.png
new file mode 100644
index 0000000000000000000000000000000000000000..fb2c4ae630ea455e059a6e420df50eb9927f3f30
Binary files /dev/null and b/src/assets/items/v-buck.png differ
diff --git a/src/components/BaseComponents/Menu.vue b/src/components/BaseComponents/Menu.vue
index 038fc7c0f2871f0b2bdaa3de736c9a54a1d2009e..1edc325513c43ee7c2373874f229f42bfd07033c 100644
--- a/src/components/BaseComponents/Menu.vue
+++ b/src/components/BaseComponents/Menu.vue
@@ -59,11 +59,11 @@ function toHome() {
 }
 
 function toSavingGoals() {
-    router.push('/news')
+    router.push('/roadmap')
 }
 
 function toLeaderboard() {
-    router.push('/news')
+    router.push('/leaderboard')
 }
 
 function toNews() {
@@ -71,7 +71,7 @@ function toNews() {
 }
 
 function toStore() {
-    router.push('/news')
+    router.push('/shop')
 }
 
 function toSetting() {
@@ -79,7 +79,7 @@ function toSetting() {
 }
 
 function toFeedback() {
-    router.push('/news')
+    router.push('/feedback')
 }
 
 
diff --git a/src/components/Buttons/ShopButton.vue b/src/components/Buttons/ShopButton.vue
new file mode 100644
index 0000000000000000000000000000000000000000..4e28fcdb6e68eb87602d970bd0d612a46270668d
--- /dev/null
+++ b/src/components/Buttons/ShopButton.vue
@@ -0,0 +1,15 @@
+<template>
+    <button type="button" class="btn btn-primary" id="buttonStyle"><img src="@/assets/items/v-buck.png" style="width: 2rem"> +{{ buttonText }}</button>
+</template>
+
+<script>
+export default {
+    props: ['buttonText']
+}
+</script>
+
+<style scoped>
+    #buttonStyle {
+        border-radius: 3rem;
+    }
+</style>
\ No newline at end of file
diff --git a/src/components/LeaderboardComponents/Leaderboard.vue b/src/components/LeaderboardComponents/Leaderboard.vue
index 48317805da23489922b3e7bd0cffbbca7fe30da7..73cc5da9cf9df92b12522a9577cf0e9a2c0faff9 100644
--- a/src/components/LeaderboardComponents/Leaderboard.vue
+++ b/src/components/LeaderboardComponents/Leaderboard.vue
@@ -131,7 +131,7 @@
     top: -0.5rem;
     background-color: #0A58CA;
     position: absolute;
-    left: -1rem;
+    /**left: -1rem;*/
     box-shadow: 0px 15px 11px -6px #7a7a7d;
   }
   
diff --git a/src/components/NewsComponents/NewsComponent.vue b/src/components/NewsComponents/NewsComponent.vue
index 4fe743f4a3af6146dfb226d11e5ac842e27d0677..351bcebaf8e755dea418f44b069910264f75bc8d 100644
--- a/src/components/NewsComponents/NewsComponent.vue
+++ b/src/components/NewsComponents/NewsComponent.vue
@@ -1,8 +1,14 @@
 <script lang="ts">
+interface news {
+  urlToImage: string;
+  title: string;
+  description: string;
+  url: string;
+}
 export default {
   data() {
     return {
-      articles: []
+      articles: [] as news[]
     };
   },
   mounted() {
diff --git a/src/components/SavingGoalComponents/SavingGoal.vue b/src/components/SavingGoalComponents/SavingGoal.vue
new file mode 100644
index 0000000000000000000000000000000000000000..87055bfd4ddaa57c1cc0559488a5c6922221da08
--- /dev/null
+++ b/src/components/SavingGoalComponents/SavingGoal.vue
@@ -0,0 +1,71 @@
+<script lang="ts">
+import SavingGoalList from "@/components/SavingGoalComponents/SavingGoalList.vue";
+import SavingGoalRoadmap from "@/components/SavingGoalComponents/SavingGoalRoadmap.vue";
+import SavingGoalCreate from "@/components/SavingGoalComponents/SavingGoalCreate.vue";
+export default {
+  components: {SavingGoalCreate, SavingGoalRoadmap, SavingGoalList},
+  data() {
+    return {
+      bluePanelMaxHeight: 'auto' as string,
+      createClicked: false as boolean,
+    };
+  },
+  mounted() {
+    this.calculateBluePanelMaxHeight();
+  },
+  methods: {
+    calculateBluePanelMaxHeight() {
+      // Query the timeline element
+      const timelineElement = document.querySelector('.timeline');
+      if (timelineElement instanceof HTMLElement) {
+        // Calculate the max-height based on the height of the timeline
+        const timelineHeight = timelineElement.offsetHeight;
+        this.bluePanelMaxHeight = `${timelineHeight*1.25}px`;
+      } else {
+        this.bluePanelMaxHeight = '700px';
+      }
+    },
+    createGoal() {
+      this.createClicked = true;
+    },
+    goToSavingGoal() {
+      this.createClicked = false;
+    },
+  },
+};
+</script>
+
+<template>
+  <div class="container">
+    <div class="row">
+      <div class="col-lg-4 blue-background overflow-auto" :style="{ 'max-height': bluePanelMaxHeight }">
+        <h3 style="color: white; margin-bottom: 16px">Your saving goals</h3>
+        <div>
+          <button class="btn btn-light" style="font-weight: 600; margin-bottom: 20px" @click="createGoal">Create new saving goal</button>
+        </div>
+        <saving-goal-list @goToSavingGoal="goToSavingGoal"></saving-goal-list>
+      </div>
+      <div class="spacer"/>
+      <saving-goal-create v-if="createClicked"></saving-goal-create>
+      <saving-goal-roadmap v-else></saving-goal-roadmap>
+    </div>
+  </div>
+</template>
+
+<style scoped>
+.container {
+  margin: 0;
+  width: 100%;
+  box-sizing: unset;
+}
+
+.blue-background {
+  background-color: #0A58CA;
+  width: 27%;
+}
+
+.spacer {
+  width: 10%;
+  background-color: transparent;
+}
+</style>
\ No newline at end of file
diff --git a/src/components/SavingGoalComponents/SavingGoalCreate.vue b/src/components/SavingGoalComponents/SavingGoalCreate.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b23db87fafb28b31bf230da08b90f3bb56da23e6
--- /dev/null
+++ b/src/components/SavingGoalComponents/SavingGoalCreate.vue
@@ -0,0 +1,44 @@
+<script setup lang="ts">
+
+</script>
+
+<template>
+  <div class="col-lg-8">
+    <h1>Create a new saving goal!</h1>
+    <br>
+    <p>Create a name for this saving goal: </p>
+    <div class="input-group mb-3">
+      <span class="input-group-text" id="basic-addon1">Name:</span>
+      <input type="text" class="form-control" placeholder="Name of Saving Goal" aria-label="Username" aria-describedby="basic-addon1">
+    </div>
+
+    <p>Add a description to this saving goal: </p>
+    <div class="input-group mb-3">
+      <span class="input-group-text" id="basic-addon2">Description:</span>
+      <textarea class="form-control" aria-label="With textarea"></textarea>
+    </div>
+
+    <!--Change this to date picker?-->
+    <p>How long should this saving goal last: </p>
+    <div class="input-group mb-3">
+      <input type="text" class="form-control" aria-label="Amount of days" placeholder="Amount of days (as number)">
+      <span class="input-group-text">Days</span>
+    </div>
+
+    <p>How much do you want to save during this saving goal: </p>
+    <div class="input-group">
+      <input type="text" class="form-control" aria-label="" placeholder="NOK (as number)">
+      <span class="input-group-text">NOK</span>
+    </div>
+
+    <br>
+    <button class="btn btn-primary btn-lg">Create goal!</button>
+  </div>
+</template>
+
+<style scoped>
+.col-lg-8 {
+  width: 63%;
+  margin-top: 50px;
+}
+</style>
\ No newline at end of file
diff --git a/src/components/SavingGoalComponents/SavingGoalList.vue b/src/components/SavingGoalComponents/SavingGoalList.vue
new file mode 100644
index 0000000000000000000000000000000000000000..7ecf2ae93c323b7b8aa5bf3ec4bccc4e7ec02dc1
--- /dev/null
+++ b/src/components/SavingGoalComponents/SavingGoalList.vue
@@ -0,0 +1,47 @@
+<script setup lang="ts">
+import {ref} from "vue";
+
+const savingGoalList = ref([
+  { title: 'Spain trip', MoneyTarget: '200kr', description: 'You wanted to save 200kr on a spain trip' },
+  { title: 'Italy Escapade', MoneyTarget: '200kr', description: 'Experience the magic of Italy with us! Our goal is to save 200kr for an amazing trip to Italy.' },
+  { title: 'French Getaway', MoneyTarget: '200kr', description: 'Join us as we plan to save 200kr for a delightful trip to France!' },
+  { title: 'Exploring Greece', MoneyTarget: '200kr', description: 'Dreaming of Greece? Lets work together to save 200kr for that unforgettable trip!' },
+  { title: 'German Adventure', MoneyTarget: '200kr', description: 'Discover the charm of Germany with us! We are aiming to save 200kr for this exciting adventure.' },
+  { title: 'German Adventure', MoneyTarget: '200kr', description: 'Discover the charm of Germany with us! We are aiming to save 200kr for this exciting adventure.' },
+  { title: 'German Adventure', MoneyTarget: '200kr', description: 'Discover the charm of Germany with us! We are aiming to save 200kr for this exciting adventure.' },
+  { title: 'German Adventure', MoneyTarget: '200kr', description: 'Discover the charm of Germany with us! We are aiming to save 200kr for this exciting adventure.' }
+])
+
+const emits = defineEmits(['goToSavingGoal']);
+
+const goToSavingGoal = () => {
+  emits('goToSavingGoal');
+};
+</script>
+
+<template>
+  <div v-for="(savingGoal, index) in savingGoalList" :key="index" class="card bg-primary">
+    <div class="card-header">
+      Saving goal {{ index + 1 }}
+    </div>
+    <div class="card-body">
+      <h5 class="card-title">{{ savingGoal.title }}</h5>
+      <p class="card-text">{{ savingGoal.description }}</p>
+      <a href="#" class="btn btn-light" @click="goToSavingGoal">Go to saving goal</a>
+    </div>
+  </div>
+</template>
+
+<style scoped>
+.card-header, .card-text, .card-title {
+  color: white;
+}
+
+* {
+  font-weight: 600;
+}
+
+.card {
+  margin-bottom: 20px;
+}
+</style>
\ No newline at end of file
diff --git a/src/components/SavingGoalComponents/SavingGoalRoadmap.vue b/src/components/SavingGoalComponents/SavingGoalRoadmap.vue
index 89f6587d79ed679fcd92d02af1d2d3c5dc31aef9..4532527ffd38a4d8f50542bb90e6e2f4c3c05a6d 100644
--- a/src/components/SavingGoalComponents/SavingGoalRoadmap.vue
+++ b/src/components/SavingGoalComponents/SavingGoalRoadmap.vue
@@ -1,6 +1,5 @@
 <script lang="ts">
 interface Step {
-  image: string;
   title: string;
   showPanel: boolean;
   description: string;
@@ -9,69 +8,91 @@ interface Step {
 export default {
   data() {
     return {
+      image: 'https://th.bing.com/th/id/OIG3.NMbdxmKYKVnxYGLOa0Z0?w=1024&h=1024&rs=1&pid=ImgDetMain' as string,
+      altImage: 'https://th.bing.com/th/id/OIG4.gVWUC.rwCb8faTNx31yU?w=1024&h=1024&rs=1&pid=ImgDetMain' as string,
+      title: 'Spain trip' as string,
       //This will be changed to info gathered from backend
       steps: [
-        { image: 'https://th.bing.com/th/id/OIG4.GHQvXMljb6YONcnYvfuE?pid=ImgGn', altImage: 'https://th.bing.com/th/id/OIG2.dzSCGYTFEglaUPj1maja?pid=ImgGn', title: 'Challenge 1', showPanel: false, description: 'Save 50kr on coffee in 3 days', percentFinished: 22 },
-        { image: 'https://th.bing.com/th/id/OIG4.GHQvXMljb6YONcnYvfuE?pid=ImgGn', altImage: 'https://th.bing.com/th/id/OIG2.dzSCGYTFEglaUPj1maja?pid=ImgGn', title: 'Challenge 2', showPanel: false, description: 'Save 500kr on food in 7 days', percentFinished: 73 },
-        { image: 'https://th.bing.com/th/id/OIG4.GHQvXMljb6YONcnYvfuE?pid=ImgGn', altImage: 'https://th.bing.com/th/id/OIG2.dzSCGYTFEglaUPj1maja?pid=ImgGn', title: 'Challenge 3', showPanel: false, description: 'Save 350kr on clothes in 5 days', percentFinished: 50 },
-        { image: 'https://th.bing.com/th/id/OIG4.GHQvXMljb6YONcnYvfuE?pid=ImgGn', altImage: 'https://th.bing.com/th/id/OIG2.dzSCGYTFEglaUPj1maja?pid=ImgGn', title: 'Challenge 4', showPanel: false, description: 'Save 150kr on coffee in 4 days', percentFinished: 10 },
-        { image: 'https://th.bing.com/th/id/OIG4.GHQvXMljb6YONcnYvfuE?pid=ImgGn', altImage: 'https://th.bing.com/th/id/OIG2.dzSCGYTFEglaUPj1maja?pid=ImgGn', title: 'Challenge 5', showPanel: false, description: 'Save 50kr on coffee in 3 days', percentFinished: 90 }
+        { title: 'Challenge 1', showPanel: false, description: 'Save 50kr on coffee in 3 days', percentFinished: 22 },
+        { title: 'Challenge 2', showPanel: false, description: 'Save 500kr on food in 7 days', percentFinished: 73 },
+        { title: 'Challenge 3', showPanel: false, description: 'Save 350kr on clothes in 5 days', percentFinished: 50 },
+        { title: 'Challenge 4', showPanel: false, description: 'Save 150kr on coffee in 4 days', percentFinished: 10 },
+        { title: 'Challenge 5', showPanel: false, description: 'Save 50kr on coffee in 3 days', percentFinished: 90 }
       ]
+      ,
+      bluePanelMaxHeight: 'auto' as string
     };
   },
   methods: {
     togglePanel(step: Step) {
-      step.showPanel = !step.showPanel;
-    }
-  }
+      if (step.showPanel) {
+        // If the clicked panel is already open, close it
+        step.showPanel = false;
+      } else {
+        //Close all panels before opening new one
+        //Ensure only one panel open at a time
+        this.steps.forEach((s) => (s.showPanel = false));
+        //Open clicked on panel
+        step.showPanel = true;
+      }
+    },
+  },
 };
 </script>
 
 <template>
-  <div class="container">
-    <div class="row">
-      <div class="col-lg-12">
-        <ul class="timeline">
-          <li v-for="(step, index) in steps" :key="index" :class="{ 'timeline-inverted': index % 2 !== 0 }">
-            <div class="timeline-image" @click="togglePanel(step)">
-              <img class="circular-image" :src="step.showPanel ? step.altImage : step.image" alt="">
+  <div class="col-lg-8">
+    <div class="SavingGoalTitle text-center">{{title}}</div>
+    <ul class="timeline">
+      <li v-for="(step, index) in steps" :key="index" :class="{ 'timeline-inverted': index % 2 !== 0 }">
+        <div class="timeline-image z-1" @click="togglePanel(step)">
+          <img class="circular-image" :src="step.showPanel ? altImage : image" alt="">
+        </div>
+        <div class="timeline-panel z-3" v-show="step.showPanel">
+          <div class="timeline-heading">
+            <h4>{{ step.title }}</h4>
+            <h4 class="subheading">{{step.description}}</h4>
+          </div>
+          <div class="timeline-body">
+            <br>
+            <p class="">
+              Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+            </p>
+            <br>
+            <div class="progress">
+              <div class="progress-bar" role="progressbar" :style="{ width: step.percentFinished + '%' }" :aria-valuenow="step.percentFinished" aria-valuemin="0" aria-valuemax="100"></div>
+            </div>
+            <br>
+            <div class="form-check form-check-inline">
+              <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1">
+              <label class="form-check-label" style="color:white;" for="inlineCheckbox1">Day 1</label>
             </div>
-            <div class="timeline-panel" v-show="step.showPanel">
-              <div class="timeline-heading">
-                <h4>{{ step.title }}</h4>
-                <h4 class="subheading">{{step.description}}</h4>
-              </div>
-              <div class="timeline-body">
-                <br>
-                <p class="">
-                  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
-                </p>
-                <br>
-                <div class="progress">
-                  <div class="progress-bar bg-success" role="progressbar" :style="{ width: step.percentFinished + '%' }" :aria-valuenow="step.percentFinished" aria-valuemin="0" aria-valuemax="100"></div>
-                </div>
-                <br>
-                <div class="form-check form-check-inline">
-                  <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1">
-                  <label class="form-check-label" style="color:white;" for="inlineCheckbox1">Day 1</label>
-                </div>
-                <div class="form-check form-check-inline">
-                  <input class="form-check-input" type="checkbox" id="inlineCheckbox2" value="option2">
-                  <label class="form-check-label" style="color:white;" for="inlineCheckbox1">Day 2</label>
-                </div>
-              </div>
+            <div class="form-check form-check-inline">
+              <input class="form-check-input" type="checkbox" id="inlineCheckbox2" value="option2">
+              <label class="form-check-label" style="color:white;" for="inlineCheckbox1">Day 2</label>
             </div>
-            <div class="line" v-if="index < steps.length - 1"></div>
-          </li>
-        </ul>
-      </div>
-    </div>
+          </div>
+        </div>
+        <div class="line" v-if="index < steps.length - 1"></div>
+      </li>
+    </ul>
   </div>
 </template>
 
 <style scoped>
-.container {
-  margin-bottom:20px;
+.col-lg-8 {
+  width: 63%;
+  margin-bottom: 20px;
+}
+
+.SavingGoalTitle {
+  font-weight: 600;
+  font-size: 45px;
+  margin-bottom:40px;
+  padding-bottom: 10px;
+  color: white;
+  border-radius: 0 0 1em 1em;
+  background-color: #0A58CA;
 }
 
 .timeline {
@@ -84,14 +105,14 @@ export default {
 .timeline>li:nth-child(even) {
   position: relative;
   margin-bottom: 50px;
-  height: 180px;
+  height: 100px;
   right:-100px;
 }
 
 .timeline>li:nth-child(odd) {
   position: relative;
   margin-bottom: 50px;
-  height: 180px;
+  height: 100px;
   left:-100px;
 }
 
@@ -112,7 +133,7 @@ export default {
   width: 41%;
   padding: 0 20px 20px 30px;
   text-align: right;
-  background-color: #32CD32;
+  background-color: #0A58CA;
   border-radius: 1em;
 }
 
@@ -134,13 +155,13 @@ export default {
   z-index: 100;
   position: absolute;
   left: 50%;
-  border: 7px solid #006400;
+  border: 7px solid #001664;
   border-radius: 100%;
-  background-color: #00FF7F;
-  box-shadow: 0 0 5px #00FF00;
-  width: 200px;
-  height: 200px;
-  margin-left: -100px;
+  background-color: #00ffff;
+  box-shadow: 0 0 5px #00e1ff;
+  width: 100px;
+  height: 100px;
+  margin-left: -50px;
   cursor:pointer;
 }
 
@@ -199,36 +220,42 @@ export default {
 .timeline>li:nth-child(odd) .line:before {
   content: "";
   position: absolute;
-  top: 60px;
+  top: 30px;
   bottom: 0;
-  left: 730px;
-  width: 45px;
-  height:340px;
+  left: 700px;
+  width: 30px;
+  height:320px;
   background-color: grey;
   -ms-transform: rotate(-44deg); /* IE 9 */
   -webkit-transform: rotate(-44deg); /* Safari */
   transform: rotate(-44deg);
   border: dotted white 3px;
   /**box-shadow: 0 0 5px #00FF00;**/
+  display:none;
 }
 /*Style for odd div.line*/
 .timeline>li:nth-child(even) .line:before  {
   content: "";
   position: absolute;
-  top: 60px;
+  top: 30px;
   bottom: 0;
-  left: 520px;
-  width: 45px;
-  height:340px;
+  left: 480px;
+  width: 30px;
+  height:320px;
   background-color: grey;
   -ms-transform: rotate(44deg); /* IE 9 */
   -webkit-transform: rotate(44deg); /* Safari */
   transform: rotate(44deg);
   border: dotted white 3px;
   /*box-shadow: 0 0 5px #00FF00;*/
+  display:none;
 }
 /* Medium Devices, .visible-md-* */
 @media (min-width: 992px) and (max-width: 1199px) {
+  .col-lg-8 {
+    width: 100%;
+  }
+
   .timeline > li:nth-child(even) {
     margin-bottom: 0;
     min-height: 0;
diff --git a/src/views/FeedbackView.vue b/src/views/FeedbackView.vue
index 37264535422ff7742a1e6e410d4e6338c0752598..6eef349d66eda4e3145a12372e9061ccf2cecedb 100644
--- a/src/views/FeedbackView.vue
+++ b/src/views/FeedbackView.vue
@@ -77,7 +77,6 @@ textarea {
   transition: background-color 0.2s ease 0s;
 }
 
-
 textarea:focus {
   background: none repeat scroll 0 0 #FFFFFF;
   outline-width: 0;
diff --git a/src/views/LeaderboardView.vue b/src/views/LeaderboardView.vue
index 7f58d1768c051c4c1b780a40ba89e02f88e6964d..681a963a43723485f5eac19e1a7b8b3d32753140 100644
--- a/src/views/LeaderboardView.vue
+++ b/src/views/LeaderboardView.vue
@@ -1,10 +1,26 @@
 <template>
+    <div id="dropdownContainer">
+        <Button class="btn btn-primary text-white leaderBoardButton">Global</Button>
+        <Button class="btn btn-primary text-white leaderBoardButton">Friends</Button>
+    </div>
     <main>
         <div id="leaderboard">
-            <h1>Ranking</h1>
+            <h1><img src="@/assets/items/v-buck.png" style="width: 2rem"> Total points</h1>
+            <Leaderboard :leaderboard="leaderboardData" @navigateToUserProfile="navigateToUserProfile" />
+        </div>
+        <div id="leaderboard">
+            <h1><img src="@/assets/icons/fire.png" style="width: 2rem"> Current streak</h1>
+            <Leaderboard :leaderboard="leaderboardData" @navigateToUserProfile="navigateToUserProfile" />
+        </div>
+        <div id="leaderboard">
+            <h1><img src="@/assets/icons/fire.png" style="width: 2rem"> Highest streak</h1>
             <Leaderboard :leaderboard="leaderboardData" @navigateToUserProfile="navigateToUserProfile" />
         </div>
     </main>
+    <div id = "communityContainer">
+        <h1>Total points earned as a community</h1>
+        <h2>1000000 <img src="@/assets/items/v-buck.png" style="width: 2rem"></h2>
+    </div>
 </template>
 
 <script setup lang="ts">
@@ -31,18 +47,49 @@ const navigateToUserProfile = (userId: number) => {
 
 <style scoped>
 main {
+    margin-top: 2rem;
+    margin-bottom: 4rem;
     width: 100%;
     display: flex;
-    justify-content: center;
+    justify-content: space-around;
     align-items: center;
+    flex-wrap: wrap;
+    flex-direction: row;
 }
 
 #leaderboard {
-    width: 60%;
+    width: 400px;
     display: flex;
     flex-direction: column;
     align-items: center;
     justify-content: center;
     margin-bottom: 3rem;
 }
+
+h1 {
+    font-weight: 500;
+    margin-bottom: 1rem;
+}
+
+#dropdownContainer {
+    display: flex;
+    justify-content: center;
+    margin-bottom: 2rem;
+    margin-top: 3rem;
+}
+
+#communityContainer {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    flex-direction: column;
+    margin-bottom: 5rem;
+}
+
+.leaderBoardButton {
+  padding: 1rem 4rem;
+  font-weight: 700;
+  border-radius: 2rem;
+  margin: 1rem;
+}
 </style>
\ No newline at end of file
diff --git a/src/views/SavingGoalView/RoadmapView.vue b/src/views/SavingGoalView/RoadmapView.vue
index 17c812a5d70eebc4abe899b255f9522f4dc663f8..cdf655318efd24b40aab9b9e8fa1b82c3d30d3df 100644
--- a/src/views/SavingGoalView/RoadmapView.vue
+++ b/src/views/SavingGoalView/RoadmapView.vue
@@ -1,7 +1,7 @@
 <script setup lang="ts">
-import SavingGoalRoadmap2 from "@/components/SavingGoalComponents/SavingGoalRoadmap.vue";
+import SavingGoal from "@/components/SavingGoalComponents/SavingGoal.vue";
 </script>
 
 <template>
-<saving-goal-roadmap2></saving-goal-roadmap2>
+<saving-goal></saving-goal>
 </template>
\ No newline at end of file
diff --git a/src/views/ShopView.vue b/src/views/ShopView.vue
index 9095328987e0c5479f039dd59d667f0533d4cb71..55ef335f11efa0b03a899182231f1208d0f17888 100644
--- a/src/views/ShopView.vue
+++ b/src/views/ShopView.vue
@@ -1,3 +1,108 @@
 <template>
-    Hallo
-</template>
\ No newline at end of file
+    <div class="container">
+        <div class="row">
+            <div class="col-md-12">
+                <h1>League</h1>
+                <div class="category row justify-content-between mb-5 m-2">
+                    <!--<div class="col-md-4" v-for="product in products" :key="product.id">-->
+                    <div class="card text-center" style="width: 16rem; border: none">
+                        <img src="@/assets/items/galaxy.jpg" class="card-img-top" alt="...">
+                        <div class="card-body">
+                            <h5 class="card-title">The panda</h5>
+                            <ShopButton button-text="100"></ShopButton>
+                        </div>
+                    </div>
+                    <div class="card text-center" style="width: 16rem; border: none">
+                        <img src="@/assets/items/galaxy.jpg" class="card-img-top" alt="...">
+                        <div class="card-body">
+                            <h5 class="card-title">The panda</h5>
+                            <ShopButton button-text="100"></ShopButton>
+                        </div>
+                    </div>
+                    <div class="card text-center" style="width: 16rem; border: none">
+                        <img src="@/assets/items/galaxy.jpg" class="card-img-top" alt="...">
+                        <div class="card-body">
+                            <h5 class="card-title">The panda</h5>
+                            <ShopButton button-text="100"></ShopButton>
+                        </div>
+                    </div>
+                    <div class="card text-center" style="width: 16rem; border: none">
+                        <img src="@/assets/items/galaxy.jpg" class="card-img-top" alt="...">
+                        <div class="card-body">
+                            <h5 class="card-title">The panda</h5>
+                            <ShopButton button-text="100"></ShopButton>
+                        </div>
+                    </div>
+
+
+                    <!--</div>-->
+                </div>
+            </div>
+            <div class="col-md-12">
+                <h1>Fantacy</h1>
+                <div class="category row justify-content-between mb-5 m-2">
+                    <!--<div class="col-md-4" v-for="product in products" :key="product.id">-->
+                    <div class="card text-center" style="width: 16rem; border: none">
+                        <img src="@/assets/items/galaxy.jpg" class="card-img-top" alt="...">
+                        <div class="card-body">
+                            <h5 class="card-title">The panda</h5>
+                            <ShopButton button-text="100"></ShopButton>
+                        </div>
+                    </div>
+                    <div class="card text-center" style="width: 16rem; border: none">
+                        <img src="@/assets/items/galaxy.jpg" class="card-img-top" alt="...">
+                        <div class="card-body">
+                            <h5 class="card-title">The panda</h5>
+                            <ShopButton button-text="100"></ShopButton>
+                        </div>
+                    </div>
+                    <div class="card text-center" style="width: 16rem; border: none">
+                        <img src="@/assets/items/galaxy.jpg" class="card-img-top" alt="...">
+                        <div class="card-body">
+                            <h5 class="card-title">The panda</h5>
+                            <ShopButton button-text="100"></ShopButton>
+                        </div>
+                    </div>
+                    <div class="card text-center" style="width: 16rem; border: none">
+                        <img src="@/assets/items/galaxy.jpg" class="card-img-top" alt="...">
+                        <div class="card-body">
+                            <h5 class="card-title">The panda</h5>
+                            <ShopButton button-text="100"></ShopButton>
+                        </div>
+                    </div>
+
+
+                    <!--</div>-->
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script setup lang="ts">
+import ShopButton from '@/components/Buttons/ShopButton.vue';
+</script>
+
+<style scoped>
+.card {
+    box-shadow: none;
+    margin: 10px;
+    border-radius: 8px;
+    padding-left: 5px;
+    padding-right: 5px;
+    /* Rounded corners */
+}
+
+.card:hover {
+    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+}
+
+.card-body{
+    height: 100px;
+    padding: 5px;
+}
+
+.col-md-12 {
+    border-bottom: 2px solid #000000;
+}
+</style>
\ No newline at end of file