├── .prettierrc ├── .nvmrc ├── .gitignore ├── src ├── sass │ ├── vendors │ │ └── _bootstrap.scss │ ├── abstracts │ │ ├── _helpers.scss │ │ ├── _variables.scss │ │ └── _mixins.scss │ ├── layout │ │ ├── _sections.scss │ │ └── _footer.scss │ ├── base │ │ ├── _base.scss │ │ └── _typography.scss │ ├── sections │ │ ├── _contact.scss │ │ ├── _hero.scss │ │ ├── _projects.scss │ │ └── _about.scss │ └── components │ │ └── _buttons.scss ├── assets │ ├── resume.pdf │ ├── favicon.png │ ├── profile.jpg │ └── project.jpg ├── scripts │ ├── tiltAnimation.js │ └── scrollReveal.js ├── index.js ├── styles.scss ├── data │ └── scrollRevealConfig.js └── index.html ├── examples ├── example.gif └── example.png ├── package.json ├── LICENSE.md ├── .github └── workflows │ └── gh-pages.yml └── README.md /.prettierrc: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 16.14.2 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | .parcel-cache 4 | -------------------------------------------------------------------------------- /src/sass/vendors/_bootstrap.scss: -------------------------------------------------------------------------------- 1 | @import "~bootstrap/scss/bootstrap"; 2 | -------------------------------------------------------------------------------- /examples/example.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aneagoie/simplefolio/HEAD/examples/example.gif -------------------------------------------------------------------------------- /examples/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aneagoie/simplefolio/HEAD/examples/example.png -------------------------------------------------------------------------------- /src/assets/resume.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aneagoie/simplefolio/HEAD/src/assets/resume.pdf -------------------------------------------------------------------------------- /src/assets/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aneagoie/simplefolio/HEAD/src/assets/favicon.png -------------------------------------------------------------------------------- /src/assets/profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aneagoie/simplefolio/HEAD/src/assets/profile.jpg -------------------------------------------------------------------------------- /src/assets/project.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aneagoie/simplefolio/HEAD/src/assets/project.jpg -------------------------------------------------------------------------------- /src/sass/abstracts/_helpers.scss: -------------------------------------------------------------------------------- 1 | // Margins 2 | .mb-8 { 3 | margin-bottom: 8rem !important; 4 | } 5 | -------------------------------------------------------------------------------- /src/sass/layout/_sections.scss: -------------------------------------------------------------------------------- 1 | // Section 2 | section { 3 | padding: 5rem 0rem; 4 | 5 | @include respond(phone) { 6 | border: none; 7 | padding-left: 1rem; 8 | padding-right: 1rem; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/scripts/tiltAnimation.js: -------------------------------------------------------------------------------- 1 | import VanillaTilt from "vanilla-tilt"; 2 | 3 | export default function initTiltAnimation() { 4 | const elements = document.querySelectorAll(".js-tilt"); 5 | VanillaTilt.init(elements); 6 | } 7 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import initScrollReveal from "./scripts/scrollReveal"; 2 | import initTiltEffect from "./scripts/tiltAnimation"; 3 | import { targetElements, defaultProps } from "./data/scrollRevealConfig"; 4 | 5 | initScrollReveal(targetElements, defaultProps); 6 | initTiltEffect(); 7 | 8 | -------------------------------------------------------------------------------- /src/scripts/scrollReveal.js: -------------------------------------------------------------------------------- 1 | export default function initScrollReveal(targetElements, defaultProps) { 2 | if (!targetElements.length) return; 3 | 4 | ScrollReveal({ reset: false }); 5 | 6 | targetElements.forEach(({ element, animation }) => { 7 | ScrollReveal().reveal(element, Object.assign({}, defaultProps, animation)); 8 | }); 9 | } 10 | -------------------------------------------------------------------------------- /src/sass/abstracts/_variables.scss: -------------------------------------------------------------------------------- 1 | // COLORS 2 | $primary-color: #02aab0; 3 | $secondary-color: #00cdac; 4 | 5 | $white-color: #fff; 6 | 7 | $dark-grey: #333333; 8 | $light-grey: #d2d2d2; 9 | 10 | $dark-blue-text: #272341; // For Headings 11 | 12 | // FONT SIZE 13 | $default-font-size: 1.6rem; 14 | $big-font-size: 4rem; 15 | $mid-font-size: 2.5rem; 16 | -------------------------------------------------------------------------------- /src/styles.scss: -------------------------------------------------------------------------------- 1 | @import "./sass/vendors/bootstrap.scss"; 2 | 3 | @import "./sass/abstracts/mixins"; 4 | @import "./sass/abstracts/variables"; 5 | @import "./sass/abstracts/helpers"; 6 | 7 | @import "./sass/base/base"; 8 | @import "./sass/base/typography"; 9 | 10 | @import "./sass/components/buttons"; 11 | 12 | @import "./sass/layout/footer"; 13 | @import "./sass/layout/sections"; 14 | 15 | @import "./sass/sections/about"; 16 | @import "./sass/sections/contact"; 17 | @import "./sass/sections/hero"; 18 | @import "./sass/sections/projects"; 19 | -------------------------------------------------------------------------------- /src/sass/base/_base.scss: -------------------------------------------------------------------------------- 1 | html { 2 | font-size: 62.5%; 3 | 4 | &.sr .load-hidden { 5 | visibility: hidden; 6 | } 7 | } 8 | 9 | body { 10 | font-family: "Montserrat", sans-serif; 11 | text-align: center; 12 | scroll-behavior: smooth; 13 | } 14 | 15 | /* Scrollbar */ 16 | ::-webkit-scrollbar { 17 | width: 10px; 18 | height: 10px; 19 | } 20 | ::-webkit-scrollbar-track { 21 | background: #f1f1f1; 22 | } 23 | ::-webkit-scrollbar-thumb { 24 | background: $light-grey; 25 | } 26 | ::-webkit-scrollbar-thumb:hover { 27 | background: $primary-color; 28 | } 29 | -------------------------------------------------------------------------------- /src/sass/sections/_contact.scss: -------------------------------------------------------------------------------- 1 | #contact { 2 | background-image: linear-gradient( 3 | 135deg, 4 | $primary-color 0%, 5 | $secondary-color 100% 6 | ); 7 | -webkit-clip-path: polygon(0 15vh, 100% 0, 100% 100%, 0 100%); 8 | clip-path: polygon(0 15vh, 100% 0, 100% 100%, 0 100%); 9 | padding: 15rem 0 10rem 0; 10 | margin-top: -10rem; 11 | margin-bottom: -1px; 12 | color: $white-color; 13 | 14 | @include respond(tab-land) { 15 | padding: 10rem 0; 16 | clip-path: none; 17 | margin-top: 0; 18 | -webkit-clip-path: none; 19 | } 20 | 21 | .contact-wrapper { 22 | margin-top: 3.2rem; 23 | padding: 0 2rem; 24 | backface-visibility: hidden; 25 | 26 | &__text { 27 | margin-bottom: 2.5rem; 28 | } 29 | 30 | &__text, 31 | a { 32 | font-size: 2.4rem; 33 | 34 | @include respond(phone) { 35 | font-size: 2rem; 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "simplefolio", 3 | "version": "1.0.1", 4 | "private": "true", 5 | "description": "A clean, beautiful and responsive portfolio template for Developers!", 6 | "source": "src/index.html", 7 | "scripts": { 8 | "start": "parcel", 9 | "build": "parcel build" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/cobiwave/simplefolio" 14 | }, 15 | "keywords": [], 16 | "author": "Jacobo Martinez", 17 | "license": "ISC", 18 | "bugs": { 19 | "url": "https://github.com/cobiwave/simplefolio/issues" 20 | }, 21 | "homepage": "https://github.com/cobiwave/simplefolio#readme", 22 | "devDependencies": { 23 | "@parcel/transformer-sass": "^2.8.2", 24 | "parcel": "^2.8.2", 25 | "prettier": "^2.8.1" 26 | }, 27 | "dependencies": { 28 | "@popperjs/core": "^2.11.8", 29 | "bootstrap": "^5.3.3", 30 | "jquery": "^3.7.1", 31 | "popper.js": "^1.16.1", 32 | "vanilla-tilt": "^1.8.1" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/sass/base/_typography.scss: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Montserrat:400,700"); 2 | 3 | h1 { 4 | font-weight: 700; 5 | } 6 | 7 | p, 8 | a { 9 | font-family: "Montserrat", sans-serif; 10 | font-size: $default-font-size; 11 | } 12 | 13 | a, 14 | a:link, 15 | a:hover, 16 | a:visited, 17 | a:active { 18 | text-decoration: none; 19 | } 20 | 21 | a:hover { 22 | transition: all 0.3s ease-in-out; 23 | } 24 | 25 | .section-title { 26 | margin: 0px; 27 | margin-bottom: 4.5rem; 28 | font-size: $big-font-size; 29 | font-weight: bold; 30 | text-transform: uppercase; 31 | 32 | @include respond(phone) { 33 | font-size: 2.8rem; 34 | } 35 | } 36 | 37 | .dark-blue-text { 38 | color: $dark-blue-text !important; 39 | } 40 | 41 | .text-color-main { 42 | @include supportColorForIE11(); 43 | 44 | // Responsive text purple style 45 | @include respond(phone) { 46 | background-image: none; 47 | -webkit-text-fill-color: $secondary-color; 48 | } 49 | 50 | &:hover { 51 | transform: translateX(2px); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Jacobo Martínez 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. 22 | 23 | -------------------------------------------------------------------------------- /.github/workflows/gh-pages.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | name: Portfolio 3 | # Controls when the action will run. Triggers the workflow on push or pull request 4 | # events but only for the main branch 5 | on: 6 | push: 7 | branches: [ main ] 8 | pull_request: 9 | branches: [ main ] 10 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 11 | jobs: 12 | # This workflow contains a single job called "build" 13 | build: 14 | # The type of runner that the job will run on 15 | runs-on: ubuntu-latest 16 | # Steps represent a sequence of tasks that will be executed as part of the job 17 | steps: 18 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 19 | - name: Check-out repository 20 | uses: actions/checkout@v2 21 | 22 | # Runs a single command using the runners shell 23 | - name: Setup Node.js environment 24 | uses: actions/setup-node@v2.1.2 25 | 26 | # Install project 27 | - name: Install project 28 | run: npm install 29 | 30 | # Build project 31 | - name: Build project 32 | run: npm run-script build 33 | 34 | # Push to Github Pages 35 | - name: Github Pages 36 | uses: crazy-max/ghaction-github-pages@v2.1.3 37 | with: 38 | # Build directory to deploy 39 | build_dir: dist 40 | env: 41 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 42 | 43 | -------------------------------------------------------------------------------- /src/sass/layout/_footer.scss: -------------------------------------------------------------------------------- 1 | .footer { 2 | background-color: $dark-grey; 3 | color: $white-color; 4 | padding: 4.8rem 0; 5 | 6 | @include respond(phone) { 7 | border: 0px; 8 | } 9 | 10 | &__text { 11 | color: darken($white-color, 50%); 12 | font-size: 1.3rem; 13 | 14 | a { 15 | color: darken($white-color, 50%); 16 | font-size: 1.3rem; 17 | transition: all 0.4s; 18 | display: inline-block; 19 | background-color: $dark-grey; 20 | 21 | &:hover, 22 | &:active { 23 | color: $primary-color; 24 | -webkit-box-shadow: 0 1.5rem 4rem rgba(0, 0, 0, 0.15); 25 | box-shadow: 0 1.5rem 4rem rgba(0, 0, 0, 0.15); 26 | } 27 | } 28 | } 29 | 30 | & hr { 31 | margin: 1rem auto; 32 | border: 0; 33 | width: 50%; 34 | border-top: 2px solid grey; 35 | } 36 | } 37 | 38 | .social-links { 39 | display: flex; 40 | flex-direction: row; 41 | justify-content: center; 42 | 43 | a { 44 | display: flex; 45 | flex-direction: column; 46 | justify-content: center; 47 | color: $white-color; 48 | font-size: 3rem; 49 | width: 5rem; 50 | height: 5rem; 51 | margin: $default-font-size $default-font-size; 52 | transition: all 0.2s ease-in; 53 | 54 | &:hover { 55 | transform: translateY(-2px); 56 | } 57 | } 58 | } 59 | 60 | .back-to-top i { 61 | color: $white-color; 62 | margin: 1rem 0 $default-font-size; 63 | transition: all 0.2s ease-in; 64 | 65 | &:hover { 66 | transform: translateY(-2px); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/data/scrollRevealConfig.js: -------------------------------------------------------------------------------- 1 | export const defaultProps = { 2 | easing: "cubic-bezier(0.5, 0, 0, 1)", 3 | distance: "30px", 4 | duration: 1000, 5 | desktop: true, 6 | mobile: true, 7 | }; 8 | 9 | export const targetElements = [ 10 | { 11 | element: ".section-title", 12 | animation: { 13 | delay: 300, 14 | distance: "0px", 15 | origin: "bottom", 16 | }, 17 | }, 18 | { 19 | element: ".hero-title", 20 | animation: { 21 | delay: 500, 22 | origin: window.innerWidth > 768 ? "left" : "bottom", 23 | }, 24 | }, 25 | { 26 | element: ".hero-cta", 27 | animation: { 28 | delay: 1000, 29 | origin: window.innerWidth > 768 ? "left" : "bottom", 30 | }, 31 | }, 32 | { 33 | element: ".about-wrapper__image", 34 | animation: { 35 | delay: 600, 36 | origin: "bottom", 37 | }, 38 | }, 39 | { 40 | element: ".about-wrapper__info", 41 | animation: { 42 | delay: 1000, 43 | origin: window.innerWidth > 768 ? "left" : "bottom", 44 | }, 45 | }, 46 | { 47 | element: ".project-wrapper__text", 48 | animation: { 49 | delay: 500, 50 | origin: window.innerWidth > 768 ? "left" : "bottom", 51 | }, 52 | }, 53 | { 54 | element: ".project-wrapper__image", 55 | animation: { 56 | delay: 1000, 57 | origin: window.innerWidth > 768 ? "right" : "bottom", 58 | }, 59 | }, 60 | { 61 | element: ".contact-wrapper", 62 | animation: { 63 | delay: 800, 64 | origin: "bottom", 65 | }, 66 | }, 67 | ]; 68 | -------------------------------------------------------------------------------- /src/sass/sections/_hero.scss: -------------------------------------------------------------------------------- 1 | #hero { 2 | min-height: 100vh; 3 | height: 100vh; 4 | display: flex; 5 | align-items: center; 6 | border-bottom: 0px; 7 | background: $white-color; 8 | font-weight: 400; 9 | color: $dark-blue-text; 10 | padding: 0rem 5.6rem; 11 | margin-bottom: 0; 12 | top: 0; 13 | left: 0; 14 | bottom: 0; 15 | right: 0; 16 | z-index: -1; 17 | 18 | // Set position sticky so the jumbotron stays fixed while you scroll. 19 | // position: sticky; 20 | 21 | // If you want to set a background image on the hero section, uncomment these with your custom image 22 | 23 | /* background: url("/src/assets/[your-image].png"); 24 | background-position: center; 25 | background-size: cover; */ 26 | 27 | @include respond(phone) { 28 | padding: 0rem $default-font-size; 29 | } 30 | 31 | .hero-title { 32 | font-size: 5.6rem; 33 | font-weight: 700; 34 | margin-bottom: 3.2rem; 35 | text-align: left; 36 | 37 | @include respond(tab-land) { 38 | font-size: 4rem; 39 | } 40 | @include respond(tab-port) { 41 | font-size: 3.6rem; 42 | text-align: center; 43 | } 44 | @include respond(phone) { 45 | font-size: 3.5rem; 46 | line-height: 1.5; 47 | } 48 | @include respond(phone-xs) { 49 | font-size: 2.8rem; 50 | } 51 | } 52 | 53 | .hero-cta { 54 | display: flex; 55 | 56 | @include respond(tab-port) { 57 | justify-content: center; 58 | } 59 | 60 | & a { 61 | font-size: 2.4rem; 62 | 63 | @include respond(phone) { 64 | font-size: 2rem; 65 | } 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/sass/sections/_projects.scss: -------------------------------------------------------------------------------- 1 | #projects { 2 | background-color: $white-color; 3 | color: $dark-blue-text; 4 | margin-top: -10rem; 5 | padding-top: 15rem; 6 | 7 | @include respond(tab-land) { 8 | margin-top: 0; 9 | padding-top: 5rem; 10 | } 11 | 12 | .project-wrapper { 13 | margin-bottom: 15rem; 14 | 15 | @include respond(phone) { 16 | margin-bottom: 0rem; 17 | } 18 | 19 | .row { 20 | margin-bottom: 8rem; 21 | 22 | @include respond(phone) { 23 | margin-bottom: 4rem; 24 | } 25 | } 26 | 27 | &__text { 28 | text-align: left; 29 | 30 | @include respond(phone) { 31 | margin-bottom: 2.5rem !important; 32 | } 33 | @include respond(tab-land) { 34 | margin-bottom: 4.8rem; 35 | } 36 | 37 | &-title { 38 | font-weight: bold; 39 | margin-bottom: 1.8rem; 40 | font-size: $mid-font-size; 41 | 42 | @include respond(phone) { 43 | font-size: 2rem; 44 | } 45 | } 46 | 47 | & p > a { 48 | color: $secondary-color; 49 | } 50 | } 51 | 52 | &__image { 53 | width: 90%; 54 | margin: 0 auto; 55 | 56 | @include respond(tab-land) { 57 | width: 100%; 58 | margin: 0; 59 | } 60 | 61 | & .thumbnail { 62 | border: none; 63 | box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); 64 | transition: all 0.2s ease-out; 65 | box-shadow: 0 6px 10px rgba(0, 0, 0, 0.08), 0 0 6px rgba(0, 0, 0, 0.05); 66 | transition: 0.5s transform cubic-bezier(0.155, 1.105, 0.295, 1.12), 67 | 0.5s box-shadow, 68 | 0.5s -webkit-transform cubic-bezier(0.155, 1.105, 0.295, 1.12); 69 | 70 | @include respond(phone) { 71 | border: 1px solid $light-grey; 72 | box-shadow: none; 73 | margin-bottom: 3.2rem; 74 | } 75 | } 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/sass/sections/_about.scss: -------------------------------------------------------------------------------- 1 | #about { 2 | background-color: $primary-color; 3 | background-image: linear-gradient( 4 | 135deg, 5 | $primary-color 0%, 6 | $secondary-color 100% 7 | ); 8 | color: $white-color; 9 | height: 100%; 10 | border-top: 0px; 11 | -webkit-clip-path: polygon(0 0, 100% 0, 100% 80%, 0 100%); 12 | clip-path: polygon(0 0, 100% 0, 100% 80%, 0 100%); 13 | padding-bottom: 10%; 14 | 15 | @include respond(tab-land) { 16 | height: 100%; 17 | -webkit-clip-path: none; 18 | clip-path: none; 19 | } 20 | 21 | .about-wrapper { 22 | @include respond(phone) { 23 | padding-bottom: 5rem; 24 | } 25 | 26 | &__image { 27 | display: flex; 28 | height: 100%; 29 | align-items: center; 30 | justify-content: center; 31 | 32 | @include respond(tab-land) { 33 | height: 100%; 34 | } 35 | @include respond(tab-port-sm) { 36 | padding-bottom: 6.4rem; 37 | } 38 | } 39 | 40 | &__info { 41 | display: flex; 42 | height: 100%; 43 | justify-content: center; 44 | flex-direction: column; 45 | 46 | @include respond(tab-port-sm) { 47 | align-items: center; 48 | } 49 | 50 | &-text { 51 | text-align: left; 52 | 53 | @include respond(tab-port) { 54 | text-align: left; 55 | } 56 | @include respond(tab-port-sm) { 57 | text-align: center; 58 | } 59 | 60 | &--important { 61 | background: darken($secondary-color, 1%); 62 | display: inline-block; 63 | font-style: italic; 64 | padding: 0 0.3rem; 65 | margin: 0.3rem 0; 66 | line-height: 1.6; 67 | 68 | @include respond(phone) { 69 | display: inline; 70 | margin: 0; 71 | padding: 0; 72 | background: transparent; 73 | font-style: normal; 74 | } 75 | } 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/sass/abstracts/_mixins.scss: -------------------------------------------------------------------------------- 1 | // MEDIA QUERY MANAGER 2 | /* 3 | 4 | 0 - 600px: Phone 5 | 600px - 900px Table Portrait 6 | 900px - 1200px Table Landscape 7 | [1200px - 1800px] Desktop Normal Styles 8 | 1800px + Big Desktop 9 | 10 | 1em = 16px 11 | 12 | ORDER: Base + Typography > Generar Layout + Grid > Page Layout > Components 13 | 14 | */ 15 | @mixin respond($breakpoint) { 16 | // Phone-xs 17 | @if $breakpoint == phone-xs { 18 | @media (max-width: 20em) { 19 | @content; 20 | } //0 - 320px 21 | } 22 | // Phone 23 | @if $breakpoint == phone { 24 | @media (max-width: 37.5em) { 25 | @content; 26 | } //0 - 600px 27 | } 28 | // Table small 29 | @if $breakpoint == tab-port-sm { 30 | @media (max-width: 48em) { 31 | @content; 32 | } //768px 33 | } 34 | // Table Portrait 35 | @if $breakpoint == tab-port { 36 | @media (max-width: 56.25em) { 37 | @content; 38 | } //900px 39 | } 40 | // Table Landscape 41 | @if $breakpoint == tab-land { 42 | @media (max-width: 75em) { 43 | @content; 44 | } //1200px 45 | } 46 | // Big Desktop 47 | @if $breakpoint == big-desktop { 48 | @media (min-width: 112.5em) { 49 | @content; 50 | } //1800px + 51 | } 52 | } 53 | 54 | // Border White Mixin 55 | @mixin section-borders { 56 | border: 1.5rem solid #fff; 57 | border-top: 0; 58 | border-bottom: 0; 59 | } 60 | 61 | @mixin supportColorForIE11 { 62 | // Fall for text-gradient not supported in IE11 63 | color: $secondary-color; 64 | -webkit-text-fill-color: $secondary-color; // fallback 65 | @supports (-webkit-background-clip: text) or (background-clip: text) { 66 | background-image: linear-gradient( 67 | 135deg, 68 | $primary-color 0%, 69 | $secondary-color 100% 70 | ); 71 | -webkit-background-clip: text; 72 | -webkit-text-fill-color: transparent; 73 | color: transparent; 74 | } 75 | } 76 | 77 | @mixin supportIE11 { 78 | // Provide your basic styles to support IE11 79 | @media screen and (-ms-high-contrast: active), 80 | screen and (-ms-high-contrast: none) { 81 | @content; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/sass/components/_buttons.scss: -------------------------------------------------------------------------------- 1 | /* Call to Action Button */ 2 | .cta-btn { 3 | display: inline-block; 4 | position: relative; 5 | padding: 0.8rem $default-font-size; 6 | font-weight: bold; 7 | line-height: 1; 8 | z-index: 1; 9 | transition: all cubic-bezier(0.19, 1, 0.22, 1) 0.6s; 10 | 11 | &::after { 12 | content: ""; 13 | display: block; 14 | position: absolute; 15 | width: 0px; 16 | height: 100%; 17 | left: 0; 18 | bottom: 0; 19 | z-index: -1; 20 | transition: all cubic-bezier(0.19, 1, 0.22, 1) 0.3s; 21 | } 22 | } 23 | 24 | /* Hero Style */ 25 | .cta-btn--hero { 26 | @include supportColorForIE11(); 27 | border-width: 2px; 28 | border-style: solid; 29 | -moz-border-image: -moz-linear-gradient( 30 | 135deg, 31 | $primary-color 0%, 32 | $secondary-color 100% 33 | ); 34 | -webkit-border-image: -webkit-linear-gradient( 35 | 135deg, 36 | $primary-color 0%, 37 | $secondary-color 100% 38 | ); 39 | border-image: linear-gradient( 40 | 135deg, 41 | $primary-color 0%, 42 | $secondary-color 100% 43 | ); 44 | -webkit-border-image-slice: 1; 45 | border-image-slice: 1; 46 | @include supportIE11() { 47 | color: $secondary-color !important; 48 | &:hover { 49 | color: $white-color !important; 50 | } 51 | } 52 | 53 | @include respond(phone) { 54 | background-image: none; 55 | border: 2px solid $secondary-color; 56 | -webkit-text-fill-color: $secondary-color; 57 | } 58 | 59 | &::after { 60 | background-image: linear-gradient( 61 | 135deg, 62 | $primary-color 0%, 63 | $secondary-color 100% 64 | ); 65 | 66 | @include respond(phone) { 67 | background-image: none; 68 | } 69 | } 70 | 71 | &:hover { 72 | -webkit-text-fill-color: $white-color; 73 | text-decoration: none; 74 | 75 | @include respond(phone) { 76 | -webkit-text-fill-color: $secondary-color; 77 | } 78 | 79 | &::after { 80 | width: 100%; 81 | } 82 | } 83 | } 84 | 85 | /* Resume Style */ 86 | .cta-btn--resume { 87 | color: $white-color; 88 | border: 2px solid $white-color; 89 | 90 | &::after { 91 | background: $white-color; 92 | } 93 | 94 | &:hover { 95 | color: $secondary-color; 96 | text-decoration: none; 97 | 98 | &::after { 99 | width: 100%; 100 | } 101 | } 102 | } 103 | 104 | /* Arrow Button */ 105 | .up i { 106 | color: #272727; 107 | } 108 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Simplefolio ⚡️ [](https://github.com/cobiwave/simplefolio/blob/master/LICENSE.md)   2 | 3 | ## A minimal portfolio template for Developers! 4 | 5 |
7 |
106 | 131 | 132 | Know more 133 | 134 |
135 |` tag with class name `.about-wrapper__info-text`, include information about you, I recommend to put 2 paragraphs in order to work well and a maximum of 3 paragraphs.
144 | - On last `` tag, include your CV (.pdf) path on `href` property, your resume CV must be located inside `/src/assets/` folder.
145 |
146 | ```html
147 |
148 |
167 | This is where you can describe about yourself. The more you describe
168 | about yourself, the more chances you can!
169 |
171 | Extra Information about you! like hobbies and your goals.
172 | ` tag with `loremp ipsum` text, include your project description.
196 | - On first `` tag, put your project url on `href` property.
197 | - On second `` tag, put your project repository url on `href` property.
198 |
199 | ---
200 |
201 | - Inside `
215 | Lorem ipsum dolor sit, amet consectetur adipisicing elit. Excepturi
216 | neque, ipsa animi maiores repellendus distinctio aperiam earum dolor
217 | voluptatum consequatur blanditiis inventore debitis fuga numquam
218 | voluptate ex architecto itaque molestiae.
219 | ` tag with class name `.contact-wrapper__text`, include some custom call-to-action message.
267 | - On `` tag, put your email address on `href` property.
268 |
269 | ```html
270 |
271 | [Put your call to action here]
54 | Know more
57 |
82 | This is where you can describe about yourself. The more you
83 | describe about yourself, the more chances you have!
84 |
86 | Extra Information about you! like hobbies and your goals.
87 |
118 | Describe the project being very specific, you can use the Twitter standard: no more than 280 characters:
119 | complement the information: the skills learned or reinforced in its realization and how you faced it,
120 | prove to be proactive in the search for solutions.
121 |
170 | Demonstrate in this description the skills of a programmer: such as having commitment,
171 | having perseverance and accepting alternative solutions. Remember that being a portfolio you are not selling the project,
172 | you are selling yourself, it reflects the resources used: Frameworks, libraries, platforms, etc.
173 |
222 | If the project was collaborative, reflect it in this description, that will demonstrate communication and/or leadership skills.
223 | Additionally, if you made use of the mastery of a second language, it will reflect on you professionalism.
224 | [Put your call to action here]About me
151 |
162 | ` tag with class name `.project-wrapper__text-title`, include your project title.
195 | - On `
` and put again your project url in the `href` property of the `` tag.
202 | - Recommended size for project image (1366 x 767), your project image must be located inside `/src/assets/` folder.
203 |
204 | ```html
205 |
206 |
Project Title
213 |
254 | Contact
274 |
49 | Hi, my name is Your Name
50 |
53 |
51 | I'm the Unknown Developer.
52 | About me
66 |
77 | Projects
110 |
111 |
112 | Project Title 0
116 |
156 | Project Title 1
168 |
208 | Project Title 2
220 |
259 | Contact
274 |