🚀 PROJETO PRÁTICO · PARTE 2

Construa e publique
seu primeiro site

Um guia completo do zero ao ar — aprenda criando um portfólio pessoal real usando 8 ferramentas essenciais.

HTML
CSS
JavaScript
VSCode
Terminal
Git
GitHub
SQL
1
Escrever o HTMLEstrutura da página de portfólio
HTML
2
Estilizar com CSSVisual, fontes, cores, layout responsivo
CSS
3
Adicionar JavaScriptMenu mobile, animações, interações
JS
4
Configurar VSCodeEditor profissional com extensões
VSCode
5
Usar o TerminalCriar pastas e arquivos sem mouse
Terminal
6
Versionar com GitSalvar histórico de mudanças
Git
7
Enviar ao GitHubRepositório remoto na nuvem
GitHub
8
Publicar onlineGitHub Pages — site gratuito no ar
Deploy
01
🟠

Estrutura HTML

HTML · Esqueleto da página

O HTML é a fundação de tudo. Vamos criar um portfólio pessoal com seções: cabeçalho, sobre mim, projetos e contato. Cada elemento HTML tem um significado semântico — usamos as tags certas para cada conteúdo.

Primeiro, entenda a estrutura de arquivos do projeto:

📁 meu-portfolio/
  📄 index.html ← página principal
  📄 style.css  ← estilos visuais
  📄 script.js  ← interatividade
  📁 imagens/  ← fotos e ícones

Agora o código completo do index.html. Edite as informações pessoais e clique em ▶ Visualizar:

index.html — edite e visualize ao vivo
💡 Dica profissional Use tags semânticas como <header>, <main>, <section> e <footer> — elas melhoram acessibilidade e SEO.
02
🎨

Estilos com CSS

CSS · Visual e responsividade

O CSS transforma o HTML cru em algo visualmente atraente. Vamos criar um style.css separado — mantendo o HTML limpo e o CSS organizado. Os pontos-chave são: variáveis CSS, Flexbox, Grid e Media Queries.

style.css
/* ── Variáveis globais ── */
:root {
  --cor-fundo:    #0f172a;
  --cor-painel:   #1e293b;
  --cor-destaque: #38bdf8;
  --cor-texto:    #e2e8f0;
  --cor-muted:    #64748b;
  --raio:         12px;
  --sombra:       0 4px 24px rgba(0,0,0,0.3);
}

/* ── Reset e base ── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

body {
  font-family:       'Segoe UI', system-ui, sans-serif;
  background-color: var(--cor-fundo);
  color:             var(--cor-texto);
  line-height:       1.7;
}

/* ── Header fixo ── */
header {
  position:   sticky;
  top:        0;
  background: var(--cor-painel);
  padding:    16px 40px;
  display:    flex;
  justify-content: space-between;
  align-items: center;
  z-index:    100;
  box-shadow: var(--sombra);
}

/* ── Grid de projetos ── */
.grid-projetos {
  display:               grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap:                   20px;
}

/* ── Responsivo ── */
@media (max-width: 640px) {
  header    { padding: 14px 20px; }
  .hero h2 { font-size: 1.8rem; }
  nav       { display: none; }
  nav.aberto{ display: flex; flex-direction: column; }
}
Variáveis CSS

Use --nome: valor no :root para criar um sistema de design consistente — mude uma variável e atualiza tudo.

Flexbox vs Grid

Flexbox para linhas de itens (nav, botões). Grid para layouts bidimensionais (cards, galerias).

Mobile First

Escreva o CSS para telas pequenas primeiro. Use @media (min-width) para expandir para desktop.

Transições

transition: all 0.2s ease em botões e links torna a interface muito mais fluida e profissional.

03

Interatividade com JS

JavaScript · Vida à página

Com JavaScript adicionamos comportamentos dinâmicos: menu hambúrguer para mobile, animação de scroll, modo claro/escuro e formulário de contato com validação.

script.js
// ── Menu hambúrguer para mobile ──
const btn = document.getElementById('menu-btn');
const nav = document.getElementById('menu');

btn.addEventListener('click', () => {
  nav.classList.toggle('aberto');
  btn.textContent = nav.classList.contains('aberto') ? '✕' : '☰';
});

// ── Animação ao rolar (Intersection Observer) ──
const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      entry.target.classList.add('visivel');
    }
  });
}, { threshold: 0.15 });

document.querySelectorAll('.card').forEach(el => observer.observe(el));

// ── Modo escuro / claro ──
const temaBtn = document.getElementById('tema-btn');
temaBtn.addEventListener('click', () => {
  document.body.classList.toggle('claro');
  temaBtn.textContent = document.body.classList.contains('claro') ? '🌙' : '☀️';
  localStorage.setItem('tema', document.body.classList.contains('claro') ? 'claro' : 'escuro');
});

// ── Validação do formulário de contato ──
const form = document.getElementById('contato-form');
form.addEventListener('submit', (e) => {
  e.preventDefault();
  const email = form.querySelector('[name="email"]').value;
  if (!email.includes('@')) {
    alert('E-mail inválido!');
    return;
  }
  alert('Mensagem enviada! ✅');
  form.reset();
});
💡 Intersection Observer É uma API moderna do navegador que detecta quando um elemento entra na tela — perfeita para animações de scroll sem prejudicar performance.
04
💙

Configurando o VSCode

VSCode · Ambiente profissional

Antes de continuar codificando, configure o VSCode para máxima produtividade. Com as extensões certas, o editor detecta erros, formata código e até pré-visualiza o site em tempo real.

Baixe o VSCodecode.visualstudio.com — gratuito para todos os sistemas
Instale: Live ServerRecarrega o navegador automaticamente ao salvar o arquivo
Instale: PrettierFormata seu código automaticamente ao salvar
Instale: HTML CSS SupportAutocomplete de classes CSS dentro do HTML
Abra a pasta do projetoFile → Open Folder → selecione meu-portfolio/

Configure o Prettier para formatar ao salvar — adicione ao settings.json do VSCode:

.vscode/settings.json
{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.tabSize": 2,
  "editor.wordWrap": "on",
  "liveServer.settings.donotShowInfoMsg": true,
  "emmet.includeLanguages": {
    "javascript": "javascriptreact"
  }
}
⚡ Atalho mágico: Emmet No VSCode, digite ! e pressione Tab dentro de um arquivo .html — ele gera toda a estrutura base automaticamente!
05
⚙️

Terminal — criar o projeto

Terminal · Controle total

Criamos o projeto inteiro pelo terminal — sem clicar em nada. Abra o terminal integrado do VSCode com Ctrl + ` e execute os comandos abaixo:

terminal (bash / zsh / PowerShell)
# 1. Navegar até onde quer criar o projeto
cd ~/Documentos

# 2. Criar a pasta do projeto
mkdir meu-portfolio

# 3. Entrar na pasta
cd meu-portfolio

# 4. Criar os arquivos de uma vez
touch index.html style.css script.js

# 5. Criar pasta para imagens
mkdir imagens

# 6. Confirmar que tudo foi criado
ls -la

# 7. Abrir no VSCode direto do terminal
code .
⚠️ Windows? Use o Git Bash (instalado junto com o Git) ou o PowerShell. No PowerShell, touch não existe — use New-Item index.html ou crie pelo VSCode.

Após criar a estrutura, inicie o Live Server clicando em "Go Live" no canto inferior direito do VSCode. O navegador abrirá automaticamente em http://localhost:5500 e atualizará a cada salvamento.

06
🔀

Git — versionar o projeto

Git · Histórico de mudanças

O Git registra cada mudança no seu código como um "snapshot" chamado commit. Se você errar, pode voltar para qualquer ponto anterior. É como um Ctrl+Z infinito e inteligente.

terminal — inicializando o Git
# Configurar nome e e-mail (apenas uma vez)
git config --global user.name  "Seu Nome"
git config --global user.email "seuemail@exemplo.com"

# Inicializar repositório Git na pasta
git init

# Ver o status dos arquivos
git status

# Adicionar todos os arquivos ao "stage"
git add .

# Criar o primeiro commit
git commit -m "feat: criar estrutura inicial do portfólio"

# ── Fluxo do dia a dia ──
# (depois de fazer alterações no código)
git add .
git commit -m "feat: adicionar seção de projetos"
git commit -m "fix: corrigir layout mobile"
git commit -m "style: ajustar cores do header"

Boas mensagens de commit seguem um padrão. Use esses prefixos:

feat
feat: nova funcionalidadeExemplo: "feat: adicionar formulário de contato"
fix
fix: correção de bugExemplo: "fix: corrigir link quebrado no menu"
style
style: mudanças visuaisExemplo: "style: atualizar paleta de cores"
docs
docs: documentaçãoExemplo: "docs: atualizar README"
📄 Crie um .gitignore Adicione um arquivo .gitignore na raiz do projeto com node_modules/ e .DS_Store para evitar enviar arquivos desnecessários ao GitHub.
07
🐙

GitHub — repositório remoto

GitHub · Na nuvem

O GitHub armazena seu repositório Git na nuvem — backup automático, acesso de qualquer lugar e compartilhamento com o mundo. Siga esses passos exatos:

Criar contaAcesse github.com e crie uma conta gratuita
Novo repositórioClique em "+" → "New repository" → nome: meu-portfolio
Visibilidade: PublicNecessário para usar o GitHub Pages (hospedagem gratuita)
NÃO inicialize com READMENosso repositório local já existe — não conflite
Copie a URL do repositóriohttps://github.com/seu-usuario/meu-portfolio.git

Agora conecte e envie o repositório local ao GitHub:

terminal — conectar ao GitHub
# Conectar repositório local ao GitHub
git remote add origin https://github.com/SEU-USUARIO/meu-portfolio.git

# Renomear branch para "main" (padrão atual)
git branch -M main

# Enviar código ao GitHub pela primeira vez
git push -u origin main

# Nas próximas vezes, apenas:
git push
🔑 Autenticação O GitHub não aceita mais senha no terminal. Use um Personal Access Token (Settings → Developer Settings → Tokens) ou configure o SSH para autenticar de forma segura.
08
🌐

Hospedar com GitHub Pages

Deploy · Site no ar de graça

O GitHub Pages publica automaticamente o repositório como um site — completamente grátis, com URL no formato seu-usuario.github.io/meu-portfolio. Sem servidor, sem mensalidade.

Acesse o repositório no GitHubgithub.com/seu-usuario/meu-portfolio
Clique em "Settings"Aba no menu superior do repositório
Vá em "Pages" (menu lateral)Seção específica para GitHub Pages
Source: Deploy from a branchBranch: main · Pasta: / (root)
Clique em "Save"Aguarde 1-2 minutos — o GitHub publica automaticamente
Acesse a URL geradaseu-usuario.github.io/meu-portfolio — compartilhe com o mundo!
🔄 Atualizações automáticas Sempre que você fizer git push, o GitHub Pages publica a nova versão automaticamente em menos de 2 minutos. Editar → commitar → push → site atualizado.

Fluxo completo de atualização depois do deploy:

fluxo de atualização do site
# 1. Editar o código no VSCode
# 2. Salvar os arquivos (Ctrl+S)
# 3. No terminal:

git add .
git commit -m "feat: atualizar seção de projetos"
git push

# ✅ Pronto! Em ~2 minutos o site estará atualizado
# Acesse: seu-usuario.github.io/meu-portfolio

Progresso do projeto

HTML estruturado100%
CSS responsivo100%
JavaScript interativo100%
Git versionado100%
Publicado no GitHub Pages100%
🗄️

SQL — próximo nível

SQL · Dados dinâmicos

Seu portfólio atual é estático — o conteúdo está fixo no HTML. O próximo passo é torná-lo dinâmico: os projetos vêm de um banco de dados, formulários salvam respostas, visitantes deixam comentários.

Com SQL você criaria tabelas para gerenciar o conteúdo do portfólio:

portfolio_db.sql — banco de dados do portfólio
-- Tabela de projetos
CREATE TABLE projetos (
  id          INTEGER PRIMARY KEY AUTOINCREMENT,
  titulo      TEXT NOT NULL,
  descricao   TEXT,
  url_demo    TEXT,
  url_github  TEXT,
  tecnologias TEXT,             -- "HTML,CSS,JS"
  destaque    INTEGER DEFAULT 0,  -- 0 ou 1
  criado_em   TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabela de mensagens do formulário
CREATE TABLE contatos (
  id        INTEGER PRIMARY KEY AUTOINCREMENT,
  nome      TEXT NOT NULL,
  email     TEXT NOT NULL,
  mensagem  TEXT NOT NULL,
  lido      INTEGER DEFAULT 0,
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Inserir projetos de exemplo
INSERT INTO projetos (titulo, descricao, tecnologias, destaque)
VALUES
  ('Portfólio Pessoal', 'Este mesmo site!',             'HTML,CSS,JS', 1),
  ('App de Tarefas',    'Lista com localStorage',       'HTML,CSS,JS', 1),
  ('Dashboard SQL',     'Painel com Python + SQLite',   'Python,SQL',  0);

-- Consultar projetos em destaque
SELECT titulo, descricao, tecnologias
FROM   projetos
WHERE  destaque = 1
ORDER BY criado_em DESC;
Stack sugerida

Python + Flask + SQLite para iniciantes. Node.js + Express + PostgreSQL para quem quer ir mais longe.

Hosting com backend

Para sites com banco de dados, use Railway, Render ou Vercel — todos têm plano gratuito.

🛣️ Caminho de aprendizado recomendado HTML → CSS → JS → Git/GitHub Pages → Python básico → Flask → SQL → API REST → Deploy com backend. Você já concluiu os primeiros passos!
🎉

Parabéns, você criou e publicou seu site!

Você passou por HTML, CSS, JavaScript, VSCode, Terminal, Git, GitHub e SQL. Seu portfólio está no ar — agora é hora de continuar construindo.