This commit is contained in:
2026-03-23 20:21:11 -03:00
parent 521f414bef
commit ad61fc3308
75 changed files with 4522 additions and 4283 deletions
-30
View File
@@ -1,30 +0,0 @@
name: Deploy to Server
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install sshpass
run: |
env
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -p 6969 ${{ secrets.HOST }} >> ~/.ssh/known_hosts
sudo apt-get install sshpass
- name: Deploy to server
run: |
sshpass -p '${{ secrets.SSH_PRIVATE_KEY }}' ssh -v -o StrictHostKeyChecking=no ${{ secrets.USER }}@${{ secrets.HOST }} -p 6969 <<'ENDSSH'
cd ${{ secrets.WORK_DIR }}
git pull
ENDSSH
View File
+3
View File
@@ -0,0 +1,3 @@
# Ignore artifacts:
build
coverage
+1
View File
@@ -0,0 +1 @@
{}
-509
View File
@@ -1,509 +0,0 @@
@import url("https://fonts.googleapis.com/css2?family=Outfit:wght@200;300;400;500;600;700&display=swap");
:root {
--text: #170f1f;
--background: #e8e0f0;
--primary-button: #7d52a7;
--secondary-button: #ded3e9;
--accent: #8a62b2;
}
* {
box-sizing: border-box;
font-family: "Outfit", sans-serif;
text-decoration: none;
list-style: none;
margin: 0;
padding: 0;
color: var(--text);
}
html {
scroll-behavior: smooth !important;
}
body {
width: 100%;
height: 100%;
background-color: var(--background);
}
.tcenter {
text-align: center;
}
.ttext1 {
font-size: 3rem;
}
.bborder {
border-bottom: solid 2px var(--accent);
}
.sbox {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.5);
width: 95%;
border-radius: 12px;
padding: 1rem;
}
.button {
background-color: var(--primary-button);
color: var(--secondary-button);
font-size: 18px;
font-weight: 800;
font-style: normal;
text-decoration: none;
padding: 10px 10px;
border: 0px solid #000;
border-radius: 10px;
display: inline-block;
transition: background-color 0.3s ease, transform 0.3s ease;
}
.button:hover {
transform: scale(1.05);
}
.button:active {
transform: scale(0.95);
}
.select {
border: solid 2px var(--primary-button);
border-radius: 12px;
color: var(--text);
background-color: var(--secondary-button);
padding: 4px;
outline: none;
}
.img {
display: block;
height: 100%;
}
.img1 {
display: block;
background-repeat: no-repeat;
background-position: center;
background-size: cover;
height: auto;
width: 100%;
border-radius: 12px;
}
/* ---------- header ---------- */
header {
position: fixed;
width: 100%;
top: 0;
}
.header {
display: flex;
width: 100%;
padding: 10px;
background-color: var(--secondary-button);
border-radius: 0 0 12px 12px;
justify-content: space-between;
}
.logo {
display: flex;
align-items: center;
color: var(--color-Accent);
gap: 0.5rem;
}
.Menu_options {
display: flex;
align-items: center;
width: 100%;
justify-content: space-between;
}
.Menu_options ul {
display: flex;
gap: 2rem;
justify-content: center;
align-items: center;
}
.Menu_options ul a {
font-weight: 500;
}
.Menu_options ul li:hover {
transform: scale(1.05);
}
.Menu_options ul li:active {
transform: scale(0.95);
}
/* ---------- Section 1 ---------- */
section {
padding: 2rem 0 2rem 0;
}
.section_1 {
display: flex;
margin-top: 50px;
align-items: center;
justify-content: center;
}
.conteudo_1 {
display: flex;
height: auto;
gap: 2rem;
width: 90%;
align-items: center;
justify-content: center;
}
.conteudo_1 h1 {
font-size: 2rem;
}
.text_home {
display: flex;
flex-direction: column;
gap: 1rem;
}
.accent {
color: var(--accent);
}
.social_icons {
display: flex;
align-items: center;
gap: 1rem;
}
.conteudo_1 i {
display: flex;
font-size: 2rem;
background-color: var(--accent);
color: var(--secondary-button);
border-radius: 50%;
height: 50px;
width: 50px;
justify-content: center;
align-items: center;
transition: transform ease 0.2s;
}
.conteudo_1 i:hover {
transform: scale(1.05);
}
.conteudo_1 i:active {
transform: scale(0.95);
}
.img_inicio {
border-radius: 50%;
max-width: 50%;
border: solid 5px var(--accent);
}
/* ---------- Section 2 ---------- */
.section_2 {
display: flex;
align-items: center;
justify-content: center;
border-radius: 12px;
background-color: var(--secondary-button);
}
.section_2 h2 {
font-size: 3rem;
}
.conteudo_2 {
display: flex;
flex-direction: column;
gap: 1rem;
align-items: center;
width: 50%;
}
/* ---------- Section 3 ---------- */
.section_3 {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 3rem;
}
.section_3 h2 {
font-size: 3rem;
}
.conteudo_3 {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 2rem;
align-items: center;
justify-items: center;
width: 50%;
font-weight: 600;
}
.conteudo_3 i {
display: flex;
font-size: 3rem;
background-color: var(--accent);
color: var(--secondary-button);
border-radius: 50%;
height: 100px;
width: 100px;
justify-content: center;
align-items: center;
transition: transform ease 0.2s;
}
.skill_icon {
display: flex;
flex-direction: column;
align-items: center;
gap: 1rem;
}
/* ---------- Section 4 ---------- */
.section_4 {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 2rem;
margin: auto;
background-color: var(--secondary-button);
border-radius: 12px;
}
.section_4 h1 {
font-size: 3rem;
}
.conteudo_4 {
display: grid;
grid-template-columns: repeat(3, 1fr);
justify-items: center;
gap: 1rem;
width: 90%;
}
.slot {
background-color: var(--background);
display: flex;
flex-direction: column;
height: auto;
padding: 2rem;
border-radius: 12px;
margin: 20px 0 20px 0;
gap: 1rem;
}
.tech {
display: flex;
flex-wrap: wrap;
gap: 5px;
}
.tech span {
background-color: var(--primary-button);
color: var(--secondary-button);
border-radius: 28px;
padding: 5px;
font-size: 12px;
}
/* ---------- Section 5 ---------- */
.section_5 {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
}
.section_5 h1 {
font-size: 3rem;
}
.conteudo_5 {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 100%;
gap: 2rem;
font-weight: 600;
}
.contatos_icons {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
gap: 2rem;
}
.contatos_icons1 {
display: flex;
flex-direction: column;
align-items: center;
gap: 1rem;
width: 300px;
}
.contatos_icons1 i {
display: flex;
font-size: 3rem;
background-color: var(--accent);
color: var(--secondary-button);
border-radius: 50%;
height: 100px;
width: 100px;
justify-content: center;
align-items: center;
transition: transform ease 0.2s;
}
.contatos_icons1 i:hover {
transform: scale(1.05);
}
.contatos_icons1 i:active {
transform: scale(0.95);
}
/* ---------- footer ---------- */
footer {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
padding: 1rem;
border-radius: 12px 12px 0 0;
background-color: var(--secondary-button);
}
/* ---------- responsive ---------- */
#menu_bar_button i {
color: var(--secondary-button);
}
.menu_bar_nav {
display: flex;
flex-direction: column;
position: absolute;
width: 100%;
height: auto;
background-color: var(--secondary-button);
border-radius: 0 0 12px 12px;
padding: 2rem;
}
.Menu_bar {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 1rem;
}
.Menu_bar ul {
align-items: center;
justify-content: center;
}
.Menu_bar li {
width: 100%;
text-align: center;
}
.Menu_bar a {
width: 100%;
}
#menu_bar_button {
display: none;
}
@media screen and (min-width: 901px) {
#menu_bar_nav,
#menu_bar_button {
display: none;
}
}
@media screen and (max-width: 900px) {
.menu_bar_nav,
.Menu_options ul {
display: none;
}
#menu_bar_button {
display: flex;
}
.conteudo_1 {
flex-direction: column;
text-align: center;
align-items: center;
justify-content: center;
}
.social_icons {
justify-content: center;
}
.section_2 {
display: flex;
flex-direction: column;
height: auto;
}
.conteudo_2 {
width: 80%;
}
.img_inicio {
width: 80%;
height: auto;
}
.section_3 {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.conteudo_3 {
grid-template-columns: repeat(2, 1fr);
width: 90%;
}
.conteudo_4 {
grid-template-columns: 1fr;
}
.contatos_icons {
flex-direction: column;
}
.contatos_icons1 {
width: 90%;
}
}
+9 -98
View File
@@ -1,105 +1,16 @@
# Christian Falcão's Portfolio # React + Vite
Welcome to my professional portfolio repository. This portfolio showcases my skills, projects, and experience as a Front-End Developer specializing in React. Feel free to explore the various sections to learn more about my work and capabilities. This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
## 🌐 Live Portfolio Currently, two official plugins are available:
Visit my portfolio website: [christiandonf.github.io/Portifolio-Christian-Falcao](https://christiandonf.github.io/Portifolio-Christian-Falcao/) - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs)
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/)
## 📋 Overview ## React Compiler
This portfolio was designed and developed to demonstrate my front-end development expertise and showcase my professional journey. It features a responsive design, interactive elements, and a collection of my most significant projects. The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
## 🛠️ Technologies Used ## Expanding the ESLint configuration
- **React.js** - Main framework for building the user interface If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project.
- **HTML5/CSS3** - Structure and styling
- **JavaScript** - Programming logic and interactivity
- **React Icons** - Icon implementation
- **GitHub Pages** - Hosting platform
## 📱 Features
- **Responsive Design** - Optimized for all screen sizes (mobile, tablet, desktop)
- **Dark/Light Theme** - Toggle between visual modes
- **Interactive UI** - Smooth scrolling, animations, and transitions
- **Project Showcase** - Highlighted portfolio projects with links
- **Contact Form** - Direct communication channel
- **Languages Toggle** - Support for multiple languages
## 📂 Project Structure
```
├── public/
│ ├── favicon.ico
│ ├── index.html
│ └── assets/
├── src/
│ ├── components/
│ │ ├── About/
│ │ ├── Contact/
│ │ ├── Experience/
│ │ ├── Footer/
│ │ ├── Header/
│ │ ├── Nav/
│ │ ├── Portfolio/
│ │ ├── Services/
│ │ └── Testimonials/
│ ├── assets/
│ ├── App.js
│ ├── index.js
│ └── styles/
├── package.json
├── README.md
└── .gitignore
```
## 🚀 Installation and Setup
To run this portfolio locally:
1. Clone the repository
```bash
git clone https://github.com/christiandonf/Portifolio-Christian-Falcao.git
```
2. Navigate to the project directory
```bash
cd Portifolio-Christian-Falcao
```
3. Install dependencies
```bash
npm install
```
4. Start the development server
```bash
npm start
```
5. Open your browser and visit `http://localhost:3000`
## 📊 Portfolio Sections
- **Home** - Introduction and brief overview
- **About** - Professional background and personal information
- **Experience** - Skills and technical proficiencies
- **Portfolio** - Showcase of selected projects
- **Contact** - Ways to get in touch
## 📞 Contact Information
Feel free to reach out through any of the following channels:
- **Email**: christiandonfalcao@gmail.com
- **LinkedIn**: [Christian Falcão](https://www.linkedin.com/in/christianfalcao/)
- **GitHub**: [christiandonf](https://github.com/christiandonf)
## 📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
---
© 2023 Christian Falcão. All Rights Reserved.
+511
View File
@@ -0,0 +1,511 @@
@import url("https://fonts.googleapis.com/css2?family=Outfit:wght@200;300;400;500;600;700&display=swap");
:root {
--text: #170f1f;
--background: #e8e0f0;
--primary-button: #7d52a7;
--secondary-button: #ded3e9;
--accent: #8a62b2;
}
* {
box-sizing: border-box;
font-family: "Outfit", sans-serif;
text-decoration: none;
list-style: none;
margin: 0;
padding: 0;
color: var(--text);
}
html {
scroll-behavior: smooth !important;
}
body {
width: 100%;
height: 100%;
background-color: var(--background);
}
.tcenter {
text-align: center;
}
.ttext1 {
font-size: 3rem;
}
.bborder {
border-bottom: solid 2px var(--accent);
}
.sbox {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.5);
width: 95%;
border-radius: 12px;
padding: 1rem;
}
.button {
background-color: var(--primary-button);
color: var(--secondary-button);
font-size: 18px;
font-weight: 800;
font-style: normal;
text-decoration: none;
padding: 10px 10px;
border: 0px solid #000;
border-radius: 10px;
display: inline-block;
transition:
background-color 0.3s ease,
transform 0.3s ease;
}
.button:hover {
transform: scale(1.05);
}
.button:active {
transform: scale(0.95);
}
.select {
border: solid 2px var(--primary-button);
border-radius: 12px;
color: var(--text);
background-color: var(--secondary-button);
padding: 4px;
outline: none;
}
.img {
display: block;
height: 100%;
}
.img1 {
display: block;
background-repeat: no-repeat;
background-position: center;
background-size: cover;
height: auto;
width: 100%;
border-radius: 12px;
}
/* ---------- header ---------- */
header {
position: fixed;
width: 100%;
top: 0;
}
.header {
display: flex;
width: 100%;
padding: 10px;
background-color: var(--secondary-button);
border-radius: 0 0 12px 12px;
justify-content: space-between;
}
.logo {
display: flex;
align-items: center;
color: var(--color-Accent);
gap: 0.5rem;
}
.Menu_options {
display: flex;
align-items: center;
width: 100%;
justify-content: space-between;
}
.Menu_options ul {
display: flex;
gap: 2rem;
justify-content: center;
align-items: center;
}
.Menu_options ul a {
font-weight: 500;
}
.Menu_options ul li:hover {
transform: scale(1.05);
}
.Menu_options ul li:active {
transform: scale(0.95);
}
/* ---------- Section 1 ---------- */
section {
padding: 2rem 0 2rem 0;
}
.section_1 {
display: flex;
margin-top: 50px;
align-items: center;
justify-content: center;
}
.conteudo_1 {
display: flex;
height: auto;
gap: 2rem;
width: 90%;
align-items: center;
justify-content: center;
}
.conteudo_1 h1 {
font-size: 2rem;
}
.text_home {
display: flex;
flex-direction: column;
gap: 1rem;
}
.accent {
color: var(--accent);
}
.social_icons {
display: flex;
align-items: center;
gap: 1rem;
}
.conteudo_1 i {
display: flex;
font-size: 2rem;
background-color: var(--accent);
color: var(--secondary-button);
border-radius: 50%;
height: 50px;
width: 50px;
justify-content: center;
align-items: center;
transition: transform ease 0.2s;
}
.conteudo_1 i:hover {
transform: scale(1.05);
}
.conteudo_1 i:active {
transform: scale(0.95);
}
.img_inicio {
border-radius: 50%;
max-width: 50%;
border: solid 5px var(--accent);
}
/* ---------- Section 2 ---------- */
.section_2 {
display: flex;
align-items: center;
justify-content: center;
border-radius: 12px;
background-color: var(--secondary-button);
}
.section_2 h2 {
font-size: 3rem;
}
.conteudo_2 {
display: flex;
flex-direction: column;
gap: 1rem;
align-items: center;
width: 50%;
}
/* ---------- Section 3 ---------- */
.section_3 {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 3rem;
}
.section_3 h2 {
font-size: 3rem;
}
.conteudo_3 {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 2rem;
align-items: center;
justify-items: center;
width: 50%;
font-weight: 600;
}
.conteudo_3 i {
display: flex;
font-size: 3rem;
background-color: var(--accent);
color: var(--secondary-button);
border-radius: 50%;
height: 100px;
width: 100px;
justify-content: center;
align-items: center;
transition: transform ease 0.2s;
}
.skill_icon {
display: flex;
flex-direction: column;
align-items: center;
gap: 1rem;
}
/* ---------- Section 4 ---------- */
.section_4 {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 2rem;
margin: auto;
background-color: var(--secondary-button);
border-radius: 12px;
}
.section_4 h1 {
font-size: 3rem;
}
.conteudo_4 {
display: grid;
grid-template-columns: repeat(3, 1fr);
justify-items: center;
gap: 1rem;
width: 90%;
}
.slot {
background-color: var(--background);
display: flex;
flex-direction: column;
height: auto;
padding: 2rem;
border-radius: 12px;
margin: 20px 0 20px 0;
gap: 1rem;
}
.tech {
display: flex;
flex-wrap: wrap;
gap: 5px;
}
.tech span {
background-color: var(--primary-button);
color: var(--secondary-button);
border-radius: 28px;
padding: 5px;
font-size: 12px;
}
/* ---------- Section 5 ---------- */
.section_5 {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
}
.section_5 h1 {
font-size: 3rem;
}
.conteudo_5 {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 100%;
gap: 2rem;
font-weight: 600;
}
.contatos_icons {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
gap: 2rem;
}
.contatos_icons1 {
display: flex;
flex-direction: column;
align-items: center;
gap: 1rem;
width: 300px;
}
.contatos_icons1 i {
display: flex;
font-size: 3rem;
background-color: var(--accent);
color: var(--secondary-button);
border-radius: 50%;
height: 100px;
width: 100px;
justify-content: center;
align-items: center;
transition: transform ease 0.2s;
}
.contatos_icons1 i:hover {
transform: scale(1.05);
}
.contatos_icons1 i:active {
transform: scale(0.95);
}
/* ---------- footer ---------- */
footer {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
padding: 1rem;
border-radius: 12px 12px 0 0;
background-color: var(--secondary-button);
}
/* ---------- responsive ---------- */
#menu_bar_button i {
color: var(--secondary-button);
}
.menu_bar_nav {
display: flex;
flex-direction: column;
position: absolute;
width: 100%;
height: auto;
background-color: var(--secondary-button);
border-radius: 0 0 12px 12px;
padding: 2rem;
}
.Menu_bar {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 1rem;
}
.Menu_bar ul {
align-items: center;
justify-content: center;
}
.Menu_bar li {
width: 100%;
text-align: center;
}
.Menu_bar a {
width: 100%;
}
#menu_bar_button {
display: none;
}
@media screen and (min-width: 901px) {
#menu_bar_nav,
#menu_bar_button {
display: none;
}
}
@media screen and (max-width: 900px) {
.menu_bar_nav,
.Menu_options ul {
display: none;
}
#menu_bar_button {
display: flex;
}
.conteudo_1 {
flex-direction: column;
text-align: center;
align-items: center;
justify-content: center;
}
.social_icons {
justify-content: center;
}
.section_2 {
display: flex;
flex-direction: column;
height: auto;
}
.conteudo_2 {
width: 80%;
}
.img_inicio {
width: 80%;
height: auto;
}
.section_3 {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.conteudo_3 {
grid-template-columns: repeat(2, 1fr);
width: 90%;
}
.conteudo_4 {
grid-template-columns: 1fr;
}
.contatos_icons {
flex-direction: column;
}
.contatos_icons1 {
width: 90%;
}
}

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Before

Width:  |  Height:  |  Size: 633 B

After

Width:  |  Height:  |  Size: 633 B

Before

Width:  |  Height:  |  Size: 710 B

After

Width:  |  Height:  |  Size: 710 B

Before

Width:  |  Height:  |  Size: 640 B

After

Width:  |  Height:  |  Size: 640 B

Before

Width:  |  Height:  |  Size: 630 B

After

Width:  |  Height:  |  Size: 630 B

Before

Width:  |  Height:  |  Size: 129 KiB

After

Width:  |  Height:  |  Size: 129 KiB

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Before

Width:  |  Height:  |  Size: 812 B

After

Width:  |  Height:  |  Size: 812 B

Before

Width:  |  Height:  |  Size: 745 B

After

Width:  |  Height:  |  Size: 745 B

Before

Width:  |  Height:  |  Size: 494 B

After

Width:  |  Height:  |  Size: 494 B

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before

Width:  |  Height:  |  Size: 519 B

After

Width:  |  Height:  |  Size: 519 B

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -3,10 +3,9 @@ function toggleDiv() {
var header = document.getElementById("header_css"); var header = document.getElementById("header_css");
if (div.style.display === "flex") { if (div.style.display === "flex") {
div.style.display = "none"; div.style.display = "none";
header.style.borderRadius = "0 0 12px 12px" header.style.borderRadius = "0 0 12px 12px";
} else { } else {
div.style.display = "flex"; div.style.display = "flex";
header.style.borderRadius = "0 0 0 0" header.style.borderRadius = "0 0 0 0";
} }
} }
+363
View File
@@ -0,0 +1,363 @@
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="device-width, initial-scale=1.0, maximum-scale=1.0"
/>
<meta http-equiv="X-UA-compatible" content="ie=edge" />
<meta name="description" content="Meu primeiro portifolio" />
<meta name="copyright" content="©2022 Christian do Nascimento Falcao" />
<meta name="author" content="Christian do Nascimento Falcao" />
<title>Christian do Nascimento Falcao</title>
<link rel="icon" href="./Assets/img/code-solid.svg" />
<link rel="stylesheet" href="Assets/css/style.css" />
<script
src="https://kit.fontawesome.com/6ffe26f1f6.js"
crossorigin="anonymous"
defer
></script>
<script src="./Assets/js/index.js" defer></script>
<!-- Google tag (gtag.js) -->
<script
async
src="https://www.googletagmanager.com/gtag/js?id=AW-11390833779"
></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "AW-11390833779");
</script>
<script>
gtag("event", "conversion", {
send_to: "AW-11390833779/7Nf9CKjd2_AYEPOoybcq",
});
</script>
</head>
<body>
<header id="header">
<div class="header" id="header_css">
<nav class="Menu_options">
<div class="logo">
<i class="fa-solid fa-code"></i>
<h2 class="stext">Christian</h2>
</div>
<ul>
<li><a href="#home">Home</a></li>
<li><a href="#about_me">Sobre Mim</a></li>
<li><a href="#skills">Habilidades</a></li>
<li><a href="#projects">Projetos</a></li>
<li><a href="#contact" class="button bcontact">Contato</a></li>
</ul>
</nav>
<button class="button" id="menu_bar_button" onclick="toggleDiv()">
<i class="fa-solid fa-bars"></i>
</button>
</div>
<nav class="menu_bar_nav" id="menu_bar_nav">
<ul class="Menu_bar">
<li><a onclick="toggleDiv()" class="button" href="#home">Home</a></li>
<li>
<a onclick="toggleDiv()" class="button" href="#about_me"
>Sobre Mim</a
>
</li>
<li>
<a onclick="toggleDiv()" class="button" href="#skills"
>Habilidades</a
>
</li>
<li>
<a onclick="toggleDiv()" class="button" href="#projects"
>Projetos</a
>
</li>
<li>
<a onclick="toggleDiv()" class="button" href="#contact">Contato</a>
</li>
</ul>
</nav>
</header>
<main>
<section class="section_1" id="home">
<div class="conteudo_1">
<div class="text_home">
<div>
<p>Oi, eu sou</p>
<h1>Christian do Nascimento Falcao</h1>
<p>Full-Stack Developer</p>
</div>
<div class="social_icons">
<a href="https://github.com/christiandonf" target="_blank">
<i class="fab fa-github icons" title="GitHub"></i>
</a>
<a
href="https://www.linkedin.com/in/christiannfalcao/"
target="_blank"
>
<i class="fab fa-linkedin icons" title="LinkedIn"></i>
</a>
</div>
</div>
<img src="./Assets/img/Perfil.jpg" alt="" class="img_inicio img" />
</div>
</section>
<section class="section_2" id="about_me">
<div class="conteudo_2">
<h2>Sobre mim</h2>
<p>
Olá, meu nome é Christian do Nascimento Falcão e sou um
desenvolvedor Full Stack. Seja bem vindo ao meu portfolio!
</p>
<p>
Tenho experiencia prática em desenvolvimento Web, desde a criação de
API REST com AspNet Core em C# até a criação do front-End com
Next.JS, meu foco é construir de forma rápida aplicações para
diversos tipos de serviços, desde uma LandPage até uma solução que
depende de escalabilidade como e-commerce e blogs, tenho
experiencias com integração a API REST para consumo de APIs e criar
regras de negócios para sistemas mais complexos.
</p>
<p>
Como freelancer, tenho o prazer de colaborar com empresas e
indivíduos para criar sites que refletem a identidade da marca.
Estou sempre empenhado em compreender as necessidades únicas de cada
projeto e entregar resultados personalizados e de alta qualidade.
</p>
<p>
Utilizo as ultimas tecnologias do mercado como JavaScript,
Tailwindcss, Next.JS utilziando o framework Node.js, C# com AspNet
Core e Unij para criação de testes unitário, Conteineres como Docker
e Podman usando docker-Compose para deploy de sistemas mais
complexos, sou capaz de criar sistemas sólidos e eficientes. Além
disso, tenho experiência em integração de Banco de dados como
Postgree, aplicação de práticas de segurança para proteger os dados
dos usuários.
</p>
<p>
Agradeço por visitar meu portfólio e estou ansioso para trabalhar
com você em seu próximo projeto.
</p>
</div>
</section>
<section class="section_3" id="skills">
<h2>Habilidades</h2>
<div class="conteudo_3">
<div class="skill_icon">
<i class="fa-brands fa-html5" title="html5"></i>
<p>HTML5</p>
</div>
<div class="skill_icon">
<i class="fa-brands fa-css3-alt" title="css3"></i>
<p>CSS3</p>
</div>
<div class="skill_icon">
<i class="fa-brands fa-js" title="javascript"></i>
<p>JAVASCRIPT</p>
</div>
<div class="skill_icon">
<i class="fa-brands fa-react" title="react"></i>
<p>REACT</p>
</div>
<div class="skill_icon">
<i class="fa-brands fa-node-js" title="node.js"></i>
<p>NODE.JS</p>
</div>
<div class="skill_icon">
<i class="fa-solid fa-file-code" title="tailwindcss"></i>
<p>TAILWINDCSS</p>
</div>
<div class="skill_icon">
<i class="fa-brands fa-bootstrap" title="bootstrap"></i>
<p>BOOTSTRAP</p>
</div>
<div class="skill_icon">
<i class="fa-brands fa-square-git" title="git"></i>
<p>GIT</p>
</div>
<div class="skill_icon">
<i class="fa-brands fa-github" title="github"></i>
<p>GITHUB</p>
</div>
<div class="skill_icon">
<i class="fa-solid fa-database" title="database"></i>
<p>SQL</p>
</div>
</div>
</section>
<section class="section_4" id="projects">
<h1 class="titulosBrancos titulosCentro">Projetos</h1>
<div class="conteudo_4">
<div class="slot">
<img
src="https://www.fazendasaofranciscodeassis.com/favicon.ico"
alt=""
class="img1"
/>
<h2>Fazenda São franciso de asis</h2>
<h3>Site Institucional</h3>
<p>
A Fazenda São Francisco de Assis foi fundada em 2015 nas terras
férteis do Paraná, Paranagi, com o propósito de se tornar uma
presença significativa no cenário agrícola local. Nos seus
primeiros anos, a fazenda enfrentou os desafios comuns de uma nova
empreitada, mas com dedicação e trabalho árduo, começou a
florescer.
</p>
<div class="tech">
<h3>Technologias:</h3>
<span>HTML</span>
<span>CSS</span>
<span>JavaScript</span>
<span>React</span>
<span>PostgresSQL</span>
</div>
<div class="slotbuttons">
<a
href="https://www.fazendasaofranciscodeassis.com/"
target="_blank"
class="button"
>Home</a
>
<a
href="https://www.fazendasaofranciscodeassis.com/sobre"
target="_blank"
class="button"
>Sobre Nós</a
>
</div>
</div>
<div class="slot">
<img
src="https://www.thecomedyhub.com.br/favicon.ico"
alt=""
class="img1"
/>
<h2>The Comedy Hub</h2>
<h3>Rede Social</h3>
<p>
Tudo começou com um simples comentário em uma rede social que hoje
já não existe mais. Foi ali, naquele momento, que percebemos o
quanto sentíamos falta de um espaço nosso, um lugar onde
pudéssemos nos expressar, compartilhar risadas e criar conexões
genuínas. Foi assim que nasceu a ideia de criar o Comedy Hub, uma
rede social feita por pessoas que amam humor, para pessoas que
amam humor.
</p>
<div class="tech">
<h3>Technologias:</h3>
<span>HTML</span>
<span>CSS</span>
<span>TypeScript</span>
<span>Tawilwindcss</span>
<span>Next.JS</span>
<span>Java</span>
<span>SpringBoot</span>
<span>Python</span>
<span>Docker</span>
<span>Flutter</span>
<span>PostgresSQL</span>
<span>MongoDB</span>
</div>
<div class="slotbuttons">
<a
href="https://www.thecomedyhub.com.br/"
target="_blank"
class="button"
>Home</a
>
<a
href="https://www.thecomedyhub.com.br/about-us"
target="_blank"
class="button"
>Sobre Nós</a
>
</div>
</div>
<div class="slot">
<img
src="https://stream.nexuswebdigital.com/web/f5bbb798cb2c65908633.png"
alt=""
class="img1"
/>
<h2>Jellyfin</h2>
<h3>Self Hosting</h3>
<p>
Jellyfin é um dos serviços que faço "Self Host" como forma de
aprender a utilziar toda a suite de ferramentas para Devops entre
outros inumeros serviços que são utilizados para monitoramento do
servidor, como grafanna, caddyvisor, loki, prometheus entre outros
os mesmos estão protegidos por sistema de authenticação de dois
fatores pelo Authentik.
</p>
<div class="tech">
<h3>Technologias:</h3>
<span>Nginx</span>
<span>Grafanna</span>
<span>Loki</span>
<span>Prometheus</span>
<span>Docker</span>
<span>Authentik</span>
</div>
<div class="slotbuttons">
<a
href="https://stream.nexuswebdigital.com/"
target="_blank"
class="button"
>Acesso</a
>
</div>
</div>
</div>
</section>
<section class="section_5" id="contact">
<div class="conteudo_5">
<h1 class="titulosBrancos titulosCentro">Contato</h1>
<div class="contatos_icons">
<div class="contatos_icons1">
<a
href="mailto:christian.nascimento.falcao@gmail.com"
target="_blank"
><i class="fa-regular fa-envelope"></i
></a>
<p class="textosBrancos">christian.nascimento.falcao@gmail.com</p>
</div>
<div class="contatos_icons1">
<a
href="https://api.whatsapp.com/send?phone=5511999935492"
target="_blank"
><i class="fa-brands fa-whatsapp"></i
></a>
<p class="textosBrancos">+55-11-999935492</p>
</div>
</div>
</div>
</section>
</main>
<footer>
<p>© Copyright 2022 Christian do Nascimento Falcao</p>
</footer>
TESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTEST
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
</body>
</html>
-5
View File
@@ -1,5 +0,0 @@
node_modules/
dist/
.prettierrc.js
.eslintrc.js
env.d.ts
-29
View File
@@ -1,29 +0,0 @@
module.exports = {
extends: [
// By extending from a plugin config, we can get recommended rules without having to add them manually.
"eslint:recommended",
"plugin:react/recommended",
"plugin:import/recommended",
"plugin:jsx-a11y/recommended",
"plugin:@typescript-eslint/recommended",
// This disables the formatting rules in ESLint that Prettier is going to be responsible for handling.
// Make sure it's always the last config, so it gets the chance to override other configs.
"eslint-config-prettier",
],
settings: {
react: {
// Tells eslint-plugin-react to automatically detect the version of React to use.
version: "detect",
},
// Tells eslint how to resolve imports
"import/resolver": {
node: {
paths: ["src"],
extensions: [".js", ".jsx", ".ts", ".tsx"],
},
},
},
rules: {
// Add your own rules here to override ones from the extended configs.
},
};
-3
View File
@@ -1,3 +0,0 @@
node_modules/
dist/
.prettierrc.js
-8
View File
@@ -1,8 +0,0 @@
module.exports = {
trailingComma: 'all',
tabWidth: 2,
semi: true,
singleQuote: true,
printWidth: 120,
bracketSpacing: true,
};
-69
View File
@@ -1,69 +0,0 @@
# React + TypeScript + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
## Expanding the ESLint configuration
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
```js
export default tseslint.config([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Remove tseslint.configs.recommended and replace with this
...tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
...tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
...tseslint.configs.stylisticTypeChecked,
// Other configs...
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
```
You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
```js
// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'
export default tseslint.config([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs['recommended-typescript'],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
```
-23
View File
@@ -1,23 +0,0 @@
import js from '@eslint/js'
import globals from 'globals'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import tseslint from 'typescript-eslint'
import { globalIgnores } from 'eslint/config'
export default tseslint.config([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
js.configs.recommended,
tseslint.configs.recommended,
reactHooks.configs['recommended-latest'],
reactRefresh.configs.vite,
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
},
])
-16
View File
@@ -1,16 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/ico" href="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Porfolio</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
-39
View File
@@ -1,39 +0,0 @@
{
"name": "app",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "eslint . --ext .ts,.tsx",
"preview": "vite preview"
},
"dependencies": {
"@tailwindcss/vite": "^4.1.11",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-icons": "^5.5.0",
"tailwindcss": "^4.1.11"
},
"devDependencies": {
"@eslint/js": "^9.29.0",
"@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6",
"@typescript-eslint/eslint-plugin": "^8.35.1",
"@typescript-eslint/parser": "^8.35.1",
"@vitejs/plugin-react-swc": "^3.10.2",
"eslint": "^9.30.1",
"eslint-config-prettier": "^10.1.5",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.20",
"globals": "^16.2.0",
"prettier": "^3.6.2",
"typescript": "~5.8.3",
"typescript-eslint": "^8.34.1",
"vite": "^7.0.0"
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 633 B

-1
View File
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z"/></svg>

Before

Width:  |  Height:  |  Size: 710 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 640 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 630 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 812 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 745 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 494 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 519 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

-11
View File
@@ -1,11 +0,0 @@
import HeroMain from './components/heroSection/HeroMain';
import NavbarMain from './components/navbar/NavbarMain';
export default function App() {
return (
<main className="font-display">
<NavbarMain />
<HeroMain />
</main>
);
}
@@ -1,12 +0,0 @@
const HeroGradient = () => {
return (
<div>
<div className="shadow-cyanmediumshadow absolute top-0 right-[400px] -z-10 animate-pulse"></div>
<div className="shadow-orangeMediumShadow absolute top-0 right-0 -z-10 animate-pulse"></div>
<div className="shadow-cyanmediumshadow absolute top-[300px] left-0 -z-10 opacity-50"></div>
<div className="shadow-orangeMediumShadow absolute top-[500px] left-0 -z-10 opacity-50"></div>
</div>
);
};
export default HeroGradient;
@@ -1,17 +0,0 @@
import HeroGradient from './HeroGradient';
import HeroPic from './HeroPic';
import HeroText from './HeroText';
const HeroMain = () => {
return (
<div className="pt-40 pb-16">
<div className="flex md:flex-row sm:flex-col max-w-[1200px] mx-auto justify-between items-center relative px-4">
<HeroText />
<HeroPic />
<HeroGradient />
</div>
</div>
);
};
export default HeroMain;
@@ -1,14 +0,0 @@
import { PiHexagonThin } from 'react-icons/pi';
const HeroPic = () => {
return (
<div className="h-full flex items-center justify-center">
<img src="../../public/img/Perfil.jpg" alt="Christian Falcão" className="max-h-[450px] w-auto" />
<div className="absolute -z-10 flex justify-center items-center animate-pulse">
<PiHexagonThin className="md:h-[90%] sm:h-[120%] min-h-[600px] w-auto text-cyan-300 blur-md animate-[spin_20s_linear_infinite]" />
</div>
</div>
);
};
export default HeroPic;
@@ -1,13 +0,0 @@
const HeroText = () => {
return (
<div className="flex flex-col gap-4 h-full justify-center md:text-left sm:text-center">
<h2 className="lg:text-2xl sm:text-xl uppercase text-cyan-300">Full Stack Web Developer</h2>
<h1 className="md:text-[2.8rem] lg:text-6xl sm:text-4xl font-bold font-mono text-orange-300">Christian Falcão</h1>
<p className="text-lg mt-4 text-white">
A passionate Web Developer <br /> with 5+ years of experience
</p>
</div>
);
};
export default HeroText;
-13
View File
@@ -1,13 +0,0 @@
import { LuArrowDownRight } from 'react-icons/lu';
const NavbarBtn = () => {
return (
<button className="px-4 py-2 rounded-full text-xl font-bold text-white border-cyan flex items-center gap-1 bg-gradient-to-r from-cyan-400 to-orange-400 hover:border-orange-300 hover:scale-110 transition-all durantion-500 hover:shadow-cyan">
Hire Me
<div className="sm:hidden md:block">
<LuArrowDownRight />
</div>
</button>
);
};
export default NavbarBtn;
-24
View File
@@ -1,24 +0,0 @@
const links = [
{ Link: 'About Me', Section: 'about' },
{ Link: 'Skills', Section: 'skills' },
{ Link: 'Experience', Section: 'experience' },
{ Link: 'Projects', Section: 'project' },
{ Link: 'Contact', Section: 'contact' },
];
const NavbarLinks = () => {
return (
<ul className="flex gap-6 text-white font-bold text-center lg:flex-row sm:flex-col lg:relative sm:absolute sm:top-[120%] left-[50%] -translate-x-[50%] lg:text-md sm:text-xl sm:bg-cyan-300/30 backdrop-blur-lg lg:bg-black sm:w-full py-4">
{links.map((link, index) => {
return (
<li key={index} className="group">
<a href="#" className="cursor-pointer text-white hover:text-cyan-300 transition-all duration-500">
{link.Link}
</a>
<div className="mx-auto bg-cyan-300 w-0 group-hover:w-full h-[1px] transition-all duration-500"></div>
</li>
);
})}
</ul>
);
};
export default NavbarLinks;
-9
View File
@@ -1,9 +0,0 @@
const NavbarLogo = () => {
return (
<div>
<h1 className="text-white text-2xl sm:hidden md:block">Christian Falcão</h1>
<h1 className="text-white font-mono font-extrabold text-4xl sm:block md:hidden">CH</h1>
</div>
);
};
export default NavbarLogo;
-29
View File
@@ -1,29 +0,0 @@
import { GiHamburgerMenu } from 'react-icons/gi';
import NavbarBtn from './NavbarBtn';
import NavbarLinks from './NavbarLinks';
import NavbarLogo from './NavbarLogo';
import { useState } from 'react';
const NavbarMain = () => {
const [menuOpen, setMenuOpen] = useState(false);
const toggleMenu = () => {
setMenuOpen(!menuOpen);
};
return (
<nav className="max-w-[1300px] mx-auto px-4 w-full fixed left-[50%] -translate-x-[50%] z-20 flex gap-4 mt-2">
<div className="flex justify-between w-full max-w-[1200px] bg-black items-center p-6 rounded-r-full rounded-l-full border-[0.5px] border-orange-50">
<NavbarLogo />
<div className={`${menuOpen ? 'SM:block' : 'sm:hidden'} lg:block`}>
<NavbarLinks />
</div>
<NavbarBtn />
</div>
<div className="flex lg:hidden sm:block p-6 bg-black items-center justify-center rounded-full border-[0.5px] border-orange-300">
<button className="text-2xl p-3 border border-orange-300 rounded-full text-white" onClick={toggleMenu}>
<GiHamburgerMenu />
</button>
</div>
</nav>
);
};
export default NavbarMain;
-19
View File
@@ -1,19 +0,0 @@
@import url('https://fonts.googleapis.com/css2?family=Josefin+Sans:ital,wght@0,100..700;1,100..700&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap');
@import 'tailwindcss';
@theme {
--font-serif: 'Josefin-Sans';
--font-mono: 'Roboto';
--shadow-cyan: 0 0 20px 0 rgba(94, 286, 220, 0.5);
--shadow-cyanmediumshadow: 10px 10px 200px 150px rgba(94, 285, 220, 0.5);
--shadow-orangeMediumShadow: 10px 10px 200px 150px rgba(240, 189, 94, 0.5);
--breakpoint-sm: 350px;
--breakpoint-md: 768px;
--breakpoint-lg: 1024px;
--breakpoint-xl: 1280px;
--breakpoint-2xl: 1536px;
}
body {
@apply bg-amber-950;
}
-10
View File
@@ -1,10 +0,0 @@
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.tsx'
createRoot(document.getElementById('root')!).render(
<StrictMode>
<App />
</StrictMode>,
)
-1
View File
@@ -1 +0,0 @@
/// <reference types="vite/client" />
-27
View File
@@ -1,27 +0,0 @@
{
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
"target": "ES2022",
"useDefineForClassFields": true,
"lib": ["ES2022", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"verbatimModuleSyntax": true,
"moduleDetection": "force",
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"erasableSyntaxOnly": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true
},
"include": ["src"]
}
-7
View File
@@ -1,7 +0,0 @@
{
"files": [],
"references": [
{ "path": "./tsconfig.app.json" },
{ "path": "./tsconfig.node.json" }
]
}
-25
View File
@@ -1,25 +0,0 @@
{
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
"target": "ES2023",
"lib": ["ES2023"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"verbatimModuleSyntax": true,
"moduleDetection": "force",
"noEmit": true,
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"erasableSyntaxOnly": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true
},
"include": ["vite.config.ts"]
}
-8
View File
@@ -1,8 +0,0 @@
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
import tailwindcss from "@tailwindcss/vite";
// https://vite.dev/config/
export default defineConfig({
plugins: [react(), tailwindcss()],
});
-2932
View File
File diff suppressed because it is too large Load Diff
+29
View File
@@ -0,0 +1,29 @@
import js from "@eslint/js";
import globals from "globals";
import reactHooks from "eslint-plugin-react-hooks";
import reactRefresh from "eslint-plugin-react-refresh";
import { defineConfig, globalIgnores } from "eslint/config";
export default defineConfig([
globalIgnores(["dist"]),
{
files: ["**/*.{js,jsx}"],
extends: [
js.configs.recommended,
reactHooks.configs.flat.recommended,
reactRefresh.configs.vite,
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
parserOptions: {
ecmaVersion: "latest",
ecmaFeatures: { jsx: true },
sourceType: "module",
},
},
rules: {
"no-unused-vars": ["error", { varsIgnorePattern: "^[A-Z_]" }],
},
},
]);
+7 -274
View File
@@ -1,281 +1,14 @@
<!DOCTYPE html> <!doctype html>
<html lang="pt-BR"> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="device-width, initial-scale=1.0, maximum-scale=1.0" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta http-equiv="X-UA-compatible" content="ie=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Meu primeiro portifolio" />
<meta name="copyright" content="©2022 Christian do Nascimento Falcao" />
<meta name="author" content="Christian do Nascimento Falcao" />
<title>Christian do Nascimento Falcao</title> <title>Christian do Nascimento Falcao</title>
<link rel="icon" href="./Assets/img/code-solid.svg" />
<link rel="stylesheet" href="Assets/css/style.css" />
<script src="https://kit.fontawesome.com/6ffe26f1f6.js" crossorigin="anonymous" defer></script>
<script src="./Assets/js/index.js" defer></script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-11390833779"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "AW-11390833779");
</script>
<script>
gtag("event", "conversion", { send_to: "AW-11390833779/7Nf9CKjd2_AYEPOoybcq" });
</script>
</head> </head>
<body> <body>
<header id="header"> <div id="root"></div>
<div class="header" id="header_css"> <script type="module" src="/src/main.jsx"></script>
<nav class="Menu_options">
<div class="logo">
<i class="fa-solid fa-code"></i>
<h2 class="stext">Christian</h2>
</div>
<ul>
<li><a href="#home">Home</a></li>
<li><a href="#about_me">Sobre Mim</a></li>
<li><a href="#skills">Habilidades</a></li>
<li><a href="#projects">Projetos</a></li>
<li><a href="#contact" class="button bcontact">Contato</a></li>
</ul>
</nav>
<button class="button" id="menu_bar_button" onclick="toggleDiv()"><i class="fa-solid fa-bars"></i></button>
</div>
<nav class="menu_bar_nav" id="menu_bar_nav">
<ul class="Menu_bar">
<li><a onclick="toggleDiv()" class="button" href="#home">Home</a></li>
<li><a onclick="toggleDiv()" class="button" href="#about_me">Sobre Mim</a></li>
<li><a onclick="toggleDiv()" class="button" href="#skills">Habilidades</a></li>
<li><a onclick="toggleDiv()" class="button" href="#projects">Projetos</a></li>
<li><a onclick="toggleDiv()" class="button" href="#contact">Contato</a></li>
</ul>
</nav>
</header>
<main>
<section class="section_1" id="home">
<div class="conteudo_1">
<div class="text_home">
<div>
<p>Oi, eu sou</p>
<h1>Christian do Nascimento Falcao</h1>
<p>Full-Stack Developer</p>
</div>
<div class="social_icons">
<a href="https://github.com/christiandonf" target="_blank">
<i class="fab fa-github icons" title="GitHub"></i>
</a>
<a href="https://www.linkedin.com/in/christiannfalcao/" target="_blank">
<i class="fab fa-linkedin icons" title="LinkedIn"></i>
</a>
</div>
</div>
<img src="./Assets/img/Perfil.jpg" alt="" class="img_inicio img" />
</div>
</section>
<section class="section_2" id="about_me">
<div class="conteudo_2">
<h2>Sobre mim</h2>
<p>
Olá, meu nome é Christian do Nascimento Falcão e sou um desenvolvedor Full Stack. Seja bem vindo ao
meu portfolio!
</p>
<p>
Tenho experiencia prática em desenvolvimento Web, desde a criação de API REST com AspNet Core em C#
até a criação do front-End com Next.JS, meu foco é construir de forma rápida aplicações para
diversos tipos de serviços, desde uma LandPage até uma solução que depende de escalabilidade como
e-commerce e blogs, tenho experiencias com integração a API REST para consumo de APIs e criar regras
de negócios para sistemas mais complexos.
</p>
<p>
Como freelancer, tenho o prazer de colaborar com empresas e indivíduos para criar sites
que refletem a identidade da marca. Estou sempre empenhado em compreender as necessidades únicas de
cada projeto e entregar resultados personalizados e de alta qualidade.
</p>
<p>
Utilizo as ultimas tecnologias do mercado como JavaScript, Tailwindcss, Next.JS utilziando o
framework Node.js, C# com AspNet Core e Unij para criação de testes unitário, Conteineres como
Docker e Podman usando docker-Compose para deploy de sistemas mais complexos, sou capaz de criar
sistemas sólidos e eficientes. Além disso, tenho experiência em integração de
Banco de dados como Postgree, aplicação de práticas de segurança para proteger os dados dos
usuários.
</p>
<p>
Agradeço por visitar meu portfólio e estou ansioso para trabalhar com você em seu próximo projeto.
</p>
</div>
</section>
<section class="section_3" id="skills">
<h2>Habilidades</h2>
<div class="conteudo_3">
<div class="skill_icon">
<i class="fa-brands fa-html5" title="html5"></i>
<p>HTML5</p>
</div>
<div class="skill_icon">
<i class="fa-brands fa-css3-alt" title="css3"></i>
<p>CSS3</p>
</div>
<div class="skill_icon">
<i class="fa-brands fa-js" title="javascript"></i>
<p>JAVASCRIPT</p>
</div>
<div class="skill_icon">
<i class="fa-brands fa-react" title="react"></i>
<p>REACT</p>
</div>
<div class="skill_icon">
<i class="fa-brands fa-node-js" title="node.js"></i>
<p>NODE.JS</p>
</div>
<div class="skill_icon">
<i class="fa-solid fa-file-code" title="tailwindcss"></i>
<p>TAILWINDCSS</p>
</div>
<div class="skill_icon">
<i class="fa-brands fa-bootstrap" title="bootstrap"></i>
<p>BOOTSTRAP</p>
</div>
<div class="skill_icon">
<i class="fa-brands fa-square-git" title="git"></i>
<p>GIT</p>
</div>
<div class="skill_icon">
<i class="fa-brands fa-github" title="github"></i>
<p>GITHUB</p>
</div>
<div class="skill_icon">
<i class="fa-solid fa-database" title="database"></i>
<p>SQL</p>
</div>
</div>
</section>
<section class="section_4" id="projects">
<h1 class="titulosBrancos titulosCentro">Projetos</h1>
<div class="conteudo_4">
<div class="slot">
<img src="https://www.fazendasaofranciscodeassis.com/favicon.ico" alt="" class="img1" />
<h2>Fazenda São franciso de asis</h2>
<h3>Site Institucional</h3>
<p>
A Fazenda São Francisco de Assis foi fundada em 2015 nas terras férteis do Paraná, Paranagi, com
o propósito de se tornar uma presença significativa no cenário agrícola local. Nos seus
primeiros anos, a fazenda enfrentou os desafios comuns de uma nova empreitada, mas com dedicação
e trabalho árduo, começou a florescer.
</p>
<div class="tech">
<h3>Technologias:</h3>
<span>HTML</span>
<span>CSS</span>
<span>JavaScript</span>
<span>React</span>
<span>PostgresSQL</span>
</div>
<div class="slotbuttons">
<a href="https://www.fazendasaofranciscodeassis.com/" target="_blank" class="button">Home</a>
<a href="https://www.fazendasaofranciscodeassis.com/sobre" target="_blank" class="button">Sobre
Nós</a>
</div>
</div>
<div class="slot">
<img src="https://www.thecomedyhub.com.br/favicon.ico" alt="" class="img1" />
<h2>The Comedy Hub</h2>
<h3>Rede Social</h3>
<p>
Tudo começou com um simples comentário em uma rede social que hoje já não existe mais. Foi ali,
naquele momento, que percebemos o quanto sentíamos falta de um espaço nosso, um lugar onde
pudéssemos nos expressar, compartilhar risadas e criar conexões genuínas. Foi assim que nasceu a
ideia de criar o Comedy Hub, uma rede social feita por pessoas que amam humor, para pessoas que
amam humor.
</p>
<div class="tech">
<h3>Technologias:</h3>
<span>HTML</span>
<span>CSS</span>
<span>TypeScript</span>
<span>Tawilwindcss</span>
<span>Next.JS</span>
<span>Java</span>
<span>SpringBoot</span>
<span>Python</span>
<span>Docker</span>
<span>Flutter</span>
<span>PostgresSQL</span>
<span>MongoDB</span>
</div>
<div class="slotbuttons">
<a href="https://www.thecomedyhub.com.br/" target="_blank" class="button">Home</a>
<a href="https://www.thecomedyhub.com.br/about-us" target="_blank" class="button">Sobre Nós</a>
</div>
</div>
<div class="slot">
<img src="https://stream.nexuswebdigital.com/web/f5bbb798cb2c65908633.png" alt="" class="img1" />
<h2>Jellyfin</h2>
<h3>Self Hosting</h3>
<p>
Jellyfin é um dos serviços que faço "Self Host" como forma de aprender a utilziar toda a suite
de ferramentas para Devops entre outros inumeros serviços que são utilizados para monitoramento
do servidor, como grafanna, caddyvisor, loki, prometheus entre outros os mesmos estão protegidos
por sistema de authenticação de dois fatores pelo Authentik.
</p>
<div class="tech">
<h3>Technologias:</h3>
<span>Nginx</span>
<span>Grafanna</span>
<span>Loki</span>
<span>Prometheus</span>
<span>Docker</span>
<span>Authentik</span>
</div>
<div class="slotbuttons">
<a href="https://stream.nexuswebdigital.com/" target="_blank" class="button">Acesso</a>
</div>
</div>
</div>
</section>
<section class="section_5" id="contact">
<div class="conteudo_5">
<h1 class="titulosBrancos titulosCentro">Contato</h1>
<div class="contatos_icons">
<div class="contatos_icons1">
<a href="mailto:christian.nascimento.falcao@gmail.com" target="_blank"><i
class="fa-regular fa-envelope"></i></a>
<p class="textosBrancos">christian.nascimento.falcao@gmail.com</p>
</div>
<div class="contatos_icons1">
<a href="https://api.whatsapp.com/send?phone=5511999935492" target="_blank"><i
class="fa-brands fa-whatsapp"></i></a>
<p class="textosBrancos">+55-11-999935492</p>
</div>
</div>
</div>
</section>
</main>
<footer>
<p>© Copyright 2022 Christian do Nascimento Falcao</p>
</footer>
TESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTEST
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
</body> </body>
</html> </html>
+3495
View File
File diff suppressed because it is too large Load Diff
+31
View File
@@ -0,0 +1,31 @@
{
"name": "vite-project",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"lint": "eslint .",
"preview": "vite preview"
},
"dependencies": {
"react": "^19.2.4",
"react-dom": "^19.2.4"
},
"devDependencies": {
"@eslint/js": "^9.39.4",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^6.0.1",
"autoprefixer": "^10.4.27",
"eslint": "^9.39.4",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.5.2",
"globals": "^17.4.0",
"postcss": "^8.5.8",
"prettier": "3.8.1",
"tailwindcss": "^3.4.19",
"vite": "^8.0.1"
}
}
+6
View File
@@ -0,0 +1,6 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.3 KiB

+24
View File
@@ -0,0 +1,24 @@
<svg xmlns="http://www.w3.org/2000/svg">
<symbol id="bluesky-icon" viewBox="0 0 16 17">
<g clip-path="url(#bluesky-clip)"><path fill="#08060d" d="M7.75 7.735c-.693-1.348-2.58-3.86-4.334-5.097-1.68-1.187-2.32-.981-2.74-.79C.188 2.065.1 2.812.1 3.251s.241 3.602.398 4.13c.52 1.744 2.367 2.333 4.07 2.145-2.495.37-4.71 1.278-1.805 4.512 3.196 3.309 4.38-.71 4.987-2.746.608 2.036 1.307 5.91 4.93 2.746 2.72-2.746.747-4.143-1.747-4.512 1.702.189 3.55-.4 4.07-2.145.156-.528.397-3.691.397-4.13s-.088-1.186-.575-1.406c-.42-.19-1.06-.395-2.741.79-1.755 1.24-3.64 3.752-4.334 5.099"/></g>
<defs><clipPath id="bluesky-clip"><path fill="#fff" d="M.1.85h15.3v15.3H.1z"/></clipPath></defs>
</symbol>
<symbol id="discord-icon" viewBox="0 0 20 19">
<path fill="#08060d" d="M16.224 3.768a14.5 14.5 0 0 0-3.67-1.153c-.158.286-.343.67-.47.976a13.5 13.5 0 0 0-4.067 0c-.128-.306-.317-.69-.476-.976A14.4 14.4 0 0 0 3.868 3.77C1.546 7.28.916 10.703 1.231 14.077a14.7 14.7 0 0 0 4.5 2.306q.545-.748.965-1.587a9.5 9.5 0 0 1-1.518-.74q.191-.14.372-.293c2.927 1.369 6.107 1.369 8.999 0q.183.152.372.294-.723.437-1.52.74.418.838.963 1.588a14.6 14.6 0 0 0 4.504-2.308c.37-3.911-.63-7.302-2.644-10.309m-9.13 8.234c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.894 0 1.614.82 1.599 1.82.001 1-.705 1.82-1.6 1.82m5.91 0c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.893 0 1.614.82 1.599 1.82 0 1-.706 1.82-1.6 1.82"/>
</symbol>
<symbol id="documentation-icon" viewBox="0 0 21 20">
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="m15.5 13.333 1.533 1.322c.645.555.967.833.967 1.178s-.322.623-.967 1.179L15.5 18.333m-3.333-5-1.534 1.322c-.644.555-.966.833-.966 1.178s.322.623.966 1.179l1.534 1.321"/>
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M17.167 10.836v-4.32c0-1.41 0-2.117-.224-2.68-.359-.906-1.118-1.621-2.08-1.96-.599-.21-1.349-.21-2.848-.21-2.623 0-3.935 0-4.983.369-1.684.591-3.013 1.842-3.641 3.428C3 6.449 3 7.684 3 10.154v2.122c0 2.558 0 3.838.706 4.726q.306.383.713.671c.76.536 1.79.64 3.581.66"/>
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M3 10a2.78 2.78 0 0 1 2.778-2.778c.555 0 1.209.097 1.748-.047.48-.129.854-.503.982-.982.145-.54.048-1.194.048-1.749a2.78 2.78 0 0 1 2.777-2.777"/>
</symbol>
<symbol id="github-icon" viewBox="0 0 19 19">
<path fill="#08060d" fill-rule="evenodd" d="M9.356 1.85C5.05 1.85 1.57 5.356 1.57 9.694a7.84 7.84 0 0 0 5.324 7.44c.387.079.528-.168.528-.376 0-.182-.013-.805-.013-1.454-2.165.467-2.616-.935-2.616-.935-.349-.91-.864-1.143-.864-1.143-.71-.48.051-.48.051-.48.787.051 1.2.805 1.2.805.695 1.194 1.817.857 2.268.649.064-.507.27-.857.49-1.052-1.728-.182-3.545-.857-3.545-3.87 0-.857.31-1.558.8-2.104-.078-.195-.349-1 .077-2.078 0 0 .657-.208 2.14.805a7.5 7.5 0 0 1 1.946-.26c.657 0 1.328.092 1.946.26 1.483-1.013 2.14-.805 2.14-.805.426 1.078.155 1.883.078 2.078.502.546.799 1.247.799 2.104 0 3.013-1.818 3.675-3.558 3.87.284.247.528.714.528 1.454 0 1.052-.012 1.896-.012 2.156 0 .208.142.455.528.377a7.84 7.84 0 0 0 5.324-7.441c.013-4.338-3.48-7.844-7.773-7.844" clip-rule="evenodd"/>
</symbol>
<symbol id="social-icon" viewBox="0 0 20 20">
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M12.5 6.667a4.167 4.167 0 1 0-8.334 0 4.167 4.167 0 0 0 8.334 0"/>
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M2.5 16.667a5.833 5.833 0 0 1 8.75-5.053m3.837.474.513 1.035c.07.144.257.282.414.309l.93.155c.596.1.736.536.307.965l-.723.73a.64.64 0 0 0-.152.531l.207.903c.164.715-.213.991-.84.618l-.872-.52a.63.63 0 0 0-.577 0l-.872.52c-.624.373-1.003.094-.84-.618l.207-.903a.64.64 0 0 0-.152-.532l-.723-.729c-.426-.43-.289-.864.306-.964l.93-.156a.64.64 0 0 0 .412-.31l.513-1.034c.28-.562.735-.562 1.012 0"/>
</symbol>
<symbol id="x-icon" viewBox="0 0 19 19">
<path fill="#08060d" fill-rule="evenodd" d="M1.893 1.98c.052.072 1.245 1.769 2.653 3.77l2.892 4.114c.183.261.333.48.333.486s-.068.089-.152.183l-.522.593-.765.867-3.597 4.087c-.375.426-.734.834-.798.905a1 1 0 0 0-.118.148c0 .01.236.017.664.017h.663l.729-.83c.4-.457.796-.906.879-.999a692 692 0 0 0 1.794-2.038c.034-.037.301-.34.594-.675l.551-.624.345-.392a7 7 0 0 1 .34-.374c.006 0 .93 1.306 2.052 2.903l2.084 2.965.045.063h2.275c1.87 0 2.273-.003 2.266-.021-.008-.02-1.098-1.572-3.894-5.547-2.013-2.862-2.28-3.246-2.273-3.266.008-.019.282-.332 2.085-2.38l2-2.274 1.567-1.782c.022-.028-.016-.03-.65-.03h-.674l-.3.342a871 871 0 0 1-1.782 2.025c-.067.075-.405.458-.75.852a100 100 0 0 1-.803.91c-.148.172-.299.344-.99 1.127-.304.343-.32.358-.345.327-.015-.019-.904-1.282-1.976-2.808L6.365 1.85H1.8zm1.782.91 8.078 11.294c.772 1.08 1.413 1.973 1.425 1.984.016.017.241.02 1.05.017l1.03-.004-2.694-3.766L7.796 5.75 5.722 2.852l-1.039-.004-1.039-.004z" clip-rule="evenodd"/>
</symbol>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

+4
View File
@@ -0,0 +1,4 @@
function App() {
return <></>;
}
export default App;
Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.5 KiB

+3
View File
@@ -0,0 +1,3 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
+10
View File
@@ -0,0 +1,10 @@
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import App from "./App.jsx";
import "./index.css";
createRoot(document.getElementById("root")).render(
<StrictMode>
<App />
</StrictMode>,
);
+5
View File
@@ -0,0 +1,5 @@
/** @type {import('tailwindcss').Config} */
export default {
content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
plugins: [],
};
+11
View File
@@ -0,0 +1,11 @@
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
// https://vite.dev/config/
export default defineConfig({
plugins: [react()],
build: {
outDir: "../Sites/PortfolioProd",
emptyOutDir: true,
},
});