diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 78d4be78988be9f2100560a91c1bb021f2ab5913..c75eb646dd03203c1410f168fd9a743ef7fffbff 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,10 +2,8 @@ image: node:6.6.0
 pages:
   stage: deploy
   script:
-  - npm install -g grunt-cli bower
   - npm install
-  - bower install --allow-root
-  - grunt public:dev
+  - ./node_modules/grunt-cli/bin/grunt public:dev
   artifacts:
     paths:
     - public
diff --git a/Gruntfile.js b/Gruntfile.js
index 5e44329b88922034827f1e9717082f02108a570c..606d4ba29ec0c530d4169eb574ef2c7b63463269 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -60,13 +60,13 @@ module.exports = function(grunt) {
                 expand: true,
                 files: [{
                         expand: true,
-                        cwd: 'bower_components/html5shiv/dist',
+                        cwd: 'node_modules/html5shiv/dist',
                         src: "**",
                         dest: 'public/js'
                     },
                     {
                         expand: true,
-                        cwd: 'bower_components/respond/src',
+                        cwd: 'node_modules/Respond.js/src',
                         src: "**",
                         dest: 'public/js'
                     }
@@ -76,7 +76,7 @@ module.exports = function(grunt) {
                 expand: true,
                 files: [{
                     expand: true,
-                    cwd: 'bower_components/leaflet/dist/images',
+                    cwd: 'node_modules/leaflet/dist/images',
                     src: "**",
                     dest: 'public/img'
                 }]
@@ -105,9 +105,9 @@ module.exports = function(grunt) {
             compress: {
                 files: {
                     'public/js/index.js': [
-                        //'bower_components/jquery/dist/jquery.min.js',
-                        //'bower_components/bootstrap/dist/js/bootstrap.min.js',
-                        'bower_components/leaflet/dist/leaflet.js',
+                        //'node_modules/jquery/dist/jquery.min.js',
+                        //'node_modules/bootstrap/dist/js/bootstrap.min.js',
+                        'node_modules/leaflet/dist/leaflet.js',
                         'js/*.js'
                     ]
                 },
@@ -125,10 +125,10 @@ module.exports = function(grunt) {
             compress: {
                 files: {
                     'public/css/index.css': [
-                        'bower_components/bootstrap/dist/css/bootstrap.min.css',
-                        //'public/bower_components/font-awesome/css/font-awesome.min.css',
-                        //'public/bower_components/normalize-css/normalize.css',
-                        'bower_components/leaflet/dist/leaflet.css',
+                        'node_modules/bootstrap/dist/css/bootstrap.min.css',
+                        //'node_modules/font-awesome/css/font-awesome.min.css',
+                        //'node_modules/normalize.css/normalize.css',
+                        'node_modules/leaflet/dist/leaflet.css',
                         'css/*.css'
                     ]
                 }
diff --git a/README.md b/README.md
index c0ce91d21010c6eb847a22d8000bb6e0db389113..1bc773e85b001a46eaf66f4f9aec6c209badc526 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,5 @@
 ## Official Website of Free Software User Groups in India
 
-
 ## Dependencies
 
 1. Node
@@ -9,12 +8,10 @@
 
 1. Install Node ( Welcome to the world of Node <3 )
 2. run `npm install -g grunt-cli`
-3. run `npm install -g bower`
 
 ## Installation
 
 1. `npm install` from root folder
-2. `bower install` from root folder
 
 ## Running the application
 
@@ -85,16 +82,16 @@ Let us know ;)
 
 Official Website of Free Software User Groups in India  
 Copyleft (É”) 2017 FSCI (Free Software Community of India) - All rights reserved, all wrongs reversed   
-  
+
 This project comes under free software license: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.  
-  
+
 This project is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.  
-  
+
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/bower.json b/bower.json
deleted file mode 100644
index d4cbee26dbfe1743495acc283b769367eda9fc10..0000000000000000000000000000000000000000
--- a/bower.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
-    "name": "fsug",
-    "authors": [
-        "FSCI - Free Software Community of India <fosscommunity.in@disroot.org>"
-    ],
-    "description": "Free Software User Groups in India",
-    "license": "GPL-3.0",
-    "homepage": "http://fsug.in/",
-    "ignore": [
-        "**/.*",
-        "node_modules",
-        "bower_components",
-        "test",
-        "tests"
-    ],
-    "dependencies": {
-        "bootstrap": "^3.3.7",
-        "normalize-css": "normalize.css#4.1.1",
-        "jquery": "2.2.4",
-        "html5shiv": "3.7.0",
-        "respond": "https://github.com/scottjehl/Respond.git#1.4.0",
-        "leaflet": "^1.0.3"
-    },
-    "resolutions": {
-        "jquery": "~2.2.4"
-    }
-}
diff --git a/css/improve.css b/css/improve.css
new file mode 100644
index 0000000000000000000000000000000000000000..038652bafb93a08db952e40a19ae88262068f169
--- /dev/null
+++ b/css/improve.css
@@ -0,0 +1,8 @@
+#improve {
+  font-size: 12px;
+  vertical-align: middle;
+  background-color: #EEEEEE;
+  padding: 10px;
+  border-radius: 2px;
+  margin-top: 30px;
+}
diff --git a/css/main.css b/css/main.css
new file mode 100644
index 0000000000000000000000000000000000000000..3d0ea8f4603171d245b7589aaa23bc5d0dae5878
--- /dev/null
+++ b/css/main.css
@@ -0,0 +1,34 @@
+@font-face {
+  font-family: Amaranth-Regular;
+  src: url(../fonts/Amaranth-Regular.ttf);
+}
+
+@font-face {
+  font-family: Roboto-Thin;
+  src: url(../fonts/Roboto-Thin.ttf);
+}
+
+#wrapper {
+  max-width: 968px;
+  margin: auto;
+  color: #454545;
+}
+
+#main {
+  text-align: center;
+  margin: 8px;
+}
+
+#main h1 {
+  font-family: "Amaranth-Regular";
+  color: #949494;
+}
+
+#main h2 {
+  font-family: "Roboto-Thin";
+  color: #898989;
+}
+
+#main p {
+  text-align: justify;
+}
diff --git a/css/map.css b/css/map.css
new file mode 100644
index 0000000000000000000000000000000000000000..2b4d57bf1923c66720e2b34d6bf57765962278c0
--- /dev/null
+++ b/css/map.css
@@ -0,0 +1,9 @@
+#mapid {
+  height: 60vh;
+  margin: 20px auto;
+}
+
+/* Override values in leaflet.css */
+#mapid.leaflet-container .leaflet-pane .leaflet-popup .leaflet-popup-content-wrapper .leaflet-popup-content {
+  margin: 5px 20px 15px;
+}
diff --git a/css/preamble.css b/css/preamble.css
new file mode 100644
index 0000000000000000000000000000000000000000..0e529b063e427d98d155b267f2e5f0091c9bcbc9
--- /dev/null
+++ b/css/preamble.css
@@ -0,0 +1,8 @@
+#preamble-list {
+  text-align: left;
+  padding-left: 15px;
+}
+
+#preamble-list li {
+  padding: 10px;
+}
diff --git a/css/style.css b/css/style.css
deleted file mode 100644
index 5cadcdff57393a7f2307d03e46cb9ab086f726af..0000000000000000000000000000000000000000
--- a/css/style.css
+++ /dev/null
@@ -1,61 +0,0 @@
-@font-face {
-    font-family: Amaranth-Regular;
-    src: url(../fonts/Amaranth-Regular.ttf);
-}
-
-@font-face {
-    font-family: Roboto-Thin;
-    src: url(../fonts/Roboto-Thin.ttf);
-}
-
-#wrapper {
-    max-width: 968px;
-    margin: auto;
-    color: #454545;
-}
-
-#main {
-    text-align: center;
-    margin: 8px;
-}
-
-#main h1 {
-    font-family: "Amaranth-Regular";
-    color: #949494;
-}
-
-#main h2 {
-    font-family: "Roboto-Thin";
-    color: #898989;
-}
-
-#main p {
-    text-align: justify;
-}
-
-#mapid {
-    height: 60vh;
-    margin: 20px auto;
-}
-
-/* Override values in leaflet.css */
-#mapid.leaflet-container .leaflet-pane .leaflet-popup .leaflet-popup-content-wrapper .leaflet-popup-content {
-    margin: 5px 20px 15px;
-}
-
-#preamble-list {
-  text-align: left;
-  padding-left: 15px;
-}
-#preamble-list li {
-  padding: 10px;
-}
-
-#improve {
-    font-size: 12px;
-    vertical-align: middle;
-    background-color: #EEEEEE;
-    padding: 10px;
-    border-radius: 2px;
-    margin-top: 30px;
-}
diff --git a/js/locations.js b/js/locations.js
index 0f6992b459117e196f725cdf8024a028e109ea52..13a12607763b81d520c8d7cdde85c86744c9133e 100644
--- a/js/locations.js
+++ b/js/locations.js
@@ -186,5 +186,3 @@ var locations = [{
   "MATURL": "",
   "TGURL": ""
 }];
-
-var locations_length = locations.length;
diff --git a/js/script.js b/js/script.js
index b0c3c3ebba5e85ee9ee90bcce104be64dbff9062..fcd72e9ae48deb8cc317504832500d6ee90b6ead 100644
--- a/js/script.js
+++ b/js/script.js
@@ -13,9 +13,9 @@ var mapMarker = L.icon({
 });
 
 // see locations.js file to add new locations
+var locations_length = locations.length;
 
 for (var i = 0; i < locations_length; i++) {
-
   var texttodisplay = "";
   texttodisplay += "<b>";
   texttodisplay += "";
@@ -60,6 +60,7 @@ for (var i = 0; i < locations_length; i++) {
   }
   texttodisplay += "";
   texttodisplay += "</b>";
+
   if ((locations[i].LAT !== "") || (locations[i].LNG !== "")) {
     L.marker([locations[i].LAT, locations[i].LNG], {
       icon: mapMarker
diff --git a/package.json b/package.json
index c99017733ab0304734f64c0b1643ef8433548aec..c3164d69b7bd30976f943b7062da52e2085a2a07 100644
--- a/package.json
+++ b/package.json
@@ -12,6 +12,7 @@
   "devDependencies": {
     "connect-livereload": "^0.5.4",
     "grunt": "^1.0.1",
+    "grunt-cli": "^1.2.0",
     "grunt-connect-proxy": "^0.2.0",
     "grunt-contrib-concat": "^1.0.1",
     "grunt-contrib-connect": "^1.0.2",
@@ -29,7 +30,15 @@
     "load-grunt-tasks": "^3.5.0",
     "time-grunt": "^1.3.0"
   },
-  "dependencies": {},
+  "dependencies": {
+    "html5shiv": "^3.7.0",
+    "Respond.js": "git+https://github.com/scottjehl/Respond.git#1.4.0",
+    "jquery": "2.2.4",
+    "bootstrap": "^3.3.7",
+    "normalize.css": "^7.0.0",
+    "font-awesome": "^4.7.0",
+    "leaflet": "^1.0.3"
+  },
   "author": "FSCI - Free Software Community of India <fosscommunity.in@disroot.org>",
   "license": "GPL-3.0"
 }
diff --git a/pug/layout.pug b/pug/layout.pug
index 9a8e07ad3ec69770b451a9e404aab8fe7abd0e83..62e4fd2428c3c2ec20dca17f8fc2ab8daeb0304f 100644
--- a/pug/layout.pug
+++ b/pug/layout.pug
@@ -1,11 +1,15 @@
+//- Mixins and Varibles
+include ./settings/mixins
+include ./settings/variables
+
 doctype
 html(lang='en')
-    head
-        include ./templates/head_inwrapper
-        include ./templates/meta_seo
-        title FSCI (Free Software Community of India)
-        include ./templates/css
-        include ./templates/meta_favicons
-    body
-        block content
-        include ./templates/js
+  head
+    include ./templates/head_inwrapper
+    include ./templates/meta_seo
+    include ./templates/meta_favicons
+    block head
+    include ./templates/css
+  body
+    block content
+    include ./templates/js
diff --git a/pug/pages/404.pug b/pug/pages/404.pug
index 7450f7dffaa83f48a253994c5ce72d38936a6b29..5914990afc758a60f6663604e38dc060a8f43d6a 100644
--- a/pug/pages/404.pug
+++ b/pug/pages/404.pug
@@ -1,6 +1,9 @@
 extends ../layout.pug
 
-block content
+block head
+  base(href='/')/
+  title 404. Not Found!
 
-    p.FourZeroFour
-        h1.text-center 404. Not Found
+block content
+  p.FourZeroFour
+    h1.text-center 404. Not Found
diff --git a/pug/pages/index.pug b/pug/pages/index.pug
index ee408f8d9be2545ef06bf1f66778cd9b3e02caec..98b5afd28adacaf4e09bfcd63e23ab1068d8ee6e 100644
--- a/pug/pages/index.pug
+++ b/pug/pages/index.pug
@@ -1,28 +1,29 @@
 extends ../layout.pug
 
+block head
+  title= $vars.title 
+
 block content
-    #wrapper.container
-        #main.row
-            h1 Free Software User Groups in India
-            #mapid
-            ol#preamble-list
-              li Free Software Community of India is a collective of Free Software (sometimes also called as Open Source Software) users, advocates and developers.
-              li We maintain communication and collaboration infrastructure for everyone that respects their freedom and privacy. We maintain a list of Free Software communities and offer sub domains of fsug.in or fosscommunity.in. We depend on donations and community manpower to run the infrastructure.
-              li We mentor Free Software enthusiasts to become Free Software contributors.
-              li We provide GNU/Linux installation and configuration support mainly via online messaging groups.
-            p
-                |Join the conversation at our 
-                a(href='https://matrix.to/#/#fsci:matrix.org', target='__blank') matrix chat room
-                |  or collaborate with us on our 
-                a(href='https://www.loomio.org/g/esPoQ4S0/free-software-community-of-india-fsci-', target='__blank')  loomio group
-                |.
-            p
-                |If you need a subdomain or want to list your community in the map please 
-                a(href='mailto:fosscommunity.in@disroot.org') mail to FSCI
-                |  with sufficient details of your community or 
-                a(href='https://gitlab.com/fsci/fsci.org.in/blob/master/js/locations.js', target='__blank') edit this list
-                |.
-            #improve
-                a(href='https://gitlab.com/fsci/fsci.org.in', target='_blank')
-                    img(src='img/code.png')
-                    span  Improve this page
+  #wrapper.container
+    #main.row
+      h1= $vars.heading 
+      #mapid
+      ol#preamble-list
+        each item in $vars.preamblelist
+          li!= item
+      p
+        |Join the conversation at our 
+        a(href=$vars.MatrixLink, target='_blank') matrix chat room
+        |  or collaborate with us on our 
+        a(href=$vars.LoomioLink, target='_blank')  loomio group
+        |.
+      p
+        |If you need a subdomain or want to list your community in the map please 
+        a(href='mailto:fosscommunity.in@disroot.org') mail to FSCI
+        |  with sufficient details of your community or 
+        a(href='https://gitlab.com/fsci/fsci.org.in/blob/master/js/locations.js', target='_blank') edit this list
+        |.
+      #improve
+        a(href='https://gitlab.com/fsci/fsci.org.in', target='_blank')
+          img(src='img/code.png', alt="Contribute!")
+          span  Improve this page
diff --git a/pug/settings/mixins.pug b/pug/settings/mixins.pug
new file mode 100644
index 0000000000000000000000000000000000000000..f6b43eba4ef243b21383ef80c0e91477c13b8d7f
--- /dev/null
+++ b/pug/settings/mixins.pug
@@ -0,0 +1,11 @@
+mixin meta(name,content)
+  meta(name=name, content=content)/
+
+mixin metap(property,content)
+  meta(property=property, content=content)/
+
+mixin link(rel, href)
+  link(rel=rel, href=href, type!=attributes.type, sizes!=attributes.sizes, color!=attributes.color)/
+
+mixin script(src)
+  script(type="text/javascript", src=src)
diff --git a/pug/settings/variables.pug b/pug/settings/variables.pug
new file mode 100644
index 0000000000000000000000000000000000000000..28faa0d3066aa0df1aac7f3dfac2029489b2a227
--- /dev/null
+++ b/pug/settings/variables.pug
@@ -0,0 +1,22 @@
+-
+  var $vars = {}; //funky name to hold all global variables in templates.
+
+  $vars.title = "FSCI (Free Software Community of India)";
+
+  $vars.preamblelist = [
+    "Free Software Community of India is a collective of Free Software (sometimes also called as Open Source Software) users, advocates and developers.",
+    "We maintain communication and collaboration infrastructure for everyone that respects their freedom and privacy. We maintain a list of Free Software communities and offer sub domains of fsug.in or fosscommunity.in. We depend on donations and community manpower to run the infrastructure.",
+    "We mentor Free Software enthusiasts to become Free Software contributors.",
+    "We provide GNU/Linux installation and configuration support mainly via online messaging groups."
+  ];
+  
+  $vars.heading = "Free Software User Groups in India";
+  
+  $vars.LoomioLink = "https://www.loomio.org/g/esPoQ4S0/free-software-community-of-india-fsci-";
+  
+  $vars.MatrixLink = "https://matrix.to/#/%23fsci:matrix.org";
+  $vars.TGLink = "https://t.me/fscin";
+  
+  $vars.author = "";
+  $vars.keywords = "";
+  $vars.description = "";
diff --git a/pug/templates/css.pug b/pug/templates/css.pug
index ec57963decf21718dc8cf5c7580d596074a18d9d..ae8be614fbd2ebdcb467271bcdc9e78c429e11b8 100644
--- a/pug/templates/css.pug
+++ b/pug/templates/css.pug
@@ -1,10 +1,11 @@
 
-<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
-<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
+// HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries
+// WARNING: Respond.js doesn't work if you view the page via file://
 <!--[if lt IE 9]>
-    <script type="text/javascript" src="js/html5shiv.js"></script>
-    <script type="text/javascript" src="js/respond.js"></script>
+  +script('js/html5shiv.js')
+  +script('js/respond.js')
 <![endif]-->
 
 //- Compiled CSS
-link(rel='stylesheet', href='css/index.css')/
+//- the files in the css directory are added here on grunt serve
++link('stylesheet', 'css/index.css')(type='text/css')
diff --git a/pug/templates/head_inwrapper.pug b/pug/templates/head_inwrapper.pug
index fa7d9edf8cf63ae89f33a9a82910e02195440524..68651828f2d27fc2cc00545d0f195b00d2ee63fa 100644
--- a/pug/templates/head_inwrapper.pug
+++ b/pug/templates/head_inwrapper.pug
@@ -1,6 +1,6 @@
 meta(charset='utf-8')/
-meta(http-equiv='X-UA-Compatible', content='IE=edge;chrome=1')/
-meta(name='viewport', content='width=device-width, initial-scale=1.0')/
+meta(http-equiv='X-UA-Compatible', content='IE=edge')/
++meta('viewport','width=device-width, initial-scale=1.0')
 // The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags
-meta(http-equiv='content-type', content='text/html')/
-meta(name='apple-mobile-web-app-capable', content='yes')/
+//- meta(http-equiv='content-type', content='text/html')/
++meta('apple-mobile-web-app-capable','yes')
diff --git a/pug/templates/js.pug b/pug/templates/js.pug
index 94f4f210b723e79864eb58ed195326531c981c16..ebe203bbe85443d2724c37007a866a794966eb25 100644
--- a/pug/templates/js.pug
+++ b/pug/templates/js.pug
@@ -1,2 +1,2 @@
 //- Compile JavaScript
-script(type="text/javascript", src='js/index.js')
++script('js/index.js')
diff --git a/pug/templates/meta_favicons.pug b/pug/templates/meta_favicons.pug
index f7e829828533aae21b61c6e7db5364644191fbe8..f37d13b5af8049500115b907ee8f515c7d28a0d4 100644
--- a/pug/templates/meta_favicons.pug
+++ b/pug/templates/meta_favicons.pug
@@ -1,12 +1,12 @@
 // http://realfavicongenerator.net/
-link(rel='apple-touch-icon', sizes='180x180', href='/img/favicons/apple-touch-icon.png')/
-link(rel='icon', type='image/png', href='/img/favicons/favicon-32x32.png', sizes='32x32')/
-link(rel='icon', type='image/png', href='/img/favicons/favicon-16x16.png', sizes='16x16')/
-link(rel='manifest', href='/img/favicons/manifest.json')/
-link(rel='mask-icon', href='/img/favicons/safari-pinned-tab.svg', color='#5bbad5')/
-link(rel='shortcut icon', href='/img/favicons/favicon.ico')/
-meta(name='apple-mobile-web-app-title', content='FSUG')/
-meta(name='application-name', content='FSUG')/
-meta(name='msapplication-config', content='/img/favicons/browserconfig.xml')/
-meta(name='theme-color', content='#ffffff')/
++link('apple-touch-icon','/img/favicons/apple-touch-icon.png')(type='image/png',sizes='180x180')
++link('icon','/img/favicons/favicon-32x32.png')(type='image/png',sizes='32x32')
++link('icon','/img/favicons/favicon-16x16.png')(type='image/png', sizes='16x16')
++link('manifest','/img/favicons/manifest.json')
++link('mask-icon','/img/favicons/safari-pinned-tab.svg')(color='#5bbad5')
++link('shortcut icon','/img/favicons/favicon.ico')
++meta('apple-mobile-web-app-title','FSUG.IN')
++meta('application-name','FSUG.IN')
++meta('msapplication-config','/img/favicons/browserconfig.xml')
++meta('theme-color','#ffffff')
 // http://realfavicongenerator.net/
diff --git a/pug/templates/meta_seo.pug b/pug/templates/meta_seo.pug
index 2eb957fa3d6f5d6611d9d169153340c810e46789..3e25b7cddd6c23b86c19179a208908a4940908bc 100644
--- a/pug/templates/meta_seo.pug
+++ b/pug/templates/meta_seo.pug
@@ -1,4 +1,7 @@
 // the Original SEO
++meta('author',$vars.author)
++meta('keywords',$vars.keywords)
++meta('description',$vars.description)
 
 // if each site makes their own METAs, then ...?