├── screenshot.png ├── public ├── portfolio1.jpeg ├── portfolio2.jpg ├── portfolio3.png ├── portfolio4.png ├── portfolio5.jpeg ├── portfolio6.jpeg └── ryan-ray-profile2.jpeg ├── .gitignore ├── jsconfig.json ├── README.md ├── src ├── pages │ ├── _app.js │ ├── 404.js │ ├── _error.js │ ├── _document.js │ ├── blog.js │ ├── github.js │ └── index.js ├── global.css ├── post.js ├── components │ ├── Navbar.js │ └── Layout.js └── profile.js └── package.json /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fazt/next-simple-portfolio/HEAD/screenshot.png -------------------------------------------------------------------------------- /public/portfolio1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fazt/next-simple-portfolio/HEAD/public/portfolio1.jpeg -------------------------------------------------------------------------------- /public/portfolio2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fazt/next-simple-portfolio/HEAD/public/portfolio2.jpg -------------------------------------------------------------------------------- /public/portfolio3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fazt/next-simple-portfolio/HEAD/public/portfolio3.png -------------------------------------------------------------------------------- /public/portfolio4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fazt/next-simple-portfolio/HEAD/public/portfolio4.png -------------------------------------------------------------------------------- /public/portfolio5.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fazt/next-simple-portfolio/HEAD/public/portfolio5.jpeg -------------------------------------------------------------------------------- /public/portfolio6.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fazt/next-simple-portfolio/HEAD/public/portfolio6.jpeg -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # node 2 | node_modules 3 | 4 | # next 5 | out 6 | .next 7 | 8 | 9 | .env 10 | .env.local -------------------------------------------------------------------------------- /public/ryan-ray-profile2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fazt/next-simple-portfolio/HEAD/public/ryan-ray-profile2.jpeg -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "@/*": ["./src/*"] 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Next Simple Portfolio 2 | ![](./screenshot.png) 3 | 4 | # Tools 5 | 6 | - Nextjs 7 | - Bootswatch 4 8 | 9 | ## Resources 10 | 11 | - [NProgress change color](https://github.com/rstacruz/nprogress/issues/187) 12 | - [Nextjs 100%](https://gist.github.com/dmurawsky/d45f068097d181c733a53687edce1919) 13 | -------------------------------------------------------------------------------- /src/pages/_app.js: -------------------------------------------------------------------------------- 1 | // importing bootswatch 2 | import 'bootswatch/dist/cosmo/bootstrap.min.css' 3 | import 'animate.css/animate.min.css' 4 | import '../global.css' 5 | 6 | // This default export is required in a new `pages/_app.js` file. 7 | export default function MyApp({ Component, pageProps }) { 8 | return 9 | } -------------------------------------------------------------------------------- /src/pages/404.js: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | import Layout from "../components/Layout"; 3 | 4 | const custom404 = () => ( 5 | 6 |
7 |

404

8 |

9 | This page does not exists. Please return to Home 10 |

11 |
12 |
13 | ); 14 | 15 | export default custom404; 16 | -------------------------------------------------------------------------------- /src/pages/_error.js: -------------------------------------------------------------------------------- 1 | import Layout from "../components/Layout"; 2 | 3 | const _error = ({ statusCode }) => { 4 | return ( 5 | 6 |

7 | {statusCode 8 | ? `Could not load your user data: Status code ${statusCode}` 9 | : "Coud not get that page, sorry."} 10 |

11 |
12 | ); 13 | }; 14 | 15 | export default _error; 16 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "next-simple-portfolio", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "dependencies": { 7 | "animate.css": "^4.1.1", 8 | "bootswatch": "^5.3.1", 9 | "classnames": "^2.3.2", 10 | "next": "^13.4.19", 11 | "nprogress": "^0.2.0", 12 | "prop-types": "^15.8.1", 13 | "react": "^18.2.0", 14 | "react-dom": "^18.2.0" 15 | }, 16 | "scripts": { 17 | "dev": "next dev", 18 | "start": "next start", 19 | "build": "next build" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/global.css: -------------------------------------------------------------------------------- 1 | html, 2 | body, 3 | body > div:first-child, 4 | div#__next, 5 | div#__next > div { 6 | height: 100%; 7 | } 8 | 9 | .overflow { 10 | height: 50%; 11 | overflow: hidden; 12 | } 13 | 14 | .overflow .card-img-top { 15 | transform: scale(1); 16 | transition: all 0.2s ease-in-out; 17 | } 18 | 19 | .overflow .card-img-top:hover { 20 | transform: scale(1.8); 21 | } 22 | 23 | #nprogress .bar { 24 | background: #ff5367 !important; 25 | } 26 | 27 | #nprogress .spinner-icon { 28 | border-top-color: #ffbb00; 29 | border-left-color: #ffbb00; 30 | } 31 | -------------------------------------------------------------------------------- /src/pages/_document.js: -------------------------------------------------------------------------------- 1 | import Document, { Html, Head, Main, NextScript } from "next/document"; 2 | 3 | class MyDocument extends Document { 4 | render() { 5 | return ( 6 | 7 | 8 | 9 | {/* Nprogress css */} 10 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | ); 21 | } 22 | } 23 | 24 | export default MyDocument; 25 | -------------------------------------------------------------------------------- /src/post.js: -------------------------------------------------------------------------------- 1 | import Layout from "../components/Layout"; 2 | import { useRouter } from "next/router"; 3 | import { posts } from "@/profile"; 4 | 5 | const Post = () => { 6 | const router = useRouter(); 7 | 8 | const currentPost = posts.filter( 9 | (post) => post.title === router.query.title 10 | )[0]; 11 | 12 | if (!currentPost) { 13 | return { 14 | redirect: { 15 | destination: "/", 16 | permanent: false, 17 | }, 18 | } 19 | } 20 | 21 | return ( 22 | 23 |
24 | 30 |

{currentPost.content}

31 |
32 |
33 | ); 34 | }; 35 | 36 | export default Post; 37 | -------------------------------------------------------------------------------- /src/pages/blog.js: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | import Layout from "../components/Layout"; 3 | 4 | import { posts } from "../profile"; 5 | 6 | const PostCard = ({ post }) => ( 7 |
8 |
9 |
10 | 11 |
12 |
13 |

{post.title}

14 |

{post.content}

15 | 16 | 17 | 18 |
19 |
20 |
21 | ); 22 | 23 | const blog = () => { 24 | return ( 25 | 26 |
27 | {posts.map((post, i) => ( 28 | 29 | ))} 30 |
31 |
32 | ); 33 | }; 34 | 35 | export default blog; 36 | -------------------------------------------------------------------------------- /src/components/Navbar.js: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | 3 | const Navbar = () => { 4 | return ( 5 | 41 | ); 42 | }; 43 | 44 | export default Navbar; 45 | -------------------------------------------------------------------------------- /src/pages/github.js: -------------------------------------------------------------------------------- 1 | import Layout from "../components/Layout"; 2 | import Error from "./_error"; 3 | 4 | const Github = ({ user, statusCode }) => { 5 | if (statusCode) { 6 | return ; 7 | } 8 | 9 | return ( 10 | 11 |
12 |
13 |
14 |

{user.name}

15 | 16 |

{user.bio}

17 | 22 | My Blog 23 | 24 | 29 | Go to Github 30 | 31 |
32 |
33 |
34 |
35 | ); 36 | }; 37 | 38 | Github.proptypes = {}; 39 | 40 | export async function getServerSideProps() { 41 | const res = await fetch( 42 | "https://api.github.com/users/fazttech" 43 | ); 44 | const data = await res.json(); 45 | 46 | const statusCode = res.status > 200 ? res.status : false; 47 | 48 | return { 49 | props: { 50 | user: data, 51 | statusCode, 52 | }, 53 | }; 54 | } 55 | 56 | export default Github; 57 | -------------------------------------------------------------------------------- /src/components/Layout.js: -------------------------------------------------------------------------------- 1 | import { useEffect } from "react"; 2 | import { useRouter } from "next/router"; 3 | import Navbar from "./Navbar"; 4 | import PropTypes from "prop-types"; 5 | import NProgress from "nprogress"; 6 | import nProgress from "nprogress"; 7 | import classNames from "classnames"; 8 | 9 | const Layout = ({ children, title, footer = true, dark = false }) => { 10 | const router = useRouter(); 11 | 12 | useEffect(() => { 13 | const handleRouteChange = (url) => { 14 | console.log(url); 15 | NProgress.start(); 16 | }; 17 | 18 | router.events.on("routeChangeStart", handleRouteChange); 19 | 20 | router.events.on("routeChangeComplete", () => NProgress.done()); 21 | 22 | router.events.on("routeChangeError", () => nProgress.done()); 23 | 24 | return () => { 25 | router.events.off("routeChangeStart", handleRouteChange); 26 | }; 27 | }, []); 28 | 29 | return ( 30 |
31 | 32 |
33 | {/* Title */} 34 | {title && ( 35 |

36 | {title} 37 |

38 | )} 39 | 40 | {/* Content */} 41 | {children} 42 |
43 | 44 | {footer && ( 45 |
46 |
47 |

© Ryan Ray Portfolio

48 |

2000 - {new Date().getFullYear()}

49 |

All rights Reserved.

50 |
51 |
52 | )} 53 |
54 | ); 55 | }; 56 | 57 | Layout.proptypes = { 58 | children: PropTypes.node, 59 | title: PropTypes.string, 60 | footer: PropTypes.bool, 61 | }; 62 | 63 | export default Layout; 64 | -------------------------------------------------------------------------------- /src/profile.js: -------------------------------------------------------------------------------- 1 | export const skills = [ 2 | { 3 | skill: "Javascript", 4 | percentage: 100, 5 | }, 6 | { 7 | skill: "Golang", 8 | percentage: 80, 9 | }, 10 | { 11 | skill: "Nodejs", 12 | percentage: 90, 13 | }, 14 | { 15 | skill: "Blockchain", 16 | percentage: 40, 17 | }, 18 | { 19 | skill: "Physics", 20 | percentage: 70, 21 | }, 22 | { 23 | skill: "Economics", 24 | percentage: 70, 25 | }, 26 | { 27 | skill: "Machine Learning", 28 | percentage: 70, 29 | }, 30 | ]; 31 | 32 | export const experiences = [ 33 | { 34 | title: "Software developer at Microsoft", 35 | description: 36 | "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sint excepturi ea explicabo. Illum suscipit illo, porro quisquam voluptatem officiis fugiat vel animi aliquam inventore rem. Quo laudantium temporibus cupiditate. Aut?", 37 | from: 2000, 38 | to: 2005, 39 | }, 40 | { 41 | title: "Software developer at Google", 42 | description: 43 | "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sint excepturi ea explicabo. Illum suscipit illo, porro quisquam voluptatem officiis fugiat vel animi aliquam inventore rem. Quo laudantium temporibus cupiditate. Aut?", 44 | from: 2005, 45 | to: 2007, 46 | }, 47 | { 48 | title: "Software developer at SpaceX", 49 | description: 50 | "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sint excepturi ea explicabo. Illum suscipit illo, porro quisquam voluptatem officiis fugiat vel animi aliquam inventore rem. Quo laudantium temporibus cupiditate. Aut?", 51 | from: 2010, 52 | }, 53 | ]; 54 | 55 | export const projects = [ 56 | { 57 | name: "Awesome Website 1", 58 | description: 59 | "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sint excepturi ea explicabo. Illum suscipit illo, porro quisquam voluptatem", 60 | image: "portfolio1.jpeg", 61 | }, 62 | { 63 | name: "Awesome Website 2", 64 | description: 65 | "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sint excepturi ea explicabo. Illum suscipit illo, porro quisquam voluptatem", 66 | image: "portfolio2.jpg", 67 | }, 68 | { 69 | name: "Awesome Website 3", 70 | description: 71 | "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sint excepturi ea explicabo. Illum suscipit illo, porro quisquam voluptatem", 72 | image: "portfolio3.png", 73 | }, 74 | { 75 | name: "Awesome Website 4", 76 | description: 77 | "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sint excepturi ea explicabo. Illum suscipit illo, porro quisquam voluptatem", 78 | image: "portfolio4.png", 79 | }, 80 | { 81 | name: "Awesome Website 5", 82 | description: 83 | "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sint excepturi ea explicabo. Illum suscipit illo, porro quisquam voluptatem", 84 | image: "portfolio5.jpeg", 85 | }, 86 | { 87 | name: "Awesome Website 6", 88 | description: 89 | "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sint excepturi ea explicabo. Illum suscipit illo, porro quisquam voluptatem", 90 | image: "portfolio6.jpeg", 91 | }, 92 | ]; 93 | 94 | export const posts = [ 95 | { 96 | title: "React", 97 | content: 98 | "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sint excepturi ea explicabo. Illum suscipit illo, porro quisquam voluptatem", 99 | imageURL: 100 | "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Faie.edu.au%2Fwp-content%2Fuploads%2F2018%2F03%2Fgame-programming-03.jpg", 101 | }, 102 | { 103 | title: "Angular", 104 | content: 105 | "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sint excepturi ea explicabo. Illum suscipit illo, porro quisquam voluptatem", 106 | imageURL: 107 | "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Faie.edu.au%2Fwp-content%2Fuploads%2F2018%2F03%2Fgame-programming-03.jpg", 108 | }, 109 | { 110 | title: "Nextjs", 111 | content: 112 | "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sint excepturi ea explicabo. Illum suscipit illo, porro quisquam voluptatem", 113 | imageURL: 114 | "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Faie.edu.au%2Fwp-content%2Fuploads%2F2018%2F03%2Fgame-programming-03.jpg", 115 | }, 116 | ]; 117 | -------------------------------------------------------------------------------- /src/pages/index.js: -------------------------------------------------------------------------------- 1 | import Layout from "../components/Layout"; 2 | import Link from "next/link"; 3 | 4 | import { skills, experiences, projects } from "../profile"; 5 | 6 | const Index = () => ( 7 | 8 | {/* Header Card */} 9 |
10 |
11 |
12 |
13 |
14 | 15 |
16 |
17 |

Ryan Ray

18 |

Full Stack Developer

19 |

20 | Lorem, ipsum dolor sit amet consectetur adipisicing elit. 21 | Molestiae atque ullam perferendis harum, nisi porro voluptate, 22 | iste consequuntur enim reprehenderit architecto consectetur cum? 23 | Totam ad molestias natus illum illo officia. 24 |

25 | 26 | Hire Me 27 | 28 |
29 |
30 |
31 |
32 |
33 | 34 | {/* Second section */} 35 | 36 |
37 |
38 |
39 |
40 |

Skills

41 | 42 | {/* Skill Progress */} 43 | {skills.map(({ skill, percentage }, i) => ( 44 |
45 |
{skill}
46 |
47 |
55 |
56 |
57 | ))} 58 |
59 |
60 |
61 | 62 |
63 | {/* Experience */} 64 |
65 |
66 |

Experience

67 | 68 |
    69 | {/* List Item Experience */} 70 | {experiences.map(({ title, from, to }, index) => ( 71 |
  • 72 |

    {title}

    73 |
    74 | {from} {to ? `- ${to}` : "- current"} 75 |
    76 |

    77 | Lorem, ipsum dolor sit amet consectetur adipisicing elit. 78 | Sint excepturi ea explicabo. Illum suscipit illo, porro 79 | quisquam voluptatem officiis fugiat vel animi aliquam 80 | inventore rem. Quo laudantium temporibus cupiditate. Aut? 81 |

    82 |
  • 83 | ))} 84 |
85 | 86 | Know More 87 | 88 |
89 |
90 |
91 |
92 | {/* Porfolio */} 93 |
94 |
95 |
96 |
97 |
98 |
99 |

Portfolio

100 |
101 | {projects.map(({ name, description, image }, index) => ( 102 |
103 |
104 |
105 | 106 |
107 |
108 |

{name}

109 |

{description}

110 | Know More 111 |
112 |
113 |
114 | ))} 115 | 116 |
117 |
118 | 119 | More Projects 120 | 121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 | ); 130 | 131 | export default Index; 132 | --------------------------------------------------------------------------------