Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
7b65d89
feat: install and configure ESLint
Oct 25, 2025
0635a7b
feat: convert all CSS to SCSS and fix layout issues
Oct 25, 2025
dbd3078
Merge pull request #6 from JaegerCaiser/feature/fix-layout
JaegerCaiser Oct 25, 2025
be6f5e3
feat: adiciona animação de scroll contínuo na imagem de perfil
Oct 25, 2025
058b4ff
feat: ajusta e otimiza animação de scroll da imagem de perfil
Oct 25, 2025
63ad298
Merge pull request #7 from JaegerCaiser/feature/profile-image-animation
JaegerCaiser Oct 25, 2025
248e889
fix: desabilita ESLint plugin no build para compatibilidade com react…
Oct 25, 2025
c8f8286
Merge pull request #8 from JaegerCaiser/fix/eslint-build-compatibility
JaegerCaiser Oct 25, 2025
8d27785
feat: Resolve profile animation issues and add fadeIn effect (#10)
JaegerCaiser Oct 25, 2025
9143344
🚀 feat: Complete portfolio modernization - Vite migration, performanc…
JaegerCaiser Oct 29, 2025
f66cb65
🚀 Release: Animação de Profile Image + Melhorias de CSS e Build (#9) …
JaegerCaiser Oct 29, 2025
6c808a6
🚀 Release: Animação de Profile Image + Melhorias de CSS e Build (#9) …
JaegerCaiser Oct 29, 2025
eefaa45
Fix: Sync main into develop (#17)
JaegerCaiser Oct 29, 2025
98cb632
Feat: Replace React logo with mustache icon (#18)
JaegerCaiser Oct 29, 2025
79ec672
feat: Remove personal interests from about section (#19)
JaegerCaiser Oct 29, 2025
0600e56
feat(seo): improve on-page SEO and crawlability (#20)
JaegerCaiser Oct 29, 2025
dc20c11
Expand Animated Background to Full Site with Hero-Only Interaction (#21)
JaegerCaiser Oct 30, 2025
b76009c
Add Vercel Preview Deployment workflow (#22)
JaegerCaiser Oct 30, 2025
9e242fa
Add Vercel Preview Deployment workflow (#23)
JaegerCaiser Oct 30, 2025
b20f4e5
ci: removed git deployment off and improved production workflow (#24)
JaegerCaiser Oct 30, 2025
60b3308
ci: disable Vercel git deployment integration (#25)
JaegerCaiser Oct 30, 2025
0167b6a
ci: removed property
JaegerCaiser Oct 30, 2025
405dc7c
ci: update production workflow and disable Vercel git deployment (#26)
JaegerCaiser Oct 30, 2025
52708fc
Merge pull request #27 from JaegerCaiser/feature/ci-definition
JaegerCaiser Oct 30, 2025
738d181
Merge branch 'main' into release/v1.0.0
JaegerCaiser Oct 30, 2025
5a3124f
chore: pnpm-lock updated
JaegerCaiser Oct 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
126 changes: 126 additions & 0 deletions .github/workflows/preview.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
name: Vercel Preview Deployment

env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}

on:
pull_request:
types: [opened, synchronize, reopened]

jobs:
test-and-lint:
name: Test & Lint
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [22.x]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: "pnpm"
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run linter
run: pnpm run lint
- name: Run tests
run: pnpm run test:ci

deploy-preview:
name: Deploy Preview and Update GitHub Status
needs: test-and-lint
runs-on: ubuntu-latest
# Define o ambiente para o job
environment:
name: Preview
# A URL será preenchida dinamicamente
url: ${{ steps.deploy_step.outputs.preview_url }}

# Permissão necessária para criar e atualizar deployments
permissions:
deployments: write
pull-requests: write # Para o comentário

steps:
# --- FASE 1: CRIAR O DEPLOYMENT NO GITHUB (STATUS "PENDING") ---
- name: Create GitHub Deployment
id: create_deployment
uses: actions/github-script@v7
with:
script: |
const { data: deployment } = await github.rest.repos.createDeployment({
owner: context.repo.owner,
repo: context.repo.repo,
ref: context.sha,
environment: 'preview',
transient_environment: true,
description: 'Deploying Preview from PR'
});
core.setOutput('deployment_id', deployment.id);

- name: Checkout code
uses: actions/checkout@v4

- name: Install Vercel CLI
run: npm install --global vercel@latest

- name: Pull Vercel Environment Information
run: vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }}

- name: Build Project Artifacts
run: vercel build --token=${{ secrets.VERCEL_TOKEN }}

# --- FASE 2: EXECUTAR O DEPLOY NA VERCEL ---
- name: Deploy to Vercel and Capture URL
id: deploy_step
run: echo "preview_url=$(vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }})" >> $GITHUB_OUTPUT

- name: Find Previous Comment
uses: peter-evans/find-comment@v3
id: find_comment
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: "github-actions[bot]"
body-includes: "🚀 Vercel Preview Deployment"

- name: Create or Update PR Comment
uses: peter-evans/create-or-update-comment@v5
with:
comment-id: ${{ steps.find_comment.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body: |
### 🚀 Vercel Preview Deployment
A pré-visualização para este PR foi atualizada.

| Recurso | Link |
|---|---|
| **🔗 URL de Preview** | [URL de Preview](${{ steps.deploy_step.outputs.preview_url }}) |
| **📜 Logs do Deploy** | [Ver logs da Action](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) |

---
*Commit: `${{ github.event.pull_request.head.sha }}`*
edit-mode: replace

# --- FASE 3: ATUALIZAR O STATUS FINAL DO DEPLOYMENT (SUCESSO OU FALHA) ---
- name: Update GitHub Deployment Status
# if: always() garante que este passo rode mesmo se o deploy falhar
if: always()
uses: actions/github-script@v7
with:
script: |
const finalState = '${{ job.status }}' === 'success'? 'success' : 'failure';
await github.rest.repos.createDeploymentStatus({
owner: context.repo.owner,
repo: context.repo.repo,
deployment_id: ${{ steps.create_deployment.outputs.deployment_id }},
state: finalState,
environment_url: '${{ steps.deploy_step.outputs.preview_url }}'
});
151 changes: 151 additions & 0 deletions .github/workflows/production.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
name: Vercel Environment Deployment and Tagging

env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}

on:
push:
branches:
- main
- develop

jobs:
test-and-lint:
name: Test & Lint
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [22.x]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: "pnpm"
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run linter
run: pnpm run lint
- name: Run tests
run: pnpm run test:ci

deploy-environment:
name: Deploy to Environment
needs: test-and-lint
runs-on: ubuntu-latest
# Define o ambiente dinamicamente com base na branch
environment:
name: ${{ github.ref == 'refs/heads/main' && 'Production' || 'Develop' }}
url: ${{ steps.deploy_step.outputs.deployment_url }}

permissions:
deployments: write
contents: read # Para o checkout

steps:
# --- FASE 1: CRIAR O DEPLOYMENT NO GITHUB (STATUS "PENDING") ---
- name: Create GitHub Deployment
id: create_deployment
uses: actions/github-script@v7
with:
script: |
const environment = context.ref === 'refs/heads/main'? 'Production' : 'Develop';
const { data: deployment } = await github.rest.repos.createDeployment({
owner: context.repo.owner,
repo: context.repo.repo,
ref: context.ref,
environment: environment,
auto_merge: false,
production_environment: environment === 'Production',
required_contexts: []
});
core.setOutput('deployment_id', deployment.id);

- name: Checkout code
uses: actions/checkout@v4

- name: Install Vercel CLI
run: npm install --global vercel@latest

- name: Pull Vercel Environment Information
run: |
if [ "${{ github.ref }}" == "refs/heads/main" ]; then
vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}
else
vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }}
fi

- name: Build Project Artifacts
run: |
if [ "${{ github.ref }}" == "refs/heads/main" ]; then
vercel build --prod --token=${{ secrets.VERCEL_TOKEN }}
else
vercel build --token=${{ secrets.VERCEL_TOKEN }}
fi

# --- FASE 2: EXECUTAR O DEPLOY NA VERCEL ---
- name: Deploy to Vercel and Capture URL
id: deploy_step
run: |
if [ "${{ github.ref }}" == "refs/heads/main" ]; then
echo "deployment_url=https://$(vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }})" >> $GITHUB_OUTPUT
else
echo "deployment_url=https://$(vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }})" >> $GITHUB_OUTPUT
fi

# --- FASE 3: ATUALIZAR O STATUS FINAL DO DEPLOYMENT (SUCESSO OU FALHA) ---
- name: Update GitHub Deployment Status
if: always()
uses: actions/github-script@v7
with:
script: |
const finalState = '${{ job.status }}' === 'success'? 'success' : 'failure';
await github.rest.repos.createDeploymentStatus({
owner: context.repo.owner,
repo: context.repo.repo,
deployment_id: ${{ steps.create_deployment.outputs.deployment_id }},
state: finalState,
environment_url: '${{ steps.deploy_step.outputs.deployment_url }}'
});

tag-release:
name: Tag Release
needs: deploy-environment
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
# Seu job de tag-release continua o mesmo, sem alterações
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get version from package.json
id: get_version
run: |
VERSION=$(node -p "require('./package.json').version")
echo "TAG_VERSION=v$VERSION" >> $GITHUB_ENV
- name: Check if tag already exists
run: |
if git rev-parse "refs/tags/${{ env.TAG_VERSION }}" >/dev/null 2>&1; then
echo "Tag ${{ env.TAG_VERSION }} already exists. Skipping..."
echo "SKIP_TAG=true" >> $GITHUB_ENV
else
echo "Tag ${{ env.TAG_VERSION }} does not exist. Proceeding..."
echo "SKIP_TAG=false" >> $GITHUB_ENV
fi
- name: Create and Push Tag
if: env.SKIP_TAG == 'false'
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git tag ${{ env.TAG_VERSION }} -m "Release ${{ env.TAG_VERSION }}"
git push origin ${{ env.TAG_VERSION }}
32 changes: 28 additions & 4 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,12 +1,36 @@
<!doctype html>
<html lang="en">
<html lang="pt-BR">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#0a192f" />
<meta name="description" content="Full Stack Web Developer - Portfolio" />
<link rel="icon" href="favicon.ico" />
<title>Matheus Caiser • Full Stack Developer</title>
<title>Matheus Caiser • Desenvolvedor Full Stack</title>
<meta
name="description"
content="Portfólio de Matheus Caiser, desenvolvedor web Full Stack especialista em criar soluções modernas e performáticas com React, Node.js, TypeScript e outras tecnologias de ponta."
/>

<!-- Open Graph / Facebook -->
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.mrdeveloper.com.br/" />
<meta property="og:title" content="Matheus Caiser • Desenvolvedor Full Stack" />
<meta
property="og:description"
content="Portfólio de Matheus Caiser, desenvolvedor web Full Stack especialista em criar soluções modernas e performáticas com React, Node.js, TypeScript e outras tecnologias de ponta."
/>
<meta property="og:image" content="https://www.mrdeveloper.com.br/src/logo.svg" />

<!-- Twitter -->
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:url" content="https://www.mrdeveloper.com.br/" />
<meta property="twitter:title" content="Matheus Caiser • Desenvolvedor Full Stack" />
<meta
property="twitter:description"
content="Portfólio de Matheus Caiser, desenvolvedor web Full Stack especialista em criar soluções modernas e performáticas com React,Node.js, TypeScript e outras tecnologias de ponta."
/>
<meta property="twitter:image" content="https://www.mrdeveloper.com.br/src/logo.svg" />

<link rel="icon" type="image/svg+xml" href="/src/logo.svg" />
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand Down Expand Up @@ -46,6 +47,7 @@
"sass": "^1.93.2",
"typescript": "^5.9.3",
"typescript-eslint": "^8.46.2",
"vercel": "^34.2.0",
"vite": "^7.1.12"
}
}
Loading