├── Screenshots └── hackbotone.png ├── src ├── app │ ├── icons │ │ ├── app_logo.png │ │ ├── ic_date.png │ │ ├── ic_account.png │ │ ├── ic_reddit.png │ │ ├── ic_search.png │ │ ├── hackbotone_logo.png │ │ ├── ic_reddit_black.png │ │ ├── ic_facebook_black.png │ │ ├── ic_hackbot_banner.png │ │ ├── ic_linkedin_black.png │ │ ├── ic_twitter_black.png │ │ ├── ic_whatsapp_black.png │ │ ├── ic_facebook_black_large.png │ │ ├── ic_github_black_large.png │ │ ├── ic_linkedin_black_large.png │ │ ├── ic_twitter_black_large.png │ │ └── ic_youtube_black_large.png │ ├── component │ │ ├── App │ │ │ ├── App.css │ │ │ ├── App.js │ │ │ └── routes.js │ │ ├── Utils │ │ │ ├── Constants.js │ │ │ └── Footer.js │ │ ├── NavBar │ │ │ └── NavBar.js │ │ ├── Blog │ │ │ ├── BlogErrorPage.js │ │ │ ├── BlogFooter.js │ │ │ ├── BlogList.js │ │ │ ├── Blogs.js │ │ │ ├── BlogDetails.js │ │ │ └── BlogHeader.js │ │ ├── Search │ │ │ └── Search.js │ │ ├── About │ │ │ ├── AboutPage.js │ │ │ ├── About.js │ │ │ └── AboutContent.js │ │ └── SocialMedia │ │ │ └── SocialMedia.js │ └── css │ │ └── index.css ├── client │ └── index.js └── server │ ├── blogs │ ├── blogs.js │ └── blogcontroller.js │ └── index.js ├── LICENSE ├── README.md ├── package.json ├── webpack.config.js └── dummy_data.json /Screenshots/hackbotone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/Screenshots/hackbotone.png -------------------------------------------------------------------------------- /src/app/icons/app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/app_logo.png -------------------------------------------------------------------------------- /src/app/icons/ic_date.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/ic_date.png -------------------------------------------------------------------------------- /src/app/icons/ic_account.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/ic_account.png -------------------------------------------------------------------------------- /src/app/icons/ic_reddit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/ic_reddit.png -------------------------------------------------------------------------------- /src/app/icons/ic_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/ic_search.png -------------------------------------------------------------------------------- /src/app/component/App/App.css: -------------------------------------------------------------------------------- 1 | * { 2 | box-sizing: border-box; 3 | } 4 | 5 | img { 6 | max-width: 100%; 7 | height: auto; 8 | } 9 | -------------------------------------------------------------------------------- /src/app/icons/hackbotone_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/hackbotone_logo.png -------------------------------------------------------------------------------- /src/app/icons/ic_reddit_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/ic_reddit_black.png -------------------------------------------------------------------------------- /src/app/component/Utils/Constants.js: -------------------------------------------------------------------------------- 1 | export const BASE_URL = "http://localhost:9000"; 2 | export const DOMAIN_URL = "https://hackbotone.com"; 3 | -------------------------------------------------------------------------------- /src/app/icons/ic_facebook_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/ic_facebook_black.png -------------------------------------------------------------------------------- /src/app/icons/ic_hackbot_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/ic_hackbot_banner.png -------------------------------------------------------------------------------- /src/app/icons/ic_linkedin_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/ic_linkedin_black.png -------------------------------------------------------------------------------- /src/app/icons/ic_twitter_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/ic_twitter_black.png -------------------------------------------------------------------------------- /src/app/icons/ic_whatsapp_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/ic_whatsapp_black.png -------------------------------------------------------------------------------- /src/app/icons/ic_facebook_black_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/ic_facebook_black_large.png -------------------------------------------------------------------------------- /src/app/icons/ic_github_black_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/ic_github_black_large.png -------------------------------------------------------------------------------- /src/app/icons/ic_linkedin_black_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/ic_linkedin_black_large.png -------------------------------------------------------------------------------- /src/app/icons/ic_twitter_black_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/ic_twitter_black_large.png -------------------------------------------------------------------------------- /src/app/icons/ic_youtube_black_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshumanpattnaik/hackbotone-mern-website/HEAD/src/app/icons/ic_youtube_black_large.png -------------------------------------------------------------------------------- /src/client/index.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { render } from "react-dom"; 3 | import { BrowserRouter } from "react-router-dom"; 4 | import App from "../app/component/App/App"; 5 | 6 | render( 7 | 8 | 9 | , 10 | document.getElementById("root") 11 | ); 12 | -------------------------------------------------------------------------------- /src/app/component/App/App.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Switch, Route } from "react-router-dom"; 3 | import routes from "./routes"; 4 | import "./App.css"; 5 | 6 | const App = () => { 7 | return ( 8 | 9 | {routes.map((route, i) => ( 10 | 11 | ))} 12 | 13 | ); 14 | }; 15 | 16 | export default App; 17 | -------------------------------------------------------------------------------- /src/app/component/NavBar/NavBar.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import "../../css/index.css"; 3 | import HackbotOne from "../../icons/app_logo.png"; 4 | 5 | class NavBar extends Component { 6 | render() { 7 | return ( 8 |
9 |
10 |
11 | 12 | 13 | 14 |
15 |
16 | ); 17 | } 18 | } 19 | export default NavBar; 20 | -------------------------------------------------------------------------------- /src/app/component/Blog/BlogErrorPage.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | 3 | class BlogErrorPage extends Component { 4 | render() { 5 | return ( 6 |
7 |
8 |

404

9 |
10 |
11 |

12 | Oops! We can't seem to find the page you're looking for. 13 |

14 |
15 |
16 | ); 17 | } 18 | } 19 | export default BlogErrorPage; 20 | -------------------------------------------------------------------------------- /src/app/component/App/routes.js: -------------------------------------------------------------------------------- 1 | import BlogList from "../Blog/BlogList"; 2 | import BlogDetails from "../Blog/BlogDetails"; 3 | import About from "../About/AboutPage"; 4 | 5 | const routes = [ 6 | { 7 | path: "/", 8 | exact: true, 9 | component: BlogList 10 | }, 11 | { 12 | path: "/blog/:id", 13 | exact: true, 14 | component: BlogDetails 15 | }, 16 | { 17 | path: "/page/:page", 18 | exact: true, 19 | component: BlogList 20 | }, 21 | { 22 | path: "/?search=/:keyword", 23 | exact: true, 24 | component: BlogList 25 | }, 26 | { 27 | path: "/about", 28 | exact: true, 29 | component: About 30 | } 31 | ]; 32 | 33 | export default routes; 34 | -------------------------------------------------------------------------------- /src/app/component/Search/Search.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import SearchIcon from "../../icons/ic_search.png"; 3 | 4 | class Search extends Component { 5 | render() { 6 | return ( 7 |
8 |
9 |
10 | 18 |
19 | 22 |
23 |
24 | ); 25 | } 26 | } 27 | export default Search; 28 | -------------------------------------------------------------------------------- /src/server/blogs/blogs.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | const mongoosePaginate = require("mongoose-paginate"); 3 | 4 | const { Schema } = mongoose; 5 | const blogSchema = new mongoose.Schema({ 6 | thumb: { 7 | type: String, 8 | required: true 9 | }, 10 | title: { 11 | type: String, 12 | text: true, 13 | required: true 14 | }, 15 | short_title: { 16 | type: String, 17 | required: true 18 | }, 19 | keywords: { 20 | type: String, 21 | required: true 22 | }, 23 | short_description: { 24 | type: String, 25 | required: true 26 | }, 27 | description: { 28 | type: String, 29 | required: true 30 | }, 31 | date: { 32 | type: String, 33 | required: true 34 | }, 35 | formatted_date: { 36 | type: String, 37 | required: true 38 | }, 39 | author: { 40 | type: String, 41 | required: true 42 | } 43 | }); 44 | blogSchema.plugin(mongoosePaginate); 45 | module.exports = mongoose.model("Blog", blogSchema); 46 | -------------------------------------------------------------------------------- /src/app/component/About/AboutPage.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import "../../css/index.css"; 3 | import SocialMedia from "../SocialMedia/SocialMedia"; 4 | import NavBar from "../NavBar/NavBar"; 5 | import Search from "../Search/Search"; 6 | import Footer from "../Utils/Footer"; 7 | import AboutContent from "./AboutContent"; 8 | 9 | class AboutPage extends Component { 10 | render() { 11 | return ( 12 |
13 | 14 |
15 |
16 |
17 | 18 |
19 |
20 |
21 | 22 |
23 |
24 | 25 |
26 |
27 |
28 |
30 | ); 31 | } 32 | } 33 | export default AboutPage; 34 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Anshuman Pattnaik 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /src/app/component/SocialMedia/SocialMedia.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | 3 | class SocialMedia extends Component { 4 | render() { 5 | return ( 6 |
7 |
8 | Like us on Facebook 9 |
10 |
11 | 24 |
25 |
26 | ); 27 | } 28 | } 29 | export default SocialMedia; 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # hackbotone-mern-website 2 | HackbotOne website produce contents from various domains such as Web Hacking, Bug Bounty, Application Development & Game Development. 3 | [https://hackbotone.com](https://hackbotone.com) 4 | 5 | 6 | 7 | 8 | ### Installation 9 | `````````````````````````` 10 | cd hackbotone-mern-website 11 | npm install 12 | npm run start-dev 13 | `````````````````````````` 14 | 15 | ### MongoDB database import command 16 | `````````````````````````````````````````````````````````````````````````````````````````````````````````` 17 | mongoimport --uri "mongodb://127.0.0.1:27017/blogs" --collection blogs --jsonArray --file dummy_data.json 18 | `````````````````````````````````````````````````````````````````````````````````````````````````````````` 19 | 20 | ### Note 21 | If you face any problem or have any suggestion on improving the code then feel free to raise an issue. 22 | 23 | ### Blog & Youtube explanation 24 |

25 | https://hackbotone.com/blog/hackbotone-full-stack-application 26 |

27 |

28 | https://youtu.be/jUiYl1Bqe7s 29 |

30 | 31 | ### License 32 | This project is licensed under the [MIT License](LICENSE) 33 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-ssr", 3 | "version": "0.1.0", 4 | "description": "", 5 | "main": "server.js", 6 | "scripts": { 7 | "start-dev": "NODE_ENV=development webpack -w & NODE_ENV=development node server.js", 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "cors": "^2.8.5", 15 | "express": "^4.15.3", 16 | "flatlist-react": "^1.3.1", 17 | "isomorphic-fetch": "^2.2.1", 18 | "lodash": "^4.17.15", 19 | "lodash.orderby": "^4.6.0", 20 | "mongodb": "^3.2.7", 21 | "mongoose": "^5.6.9", 22 | "mongoose-paginate": "^5.0.3", 23 | "mongoose-paginate-v2": "^1.2.1", 24 | "node-time-ago": "^1.0.0", 25 | "react": "^15.6.1", 26 | "react-dom": "^15.6.1", 27 | "react-facebook": "^8.1.4", 28 | "react-helmet": "^5.2.1", 29 | "react-html-markup": "^1.0.6", 30 | "react-router-dom": "^5.1.2", 31 | "serialize-javascript": ">=3.1.0" 32 | }, 33 | "devDependencies": { 34 | "autoprefixer": "^7.1.2", 35 | "babel-core": "^6.25.0", 36 | "babel-loader": "^7.1.1", 37 | "babel-preset-react-app": "^3.0.1", 38 | "css-loader": "^0.28.4", 39 | "extract-text-webpack-plugin": "^2.1.2", 40 | "file-loader": "^0.11.2", 41 | "postcss-loader": "^2.0.6", 42 | "webpack": "^3.1.0", 43 | "webpack-node-externals": "^1.7.2" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/server/blogs/blogcontroller.js: -------------------------------------------------------------------------------- 1 | var express = require("express"); 2 | var router = express.Router(); 3 | var mongoose = require("mongoose"); 4 | 5 | var Blog = require("./blogs"); 6 | mongoose.connect("mongodb://127.0.0.1:27017/blogs"); 7 | 8 | /* GET blogs listing. */ 9 | router.get("/getAllBlogs", (req, res) => { 10 | const { page, perPage } = req.query; 11 | const options = { 12 | sort: { date: -1 }, 13 | page: parseInt(page, 6) || 1, 14 | limit: parseInt(perPage, 6) || 6 15 | }; 16 | 17 | Blog.paginate({}, options).then(function(result) { 18 | res.json(result); 19 | }); 20 | }); 21 | 22 | router.get("/searchblog", (req, res) => { 23 | var search = req.query.search; 24 | const { page, perPage } = req.query; 25 | const options = { 26 | sort: { date: -1 }, 27 | page: parseInt(page, 6) || 1, 28 | limit: parseInt(perPage, 6) || 6 29 | }; 30 | 31 | if (search == "") { 32 | Blog.paginate({}, options).then(function(result) { 33 | res.json(result); 34 | }); 35 | } else { 36 | Blog.paginate( 37 | { $text: { $search: search, $caseSensitive: false } }, 38 | options 39 | ).then(function(result) { 40 | res.json(result); 41 | }); 42 | } 43 | }); 44 | 45 | router.get("/blog/:short_title", (req, res) => { 46 | const short_title = req.params.short_title; 47 | 48 | Blog.findOne({ short_title: short_title }, function(err, result) { 49 | if (err) { 50 | console.log("Error in Fetching record"); 51 | } else { 52 | res.json(result); 53 | } 54 | }); 55 | }); 56 | 57 | module.exports = router; 58 | -------------------------------------------------------------------------------- /src/app/component/Blog/BlogFooter.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | 3 | class BlogFooter extends Component { 4 | render() { 5 | return ( 6 |
7 |
8 | 9 | 13 | 14 |
15 |
16 | 17 | Anshuman Pattnaik 18 | 19 |

20 | Hi there! I am the creator of HackbotOne website and my Youtube 21 | channel. I have around 5+ years of experience in the software 22 | industry and having specialized skills sets on Android, Unity3d, 23 | Node.js, MongoDB, Go, Reactjs, React-Native and many more and love 24 | to do bug bounty on my free time. 25 |

26 |

27 | 28 | If you want to know more about me then don't forget to follow me 29 | on twitter{" "} 30 | 36 | @anspattnaik 37 | 38 | 39 |

40 |
41 |
42 | ); 43 | } 44 | } 45 | export default BlogFooter; 46 | -------------------------------------------------------------------------------- /src/app/component/Blog/BlogList.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import Blogs from "./Blogs"; 3 | import NavBar from "../NavBar/NavBar"; 4 | import Footer from "../Utils/Footer"; 5 | import * as baseUrl from "../Utils/Constants"; 6 | import "isomorphic-fetch"; 7 | 8 | class BlogList extends Component { 9 | constructor(props) { 10 | super(props); 11 | 12 | let initialData; 13 | if (__isBrowser__) { 14 | initialData = window.__initialData__; 15 | delete window.__initialData__; 16 | } else { 17 | initialData = props.staticContext.initialData; 18 | } 19 | 20 | this.state = { 21 | blogs: initialData 22 | }; 23 | } 24 | 25 | componentDidMount() { 26 | if (!this.state.blogs) { 27 | this.loadPage(1); 28 | } 29 | } 30 | 31 | loadPage(data) { 32 | BlogList.requestInitialData(data).then(items => 33 | this.setState({ 34 | blogs: items 35 | }) 36 | ); 37 | } 38 | 39 | static requestInitialData(data) { 40 | data = data.replace("/", ""); 41 | data = data.replace("/", ""); 42 | data = data.replace("page", ""); 43 | 44 | var url = `${baseUrl.BASE_URL}/blogs/getAllBlogs?page=${data}`; 45 | return fetch(url) 46 | .then(response => response.json()) 47 | .catch(error => console.log(error)); 48 | } 49 | 50 | static requestSearchData(data) { 51 | data = data.replace("/", ""); 52 | data = data.replace("/", ""); 53 | data = data.replace("?", ""); 54 | data = data.replace("=", ""); 55 | data = data.replace("search", ""); 56 | var url = `${baseUrl.BASE_URL}/blogs/searchblog?search=${data}`; 57 | return fetch(url) 58 | .then(response => response.json()) 59 | .catch(error => console.log(error)); 60 | } 61 | 62 | render() { 63 | const { blogs } = this.state; 64 | return ( 65 |
66 | 67 | 68 |
70 | ); 71 | } 72 | } 73 | 74 | export default BlogList; 75 | -------------------------------------------------------------------------------- /src/app/component/Utils/Footer.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import "../../css/index.css"; 3 | import facebook from "../../icons/ic_facebook_black_large.png"; 4 | import twitter from "../../icons/ic_twitter_black_large.png"; 5 | import linkedin from "../../icons/ic_linkedin_black_large.png"; 6 | import github from "../../icons/ic_github_black_large.png"; 7 | import youtube from "../../icons/ic_youtube_black_large.png"; 8 | 9 | class Footer extends Component { 10 | render() { 11 | return ( 12 |
13 |
14 |
15 | 20 | 21 | 22 | 27 | 28 | 29 | 34 | 35 | 36 | 41 | 42 | 43 | 48 | 49 | 50 |
51 |
52 |
53 |

54 | © 2019 HACKBOTONE. ALL RIGHTS RESERVED. 55 |

56 |
57 |
58 | ); 59 | } 60 | } 61 | export default Footer; 62 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const webpack = require("webpack"); 2 | const ExtractTextPlugin = require("extract-text-webpack-plugin"); 3 | const autoprefixer = require("autoprefixer"); 4 | const nodeExternals = require("webpack-node-externals"); 5 | 6 | const browserConfig = { 7 | entry: "./src/client/index.js", 8 | output: { 9 | path: __dirname, 10 | filename: "./public/bundle.js" 11 | }, 12 | devtool: "cheap-module-source-map", 13 | module: { 14 | rules: [ 15 | { 16 | test: [/\.svg$/, /\.gif$/, /\.jpe?g$/, /\.png$/], 17 | loader: "file-loader", 18 | options: { 19 | name: "public/media/[name].[ext]", 20 | publicPath: url => url.replace(/public/, "") 21 | } 22 | }, 23 | { 24 | test: /\.css$/, 25 | use: ExtractTextPlugin.extract({ 26 | use: [ 27 | { 28 | loader: "css-loader", 29 | options: { importLoaders: 1 } 30 | }, 31 | { 32 | loader: "postcss-loader", 33 | options: { plugins: [autoprefixer()] } 34 | } 35 | ] 36 | }) 37 | }, 38 | { 39 | test: /js$/, 40 | exclude: /(node_modules)/, 41 | loader: "babel-loader", 42 | query: { presets: ["react-app"] } 43 | } 44 | ] 45 | }, 46 | plugins: [ 47 | new ExtractTextPlugin({ 48 | filename: "public/css/[name].css" 49 | }), 50 | new webpack.BannerPlugin({ 51 | banner: "__isBrowser__ = true;", 52 | raw: true, 53 | include: /\.js$/ 54 | }) 55 | ] 56 | }; 57 | 58 | const serverConfig = { 59 | entry: "./src/server/index.js", 60 | target: "node", 61 | externals: [nodeExternals()], 62 | output: { 63 | path: __dirname, 64 | filename: "server.js", 65 | libraryTarget: "commonjs2" 66 | }, 67 | devtool: "cheap-module-source-map", 68 | module: { 69 | rules: [ 70 | { 71 | test: [/\.svg$/, /\.gif$/, /\.jpe?g$/, /\.png$/], 72 | loader: "file-loader", 73 | options: { 74 | name: "public/media/[name].[ext]", 75 | publicPath: url => url.replace(/public/, ""), 76 | emit: false 77 | } 78 | }, 79 | { 80 | test: /\.css$/, 81 | use: [ 82 | { 83 | loader: "css-loader/locals" 84 | } 85 | ] 86 | }, 87 | { 88 | test: /js$/, 89 | exclude: /(node_modules)/, 90 | loader: "babel-loader", 91 | query: { presets: ["react-app"] } 92 | } 93 | ] 94 | }, 95 | plugins: [ 96 | new webpack.BannerPlugin({ 97 | banner: "__isBrowser__ = false;", 98 | raw: true, 99 | include: /\.js$/ 100 | }) 101 | ] 102 | }; 103 | 104 | module.exports = [browserConfig, serverConfig]; 105 | -------------------------------------------------------------------------------- /src/app/component/Blog/Blogs.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import "../../css/index.css"; 3 | import SocialMedia from "../SocialMedia/SocialMedia"; 4 | import About from "../About/About"; 5 | import Search from "../Search/Search"; 6 | import BlogHeader from "./BlogHeader"; 7 | import BlogErrorPage from "./BlogErrorPage"; 8 | 9 | class Blogs extends Component { 10 | constructor(props) { 11 | super(props); 12 | this.state = {}; 13 | } 14 | 15 | loadPreviousPage() { 16 | if (this.props.blogs && this.props.blogs.docs.length > 0) { 17 | var activePage = this.props.blogs.page; 18 | var pageNo; 19 | 20 | if (activePage === 1) { 21 | pageNo = activePage; 22 | } else { 23 | pageNo = activePage - 1; 24 | } 25 | var pageUrl = "/page/" + pageNo; 26 | if (activePage !== 1) { 27 | return ( 28 | 29 | 30 | 31 | ); 32 | } 33 | } 34 | } 35 | 36 | loadNextPage() { 37 | if (this.props.blogs && this.props.blogs.docs.length > 0) { 38 | var totalPages = this.props.blogs.pages; 39 | var activePage = this.props.blogs.page; 40 | var pageNo; 41 | 42 | if (activePage === totalPages) { 43 | pageNo = totalPages; 44 | } else { 45 | pageNo = activePage + 1; 46 | } 47 | var pageUrl = "/page/" + pageNo; 48 | if (activePage !== totalPages) { 49 | return ( 50 | 51 | 52 | 53 | ); 54 | } 55 | } 56 | } 57 | 58 | renderBlogHeader() { 59 | if (this.props.blogs.docs.length > 0) { 60 | const blogs = this.props.blogs.docs; 61 | return ( 62 |
63 | {blogs && 64 | blogs.map(post => ( 65 |
66 | 77 |
78 | ))} 79 |
80 | ); 81 | } else { 82 | return ; 83 | } 84 | } 85 | 86 | render() { 87 | return ( 88 |
89 |
90 |
91 | {this.renderBlogHeader()} 92 |
93 |
94 | {this.loadPreviousPage()} 95 |
96 |
97 | {this.loadNextPage()} 98 |
99 |
100 |
101 |
102 |
103 | 104 |
105 |
106 | 107 |
108 |
109 | 110 |
111 |
112 |
113 | ); 114 | } 115 | } 116 | export default Blogs; 117 | -------------------------------------------------------------------------------- /src/app/component/About/About.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | 3 | class About extends Component { 4 | render() { 5 | return ( 6 |
7 |
8 | About 9 |
10 |
11 |
12 | 13 | 17 | 18 |
19 |
20 |
21 | 22 | Anshuman Pattnaik 23 | 24 |
25 |
26 |
27 | 32 | 36 | 37 |
38 |
39 | 44 | 48 | 49 |
50 |
51 | 56 | 60 | 61 |
62 |
63 | 68 | 72 | 73 |
74 |
75 | 80 | 84 | 85 |
86 |
87 |
88 |
89 |
90 | ); 91 | } 92 | } 93 | export default About; 94 | -------------------------------------------------------------------------------- /src/app/component/Blog/BlogDetails.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import BlogHeader from "./BlogHeader"; 3 | import NavBar from "../NavBar/NavBar"; 4 | import BlogErrorPage from "./BlogErrorPage"; 5 | import SocialMedia from "../SocialMedia/SocialMedia"; 6 | import Footer from "../Utils/Footer"; 7 | import About from "../About/About"; 8 | import Search from "../Search/Search"; 9 | import BlogFooter from "./BlogFooter"; 10 | import * as baseUrl from "../Utils/Constants"; 11 | 12 | class BlogDetails extends Component { 13 | constructor(props) { 14 | super(props); 15 | 16 | let initialData; 17 | initialData = props.staticContext.initialData; 18 | 19 | this.state = { 20 | posts: initialData 21 | }; 22 | } 23 | 24 | componentDidMount() { 25 | if (!this.state.posts) { 26 | this.loadPage(1); 27 | } 28 | } 29 | 30 | loadPage(data) { 31 | BlogDetails.requestInitialData(data).then(items => 32 | this.setState({ 33 | posts: items 34 | }) 35 | ); 36 | } 37 | 38 | static requestInitialData(data) { 39 | data = data.replace("/", ""); 40 | data = data.replace("/", ""); 41 | data = data.replace("blog", ""); 42 | const url = `${baseUrl.BASE_URL}/blogs/blog/${data}`; 43 | return fetch(url) 44 | .then(response => response.json()) 45 | .catch(error => console.log(error)); 46 | } 47 | 48 | renderBlogDetails() { 49 | var blogUrl; 50 | var blogId; 51 | var blogThumb; 52 | var blogTitle; 53 | var blogDate; 54 | var blogKeyword; 55 | var blogDescription; 56 | 57 | if (this.state.posts) { 58 | blogUrl = 59 | `${baseUrl.DOMAIN_URL}/blogs/blog/` + this.props.match.params.id; 60 | 61 | blogId = this.props.match.params.id; 62 | blogThumb = this.state.posts.thumb; 63 | blogTitle = this.state.posts.title; 64 | blogDate = this.state.posts.formatted_date; 65 | blogKeyword = this.state.posts.keywords; 66 | blogShortDescription = this.state.posts.short_description; 67 | blogDescription = this.state.posts.description; 68 | } 69 | 70 | return ( 71 |
72 | 73 |
74 |
75 |
76 | {this.state.posts ? ( 77 |
78 |
79 | 89 |
90 | 94 |
95 | ) : ( 96 | 97 | )} 98 |
99 |
100 |
101 | 102 |
103 |
104 | 105 |
106 |
107 | 108 |
109 |
110 |
111 |
112 |
113 | ); 114 | } 115 | 116 | render() { 117 | return
{this.renderBlogDetails()}
; 118 | } 119 | } 120 | export default BlogDetails; 121 | -------------------------------------------------------------------------------- /src/app/component/Blog/BlogHeader.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import Markup from "react-html-markup"; 3 | import * as baseUrl from "../Utils/Constants"; 4 | import twiiter from "../../icons/ic_twitter_black.png"; 5 | import reddit from "../../icons/ic_reddit_black.png"; 6 | import facebook from "../../icons/ic_facebook_black.png"; 7 | import whatsapp from "../../icons/ic_whatsapp_black.png"; 8 | 9 | class BlogHeader extends Component { 10 | renderDescription() { 11 | if (this.props.isDescription) { 12 | return ; 13 | } else { 14 | return ( 15 |

16 | {this.props.short_description} 17 |

18 | ); 19 | } 20 | } 21 | 22 | renderblogThumb() { 23 | const blogUrl = "/blog/" + this.props.short_title; 24 | if (this.props.short_title) { 25 | return ( 26 | 27 | 28 | 29 | ); 30 | } else { 31 | return ; 32 | } 33 | } 34 | 35 | renderblogTitle() { 36 | const blogUrl = "/blog/" + this.props.short_title; 37 | if (this.props.short_title) { 38 | return ( 39 | 40 |

{this.props.title}

41 |
42 | ); 43 | } else { 44 | return

{this.props.title}

; 45 | } 46 | } 47 | 48 | renderblogShare() { 49 | if (this.props.isDescription) { 50 | const blogUrl = "/blog/" + this.props.id; 51 | const blogTitle = this.props.title; 52 | return ( 53 |
54 |
55 | 61 | 62 | 63 |
64 |
65 | 71 | 72 | 73 |
74 |
75 | 81 | 82 | 83 |
84 |
85 | 91 | 92 | 93 |
94 |
95 | ); 96 | } 97 | } 98 | 99 | render() { 100 | return ( 101 |
102 |
103 | {this.renderblogThumb()} 104 |
105 | {this.renderblogTitle()} 106 |
107 |
108 | 109 | {this.props.author} 110 | 111 |      112 | {this.props.date} 113 |
114 | {this.renderblogShare()} 115 |
116 |
117 | {this.renderDescription()} 118 |
119 |
120 | {this.props.keyword} 121 |
122 |
123 |
124 | ); 125 | } 126 | } 127 | export default BlogHeader; 128 | -------------------------------------------------------------------------------- /dummy_data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "thumb": "https://assets.hackbotone.com/images/introduction_to_kali_linux/introduction_to_kali_linux.png", 4 | "title": "Introduction to Kali Linux", 5 | "short_title": "introduction-to-kali-linux", 6 | "keywords": "PENETRATION TOOL", 7 | "short_description": "Kali Linux is a Debian-based Linux distribution operating system and it is widely used for Penetration Testing and Security Auditing. Kali contains many several tools which are mostly used for various information security tasks, such as Penetration Testing, Security research, Computer Forensics and Reverse Engineering.", 8 | "description": "

Kali Linux is a Debian-based Linux distribution operating system and it is widely used for Penetration Testing and Security Auditing. Kali contains many several tools which are mostly used for various information security tasks, such as Penetration Testing, Security research, Computer Forensics and Reverse Engineering. Kali Linux is developed, funded and maintained by Offensive Security.

Free to download

Kali Linux is free to download from the official website. Kali Linux image files make a fresh release every few months, which is always available for download. For more information, you can visit their official website Kali Linux Downloads

Installation Requirements

A minimum of 20 GB disk space for the Kali Linux install.

1. RAM for i386 and amd64 architectures,

2. Minimum: 1GB, recommended: 2GB or more.

3. CD-DVD Drive / USB boot support.

A minimum of 20 GB disk space for the Kali Linux install.

For more information on install Kali Linux, you can visit their official website Kali Linux Hard Disk Installation

More than 600 penetration testing tools

Kali Linux has around more than 600 penetration testing tools from various domains and it will be very helpful for ethical hackers to penetrate a network. The tools are categorized from these domains such as

Information Gathering, Vulnerability Analysis, Wireless Attacks, Web Applications, Exploitation Tools, Stress Testing, Forensics Tools, Sniffing & Spoofing, Password Attacks, Maintaining Access, Reverse Engineering, Reporting Tools and Hardware Hacking.

Open source Git tree

Kali Linux development tree open source by the community for all. The complete source code of Kali Linux is available for anyone who ever wants to do some modifications or rebuild the packages as per their needs. For information on Kali Git tree please visit their official website Kali Linux Git

For more information on Kali Linux

If you want to know more about Kali Linux then please visit their related articles section.

1. Should I Use Kali Linux? -

2. Kali Community Support -

3. Customizing Kali Linux -

I hope you guys like this post-bye bye for now

Happy Hacking :)

", 9 | "date": "10/11/2019", 10 | "formatted_date": "November 10, 2019", 11 | "author": "BY ANSHUMAN", 12 | "__v": 0 13 | } 14 | ] 15 | -------------------------------------------------------------------------------- /src/app/component/About/AboutContent.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import "../../css/index.css"; 3 | 4 | class AboutContent extends Component { 5 | render() { 6 | return ( 7 |
8 |
9 | 13 |
14 |
15 |

Anshuman Pattnaik

16 |
17 |
18 |
19 | 24 | 28 | 29 | 34 | 38 | 39 | 44 | 48 | 49 | 54 | 58 | 59 | 64 | 68 | 69 |
70 |
71 |
72 |

73 | I am the creator of HackbotOne website and my{" "} 74 | 80 | Youtube channel 81 | {" "} 82 | and both of these platforms produce contents from various domains 83 | such as Web Hacking, Bug Bounty, Application Development & Game 84 | Development. This was my plan from quite a long time to make 85 | contents on these domains which will be helpful for those who are 86 | beginners and also those who have interest and passion in these 87 | areas. And now I have the platform to share my knowledge and 88 | experience to the world. 89 |

90 |

91 | Just to share my background I have around 5+ years of experience in 92 | the software industry and worked on many domains both Mobile & Web 93 | platforms but I would say it's just the beginning of my career lots 94 | more things to learn and explore in this industry and I always love 95 | Twitter because whenever I need to find an answer I'll tweet or else 96 | I'll search through #hashtags and I'll get my answer because I found 97 | Twitter is a platform where we can join to many communities and 98 | share ideas and experience. 99 |

100 |

101 | I love to do bug bounty on my free time and it's quite fun and 102 | exciting to hack on a live website and earn some bounty and I would 103 | like to thank all of these companies for running Bug Bounty programs 104 | because by this I can improve my skills sets in security. 105 |

106 |

107 | As a hobby, I love to play Playstation 4 games (Watchdog 2 ) is one 108 | of my favourite game of all the time and also love to watch Movies & 109 | TV shows on Netflix. 110 |

111 |

112 | Don't forget to follow me on twitter{" "} 113 | 119 | @anspattnaik 120 | 121 |

122 |

Thank you

123 |
124 |
125 | ); 126 | } 127 | } 128 | export default AboutContent; 129 | -------------------------------------------------------------------------------- /src/server/index.js: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import React from "react"; 3 | import { renderToString } from "react-dom/server"; 4 | import { StaticRouter, matchPath } from "react-router-dom"; 5 | import routes from "../app/component/App/routes"; 6 | import App from "../app/component/App/App"; 7 | import sourceMapSupport from "source-map-support"; 8 | 9 | if (process.env.NODE_ENV === "development") { 10 | sourceMapSupport.install(); 11 | } 12 | 13 | const site_url = "https://hackbotone.com"; 14 | const app = express(); 15 | const cors = require("cors"); 16 | const bodyParser = require("body-parser"); 17 | 18 | var blogsRouter = require("./blogs/blogcontroller"); 19 | 20 | app.use("/blogs", blogsRouter); 21 | 22 | app.use(bodyParser.urlencoded({ extended: false })); 23 | app.use(bodyParser.json()); 24 | app.use(cors()); 25 | app.use(express.static("public")); 26 | 27 | app.get("*", (req, res, next) => { 28 | var routerUrl = req.url; 29 | 30 | if (routerUrl.includes("search")) { 31 | routerUrl = routerUrl.replace("=", "=/"); 32 | } else { 33 | routerUrl = req.url; 34 | } 35 | 36 | const activeRoute = routes.find(route => matchPath(routerUrl, route)); 37 | 38 | if (typeof activeRoute !== "undefined") { 39 | var requestInitialData; 40 | 41 | if (routerUrl.includes("blog") || routerUrl.includes("page")) { 42 | requestInitialData = 43 | activeRoute.component.requestInitialData && 44 | activeRoute.component.requestInitialData(routerUrl); 45 | } else if (routerUrl.includes("search")) { 46 | requestInitialData = 47 | activeRoute.component.requestSearchData && 48 | activeRoute.component.requestSearchData(routerUrl); 49 | } else { 50 | requestInitialData = 51 | activeRoute.component.requestInitialData && 52 | activeRoute.component.requestInitialData(routerUrl); 53 | } 54 | 55 | Promise.resolve(requestInitialData) 56 | .then(initialData => { 57 | const context = { initialData }; 58 | const markup = renderToString( 59 | 60 | 61 | 62 | ); 63 | 64 | var response = JSON.stringify(initialData); 65 | var title; 66 | var thumb; 67 | var description; 68 | var blog_link; 69 | if ( 70 | routerUrl == "/" || 71 | routerUrl.includes("/?search") || 72 | routerUrl.includes("/page/") 73 | ) { 74 | title = 75 | "HackbotOne - Game Development, App Development & Ethical Hacking Tutorials"; 76 | thumb = 77 | "https://assets.hackbotone.com/images/icons/hackbotone_logo.png"; 78 | description = 79 | "HackbotOne website produces contents from various domains such as Web Hacking, Bug Bounty, Application Development & Game Development. "; 80 | blog_link = site_url; 81 | } else if (routerUrl.includes("/about")) { 82 | title = "About Me"; 83 | thumb = 84 | "https://assets.hackbotone.com/images/icons/anshuman_pattnaik.jpg"; 85 | description = 86 | "I am the creator of HackbotOne website and my Youtube channel and both of these platforms produce contents from various domains such as Web Hacking, Bug Bounty, Application Development & Game Development. This was my plan from quite a long time to make contents on these domains which will be helpful for those who are beginners and also those who have interest and passion in these areas. And now I have the platform to share my knowledge and experience to the world."; 87 | blog_link = site_url + "/about"; 88 | } else if (routerUrl.includes("/blog")) { 89 | var results = JSON.parse(response); 90 | if (results != null) { 91 | title = results.title; 92 | thumb = results.thumb; 93 | description = results.short_description; 94 | blog_link = site_url + "/blog/" + results.short_title; 95 | } else { 96 | title = 97 | "404 - Oops! We can't seem to find the page you're looking for."; 98 | description = 99 | "404 - Oops! We can't seem to find the page you're looking for."; 100 | } 101 | } 102 | 103 | res.send(` 104 | 105 | 106 | 107 | 108 | 109 | 110 | ${title} 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 |
${markup}
136 | 137 | 138 | `); 139 | }) 140 | .catch(next); 141 | } 142 | }); 143 | 144 | app.listen(process.env.PORT || 9000, () => { 145 | console.log("Server is listening"); 146 | }); 147 | -------------------------------------------------------------------------------- /src/app/css/index.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Roboto+Condensed&display=swap"); 2 | 3 | body { 4 | font-family: "Roboto Condensed", sans-serif; 5 | margin: 0; 6 | overflow-x: hidden; 7 | } 8 | 9 | a { 10 | text-decoration: none; 11 | } 12 | 13 | /***********************Header Styles***********************/ 14 | .header-div-container { 15 | width: 100%; 16 | height: 5.8em; 17 | line-height: 5.8em; 18 | position: fixed; 19 | background: #ffffff; 20 | display: grid; 21 | grid-template-columns: 20% 70%; 22 | top: 0; 23 | border-bottom: 0.5px solid #dfdfdf; 24 | } 25 | .app-logo { 26 | max-width: auto; 27 | max-height: auto; 28 | vertical-align: middle; 29 | } 30 | /***********************************************************/ 31 | 32 | /*************************Blog List Container Styles**********************/ 33 | .blog-parent-container { 34 | display: grid; 35 | grid-template-columns: 20% 40% 40%; 36 | margin-top: 8em; 37 | } 38 | .blog-left-container { 39 | padding: 1em; 40 | } 41 | .blog-middle-container { 42 | padding: 1em; 43 | } 44 | .blog-right-container { 45 | padding: 1em; 46 | } 47 | .blog-post-container { 48 | width: 100%; 49 | } 50 | .blog-post-date-author-keyword-container { 51 | display: grid; 52 | grid-template-columns: 15% 12% 18%; 53 | } 54 | .blog-post-author-container { 55 | line-height: 30px; 56 | } 57 | .blog-post-date-container { 58 | line-height: 30px; 59 | } 60 | .blog-post-keyword-container { 61 | line-height: 30px; 62 | } 63 | .keyword-container { 64 | height: 30px; 65 | border-radius: 5px; 66 | background: #f2f2f2; 67 | } 68 | .blog-post-thumb { 69 | width: 100%; 70 | height: 100%; 71 | } 72 | .blog-post-thumb-zoom { 73 | height: 100%; 74 | overflow: hidden; 75 | } 76 | 77 | .blog-post-thumb-zoom img { 78 | transition: transform 0.5s, filter 1.5s ease-in-out; 79 | } 80 | .blog-post-thumb-zoom:hover img { 81 | transform: scale(1.1); 82 | } 83 | .blog-pagination-container { 84 | width: 100%; 85 | height: 5em; 86 | line-height: 5em; 87 | padding: 1em; 88 | display: flex; 89 | } 90 | .blog-pagination-previous-container { 91 | width: 50%; 92 | height: 5em; 93 | line-height: 5em; 94 | display: flex; 95 | justify-content: flex-start; 96 | } 97 | .blog-pagination-next-container { 98 | width: 50%; 99 | height: 5em; 100 | line-height: 5em; 101 | display: flex; 102 | justify-content: flex-end; 103 | } 104 | .blog-pagination-button { 105 | width: 6em; 106 | height: 3em; 107 | border: none; 108 | outline: none; 109 | cursor: pointer; 110 | font-family: "Roboto Condensed", sans-serif; 111 | font-size: 0.98rem; 112 | font-weight: 500; 113 | color: #fff9f9; 114 | background: #1b1b1b; 115 | border-radius: 0.1em; 116 | } 117 | .blog-pagination-button:hover { 118 | width: 6em; 119 | height: 3em; 120 | border: none; 121 | outline: none; 122 | cursor: pointer; 123 | font-family: "Roboto Condensed", sans-serif; 124 | font-size: 0.98rem; 125 | font-weight: 500; 126 | color: #fff9f9; 127 | background: #2e2e2e; 128 | border-radius: 0.1em; 129 | } 130 | /*************************************************************************/ 131 | 132 | /**********************Blog Header Styles**************************/ 133 | .blog-header-container { 134 | width: 100%; 135 | height: auto; 136 | padding: 1em; 137 | } 138 | .blog-header-no-link-title { 139 | font-family: "Roboto Condensed", sans-serif; 140 | font-size: 2rem; 141 | font-weight: 700; 142 | text-shadow: 0.2px 0.2px #5e5d5d; 143 | color: #3b3a3a; 144 | } 145 | .blog-header-title { 146 | font-family: "Roboto Condensed", sans-serif; 147 | font-size: 2rem; 148 | font-weight: 700; 149 | text-shadow: 0.2px 0.2px #5e5d5d; 150 | color: #3b3a3a; 151 | } 152 | .blog-header-title:hover { 153 | font-family: "Roboto Condensed", sans-serif; 154 | font-size: 2rem; 155 | font-weight: 700; 156 | color: #fc4c00; 157 | cursor: pointer; 158 | } 159 | .blog-header-short-description-container { 160 | width: 100%; 161 | height: auto; 162 | } 163 | .blog-header-short-description { 164 | font-family: "Roboto Condensed", sans-serif; 165 | font-size: 1.01rem; 166 | font-weight: 100; 167 | line-height: 1.7em; 168 | color: #6b6a6a; 169 | } 170 | .blog-header-child-section { 171 | width: 100%; 172 | height: 2.5em; 173 | line-height: 2.5em; 174 | display: grid; 175 | grid-template-columns: 75% 25%; 176 | } 177 | .blog-header-author { 178 | font-family: "Roboto Condensed", sans-serif; 179 | font-size: 0.9rem; 180 | font-weight: 500; 181 | color: #4b4b4b; 182 | vertical-align: middle; 183 | } 184 | .blog-header-author:hover { 185 | font-family: "Roboto Condensed", sans-serif; 186 | font-size: 0.9rem; 187 | font-weight: 500; 188 | color: #fc4c00; 189 | vertical-align: middle; 190 | } 191 | .blog-header-date { 192 | font-family: "Roboto Condensed", sans-serif; 193 | font-size: 0.9rem; 194 | font-weight: 500; 195 | color: #4b4b4b; 196 | vertical-align: middle; 197 | } 198 | .blog-header-keyword-container { 199 | margin-top: 2em; 200 | } 201 | .blog-header-keyword { 202 | font-family: "Roboto Condensed", sans-serif; 203 | font-size: 0.6rem; 204 | font-weight: 700; 205 | color: #4b4b4b; 206 | padding: 0.5em; 207 | border: 0.1em solid #bdbaba; 208 | } 209 | .blog-header-share-icon-container { 210 | display: flex; 211 | height: 2em; 212 | } 213 | .blog-header-icon-container { 214 | width: 2.5em; 215 | height: 2.5em; 216 | display: flex; 217 | justify-content: center; 218 | align-items: center; 219 | } 220 | .blog-header-icon-container:hover { 221 | width: 2.5em; 222 | height: 2.5em; 223 | display: flex; 224 | justify-content: center; 225 | align-items: center; 226 | background: #f2f2f2; 227 | } 228 | .blog-header-share-icon { 229 | width: 1.2em; 230 | height: 1.2em; 231 | vertical-align: middle; 232 | } 233 | .blog-header-thumb-container { 234 | width: 100%; 235 | height: 100%; 236 | } 237 | .blog-header-thumb { 238 | width: 100%; 239 | height: 100%; 240 | } 241 | .blog-header-divider { 242 | width: 100%; 243 | height: 1px; 244 | margin-top: 2.5em; 245 | background: #d8d8d8; 246 | } 247 | /****************************************************************/ 248 | 249 | /**********************Blog Error Page Styles**********************/ 250 | .blog-error-page-container { 251 | width: 100%; 252 | height: auto; 253 | padding: 1em; 254 | } 255 | .blog-404-container { 256 | width: 100%; 257 | height: 3.5em; 258 | margin-top: 3em; 259 | display: flex; 260 | justify-content: center; 261 | align-items: center; 262 | } 263 | .blog-404-label { 264 | font-family: "Roboto Condensed", sans-serif; 265 | font-size: 8rem; 266 | font-weight: 700; 267 | color: #3b3a3a; 268 | } 269 | .blog-oops-container { 270 | width: 100%; 271 | height: 10em; 272 | display: flex; 273 | justify-content: center; 274 | align-items: center; 275 | } 276 | .blog-oops-label { 277 | font-family: "Roboto Condensed", sans-serif; 278 | font-size: 1.5rem; 279 | font-weight: 100; 280 | color: #3b3a3a; 281 | } 282 | /******************************************************************/ 283 | 284 | /**************************Blog Footer Styles*****************************/ 285 | .blog-footer-container { 286 | width: 100%; 287 | height: auto; 288 | display: flex; 289 | } 290 | .blog-footer-author-container { 291 | width: 15em; 292 | height: auto; 293 | padding: 0.5em; 294 | } 295 | .blog-footer-author-pic { 296 | border-radius: 10em; 297 | } 298 | .blog-footer-name-twitter-container { 299 | padding: 0.5em; 300 | } 301 | .blog-footer-name { 302 | font-family: "Roboto Condensed", sans-serif; 303 | font-size: 1rem; 304 | font-weight: 700; 305 | color: #3b3a3a; 306 | } 307 | .blog-footer-bio { 308 | font-family: "Roboto Condensed", sans-serif; 309 | font-size: 1.05rem; 310 | line-height: 1.5em; 311 | color: #6b6a6a; 312 | } 313 | .blog-footer-twitter { 314 | font-family: "Roboto Condensed", sans-serif; 315 | font-size: 1.05rem; 316 | color: #fc4c00; 317 | } 318 | /*************************************************************************/ 319 | 320 | /*************************Search Container Styles**********************/ 321 | .blog-search-container { 322 | width: 19em; 323 | padding: 1em; 324 | } 325 | .search-container { 326 | width: 19em; 327 | height: 3.2em; 328 | display: grid; 329 | grid-template-columns: 80% 10%; 330 | border: 1px solid #dfdfdf; 331 | } 332 | .search-input-div { 333 | width: 16em; 334 | line-height: 3em; 335 | } 336 | .search-input { 337 | width: 95%; 338 | text-indent: 1em; 339 | font-family: "Roboto Condensed", sans-serif; 340 | font-size: 0.95rem; 341 | color: #807f7f; 342 | border: none; 343 | outline: none; 344 | } 345 | .search-btn-div { 346 | width: 3.8em; 347 | height: auto; 348 | display: flex; 349 | border: none; 350 | outline: none; 351 | cursor: pointer; 352 | justify-content: center; 353 | align-items: center; 354 | background: #ffffff; 355 | } 356 | .search-icon { 357 | width: 1.2em; 358 | height: 1.2em; 359 | vertical-align: middle; 360 | } 361 | .search-results-center-div { 362 | padding: 1em; 363 | } 364 | .search-results-label-span { 365 | font-family: "Roboto Condensed", sans-serif; 366 | font-size: 1.1rem; 367 | font-weight: bold; 368 | color: #000; 369 | } 370 | /**********************************************************************/ 371 | 372 | /*************************About Container Styles**********************/ 373 | .blog-about-container { 374 | width: 19em; 375 | line-height: 3.2em; 376 | padding: 1em; 377 | } 378 | .about-container { 379 | width: 19em; 380 | height: 10em; 381 | display: grid; 382 | grid-template-columns: 100%; 383 | } 384 | .about-me-container { 385 | width: 100%; 386 | height: 3em; 387 | line-height: 3em; 388 | border-bottom: 0.5px solid #fc4c00; 389 | } 390 | .about-label { 391 | font-family: "Roboto Condensed", sans-serif; 392 | font-size: 1.3rem; 393 | font-weight: 700; 394 | color: #3b3a3a; 395 | } 396 | .about-profile-container { 397 | width: 100%; 398 | height: 5em; 399 | display: grid; 400 | grid-template-columns: 28% 70%; 401 | } 402 | .about-profile-pic-container { 403 | width: 7em; 404 | height: auto; 405 | } 406 | .about-profile-pic { 407 | width: 5em; 408 | height: auto; 409 | vertical-align: middle; 410 | border-radius: 10em; 411 | } 412 | .about-profile-details-container { 413 | width: 14em; 414 | height: auto; 415 | display: grid; 416 | grid-template-columns: 100%; 417 | } 418 | .about-profile-name-div { 419 | height: 2.5em; 420 | line-height: 2.5em; 421 | } 422 | .about-profile-name { 423 | font-family: "Roboto Condensed", sans-serif; 424 | font-size: 1.2rem; 425 | font-weight: 600; 426 | color: #3b3a3a; 427 | margin-left: 0.5em; 428 | } 429 | .about-social-profile-div { 430 | display: flex; 431 | height: 2.5em; 432 | line-height: 2.5em; 433 | } 434 | .about-social-media-icon-div { 435 | width: 2.5em; 436 | height: 2.5em; 437 | line-height: 2.5em; 438 | margin-left: 0.2em; 439 | } 440 | .about-social-media-icon-size { 441 | width: 2em; 442 | height: 2em; 443 | } 444 | /*********************************************************************/ 445 | 446 | /*************************Social Media Container Styles**********************/ 447 | .blog-social-media-container { 448 | width: 19em; 449 | height: auto; 450 | padding: 1em; 451 | } 452 | .social-media-container { 453 | width: 19em; 454 | height: auto; 455 | display: grid; 456 | grid-template-columns: 100%; 457 | } 458 | .social-media-label-container { 459 | width: 100%; 460 | height: 3em; 461 | line-height: 3em; 462 | border-bottom: 0.5px solid #fc4c00; 463 | } 464 | .social-media-label { 465 | font-family: "Roboto Condensed", sans-serif; 466 | font-size: 1.3rem; 467 | font-weight: 700; 468 | color: #3b3a3a; 469 | } 470 | .social-media-fb-container { 471 | width: 19em; 472 | height: auto; 473 | margin-top: 2em; 474 | } 475 | .social-media-iframe { 476 | overflow: hidden; 477 | } 478 | /****************************************************************************/ 479 | 480 | /*************************About Page Container Styles**********************/ 481 | .about-page-parent-container { 482 | display: grid; 483 | grid-template-columns: 20% 40% 40%; 484 | margin-top: 8em; 485 | } 486 | .about-page-left-container { 487 | padding: 1em; 488 | } 489 | .about-page-middle-container { 490 | padding: 1em; 491 | } 492 | .about-page-right-container { 493 | padding: 1em; 494 | } 495 | .about-author-pic-container { 496 | width: 100%; 497 | height: auto; 498 | display: flex; 499 | justify-content: center; 500 | align-items: center; 501 | } 502 | .about-author-pic { 503 | width: 6em; 504 | height: auto; 505 | border-radius: 10em; 506 | } 507 | .about-author-name-container { 508 | width: 100%; 509 | height: auto; 510 | display: flex; 511 | justify-content: center; 512 | align-items: center; 513 | } 514 | .about-author-name { 515 | font-family: "Roboto Condensed", sans-serif; 516 | font-size: 1.2em; 517 | font-weight: 700; 518 | color: #3b3a3a; 519 | } 520 | .about-message-container { 521 | margin-top: 2em; 522 | } 523 | .about-message-label { 524 | font-family: "Roboto Condensed", sans-serif; 525 | font-size: 1rem; 526 | line-height: 2rem; 527 | color: #6b6a6a; 528 | } 529 | .about-message-link { 530 | font-family: "Roboto Condensed", sans-serif; 531 | font-size: 1rem; 532 | color: #fc4c00; 533 | text-decoration: none; 534 | } 535 | .about-message-link:hover { 536 | font-family: "Roboto Condensed", sans-serif; 537 | font-size: 1rem; 538 | color: #fc4c00; 539 | text-decoration: underline; 540 | } 541 | .about-social-media-container { 542 | width: 100%; 543 | height: 3em; 544 | display: flex; 545 | justify-content: center; 546 | align-items: center; 547 | } 548 | .about-social-media-icon-container { 549 | width: 15em; 550 | height: 3em; 551 | display: flex; 552 | } 553 | .social-media-share-icon-large-size { 554 | width: 2em; 555 | height: 2em; 556 | margin: 0.5em; 557 | } 558 | /****************************************************************************/ 559 | 560 | /*********************************Footer Styles******************************/ 561 | .footer-container { 562 | width: 100%; 563 | height: 10em; 564 | background: #000000; 565 | } 566 | .footer-social-media-container { 567 | width: 100%; 568 | height: 5em; 569 | display: flex; 570 | justify-content: center; 571 | align-items: center; 572 | } 573 | .footer-social-media-icon-container { 574 | width: 40%; 575 | height: 5em; 576 | line-height: 5em; 577 | display: flex; 578 | justify-content: center; 579 | align-items: center; 580 | border-bottom: 0.1px solid #2c2c2c; 581 | } 582 | .footer-social-media-icon-size { 583 | width: 2.5em; 584 | height: auto; 585 | margin: 0.5em; 586 | vertical-align: middle; 587 | } 588 | .footer-copyright-container { 589 | width: 100%; 590 | height: 5em; 591 | display: flex; 592 | justify-content: center; 593 | align-items: center; 594 | } 595 | .footer-copyright-label { 596 | font-family: "Roboto Condensed", sans-serif; 597 | font-size: 0.95rem; 598 | text-shadow: 0.2px 0.2px #5e5d5d; 599 | color: #555353; 600 | } 601 | /************************************************************************/ 602 | 603 | @media only screen and (max-width: 1000px) { 604 | /***********************Header Styles***********************/ 605 | .header-div-container { 606 | width: 100%; 607 | height: 5.8em; 608 | line-height: 5.8em; 609 | position: fixed; 610 | background: #ffffff; 611 | display: grid; 612 | grid-template-columns: 100%; 613 | top: 0; 614 | border-bottom: 0.5px solid #dfdfdf; 615 | } 616 | .app-logo { 617 | max-width: auto; 618 | max-height: auto; 619 | vertical-align: middle; 620 | } 621 | /***********************************************************/ 622 | 623 | /*************************Blog List Container Styles**********************/ 624 | .blog-parent-container { 625 | display: grid; 626 | grid-template-columns: 100%; 627 | margin-top: 5em; 628 | } 629 | .blog-left-container { 630 | padding: 1em; 631 | } 632 | .blog-middle-container { 633 | padding: 1em; 634 | } 635 | .blog-right-container { 636 | padding: 1em; 637 | } 638 | .blog-post-container { 639 | } 640 | .blog-post-date-author-keyword-container { 641 | display: grid; 642 | grid-template-columns: 25% 20% 20%; 643 | } 644 | .blog-post-author-container { 645 | line-height: 50px; 646 | } 647 | .blog-post-date-container { 648 | line-height: 50px; 649 | } 650 | .blog-post-keyword-container { 651 | line-height: 50px; 652 | } 653 | .keyword-container { 654 | height: 50px; 655 | border-radius: 5px; 656 | background: #f2f2f2; 657 | } 658 | .blog-post-thumb { 659 | width: 100%; 660 | height: 100%; 661 | } 662 | .blog-post-thumb-zoom { 663 | height: 100%; 664 | overflow: hidden; 665 | } 666 | 667 | .blog-post-thumb-zoom img { 668 | transition: transform 0.5s, filter 1.5s ease-in-out; 669 | } 670 | .blog-post-thumb-zoom:hover img { 671 | transform: scale(1.1); 672 | } 673 | .blog-pagination-container { 674 | width: 100%; 675 | height: 5em; 676 | line-height: 5em; 677 | padding: 1; 678 | display: flex; 679 | } 680 | .blog-pagination-previous-container { 681 | width: 50%; 682 | height: 5em; 683 | line-height: 5em; 684 | display: flex; 685 | justify-content: flex-start; 686 | } 687 | .blog-pagination-next-container { 688 | width: 50%; 689 | height: 5em; 690 | line-height: 5em; 691 | display: flex; 692 | justify-content: flex-end; 693 | } 694 | .blog-pagination-button { 695 | width: 6em; 696 | height: 3em; 697 | border: none; 698 | outline: none; 699 | cursor: pointer; 700 | font-family: "Roboto Condensed", sans-serif; 701 | font-size: 0.98rem; 702 | font-weight: 500; 703 | color: #fff9f9; 704 | background: #1b1b1b; 705 | border-radius: 0.1em; 706 | } 707 | .blog-pagination-button:hover { 708 | width: 6em; 709 | height: 3em; 710 | border: none; 711 | outline: none; 712 | cursor: pointer; 713 | font-family: "Roboto Condensed", sans-serif; 714 | font-size: 0.98rem; 715 | font-weight: 500; 716 | color: #fff9f9; 717 | background: #2e2e2e; 718 | border-radius: 0.1em; 719 | } 720 | /*************************************************************************/ 721 | 722 | /**********************Blog Error Page Styles**********************/ 723 | .blog-error-page-container { 724 | width: 100%; 725 | height: auto; 726 | padding: 1em; 727 | } 728 | .blog-404-container { 729 | width: 100%; 730 | height: 3.5em; 731 | margin-top: 3em; 732 | display: flex; 733 | justify-content: center; 734 | align-items: center; 735 | } 736 | .blog-404-label { 737 | font-family: "Roboto Condensed", sans-serif; 738 | font-size: 8rem; 739 | font-weight: 700; 740 | color: #3b3a3a; 741 | } 742 | .blog-oops-container { 743 | width: 100%; 744 | height: 10em; 745 | display: flex; 746 | justify-content: center; 747 | align-items: center; 748 | } 749 | .blog-oops-label { 750 | font-family: "Roboto Condensed", sans-serif; 751 | font-size: 1.5rem; 752 | font-weight: 100; 753 | color: #3b3a3a; 754 | } 755 | /******************************************************************/ 756 | 757 | /**********************Blog Header Styles**************************/ 758 | .blog-header-container { 759 | width: 100%; 760 | height: auto; 761 | padding: 1em; 762 | } 763 | .blog-header-no-link-title { 764 | font-family: "Roboto Condensed", sans-serif; 765 | font-size: 2rem; 766 | font-weight: 700; 767 | text-shadow: 0.2px 0.2px #5e5d5d; 768 | color: #3b3a3a; 769 | } 770 | .blog-header-title { 771 | font-family: "Roboto Condensed", sans-serif; 772 | font-size: 2rem; 773 | font-weight: 700; 774 | text-shadow: 0.2px 0.2px #5e5d5d; 775 | color: #3b3a3a; 776 | } 777 | .blog-header-title:hover { 778 | font-family: "Roboto Condensed", sans-serif; 779 | font-size: 2rem; 780 | font-weight: 700; 781 | color: #fc4c00; 782 | cursor: pointer; 783 | } 784 | .blog-header-short-description-container { 785 | width: 100%; 786 | height: auto; 787 | } 788 | .blog-header-short-description { 789 | font-family: "Roboto Condensed", sans-serif; 790 | font-size: 1.01rem; 791 | font-weight: 100; 792 | line-height: 1.7em; 793 | color: #6b6a6a; 794 | } 795 | .blog-header-child-section { 796 | width: 100%; 797 | height: 2em; 798 | line-height: 2em; 799 | display: grid; 800 | grid-template-columns: 70% 32%; 801 | } 802 | .blog-header-author-date { 803 | font-family: "Roboto Condensed", sans-serif; 804 | font-size: 0.9rem; 805 | font-weight: 500; 806 | color: #4b4b4b; 807 | } 808 | .blog-header-keyword-container { 809 | margin-top: 2em; 810 | } 811 | .blog-header-keyword { 812 | font-family: "Roboto Condensed", sans-serif; 813 | font-size: 0.6rem; 814 | font-weight: 700; 815 | color: #4b4b4b; 816 | padding: 0.5em; 817 | border: 0.1em solid #bdbaba; 818 | } 819 | .blog-header-share-icon-container { 820 | display: flex; 821 | height: 2em; 822 | } 823 | .blog-header-icon-container { 824 | width: 2.5em; 825 | height: 2.5em; 826 | display: flex; 827 | flex-direction: column; 828 | justify-content: center; 829 | align-items: center; 830 | } 831 | .blog-header-icon-container:hover { 832 | width: 2.5em; 833 | height: 2.5em; 834 | display: flex; 835 | justify-content: center; 836 | align-items: center; 837 | background: #f2f2f2; 838 | } 839 | .blog-header-share-icon { 840 | width: 1.1em; 841 | height: 1.1em; 842 | vertical-align: middle; 843 | } 844 | .blog-header-thumb-container { 845 | width: 100%; 846 | height: 100%; 847 | } 848 | .blog-header-thumb { 849 | width: 100%; 850 | height: 100%; 851 | } 852 | .blog-header-divider { 853 | width: 100%; 854 | height: 1px; 855 | margin-top: 2.5em; 856 | background: #d8d8d8; 857 | } 858 | /****************************************************************/ 859 | 860 | /**************************Blog Footer Styles*****************************/ 861 | .blog-footer-container { 862 | width: 100%; 863 | height: auto; 864 | display: flex; 865 | } 866 | .blog-footer-author-container { 867 | width: 15em; 868 | height: auto; 869 | padding: 0.5em; 870 | } 871 | .blog-footer-author-pic { 872 | border-radius: 10em; 873 | } 874 | .blog-footer-name-twitter-container { 875 | padding: 0.5em; 876 | } 877 | .blog-footer-name { 878 | font-family: "Roboto Condensed", sans-serif; 879 | font-size: 0.9rem; 880 | font-weight: 700; 881 | color: #3b3a3a; 882 | } 883 | .blog-footer-bio { 884 | font-family: "Roboto Condensed", sans-serif; 885 | font-size: 0.9rem; 886 | line-height: 1.5em; 887 | color: #6b6a6a; 888 | } 889 | .blog-footer-twitter { 890 | font-family: "Roboto Condensed", sans-serif; 891 | font-size: 0.9rem; 892 | color: #fc4c00; 893 | } 894 | /*************************************************************************/ 895 | 896 | /*************************Search Container Styles**********************/ 897 | .blog-search-container { 898 | width: 100%; 899 | line-height: 3.2em; 900 | } 901 | .search-container { 902 | width: 19em; 903 | height: 3.2em; 904 | display: grid; 905 | margin: 0 auto; 906 | grid-template-columns: 80% 10%; 907 | border: 1px solid #dfdfdf; 908 | } 909 | .search-input-div { 910 | width: 16em; 911 | line-height: 3em; 912 | } 913 | .search-input { 914 | width: 95%; 915 | text-indent: 1em; 916 | font-family: "Roboto Condensed", sans-serif; 917 | font-size: 0.95rem; 918 | color: #807f7f; 919 | border: none; 920 | outline: none; 921 | } 922 | .search-btn-div { 923 | width: 3.8em; 924 | height: auto; 925 | display: flex; 926 | border: none; 927 | outline: none; 928 | cursor: pointer; 929 | justify-content: center; 930 | align-items: center; 931 | background: #ffffff; 932 | } 933 | .search-icon { 934 | width: 1.2em; 935 | height: 1.2em; 936 | vertical-align: middle; 937 | } 938 | .search-results-center-div { 939 | padding: 1em; 940 | } 941 | .search-results-label-span { 942 | font-family: "Roboto Condensed", sans-serif; 943 | font-size: 1.1rem; 944 | font-weight: bold; 945 | color: #000; 946 | } 947 | /**********************************************************************/ 948 | 949 | /*************************About Container Styles**********************/ 950 | .blog-about-container { 951 | width: 100%; 952 | line-height: 3.2em; 953 | padding: 1em; 954 | margin: 0 auto; 955 | } 956 | .about-container { 957 | width: 19em; 958 | height: 10em; 959 | margin: 0 auto; 960 | display: grid; 961 | grid-template-columns: 100%; 962 | } 963 | .about-me-container { 964 | width: 100%; 965 | height: 3em; 966 | line-height: 3em; 967 | border-bottom: 0.5px solid #fc4c00; 968 | } 969 | .about-label { 970 | font-family: "Roboto Condensed", sans-serif; 971 | font-size: 1.3rem; 972 | font-weight: 700; 973 | color: #3b3a3a; 974 | } 975 | .about-profile-container { 976 | width: 100%; 977 | height: 5em; 978 | display: grid; 979 | grid-template-columns: 28% 70%; 980 | } 981 | .about-profile-pic-container { 982 | width: 7em; 983 | height: auto; 984 | } 985 | .about-profile-pic { 986 | width: 4.5em; 987 | height: auto; 988 | vertical-align: middle; 989 | border-radius: 10em; 990 | } 991 | .about-profile-details-container { 992 | width: 14em; 993 | height: auto; 994 | display: grid; 995 | grid-template-columns: 100%; 996 | } 997 | .about-profile-name-div { 998 | height: 2.5em; 999 | line-height: 2.5em; 1000 | } 1001 | .about-profile-name { 1002 | font-family: "Roboto Condensed", sans-serif; 1003 | font-size: 1rem; 1004 | font-weight: 600; 1005 | color: #3b3a3a; 1006 | margin-left: 0.5em; 1007 | } 1008 | .about-social-profile-div { 1009 | display: flex; 1010 | height: 2.5em; 1011 | line-height: 2.5em; 1012 | } 1013 | .about-social-media-icon-div { 1014 | width: 2.5em; 1015 | height: 2.5em; 1016 | line-height: 2.5em; 1017 | margin-left: 0.2em; 1018 | } 1019 | .about-social-media-icon-size { 1020 | width: 2em; 1021 | height: 2em; 1022 | } 1023 | /*********************************************************************/ 1024 | 1025 | /*************************Social Media Container Styles**********************/ 1026 | .blog-social-media-container { 1027 | width: 100%; 1028 | height: auto; 1029 | padding: 1em; 1030 | margin: 0 auto; 1031 | } 1032 | .social-media-container { 1033 | width: 19em; 1034 | height: auto; 1035 | margin: 0 auto; 1036 | display: grid; 1037 | grid-template-columns: 100%; 1038 | } 1039 | .social-media-label-container { 1040 | width: 100%; 1041 | height: 3em; 1042 | line-height: 3em; 1043 | border-bottom: 0.5px solid #fc4c00; 1044 | } 1045 | .social-media-label { 1046 | font-family: "Roboto Condensed", sans-serif; 1047 | font-size: 1.3rem; 1048 | font-weight: 700; 1049 | color: #3b3a3a; 1050 | } 1051 | .social-media-fb-container { 1052 | width: 19em; 1053 | height: auto; 1054 | margin-top: 2em; 1055 | } 1056 | .social-media-iframe { 1057 | overflow: hidden; 1058 | } 1059 | /****************************************************************************/ 1060 | 1061 | /*************************About Page Container Styles**********************/ 1062 | .about-page-parent-container { 1063 | display: grid; 1064 | grid-template-columns: 100%; 1065 | margin-top: 5em; 1066 | } 1067 | .about-page-left-container { 1068 | padding: 1em; 1069 | } 1070 | .about-page-middle-container { 1071 | padding: 1em; 1072 | } 1073 | .about-page-right-container { 1074 | padding: 1em; 1075 | } 1076 | .about-author-pic-container { 1077 | width: 100%; 1078 | height: auto; 1079 | display: flex; 1080 | justify-content: center; 1081 | align-items: center; 1082 | } 1083 | .about-author-pic { 1084 | width: 6em; 1085 | height: auto; 1086 | border-radius: 10em; 1087 | } 1088 | .about-author-name-container { 1089 | width: 100%; 1090 | height: auto; 1091 | display: flex; 1092 | justify-content: center; 1093 | align-items: center; 1094 | } 1095 | .about-author-name { 1096 | font-family: "Roboto Condensed", sans-serif; 1097 | font-size: 1.2em; 1098 | font-weight: 700; 1099 | color: #3b3a3a; 1100 | } 1101 | .about-message-container { 1102 | margin-top: 2em; 1103 | } 1104 | .about-message-label { 1105 | font-family: "Roboto Condensed", sans-serif; 1106 | font-size: 1rem; 1107 | line-height: 2rem; 1108 | color: #6b6a6a; 1109 | } 1110 | .about-message-link { 1111 | font-family: "Roboto Condensed", sans-serif; 1112 | font-size: 1rem; 1113 | color: #fc4c00; 1114 | text-decoration: none; 1115 | } 1116 | 1117 | .about-message-link:hover { 1118 | font-family: "Roboto Condensed", sans-serif; 1119 | font-size: 1rem; 1120 | color: #fc4c00; 1121 | text-decoration: underline; 1122 | } 1123 | .about-social-media-container { 1124 | width: 100%; 1125 | height: 3em; 1126 | display: flex; 1127 | justify-content: center; 1128 | align-items: center; 1129 | } 1130 | .about-social-media-icon-container { 1131 | width: 15em; 1132 | height: 3em; 1133 | display: flex; 1134 | } 1135 | .social-media-share-icon-large-size { 1136 | width: 2em; 1137 | height: 2em; 1138 | margin: 0.5em; 1139 | } 1140 | /****************************************************************************/ 1141 | 1142 | /*********************************Footer Styles******************************/ 1143 | .footer-container { 1144 | width: 100%; 1145 | height: 10em; 1146 | background: #000000; 1147 | } 1148 | .footer-social-media-container { 1149 | width: 100%; 1150 | height: 5em; 1151 | display: flex; 1152 | justify-content: center; 1153 | align-items: center; 1154 | } 1155 | .footer-social-media-icon-container { 1156 | width: 80%; 1157 | height: 5em; 1158 | line-height: 5em; 1159 | display: flex; 1160 | justify-content: center; 1161 | align-items: center; 1162 | border-bottom: 0.1px solid #2c2c2c; 1163 | } 1164 | .footer-social-media-icon-size { 1165 | width: 2.5em; 1166 | height: auto; 1167 | margin: 0.5em; 1168 | vertical-align: middle; 1169 | } 1170 | .footer-copyright-container { 1171 | width: 100%; 1172 | height: 5em; 1173 | display: flex; 1174 | justify-content: center; 1175 | align-items: center; 1176 | } 1177 | .footer-copyright-label { 1178 | font-family: "Roboto Condensed", sans-serif; 1179 | font-size: 0.95rem; 1180 | text-shadow: 0.2px 0.2px #5e5d5d; 1181 | color: #555353; 1182 | } 1183 | /************************************************************************/ 1184 | } 1185 | --------------------------------------------------------------------------------