Repository: cobiwave/simplefolio Branch: master Commit: af03c0cb90d0 Files: 26 Total size: 39.9 KB Directory structure: gitextract_1xbf_hiw/ ├── .github/ │ └── workflows/ │ └── gh-pages.yml ├── .gitignore ├── .nvmrc ├── .prettierrc ├── LICENSE.md ├── README.md ├── package.json └── src/ ├── data/ │ └── scrollRevealConfig.js ├── index.html ├── index.js ├── sass/ │ ├── abstracts/ │ │ ├── _helpers.scss │ │ ├── _mixins.scss │ │ └── _variables.scss │ ├── base/ │ │ ├── _base.scss │ │ └── _typography.scss │ ├── components/ │ │ └── _buttons.scss │ ├── layout/ │ │ ├── _footer.scss │ │ └── _sections.scss │ ├── sections/ │ │ ├── _about.scss │ │ ├── _contact.scss │ │ ├── _hero.scss │ │ └── _projects.scss │ └── vendors/ │ └── _bootstrap.scss ├── scripts/ │ ├── scrollReveal.js │ └── tiltAnimation.js └── styles.scss ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/workflows/gh-pages.yml ================================================ # This is a basic workflow to help you get started with Actions name: Portfolio # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the main branch on: push: branches: [ main ] pull_request: branches: [ main ] # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Check-out repository uses: actions/checkout@v2 # Runs a single command using the runners shell - name: Setup Node.js environment uses: actions/setup-node@v2.1.2 # Install project - name: Install project run: npm install # Build project - name: Build project run: npm run-script build # Push to Github Pages - name: Github Pages uses: crazy-max/ghaction-github-pages@v2.1.3 with: # Build directory to deploy build_dir: dist env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ================================================ FILE: .gitignore ================================================ node_modules/ dist/ .parcel-cache ================================================ FILE: .nvmrc ================================================ 16.14.2 ================================================ FILE: .prettierrc ================================================ {} ================================================ FILE: LICENSE.md ================================================ MIT License Copyright (c) 2019 Jacobo Martínez Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # Simplefolio ⚡️ [![GitHub](https://img.shields.io/github/license/cobiwave/simplefolio?color=blue)](https://github.com/cobiwave/simplefolio/blob/master/LICENSE.md) ![GitHub stars](https://img.shields.io/github/stars/cobiwave/simplefolio) ![GitHub forks](https://img.shields.io/github/forks/cobiwave/simplefolio) ## A minimal portfolio template for Developers!

Simplefolio

## Features ⚡️ Modern UI Design + Reveal Animations\ ⚡️ One Page Layout\ ⚡️ Styled with Bootstrap v4.3 + Custom SCSS\ ⚡️ Fully Responsive\ ⚡️ Valid HTML5 & CSS3\ ⚡️ Optimized with Parcel\ ⚡️ Well organized documentation To view the demo: **[click here](https://the-simplefolio.netlify.app/)** --- ## Why do you need a portfolio? ☝️ - Professional way to showcase your work - Increases your visibility and online presence - Shows you’re more than just a resume ## Getting Started 🚀 These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system. ### Prerequisites 📋 You'll need [Git](https://git-scm.com) and [Node.js](https://nodejs.org/en/download/) (which comes with [NPM](http://npmjs.com)) installed on your computer. ``` node@v16.4.2 or higher npm@7.18.1 or higher git@2.30.1 or higher ``` Also, you can use [Yarn](https://yarnpkg.com/) instead of NPM ☝️ ``` yarn@v1.22.10 or higher ``` --- ## How To Use 🔧 From your command line, first clone Simplefolio: ```bash # Clone the repository $ git clone https://github.com/cobiwave/simplefolio # Move into the repository $ cd simplefolio # Remove the current origin repository $ git remote remove origin ``` After that, you can install the dependencies either using NPM or Yarn. Using NPM: Simply run the below commands. ```bash # 2022 Update - Fix Dependencies $ npm audit fix $ npm i @parcel/transformer-sass # Install dependencies $ npm install # Start the development server $ npm start ``` Using Yarn: Be aware of that you'll need to delete the `package-lock.json` file before executing the below commands. ```bash # Install dependencies $ yarn # Start the development server $ yarn start ``` **NOTE**: If your run into issues installing the dependencies with NPM, use this below command: ```bash # Install dependencies with all permissions $ sudo npm install --unsafe-perm=true --allow-root ``` Once your server has started, go to this url `http://localhost:1234/` to see the portfolio locally. It should look like the below screenshot.

Simplefolio

--- ## Template Instructions: ### Step 1 - STRUCTURE Go to `/src/index.html` and put your information, there are 5 sections: ### (1) Hero Section - On `.hero-title`, put your custom portfolio title. - On `.hero-cta`, put your custom button label. ```html

Hi, my name is Your Name
I'm the Unknown Developer.

Know more

``` ### (2) About Section - On `` tag, fill the `src` property with your profile picture path, your picture must be located inside `/src/assets/` folder. - On `

` 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. - On last `` tag, include your CV (.pdf) path on `href` property, your resume CV must be located inside `/src/assets/` folder. ```html

About me

``` ### (3) Projects Section - Each project lives inside a `row`. - On `

` tag with class name `.project-wrapper__text-title`, include your project title. - On `

` tag with `loremp ipsum` text, include your project description. - On first `` tag, put your project url on `href` property. - On second `` tag, put your project repository url on `href` property. --- - Inside `

` tag with class name `.project-wrapper__image`, put your project image url on the `src` of the `` and put again your project url in the `href` property of the `` tag. - Recommended size for project image (1366 x 767), your project image must be located inside `/src/assets/` folder. ```html
... ...
``` ### (4) Contact Section - On `

` tag with class name `.contact-wrapper__text`, include some custom call-to-action message. - On `` tag, put your email address on `href` property. ```html

``` ### (5) Footer Section - Put your Social Media URL on each `href` attribute of the `` tags. - If you an additional Social Media account different than Twitter, Linkedin or GitHub, then go to [Font Awesome Icons](https://fontawesome.com/v4.7.0/icons/) and search for the icon's class name you are looking. - You can delete or add as many `` tags your want. ```html ``` ### Step 2 - STYLES Change the color theme of the website - (choose 2 colors to create a gradient) Go to `/src/sass/abstracts/_variables.scss` and only change the values for this variables `$main-color` and `$secondary-color` with your prefered HEX color. If you want to get some gradients inspiration I highly recommend you to check this website [UI Gradient](https://uigradients.com/#BrightVault) ```scss // Default values $main-color: #02aab0; $secondary-color: #00cdac; ``` --- ## Deployment 📦 Once you finish your setup. You need to put your website online! I highly recommend to use [Netlify](https://netlify.com) because it is super easy. ## Others versions 👥 [Gatsby Simplefolio](https://github.com/cobiwave/gatsby-simplefolio) by [Jacobo Martinez](https://github.com/cobiwave)\ [Ember.js Simplefolio](https://github.com/sernadesigns/simplefolio-ember) by [Michael Serna](https://github.com/sernadesigns) ## Technologies used 🛠️ - [Parcel](https://parceljs.org/) - Bundler - [Bootstrap 4](https://getbootstrap.com/docs/4.3/getting-started/introduction/) - Frontend component library - [Sass](https://sass-lang.com/documentation) - CSS extension language - [ScrollReveal.js](https://scrollrevealjs.org/) - JavaScript library - [Tilt.js](https://gijsroge.github.io/tilt.js/) - JavaScript tiny parallax library ## Authors - **Jacobo Martinez** - [https://github.com/cobiwave](https://github.com/cobiwave) ## Status [![Netlify Status](https://api.netlify.com/api/v1/badges/3a029bfd-575c-41e5-8249-c864d482c2e5/deploy-status)](https://app.netlify.com/sites/the-simplefolio/deploys) ## License 📄 This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details ## Acknowledgments 🎁 I was motivated to create this project because I wanted to contribute on something useful for the dev community, thanks to [ZTM Community](https://github.com/zero-to-mastery) and [Andrei](https://github.com/aneagoie) ================================================ FILE: package.json ================================================ { "name": "simplefolio", "version": "1.0.1", "private": "true", "description": "A clean, beautiful and responsive portfolio template for Developers!", "source": "src/index.html", "scripts": { "start": "parcel", "build": "parcel build" }, "repository": { "type": "git", "url": "git+https://github.com/cobiwave/simplefolio" }, "keywords": [], "author": "Jacobo Martinez", "license": "ISC", "bugs": { "url": "https://github.com/cobiwave/simplefolio/issues" }, "homepage": "https://github.com/cobiwave/simplefolio#readme", "devDependencies": { "@parcel/transformer-sass": "^2.8.2", "parcel": "^2.8.2", "prettier": "^2.8.1" }, "dependencies": { "@popperjs/core": "^2.11.6", "bootstrap": "^5.2.3", "jquery": "^3.6.3", "popper.js": "^1.16.1", "vanilla-tilt": "^1.8.0" } } ================================================ FILE: src/data/scrollRevealConfig.js ================================================ export const defaultProps = { easing: "cubic-bezier(0.5, 0, 0, 1)", distance: "30px", duration: 1000, desktop: true, mobile: true, }; export const targetElements = [ { element: ".section-title", animation: { delay: 300, distance: "0px", origin: "bottom", }, }, { element: ".hero-title", animation: { delay: 500, origin: window.innerWidth > 768 ? "left" : "bottom", }, }, { element: ".hero-cta", animation: { delay: 1000, origin: window.innerWidth > 768 ? "left" : "bottom", }, }, { element: ".about-wrapper__image", animation: { delay: 600, origin: "bottom", }, }, { element: ".about-wrapper__info", animation: { delay: 1000, origin: window.innerWidth > 768 ? "left" : "bottom", }, }, { element: ".project-wrapper__text", animation: { delay: 500, origin: window.innerWidth > 768 ? "left" : "bottom", }, }, { element: ".project-wrapper__image", animation: { delay: 1000, origin: window.innerWidth > 768 ? "right" : "bottom", }, }, { element: ".contact-wrapper", animation: { delay: 800, origin: "bottom", }, }, ]; ================================================ FILE: src/index.html ================================================ [Your name here] | Developer

Hi, my name is Your Name
I'm the Unknown Developer.

Know more

About me

Profile Image

This is where you can describe about yourself. The more you describe about yourself, the more chances you have!

Extra Information about you! like hobbies and your goals.

View Resume

Projects

Project Title 0

Describe the project being very specific, you can use the Twitter standard: no more than 280 characters: complement the information: the skills learned or reinforced in its realization and how you faced it, prove to be proactive in the search for solutions.

See Live Source Code

Project Title 1

Demonstrate in this description the skills of a programmer: such as having commitment, having perseverance and accepting alternative solutions. Remember that being a portfolio you are not selling the project, you are selling yourself, it reflects the resources used: Frameworks, libraries, platforms, etc.

See Live Source Code

Project Title 2

If the project was collaborative, reflect it in this description, that will demonstrate communication and/or leadership skills. Additionally, if you made use of the mastery of a second language, it will reflect on you professionalism.

See Live Source Code

Contact

[Put your call to action here]

Call to Action
================================================ FILE: src/index.js ================================================ import initScrollReveal from "./scripts/scrollReveal"; import initTiltEffect from "./scripts/tiltAnimation"; import { targetElements, defaultProps } from "./data/scrollRevealConfig"; initScrollReveal(targetElements, defaultProps); initTiltEffect(); ================================================ FILE: src/sass/abstracts/_helpers.scss ================================================ // Margins .mb-8 { margin-bottom: 8rem !important; } ================================================ FILE: src/sass/abstracts/_mixins.scss ================================================ // MEDIA QUERY MANAGER /* 0 - 600px: Phone 600px - 900px Table Portrait 900px - 1200px Table Landscape [1200px - 1800px] Desktop Normal Styles 1800px + Big Desktop 1em = 16px ORDER: Base + Typography > Generar Layout + Grid > Page Layout > Components */ @mixin respond($breakpoint) { // Phone-xs @if $breakpoint == phone-xs { @media (max-width: 20em) { @content; } //0 - 320px } // Phone @if $breakpoint == phone { @media (max-width: 37.5em) { @content; } //0 - 600px } // Table small @if $breakpoint == tab-port-sm { @media (max-width: 48em) { @content; } //768px } // Table Portrait @if $breakpoint == tab-port { @media (max-width: 56.25em) { @content; } //900px } // Table Landscape @if $breakpoint == tab-land { @media (max-width: 75em) { @content; } //1200px } // Big Desktop @if $breakpoint == big-desktop { @media (min-width: 112.5em) { @content; } //1800px + } } // Border White Mixin @mixin section-borders { border: 1.5rem solid #fff; border-top: 0; border-bottom: 0; } @mixin supportColorForIE11 { // Fall for text-gradient not supported in IE11 color: $secondary-color; -webkit-text-fill-color: $secondary-color; // fallback @supports (-webkit-background-clip: text) or (background-clip: text) { background-image: linear-gradient( 135deg, $primary-color 0%, $secondary-color 100% ); -webkit-background-clip: text; -webkit-text-fill-color: transparent; color: transparent; } } @mixin supportIE11 { // Provide your basic styles to support IE11 @media screen and (-ms-high-contrast: active), screen and (-ms-high-contrast: none) { @content; } } ================================================ FILE: src/sass/abstracts/_variables.scss ================================================ // COLORS $primary-color: #02aab0; $secondary-color: #00cdac; $white-color: #fff; $dark-grey: #333333; $light-grey: #d2d2d2; $dark-blue-text: #272341; // For Headings // FONT SIZE $default-font-size: 1.6rem; $big-font-size: 4rem; $mid-font-size: 2.5rem; ================================================ FILE: src/sass/base/_base.scss ================================================ html { font-size: 62.5%; &.sr .load-hidden { visibility: hidden; } } body { font-family: "Montserrat", sans-serif; text-align: center; scroll-behavior: smooth; } /* Scrollbar */ ::-webkit-scrollbar { width: 10px; height: 10px; } ::-webkit-scrollbar-track { background: #f1f1f1; } ::-webkit-scrollbar-thumb { background: $light-grey; } ::-webkit-scrollbar-thumb:hover { background: $primary-color; } ================================================ FILE: src/sass/base/_typography.scss ================================================ @import url("https://fonts.googleapis.com/css?family=Montserrat:400,700"); h1 { font-weight: 700; } p, a { font-family: "Montserrat", sans-serif; font-size: $default-font-size; } a, a:link, a:hover, a:visited, a:active { text-decoration: none; } a:hover { transition: all 0.3s ease-in-out; } .section-title { margin: 0px; margin-bottom: 4.5rem; font-size: $big-font-size; font-weight: bold; text-transform: uppercase; @include respond(phone) { font-size: 2.8rem; } } .dark-blue-text { color: $dark-blue-text !important; } .text-color-main { @include supportColorForIE11(); // Responsive text purple style @include respond(phone) { background-image: none; -webkit-text-fill-color: $secondary-color; } &:hover { transform: translateX(2px); } } ================================================ FILE: src/sass/components/_buttons.scss ================================================ /* Call to Action Button */ .cta-btn { display: inline-block; position: relative; padding: 0.8rem $default-font-size; font-weight: bold; line-height: 1; z-index: 1; transition: all cubic-bezier(0.19, 1, 0.22, 1) 0.6s; &::after { content: ""; display: block; position: absolute; width: 0px; height: 100%; left: 0; bottom: 0; z-index: -1; transition: all cubic-bezier(0.19, 1, 0.22, 1) 0.3s; } } /* Hero Style */ .cta-btn--hero { @include supportColorForIE11(); border-width: 2px; border-style: solid; -moz-border-image: -moz-linear-gradient( 135deg, $primary-color 0%, $secondary-color 100% ); -webkit-border-image: -webkit-linear-gradient( 135deg, $primary-color 0%, $secondary-color 100% ); border-image: linear-gradient( 135deg, $primary-color 0%, $secondary-color 100% ); -webkit-border-image-slice: 1; border-image-slice: 1; @include supportIE11() { color: $secondary-color !important; &:hover { color: $white-color !important; } } @include respond(phone) { background-image: none; border: 2px solid $secondary-color; -webkit-text-fill-color: $secondary-color; } &::after { background-image: linear-gradient( 135deg, $primary-color 0%, $secondary-color 100% ); @include respond(phone) { background-image: none; } } &:hover { -webkit-text-fill-color: $white-color; text-decoration: none; @include respond(phone) { -webkit-text-fill-color: $secondary-color; } &::after { width: 100%; } } } /* Resume Style */ .cta-btn--resume { color: $white-color; border: 2px solid $white-color; &::after { background: $white-color; } &:hover { color: $secondary-color; text-decoration: none; &::after { width: 100%; } } } /* Arrow Button */ .up i { color: #272727; } ================================================ FILE: src/sass/layout/_footer.scss ================================================ .footer { background-color: $dark-grey; color: $white-color; padding: 4.8rem 0; @include respond(phone) { border: 0px; } &__text { color: darken($white-color, 50%); font-size: 1.3rem; a { color: darken($white-color, 50%); font-size: 1.3rem; transition: all 0.4s; display: inline-block; background-color: $dark-grey; &:hover, &:active { color: $primary-color; -webkit-box-shadow: 0 1.5rem 4rem rgba(0, 0, 0, 0.15); box-shadow: 0 1.5rem 4rem rgba(0, 0, 0, 0.15); } } } & hr { margin: 1rem auto; border: 0; width: 50%; border-top: 2px solid grey; } } .social-links { display: flex; flex-direction: row; justify-content: center; a { display: flex; flex-direction: column; justify-content: center; color: $white-color; font-size: 3rem; width: 5rem; height: 5rem; margin: $default-font-size $default-font-size; transition: all 0.2s ease-in; &:hover { transform: translateY(-2px); } } } .back-to-top i { color: $white-color; margin: 1rem 0 $default-font-size; transition: all 0.2s ease-in; &:hover { transform: translateY(-2px); } } ================================================ FILE: src/sass/layout/_sections.scss ================================================ // Section section { padding: 5rem 0rem; @include respond(phone) { border: none; padding-left: 1rem; padding-right: 1rem; } } ================================================ FILE: src/sass/sections/_about.scss ================================================ #about { background-color: $primary-color; background-image: linear-gradient( 135deg, $primary-color 0%, $secondary-color 100% ); color: $white-color; height: 100%; border-top: 0px; -webkit-clip-path: polygon(0 0, 100% 0, 100% 80%, 0 100%); clip-path: polygon(0 0, 100% 0, 100% 80%, 0 100%); padding-bottom: 10%; @include respond(tab-land) { height: 100%; -webkit-clip-path: none; clip-path: none; } .about-wrapper { @include respond(phone) { padding-bottom: 5rem; } &__image { display: flex; height: 100%; align-items: center; justify-content: center; @include respond(tab-land) { height: 100%; } @include respond(tab-port-sm) { padding-bottom: 6.4rem; } } &__info { display: flex; height: 100%; justify-content: center; flex-direction: column; @include respond(tab-port-sm) { align-items: center; } &-text { text-align: left; @include respond(tab-port) { text-align: left; } @include respond(tab-port-sm) { text-align: center; } &--important { background: darken($secondary-color, 1%); display: inline-block; font-style: italic; padding: 0 0.3rem; margin: 0.3rem 0; line-height: 1.6; @include respond(phone) { display: inline; margin: 0; padding: 0; background: transparent; font-style: normal; } } } } } } ================================================ FILE: src/sass/sections/_contact.scss ================================================ #contact { background-image: linear-gradient( 135deg, $primary-color 0%, $secondary-color 100% ); -webkit-clip-path: polygon(0 15vh, 100% 0, 100% 100%, 0 100%); clip-path: polygon(0 15vh, 100% 0, 100% 100%, 0 100%); padding: 15rem 0 10rem 0; margin-top: -10rem; margin-bottom: -1px; color: $white-color; @include respond(tab-land) { padding: 10rem 0; clip-path: none; margin-top: 0; -webkit-clip-path: none; } .contact-wrapper { margin-top: 3.2rem; padding: 0 2rem; backface-visibility: hidden; &__text { margin-bottom: 2.5rem; } &__text, a { font-size: 2.4rem; @include respond(phone) { font-size: 2rem; } } } } ================================================ FILE: src/sass/sections/_hero.scss ================================================ #hero { min-height: 100vh; height: 100vh; display: flex; align-items: center; border-bottom: 0px; background: $white-color; font-weight: 400; color: $dark-blue-text; padding: 0rem 5.6rem; margin-bottom: 0; top: 0; left: 0; bottom: 0; right: 0; z-index: -1; // Set position sticky so the jumbotron stays fixed while you scroll. // position: sticky; // If you want to set a background image on the hero section, uncomment these with your custom image /* background: url("/src/assets/[your-image].png"); background-position: center; background-size: cover; */ @include respond(phone) { padding: 0rem $default-font-size; } .hero-title { font-size: 5.6rem; font-weight: 700; margin-bottom: 3.2rem; text-align: left; @include respond(tab-land) { font-size: 4rem; } @include respond(tab-port) { font-size: 3.6rem; text-align: center; } @include respond(phone) { font-size: 3.5rem; line-height: 1.5; } @include respond(phone-xs) { font-size: 2.8rem; } } .hero-cta { display: flex; @include respond(tab-port) { justify-content: center; } & a { font-size: 2.4rem; @include respond(phone) { font-size: 2rem; } } } } ================================================ FILE: src/sass/sections/_projects.scss ================================================ #projects { background-color: $white-color; color: $dark-blue-text; margin-top: -10rem; padding-top: 15rem; @include respond(tab-land) { margin-top: 0; padding-top: 5rem; } .project-wrapper { margin-bottom: 15rem; @include respond(phone) { margin-bottom: 0rem; } .row { margin-bottom: 8rem; @include respond(phone) { margin-bottom: 4rem; } } &__text { text-align: left; @include respond(phone) { margin-bottom: 2.5rem !important; } @include respond(tab-land) { margin-bottom: 4.8rem; } &-title { font-weight: bold; margin-bottom: 1.8rem; font-size: $mid-font-size; @include respond(phone) { font-size: 2rem; } } & p > a { color: $secondary-color; } } &__image { width: 90%; margin: 0 auto; @include respond(tab-land) { width: 100%; margin: 0; } & .thumbnail { border: none; box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); transition: all 0.2s ease-out; box-shadow: 0 6px 10px rgba(0, 0, 0, 0.08), 0 0 6px rgba(0, 0, 0, 0.05); transition: 0.5s transform cubic-bezier(0.155, 1.105, 0.295, 1.12), 0.5s box-shadow, 0.5s -webkit-transform cubic-bezier(0.155, 1.105, 0.295, 1.12); @include respond(phone) { border: 1px solid $light-grey; box-shadow: none; margin-bottom: 3.2rem; } } } } } ================================================ FILE: src/sass/vendors/_bootstrap.scss ================================================ @import "~bootstrap/scss/bootstrap"; ================================================ FILE: src/scripts/scrollReveal.js ================================================ export default function initScrollReveal(targetElements, defaultProps) { if (!targetElements.length) return; ScrollReveal({ reset: false }); targetElements.forEach(({ element, animation }) => { ScrollReveal().reveal(element, Object.assign({}, defaultProps, animation)); }); } ================================================ FILE: src/scripts/tiltAnimation.js ================================================ import VanillaTilt from "vanilla-tilt"; export default function initTiltAnimation() { const elements = document.querySelectorAll(".js-tilt"); VanillaTilt.init(elements); } ================================================ FILE: src/styles.scss ================================================ @import "./sass/vendors/bootstrap.scss"; @import "./sass/abstracts/mixins"; @import "./sass/abstracts/variables"; @import "./sass/abstracts/helpers"; @import "./sass/base/base"; @import "./sass/base/typography"; @import "./sass/components/buttons"; @import "./sass/layout/footer"; @import "./sass/layout/sections"; @import "./sass/sections/about"; @import "./sass/sections/contact"; @import "./sass/sections/hero"; @import "./sass/sections/projects";