Este é o um portfólio feito com React. Ele foi desenvolvido para o conteúdo da Master Class #012 da Dev Samurai.
Um portfólio é importante para que você possa se diferenciar dos demais desenvolvedores. Ele é uma forma de você mostrar o que você sabe fazer, o que você já fez e o que você está fazendo.
Por isso, um portfólio é "vivo", você precisa constantemente atualizá-lo com os seus novos projetos e novas habilidades.
Em 2023, mais do que nunca, um Dev precisa de um portfólio! Já que o mercado está ficando cada vez mais competitivo e exigente.
O "pessoal do RH" já não tem mais tempo para ficar lendo currículos e muito menos para ficar analisando o seu GitHub. Eles precisam de algo mais rápido e objetivo, e é aí que entra o seu portfólio.
Esse pessoal possuem metas e precisam "bater o olho" e saber "de cara", em poucos segundos, o que você faz, e como faz melhor que o seu competidor.
Ainda mais se você é um iniciante! Já que você não tem muita experiência para colocar no currículo, e nem muitos projetos para mostrar no GitHub.
Portanto, um portfólio é importante se você deseja se destacar (positivamente) no mercado de trabalho.
Um portfólio para Dev Júnior deve conter as seguintes sessões:
- Banner: com uma foto sua e uma breve descrição sobre você.
- Sobre: com uma descrição mais detalhada.
- Serviços: com os 3 serviços principais que você oferece.
- Skills: com as suas habilidades técnicas e formações.
- Projetos: com os seus principais projetos.
- Testemunhos: com depoimentos de clientes e/ou colegas de trabalho.
- Contato: com um formulário de contato e/ou links para as suas redes sociais.
Além disso o seu portfólio deve possuir um design responsivo e bonito, ou seja, que se adapte a qualquer tamanho de tela. E principalmente que seja fácil de navegar e rápido de carregar.
Esta é uma aplicação React que utiliza o Vite como bundler e o TailwindCSS como framework CSS.
Acesse o diretório do projeto e execute o comando:
npm install
npm preview- Criar o projeto com o Vite
- Instalar e configurar o TailwindCSS
- Criar as sessões da página Home
- Criando cada sessão/componente
- Adicionando o serviço de envio de mensagens
- Deploy da aplicação
Para criar o projeto, vamos utilizar o Vite, um bundler extremamente rápido e simples de configurar.
npm create vite@latestE depois escolher as seguintes opções:
? Project name: › react-3d-portfolio? Select a framework: › React? Select a variant: › TypeScript
Referências:
Para instalar o TailwindCSS, vamos utilizar o PostCSS, um processador de CSS que nos permite utilizar plugins para transformar nosso CSS.
npm install -D tailwindcss postcss autoprefixer tailwind-styled-components
npx tailwindcss init -pNa sequência, vamos ajustar o arquivo tailwind.config.js com o seguinte conteúdo:
/** @type {import('tailwindcss').Config} */
export default {
content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"], // adicionar isso...
theme: {
extend: {},
},
plugins: [],
}E adicionar os plugins Prettier para o TailwindCSS:
npm install -D prettier prettier-plugin-tailwindcss eslint-plugin-prettierE ajustar o arquivo .eslintrc.cjs com o seguinte conteúdo:
module.exports = {
env: { browser: true, es2020: true },
extends: [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:react-hooks/recommended",
// adicionando o prettier...
"prettier-plugin-tailwindcss",
"plugin:prettier/recommended",
"prettier",
],
parser: "@typescript-eslint/parser",
parserOptions: { ecmaVersion: "latest", sourceType: "module" },
plugins: ["react-refresh"],
rules: {
"react-refresh/only-export-components": "warn",
},
}E também, vamos abrir o arquivo ./src/index.css e substituir todo o conteúdo por isso:
@tailwind base;
@tailwind components;
@tailwind utilities;Como já temos o TailWindCSS instalado e configurado no nosso projeto. Agora precisamos remover o conteúdo atual da página ./src/App.tsx e substituir por um teste simples:
import tw from "tailwind-styled-components"
const Title = tw.h1`
text-3xl font-bold underline
`
function App() {
return <Title>Hello world!</Title>
}
export default AppComo não precisaremos mais do arquivo ./src/App.css, podemos removê-lo.
E finalmente vamos executar o projeto com o comando:
npm run devE abrir o endereço http://localhost:5173/ no navegador:
Referências:
Nesta etapa iremos criar todas as sessões/componentes da página Home em seu estado inicial.
- About:
./components/About.tsx - Contact:
./components/Contact.tsx - Footer:
./components/Footer.tsx - Hero:
./components/Hero.tsx - Projects:
./components/Projects.tsx - Services:
./components/Services.tsx - Skills:
./components/Skills.tsx - Testimonials:
./components/Testimonials.tsx
Inicialmente cada sessão conterá apenas um título, por exemplo:
export default function Hero() {
return (<h1>Hero</h1>)
}E com isso adicionamos todas as sessões na página Home:
import About from "./components/About"
import Contact from "./components/Contact"
import Footer from "./components/Footer"
import Hero from "./components/Hero"
import Projects from "./components/Projects"
import Services from "./components/Services"
import Skills from "./components/Skills"
import Testimonials from "./components/Testimonials"
function App() {
return (
<>
<main>
<Hero />
<About />
<Services />
<Projects />
<Skills />
<Testimonials />
<Contact />
</main>
<footer>
<Footer />
</footer>
</>
)
}
export default AppDessa forma já temos todas as sessões/componentes da página Home criadas e estamos prontos para iniciar a criação de cada uma.
Chegou o momento de criamos cada sessão do nosso site, para isso vamos utilizar o TailwindCSS para nos ajudar com os estilos e estilizar cada uma para que possamos ter a seguinte aparência final.
Você pode consultar cada componente para que entenda como foi feito, mas não se preocupe, pois explicamos cada detalhe no vídeo.
Para o envio de mensagens vamos utilizar o EmailJS, que é um serviço gratuito de envio de formulários.
Para isso, vamos instalar o pacote @emailjs/browser:
npm install @emailjs/browserE depois ajustar o nosso componente Contact com o seguinte conteúdo:
const sendEmail = (event: FormEvent<HTMLFormElement>) => {
event.preventDefault()
if (!form.current) return
setLoading(true)
emailjs
.sendForm(
"<service id>",
"<template id>",
form.current,
"<public key>"
)
.then(
() => {
setSuccess(true)
setLoading(false)
},
(error) => {
setError(true)
setLoading(false)
console.error(error)
}
)
}Para realizar o deploy da aplicação, vamos utilizar o GitHub Pages, que é um serviço gratuito de hospedagem de sites estáticos.
Para isso, vamos instalar o pacote gh-pages:
npm install -D gh-pagesE adicionar os seguintes scripts no arquivo package.json:
{
"scripts": {
"predeploy": "npm run build",
"deploy": "gh-pages -d dist",
}
}Em seguida vamos configurar o arquivo vite.config.ts com o seguinte conteúdo:
import react from "@vitejs/plugin-react"
import { defineConfig } from "vite"
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
base: "/<nome do seu repo>/", // <-- adicionar isso
})Para que possamos habilitar o deploy da aplicação, precisamos criar um repositório público no GitHub com um nome sugestivo: portfolio.
E então, vamos adicionar o repositório remoto:
git remote add origin https://github.com/<nome do seu usuario>/<nome do seu repo>.git
git commit -m "Initial commit"
git push -u origin mainPor fim, executar o comando de build e deploy:
npm run deployE finalmente acessar o endereço https://<nome do seu usuário>.github.io/<nome do seu repo>.
No meu caso: https://felipefontoura.github.io/react-portfolio/
Referências:

