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 ⚡️ [](https://github.com/cobiwave/simplefolio/blob/master/LICENSE.md)  
## A minimal portfolio template for Developers!
<h2 align="center">
<img src="https://github.com/cobiwave/gatsby-simplefolio/blob/master/examples/example.gif" alt="Simplefolio" width="600px" />
<br>
</h2>
## 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.
<h2 align="center">
<img src="https://github.com/cobiwave/gatsby-simplefolio/blob/master/examples/example.png" alt="Simplefolio" width="100%">
</h2>
---
## 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
<!-- **** Hero Section **** -->
<section id="hero" class="jumbotron">
<div class="container">
<h1 class="hero-title load-hidden">
Hi, my name is <span class="text-color-main">Your Name</span>
<br />
I'm the Unknown Developer.
</h1>
<p class="hero-cta load-hidden">
<a rel="noreferrer" class="cta-btn cta-btn--hero" href="#about">
Know more
</a>
</p>
</div>
</section>
<!-- /END Hero Section -->
```
### (2) About Section
- On `<img>` tag, fill the `src` property with your profile picture path, your picture must be located inside `/src/assets/` folder.
- On `<p>` 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 `<a>` tag, include your CV (.pdf) path on `href` property, your resume CV must be located inside `/src/assets/` folder.
```html
<!-- **** About Section **** -->
<section id="about">
<div class="container">
<h2 class="section-title load-hidden">About me</h2>
<div class="row about-wrapper">
<div class="col-md-6 col-sm-12">
<div class="about-wrapper__image load-hidden">
<img
alt="Profile Image"
class="img-fluid rounded shadow-lg"
height="auto"
width="300px"
src="assets/profile.jpg"
alt="Profile Image"
/>
</div>
</div>
<div class="col-md-6 col-sm-12">
<div class="about-wrapper__info load-hidden">
<p class="about-wrapper__info-text">
This is where you can describe about yourself. The more you describe
about yourself, the more chances you can!
</p>
<p class="about-wrapper__info-text">
Extra Information about you! like hobbies and your goals.
</p>
<span class="d-flex mt-3">
<a
rel="noreferrer"
target="_blank"
class="cta-btn cta-btn--resume"
href="assets/resume.pdf"
>
View Resume
</a>
</span>
</div>
</div>
</div>
</div>
</section>
<!-- /END About Section -->
```
### (3) Projects Section
- Each project lives inside a `row`.
- On `<h3>` tag with class name `.project-wrapper__text-title`, include your project title.
- On `<p>` tag with `loremp ipsum` text, include your project description.
- On first `<a>` tag, put your project url on `href` property.
- On second `<a>` tag, put your project repository url on `href` property.
---
- Inside `<div>` tag with class name `.project-wrapper__image`, put your project image url on the `src` of the `<img>` and put again your project url in the `href` property of the `<a>` tag.
- Recommended size for project image (1366 x 767), your project image must be located inside `/src/assets/` folder.
```html
<!-- **** Projects Section **** -->
<section id="projects">
...
<!-- Notice: each .row is a project -->
<div class="row">
<div class="col-lg-4 col-sm-12">
<div class="project-wrapper__text load-hidden">
<h3 class="project-wrapper__text-title">Project Title</h3>
<div>
<p class="mb-4">
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Excepturi
neque, ipsa animi maiores repellendus distinctio aperiam earum dolor
voluptatum consequatur blanditiis inventore debitis fuga numquam
voluptate ex architecto itaque molestiae.
</p>
</div>
<a
rel="noreferrer"
target="_blank"
class="cta-btn cta-btn--hero"
href="#!"
>
See Live
</a>
<a
rel="noreferrer"
target="_blank"
class="cta-btn text-color-main"
href="#!"
>
Source Code
</a>
</div>
</div>
<div class="col-lg-8 col-sm-12">
<div class="project-wrapper__image load-hidden">
<a rel="noreferrer" href="#!" target="_blank">
<div
data-tilt
data-tilt-max="4"
data-tilt-glare="true"
data-tilt-max-glare="0.5"
class="thumbnail rounded js-tilt"
>
<img
alt="Project Image"
class="img-fluid"
src="assets/project.jpg"
/>
</div>
</a>
</div>
</div>
</div>
<!-- /END Project -->
...
</section>
```
### (4) Contact Section
- On `<p>` tag with class name `.contact-wrapper__text`, include some custom call-to-action message.
- On `<a>` tag, put your email address on `href` property.
```html
<!-- **** Contact Section **** -->
<section id="contact">
<div class="container">
<h2 class="section-title">Contact</h2>
<div class="contact-wrapper load-hidden">
<p class="contact-wrapper__text">[Put your call to action here]</p>
<a
rel="noreferrer"
target="_blank"
class="cta-btn cta-btn--resume"
href="mailto:example@email.com"
>Call to Action</a
>
</div>
</div>
</section>
<!-- /END Contact Section -->
```
### (5) Footer Section
- Put your Social Media URL on each `href` attribute of the `<a>` 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 `<a>` tags your want.
```html
<footer class="footer navbar-static-bottom">
...
<div class="social-links">
<a href="#!" target="_blank">
<i class="fa fa-twitter fa-inverse"></i>
</a>
<a href="#!" target="_blank">
<i class="fa fa-linkedin fa-inverse"></i>
</a>
<a href="#!" target="_blank">
<i class="fa fa-github fa-inverse"></i>
</a>
</div>
...
</footer>
```
### 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
[](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
================================================
<!--
Hello!
-
Simplefolio is a clean and responsive portfolio template for Developers!
Created by Jacobo Martinez.
-
Github Repo: https://github.com/cobiwave/simplefolio/
Readme: https://github.com/cobiwave/simplefolio/README.md
-
For business & inquires, contact me -> jacobojavier98@gmail.com
-->
<!DOCTYPE html>
<html lang="en" class="sr">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="shortcut icon" type="image/png" href="assets/favicon.png" />
<!-- Todo: put here your site title -->
<title>[Your name here] | Developer</title>
<!-- Todo: add some coding keywords below - e.g: (javascript, yourusername, etc) -->
<meta name="keywords" content="[username], [name], skill" />
<!-- Todo: improve your SEO by adding a small description of you -->
<meta name="description" content="[Your name here] | Developer" />
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
/>
<link rel="stylesheet" href="styles.scss" />
<script
defer
src="https://unpkg.com/scrollreveal@4.0.0/dist/scrollreveal.min.js"
></script>
<!-- Todo: remove the below script once you finish your portfolio -->
<script async defer src="https://buttons.github.io/buttons.js"></script>
</head>
<!-- Todo: read the following HTML Todos to create your stunning portfolio website -->
<body>
<div id="top"></div>
<!-- **** Hero Section **** -->
<section id="hero" class="jumbotron">
<div class="container">
<h1 class="hero-title load-hidden">
Hi, my name is <span class="text-color-main">Your Name</span>
<br />
I'm the Unknown Developer.
</h1>
<p class="hero-cta load-hidden">
<a rel="noreferrer" class="cta-btn cta-btn--hero" href="#about"
>Know more</a
>
</p>
</div>
</section>
<!-- /END Hero Section -->
<!-- **** About Section **** -->
<section id="about">
<div class="container">
<h2 class="section-title load-hidden">About me</h2>
<div class="row about-wrapper">
<div class="col-md-6 col-sm-12">
<div class="about-wrapper__image load-hidden">
<img
alt="Profile Image"
class="img-fluid rounded shadow-lg"
height="auto"
width="300px"
src="assets/profile.jpg"
alt="Profile Image"
/>
</div>
</div>
<div class="col-md-6 col-sm-12">
<div class="about-wrapper__info load-hidden">
<p class="about-wrapper__info-text">
This is where you can describe about yourself. The more you
describe about yourself, the more chances you have!
</p>
<p class="about-wrapper__info-text">
Extra Information about you! like hobbies and your goals.
</p>
<span class="d-flex mt-3">
<a
rel="noreferrer"
target="_blank"
class="cta-btn cta-btn--resume"
href="assets/resume.pdf"
>
View Resume
</a>
</span>
</div>
</div>
</div>
</div>
</section>
<!-- /END About Section -->
<!-- **** Projects Section **** -->
<section id="projects">
<div class="container">
<div class="project-wrapper">
<h2 class="section-title dark-blue-text">Projects</h2>
<!-- Notice: each .row is a project -->
<div class="row">
<div class="col-lg-4 col-sm-12">
<div class="project-wrapper__text load-hidden">
<h3 class="project-wrapper__text-title">Project Title 0</h3>
<div>
<p class="mb-4">
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.
</p>
</div>
<a
rel="noreferrer"
target="_blank"
class="cta-btn cta-btn--hero"
href="#!"
>
See Live
</a>
<a
rel="noreferrer"
target="_blank"
class="cta-btn text-color-main"
href="#!"
>
Source Code
</a>
</div>
</div>
<div class="col-lg-8 col-sm-12">
<div class="project-wrapper__image load-hidden">
<a rel="noreferrer" href="#!" target="_blank">
<div
data-tilt
data-tilt-max="4"
data-tilt-glare="true"
data-tilt-max-glare="0.5"
class="thumbnail rounded js-tilt"
>
<img
alt="Project Image"
class="img-fluid"
src="assets/project.jpg"
/>
</div>
</a>
</div>
</div>
</div>
<!-- /END Project -->
<!-- Notice: each .row is a project -->
<div class="row">
<div class="col-lg-4 col-sm-12">
<div class="project-wrapper__text load-hidden">
<h3 class="project-wrapper__text-title">Project Title 1</h3>
<div>
<p class="mb-4">
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.
</p>
</div>
<a
rel="noreferrer"
target="_blank"
class="cta-btn cta-btn--hero"
href="#!"
>
See Live
</a>
<a
rel="noreferrer"
target="_blank"
class="cta-btn text-color-main"
href="#!"
>
Source Code
</a>
</div>
</div>
<div class="col-lg-8 col-sm-12">
<div class="project-wrapper__image load-hidden">
<a rel="noreferrer" href="#!" target="_blank">
<div
data-tilt
data-tilt-max="4"
data-tilt-glare="true"
data-tilt-max-glare="0.5"
class="thumbnail rounded js-tilt"
>
<img
alt="Project Image"
class="img-fluid"
src="assets/project.jpg"
/>
</div>
</a>
</div>
</div>
</div>
<!-- /END Project -->
<!-- Notice: each .row is a project -->
<div class="row">
<div class="col-lg-4 col-sm-12">
<div class="project-wrapper__text load-hidden">
<h3 class="project-wrapper__text-title">Project Title 2</h3>
<div>
<p class="mb-4">
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.
</p>
</div>
<a
rel="noreferrer"
target="_blank"
class="cta-btn cta-btn--hero"
href="#!"
>
See Live
</a>
<a
rel="noreferrer"
target="_blank"
class="cta-btn text-color-main"
href="#!"
>
Source Code
</a>
</div>
</div>
<div class="col-lg-8 col-sm-12">
<div class="project-wrapper__image load-hidden">
<a rel="noreferrer" href="#!" target="_blank">
<div
data-tilt
data-tilt-max="4"
data-tilt-glare="true"
data-tilt-max-glare="0.5"
class="thumbnail rounded js-tilt"
>
<img
alt="Project Image"
class="img-fluid"
src="assets/project.jpg"
/>
</div>
</a>
</div>
</div>
</div>
<!-- /END Project -->
</div>
</div>
</section>
<!-- /END Projects Section -->
<!-- **** Contact Section **** -->
<section id="contact">
<div class="container">
<h2 class="section-title">Contact</h2>
<div class="contact-wrapper load-hidden">
<p class="contact-wrapper__text">[Put your call to action here]</p>
<a
rel="noreferrer"
target="_blank"
class="cta-btn cta-btn--resume"
href="mailto:example@email.com"
>Call to Action</a
>
</div>
</div>
</section>
<!-- /END Contact Section -->
<!-- **** Footer Section **** -->
<footer class="footer navbar-static-bottom">
<div class="container">
<a rel="noreferrer" href="#top" class="back-to-top">
<i class="fa fa-angle-up fa-2x" aria-hidden="true"></i>
</a>
<div class="social-links">
<a rel="noreferrer" href="#!" target="_blank">
<i class="fa fa-twitter fa-inverse"></i>
</a>
<a rel="noreferrer" href="#!" target="_blank">
<i class="fa fa-linkedin fa-inverse"></i>
</a>
<a rel="noreferrer" href="#!" target="_blank">
<i class="fa fa-github fa-inverse"></i>
</a>
</div>
<hr />
<!-- Notice: if you want to give me some credit, it will be huge for me! if not, put your data on it -->
<p class="footer__text">
© 2021 - Template developed by
<a rel="noreferrer" href="https://github.com/cobiwave" target="_blank"
>Jacobo Martínez</a
>
</p>
<!-- TO DO: remove this entire paragraph once you finish your portfolio -->
<p class="mt-3 pt-3">
<a
rel="noreferrer"
class="github-button"
href="https://github.com/cobiwave/simplefolio/fork"
data-icon="octicon-repo-forked"
data-size="large"
data-show-count="true"
aria-label="Fork ntkme/github-buttons on GitHub"
>Fork</a
>
<a
rel="noreferrer"
class="github-button"
href="https://github.com/cobiwave/simplefolio"
data-icon="octicon-star"
data-size="large"
data-show-count="true"
aria-label="Star cobiwave/simplefolio on GitHub"
>Star</a
>
</p>
</div>
</footer>
<!-- /END Footer Section -->
<script defer type="module" src="index.js"></script>
</body>
</html>
================================================
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";
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
SYMBOL INDEX (2 symbols across 2 files)
FILE: src/scripts/scrollReveal.js
function initScrollReveal (line 1) | function initScrollReveal(targetElements, defaultProps) {
FILE: src/scripts/tiltAnimation.js
function initTiltAnimation (line 3) | function initTiltAnimation() {
Condensed preview — 26 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (45K chars).
[
{
"path": ".github/workflows/gh-pages.yml",
"chars": 1337,
"preview": "# This is a basic workflow to help you get started with Actions\nname: Portfolio\n# Controls when the action will run. Tri"
},
{
"path": ".gitignore",
"chars": 33,
"preview": "node_modules/\ndist/\n.parcel-cache"
},
{
"path": ".nvmrc",
"chars": 7,
"preview": "16.14.2"
},
{
"path": ".prettierrc",
"chars": 3,
"preview": "{}\n"
},
{
"path": "LICENSE.md",
"chars": 1072,
"preview": "MIT License\n\nCopyright (c) 2019 Jacobo Martínez\n\nPermission is hereby granted, free of charge, to any person obtaining a"
},
{
"path": "README.md",
"chars": 11013,
"preview": "# Simplefolio ⚡️ [](https://github.com/c"
},
{
"path": "package.json",
"chars": 855,
"preview": "{\n \"name\": \"simplefolio\",\n \"version\": \"1.0.1\",\n \"private\": \"true\",\n \"description\": \"A clean, beautiful and responsiv"
},
{
"path": "src/data/scrollRevealConfig.js",
"chars": 1254,
"preview": "export const defaultProps = {\n easing: \"cubic-bezier(0.5, 0, 0, 1)\",\n distance: \"30px\",\n duration: 1000,\n desktop: t"
},
{
"path": "src/index.html",
"chars": 12161,
"preview": "<!--\n Hello!\n -\n Simplefolio is a clean and responsive portfolio template for Developers!\n Created by Jacobo Martine"
},
{
"path": "src/index.js",
"chars": 250,
"preview": "import initScrollReveal from \"./scripts/scrollReveal\";\nimport initTiltEffect from \"./scripts/tiltAnimation\";\nimport { ta"
},
{
"path": "src/sass/abstracts/_helpers.scss",
"chars": 55,
"preview": "// Margins\n.mb-8 {\n margin-bottom: 8rem !important;\n}\n"
},
{
"path": "src/sass/abstracts/_mixins.scss",
"chars": 1782,
"preview": "// MEDIA QUERY MANAGER\n/*\n\n0 - 600px: Phone\n600px - 900px Table Portrait\n900px - 1200px Table Landsc"
},
{
"path": "src/sass/abstracts/_variables.scss",
"chars": 258,
"preview": "// COLORS\n$primary-color: #02aab0;\n$secondary-color: #00cdac;\n\n$white-color: #fff;\n\n$dark-grey: #333333;\n$light-grey: #d"
},
{
"path": "src/sass/base/_base.scss",
"chars": 428,
"preview": "html {\n font-size: 62.5%;\n\n &.sr .load-hidden {\n visibility: hidden;\n }\n}\n\nbody {\n font-family: \"Montserrat\", san"
},
{
"path": "src/sass/base/_typography.scss",
"chars": 806,
"preview": "@import url(\"https://fonts.googleapis.com/css?family=Montserrat:400,700\");\n\nh1 {\n font-weight: 700;\n}\n\np,\na {\n font-fa"
},
{
"path": "src/sass/components/_buttons.scss",
"chars": 1942,
"preview": "/* Call to Action Button */\n.cta-btn {\n display: inline-block;\n position: relative;\n padding: 0.8rem $default-font-si"
},
{
"path": "src/sass/layout/_footer.scss",
"chars": 1236,
"preview": ".footer {\n background-color: $dark-grey;\n color: $white-color;\n padding: 4.8rem 0;\n\n @include respond(phone) {\n b"
},
{
"path": "src/sass/layout/_sections.scss",
"chars": 145,
"preview": "// Section\nsection {\n padding: 5rem 0rem;\n\n @include respond(phone) {\n border: none;\n padding-left: 1rem;\n pa"
},
{
"path": "src/sass/sections/_about.scss",
"chars": 1635,
"preview": "#about {\n background-color: $primary-color;\n background-image: linear-gradient(\n 135deg,\n $primary-color 0%,\n "
},
{
"path": "src/sass/sections/_contact.scss",
"chars": 734,
"preview": "#contact {\n background-image: linear-gradient(\n 135deg,\n $primary-color 0%,\n $secondary-color 100%\n );\n -web"
},
{
"path": "src/sass/sections/_hero.scss",
"chars": 1309,
"preview": "#hero {\n min-height: 100vh;\n height: 100vh;\n display: flex;\n align-items: center;\n border-bottom: 0px;\n background"
},
{
"path": "src/sass/sections/_projects.scss",
"chars": 1601,
"preview": "#projects {\n background-color: $white-color;\n color: $dark-blue-text;\n margin-top: -10rem;\n padding-top: 15rem;\n\n @"
},
{
"path": "src/sass/vendors/_bootstrap.scss",
"chars": 37,
"preview": "@import \"~bootstrap/scss/bootstrap\";\n"
},
{
"path": "src/scripts/scrollReveal.js",
"chars": 290,
"preview": "export default function initScrollReveal(targetElements, defaultProps) {\n if (!targetElements.length) return;\n\n Scroll"
},
{
"path": "src/scripts/tiltAnimation.js",
"chars": 177,
"preview": "import VanillaTilt from \"vanilla-tilt\";\n\nexport default function initTiltAnimation() {\n const elements = document.query"
},
{
"path": "src/styles.scss",
"chars": 456,
"preview": "@import \"./sass/vendors/bootstrap.scss\";\n\n@import \"./sass/abstracts/mixins\";\n@import \"./sass/abstracts/variables\";\n@impo"
}
]
About this extraction
This page contains the full source code of the cobiwave/simplefolio GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 26 files (39.9 KB), approximately 11.3k tokens, and a symbol index with 2 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.