diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 59a4713..5f42982 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,28 +58,17 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - - name: Setup pnpm - uses: pnpm/action-setup@v4 - with: - version: 10 + - name: Install Vercel CLI + run: npm install --global vercel@latest - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "22.x" - cache: "pnpm" + - name: Pull Vercel Environment Information + run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }} - - name: Install dependencies - run: pnpm install --frozen-lockfile + - name: Build Project Artifacts + run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }} - - name: Deploy to Vercel (Production) - env: - VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} - VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} - run: | - pnpm vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }} - pnpm vercel build --prod --token=${{ secrets.VERCEL_TOKEN }} - pnpm vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }} + - name: Deploy Project Artifacts to Vercel + run: vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }} # ----------------------------------------------------------------- # JOB 3: Deploy de Preview @@ -98,28 +87,43 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - - name: Setup pnpm - uses: pnpm/action-setup@v4 - with: - version: 10 + - name: Install Vercel CLI + run: npm install --global vercel@latest - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "22.x" - cache: "pnpm" + - name: Pull Vercel Environment Information + run: vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} - - name: Install dependencies - run: pnpm install --frozen-lockfile + - name: Build Project Artifacts + run: vercel build --token=${{ secrets.VERCEL_TOKEN }} + + - name: Deploy Project Artifacts to Vercel + run: vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }} + + - name: Get Repo ID + if: github.event_name == 'pull_request' + run: | + REPO_ID=$(curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }} | jq -r .id) + echo "REPO_ID=$REPO_ID" >> $GITHUB_ENV - - name: Deploy to Vercel (Preview) - env: - VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} - VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} + - name: Notify Vercel for PR Comment (if PR) + if: github.event_name == 'pull_request' run: | - pnpm vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} - pnpm vercel build --token=${{ secrets.VERCEL_TOKEN }} - pnpm vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }} + curl -X POST "https://api.vercel.com/v13/deployments" \ + -H "Authorization: Bearer ${{ secrets.VERCEL_TOKEN }}" \ + -H "Content-Type: application/json" \ + -d '{ + "name": "mrdeveloper", + "source": "cli", + "gitSource": { + "type": "github", + "repo": "${{ github.repository }}", + "ref": "${{ github.head_ref }}", + "sha": "${{ github.sha }}", + "repoId": ${{ env.REPO_ID }} + } + }' + + # ----------------------------------------------------------------- # JOB 4: Criar Tag de Versão (Sem mudanças) diff --git a/index.html b/index.html index 4e81603..60a6e97 100644 --- a/index.html +++ b/index.html @@ -1,12 +1,36 @@ - + - + Matheus Caiser • Desenvolvedor Full Stack + + + + + + + + + + + + + + + + - Matheus Caiser • Full Stack Developer diff --git a/package.json b/package.json index 3762a3e..b09a98e 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "lucide-react": "^0.548.0", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-helmet-async": "^2.0.5", "web-vitals": "^2.1.4" }, "scripts": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3fa2ea2..1a21d0b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: react-dom: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) + react-helmet-async: + specifier: ^2.0.5 + version: 2.0.5(react@18.3.1) web-vitals: specifier: ^2.1.4 version: 2.1.4 @@ -1632,6 +1635,9 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + is-array-buffer@3.0.5: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} @@ -2119,6 +2125,14 @@ packages: peerDependencies: react: ^18.3.1 + react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + + react-helmet-async@2.0.5: + resolution: {integrity: sha512-rYUYHeus+i27MvFE+Jaa4WsyBKGkL6qVgbJvSBoX8mbsWoABJXdEO0bZyi0F6i+4f0NuIb8AvqPMj3iXFHkMwg==} + peerDependencies: + react: ^16.6.0 || ^17.0.0 || ^18.0.0 + react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -2241,6 +2255,9 @@ packages: setprototypeof@1.1.1: resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} + shallowequal@1.1.0: + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4306,6 +4323,10 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 + invariant@2.2.4: + dependencies: + loose-envify: 1.4.0 + is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 @@ -4769,6 +4790,15 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 + react-fast-compare@3.2.2: {} + + react-helmet-async@2.0.5(react@18.3.1): + dependencies: + invariant: 2.2.4 + react: 18.3.1 + react-fast-compare: 3.2.2 + shallowequal: 1.1.0 + react-is@16.13.1: {} react-refresh@0.18.0: {} @@ -4928,6 +4958,8 @@ snapshots: setprototypeof@1.1.1: {} + shallowequal@1.1.0: {} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 diff --git a/src/main.tsx b/src/main.tsx index 74e7555..035793f 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,5 +1,6 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; +import { HelmetProvider } from 'react-helmet-async'; import "./index.scss"; import App from './App'; import reportWebVitals from './reportWebVitals'; @@ -9,7 +10,9 @@ const root = ReactDOM.createRoot( ); root.render( - + + + ); diff --git a/src/sections/About.tsx b/src/sections/About.tsx index 2b5c8be..6c059da 100644 --- a/src/sections/About.tsx +++ b/src/sections/About.tsx @@ -1,3 +1,4 @@ +import { Helmet } from "react-helmet-async"; import "./About.scss"; import profileImage from "../assets/profile.png"; import SkillItem from "../components/SkillItem"; @@ -5,18 +6,25 @@ import SkillItem from "../components/SkillItem"; const About: React.FC = () => { return (
+ + Sobre Mim • Matheus Caiser + +

About

Profile picture

- Dynamic and seasoned Full Stack Developer with over 8 years of + Dynamic and seasoned Full Stack Developer with over 13 years of comprehensive experience in web development and software engineering. Proficient in an array of modern technologies including React, React Native, Node.js, Golang, Linux, and Docker. Known for a diff --git a/src/sections/Contact.tsx b/src/sections/Contact.tsx index 196523b..94ad137 100644 --- a/src/sections/Contact.tsx +++ b/src/sections/Contact.tsx @@ -1,4 +1,5 @@ import { useState, useCallback, useMemo } from "react"; +import { Helmet } from "react-helmet-async"; import "./Contact.scss"; const Contact: React.FC = () => { @@ -109,6 +110,13 @@ const Contact: React.FC = () => { return (

+ + Contato • Matheus Caiser + +

Contact

Have a question or want to work together? Leave your details and diff --git a/src/sections/Experience.tsx b/src/sections/Experience.tsx index d73dacf..8e9d17e 100644 --- a/src/sections/Experience.tsx +++ b/src/sections/Experience.tsx @@ -1,4 +1,5 @@ import React, { memo, useMemo } from "react"; +import { Helmet } from "react-helmet-async"; import "./Experience.scss"; import { experienceData, ExperienceItem } from "./experienceData"; @@ -64,6 +65,13 @@ const Experience: React.FC = memo(() => { itemScope itemType="https://schema.org/ItemList" > + + Experiência • Matheus Caiser + +

Experience

{ return (
+ + Matheus Caiser • Desenvolvedor Full Stack + +