diff --git a/frontend/src/components/KeggCard.vue b/frontend/src/components/KeggCard.vue
new file mode 100644
index 0000000000000000000000000000000000000000..6b9748110777712cd82b3ff1610401ec5bef5419
--- /dev/null
+++ b/frontend/src/components/KeggCard.vue
@@ -0,0 +1,111 @@
+<template>
+  <v-flex xs12 md6 lg4>
+    <v-card>
+        <v-toolbar-title class="function white--text">KEGG Function</v-toolbar-title>
+        <div class="text-xs-center" v-if="kegg_detail.length == 0">
+          <v-progress-circular
+            indeterminate
+            color="function"
+          ></v-progress-circular>
+        </div>
+        <v-list v-else>
+          <template v-for="(item, index) in kegg_detail">
+            <v-divider
+              v-if="index > 0"
+              :key="index"
+            ></v-divider>
+            <v-expansion-panel v-if="item.expand" :key="item.title">
+              <v-expansion-panel-content>
+                <template v-slot:header>
+                  <div>{{item.title}}</div>
+                </template>
+                <v-card>
+                  <v-list>
+                    <template v-for="(element, elindex) in item.content">
+                      <v-divider
+                        v-if="elindex > 0"
+                        :key="elindex"
+                      ></v-divider>
+                      <v-list-tile :key="element.title">
+                        <v-list-tile-content :key="element.content">
+                          <v-list-tile-title v-if="element.title" v-html="element.title"></v-list-tile-title>
+                          <v-list-tile-title v-else v-html="elindex"></v-list-tile-title>
+                          <v-list-tile-sub-title v-if="element.authors" v-html="element.authors"></v-list-tile-sub-title>
+                          <v-list-tile-sub-title v-else v-html="element"></v-list-tile-sub-title>
+                        </v-list-tile-content>
+                      </v-list-tile>
+                    </template>
+                  </v-list>
+                </v-card>
+              </v-expansion-panel-content>
+            </v-expansion-panel>
+            <v-list-tile v-else :key="item.title">
+              <v-list-tile-content :key="item.title">
+                <v-list-tile-title v-html="item.title"></v-list-tile-title>
+                <v-list-tile-sub-title v-html="item.content"></v-list-tile-sub-title>
+              </v-list-tile-content>
+            </v-list-tile>
+          </template>
+        </v-list>
+    </v-card>
+  </v-flex>
+</template>
+
+<script>
+import axios from 'axios';
+export default {
+  name: 'KeggCard',
+  props: {
+    kegg_id: String,
+  },
+  watch: {
+    kegg_id: function (val, oldVal) {
+      this.getKeggDetail();
+    }
+  },
+  data() {
+    return {
+      kegg_detail: [],
+    };
+  },
+  methods: {
+    getKeggDetail() {
+      axios.get('http://togows.org/entry/kegg-orthology/' + this.kegg_id + '.json', {
+        headers: {
+          Accept: 'application/json',
+        },
+      })
+      .then((response) => {
+        this.kegg_detail = [
+          {
+            title: 'ID',
+            content: response.data[0].entry_id,
+          },
+          {
+            title: 'Name',
+            content: response.data[0].name,
+          },
+          {
+            title: 'Definition',
+            content: response.data[0].definition,
+          },
+          {
+            title: 'Pathways',
+            content: response.data[0].pathways,
+            expand: true,
+          },
+          {
+            title: 'References',
+            content: response.data[0].references,
+            expand: true,
+          },
+        ];
+      })
+      .catch((error) => {
+        console.log(error);
+      });
+    }
+  }
+}
+
+</script>
diff --git a/frontend/src/main.js b/frontend/src/main.js
index 30babbdcaf86fb6f2ec994dd95dfbce36414d8c7..f8da182a6f87ecc413cb94c14618e17de8b29342 100644
--- a/frontend/src/main.js
+++ b/frontend/src/main.js
@@ -12,6 +12,9 @@ Vue.use(Vuetify, {
   theme: {
     primary: '#263238',
     secondary: '#508991',
+    tertiary: '#f5edf0',
+    function: '#65b891',
+    taxonomy: '#886f68',
   },
 });
 
diff --git a/frontend/src/views/GeneDetail.vue b/frontend/src/views/GeneDetail.vue
index 5c598fefe959d4b8ac25d8b48d18c513c564a191..565fa0e14791fdb1923d8a9a772c529498f5a230 100644
--- a/frontend/src/views/GeneDetail.vue
+++ b/frontend/src/views/GeneDetail.vue
@@ -15,9 +15,10 @@
           grid-list-md
         >
           <v-layout row wrap>
+            <!-- General information -->
             <v-flex xs12 md6 lg4>
               <v-card>
-                  <v-toolbar-title class="secondary white--text">Gene information</v-toolbar-title>
+                  <v-toolbar-title class="primary white--text">Gene information</v-toolbar-title>
                   <v-list>
                     <template v-for="(item, index) in gene_detail">
                       <v-divider
@@ -34,50 +35,8 @@
                   </v-list>
               </v-card>
             </v-flex>
-            <v-flex xs12 md6 lg4>
-              <v-card>
-                  <v-toolbar-title class="secondary white--text">KEGG Function</v-toolbar-title>
-                  <v-list>
-                    <template v-for="(item, index) in kegg_detail">
-                      <v-divider
-                        v-if="index > 0"
-                        :key="index"
-                      ></v-divider>
-                      <v-expansion-panel v-if="item.expand" :key="item.title">
-                        <v-expansion-panel-content>
-                          <template v-slot:header>
-                            <div>{{item.title}}</div>
-                          </template>
-                          <v-card>
-                            <v-list>
-                              <template v-for="(element, elindex) in item.content">
-                                <v-divider
-                                  v-if="elindex > 0"
-                                  :key="elindex"
-                                ></v-divider>
-                                <v-list-tile :key="element.title">
-                                  <v-list-tile-content :key="element.content">
-                                    <v-list-tile-title v-if="element.title" v-html="element.title"></v-list-tile-title>
-                                    <v-list-tile-title v-else v-html="elindex"></v-list-tile-title>
-                                    <v-list-tile-sub-title v-if="element.authors" v-html="element.authors"></v-list-tile-sub-title>
-                                    <v-list-tile-sub-title v-else v-html="element"></v-list-tile-sub-title>
-                                  </v-list-tile-content>
-                                </v-list-tile>
-                              </template>
-                            </v-list>
-                          </v-card>
-                        </v-expansion-panel-content>
-                      </v-expansion-panel>
-                      <v-list-tile v-else :key="item.title">
-                        <v-list-tile-content :key="item.title">
-                          <v-list-tile-title v-html="item.title"></v-list-tile-title>
-                          <v-list-tile-sub-title v-html="item.content"></v-list-tile-sub-title>
-                        </v-list-tile-content>
-                      </v-list-tile>
-                    </template>
-                  </v-list>
-              </v-card>
-            </v-flex>
+            <!-- KEGG Function -->
+            <KeggCard :kegg_id='kegg_id'></KeggCard>
           </v-layout>
         </v-container>
       </v-card>
@@ -87,15 +46,16 @@
 
 <script>
 import axios from 'axios';
+import KeggCard from '@/components/KeggCard.vue';
 
 export default {
+  components: { KeggCard },
   name: 'genes',
   data() {
     return {
       gene_id: "",
       gene_detail: [],
       kegg_id: "",
-      kegg_detail: [],
     };
   },
   mounted() {
@@ -124,38 +84,7 @@ export default {
             content: response.data.length,
           },
         ];
-        var kegg_id = response.data.functions[0];
-        return axios.get('http://togows.org/entry/kegg-orthology/' + kegg_id + '.json', {
-          headers: {
-          Accept: 'application/json',
-          },
-        })
-      })
-      .then((response) => {
-        this.kegg_detail = [
-          {
-            title: 'ID',
-            content: response.data[0].entry_id,
-          },
-          {
-            title: 'Name',
-            content: response.data[0].name,
-          },
-          {
-            title: 'Definition',
-            content: response.data[0].definition,
-          },
-          {
-            title: 'Pathways',
-            content: response.data[0].pathways,
-            expand: true,
-          },
-          {
-            title: 'References',
-            content: response.data[0].references,
-            expand: true,
-          },
-        ];
+        this.kegg_id = response.data.functions[0];
       })
       .catch((error) => {
         console.log(error);