☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta Web Design. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Web Design. Mostrar todas as mensagens

quinta-feira, 11 de julho de 2024

Web Design entre os Mortos — Quando a Interface Caiu e o Sistema Continuou Caminhando

Bellacosa Mainframe e o web design para programadores cobol

☕ Um Café no Bellacosa Mainframe

Web Design entre os Mortos — Quando a Interface Caiu e o Sistema Continuou Caminhando

O relógio do CPD marcava 02h17.

As luzes fluorescentes piscavam sobre os corredores vazios. No fundo da sala, um terminal permanecia ligado, exibindo uma tela que nenhum operador lembrava ter aberto:

SYSTEM STATUS: ONLINE
USER EXPERIENCE: CRITICAL
INTERFACE INTEGRITY: 34%
BACK-END ACTIVITY: UNKNOWN

Ao lado do teclado, uma caneca de café ainda soltava fumaça.

Isso significava que alguém estivera ali há pouco tempo.

Ou alguma coisa.

O jovem programador COBOL aproximou-se lentamente. Era seu primeiro plantão noturno. Ele conhecia IDENTIFICATION DIVISION, começava a entender WORKING-STORAGE SECTION e já havia descoberto que uma vírgula colocada no lugar errado podia transformar um programa simples em uma investigação criminal.

Mas naquela noite o problema não estava no COBOL.

O problema estava na interface.

Ela parecia bonita. Moderna. Elegante. Possuía botões arredondados, cores harmoniosas, ícones bem desenhados e animações suaves.

Porém ninguém conseguia utilizá-la.

Os usuários estavam perdidos. Os pedidos desapareciam. Os formulários falhavam. As mensagens de erro não explicavam nada. A aplicação funcionava perfeitamente durante as apresentações, mas entrava em colapso quando encontrava pessoas reais, celulares antigos, conexões lentas e dados incompletos.

O sistema não estava morto.

Era pior.

Ele continuava funcionando sem compreender os próprios usuários.

Bem-vindo ao verdadeiro Web Design.

Aqui, criar uma página bonita é apenas o começo da sobrevivência.



1. O primeiro erro: acreditar que Web Design é decoração

Quando um iniciante escuta a expressão Web Design, normalmente pensa em:

  • cores;

  • fontes;

  • imagens;

  • botões;

  • menus;

  • animações;

  • organização visual.

Tudo isso faz parte do trabalho. Entretanto, representa apenas a camada mais visível.

Uma interface pode ser comparada à porta de entrada de um grande complexo tecnológico.

O usuário vê:

[ CONSULTAR SALDO ]

Mas atrás desse botão pode existir:

Usuário
   ↓
Navegador
   ↓
Front-end
   ↓
API REST
   ↓
Autenticação
   ↓
Servidor
   ↓
Regra de negócio
   ↓
CICS
   ↓
Programa COBOL
   ↓
Db2 ou VSAM

O botão é pequeno.

A operação que ele representa pode atravessar dezenas de componentes.

Esse é o primeiro grande ensinamento para o programador COBOL iniciante: a interface não existe sozinha.

Ela é uma camada de contato entre uma pessoa e um sistema.

Da mesma forma que uma tela BMS do CICS não é apenas um conjunto de campos posicionados no terminal, uma página Web não é apenas HTML com cores.

A tela precisa representar dados, regras, permissões, estados e possibilidades de ação.

Uma interface desconectada do sistema é como uma porta desenhada na parede.

Parece uma saída.

Mas não leva a lugar algum.



2. UI: a primeira barricada

UI significa User Interface, ou Interface do Usuário.

É tudo aquilo que a pessoa vê, toca, seleciona, preenche ou aciona.

Exemplos:

  • botões;

  • campos de formulário;

  • menus;

  • caixas de seleção;

  • tabelas;

  • ícones;

  • mensagens;

  • barras de progresso;

  • janelas;

  • links;

  • alertas.

A UI funciona como a primeira barricada entre o usuário e a complexidade do sistema.

Quando bem construída, ela organiza a interação.

Quando mal construída, ela libera o caos.

Considere este botão:

[ OK ]

O que significa “OK”?

Confirmar uma compra?

Excluir um cadastro?

Sair do sistema?

Enviar um pagamento?

Agora observe:

[ CONFIRMAR PAGAMENTO ]

A segunda opção reduz a incerteza.

Em sistemas corporativos, clareza é mais importante do que criatividade excessiva.

Um botão não precisa surpreender o usuário. Ele precisa comunicar.

Uma boa UI deve responder a três perguntas:

1. O que é este elemento?
2. O que posso fazer com ele?
3. O que acontecerá depois?

Essa lógica lembra um comando COBOL.

Quando vemos:

PERFORM CALCULAR-TOTAL

entendemos a intenção da operação.

Agora imagine:

PERFORM ROTINA-X

Pode funcionar, mas exige investigação.

Botões com nomes genéricos são o equivalente visual de parágrafos chamados ROTINA-X, PROCESSO-01 ou FAZ-COISA.

Funcionam tecnicamente.

Fracassam semanticamente.



3. UX: sobreviver não é apenas manter o sistema ligado

UX significa User Experience, ou Experiência do Usuário.

A UI pergunta:

Como esta tela se apresenta?

A UX pergunta:

O usuário consegue alcançar seu objetivo?

Essa diferença é fundamental.

Uma aplicação pode ser visualmente impecável e ainda oferecer uma experiência terrível.

Imagine um portal bancário com:

  • animações sofisticadas;

  • fotografia profissional;

  • tipografia moderna;

  • transições suaves;

  • gráficos elegantes.

Agora imagine que:

  • o usuário não encontra o saldo;

  • a transferência exige doze etapas;

  • a sessão termina sem aviso;

  • o botão Voltar apaga os dados;

  • o erro apresenta apenas HTTP 500;

  • o comprovante não pode ser baixado.

A UI pode ser bonita.

A UX está em estado terminal.

Uma experiência digital envolve toda a jornada:

Entrada no sistema
   ↓
Compreensão da tela
   ↓
Localização da função
   ↓
Execução da tarefa
   ↓
Retorno do sistema
   ↓
Confirmação do resultado

Se qualquer etapa falhar, a experiência será prejudicada.

Exemplo prático

O usuário preenche um cadastro e pressiona Salvar.

Uma interface ruim não mostra nada.

Ele clica novamente.

E novamente.

No banco de dados, três registros são criados.

Uma interface melhor apresenta:

Salvando cadastro...

Durante o processamento, o botão fica temporariamente desabilitado.

Depois:

Cadastro concluído com sucesso.

Ou:

Não foi possível concluir o cadastro.
Revise os campos destacados.

Isso é UX.

Não é apenas beleza.

É comunicação durante o processamento.


4. O usuário real não vive no ambiente de testes

Nos protótipos, tudo parece funcionar.

A conexão é rápida.

A tela é grande.

Os dados estão completos.

O usuário sabe exatamente onde clicar.

Então a aplicação entra em produção.

É nesse momento que os sobreviventes aparecem.

O usuário real pode estar:

  • usando um celular antigo;

  • com conexão instável;

  • sob forte luz solar;

  • utilizando apenas uma mão;

  • com pressa;

  • com baixa visão;

  • sem conhecimento técnico;

  • preenchendo o formulário pela primeira vez;

  • tentando recuperar uma senha esquecida;

  • interrompido por mensagens e chamadas.

Projetar para um usuário ideal é como montar uma base de sobrevivência assumindo que nunca faltará energia, água ou alimento.

O mundo real acabará testando cada suposição.

Por isso, o Web Designer precisa investigar:

Quem utilizará o sistema?
O que essa pessoa deseja fazer?
Em qual dispositivo?
Em qual contexto?
Com qual frequência?
Quais erros ela pode cometer?
Quais informações ela já conhece?
Quais limitações podem existir?

Esse processo é chamado de design orientado ao usuário.

Ele não significa simplesmente perguntar:

Qual cor você prefere?

O usuário pode gostar de azul e ainda precisar de uma solução completamente diferente daquela que imaginou.

O papel do profissional é compreender o problema.


5. A diferença entre pedido e necessidade

Um usuário pode dizer:

Quero um botão maior.

Mas o problema real pode ser:

  • baixo contraste;

  • área de clique pequena;

  • excesso de elementos na tela;

  • posição inadequada;

  • texto confuso;

  • dificuldade de navegação.

Da mesma forma, um usuário pode pedir:

Quero mais opções no menu.

Talvez ele não precise de mais opções.

Talvez precise encontrar melhor as opções existentes.

O bom designer não registra apenas a solicitação. Ele investiga a necessidade.

É como analisar um ABEND.

O código exibido é o sintoma.

A causa pode estar em outro ponto.

S0C7
   ↓
Dado inválido
   ↓
Campo não inicializado
   ↓
Arquivo com formato inesperado
   ↓
Regra de validação ausente

No design ocorre algo semelhante:

Usuário não encontra função
   ↓
Menu confuso
   ↓
Categorias inadequadas
   ↓
Arquitetura da informação mal planejada

O clique errado é o sintoma.

A organização pode ser a causa.



6. Acessibilidade: ninguém deve ser deixado do lado de fora

Em um cenário de sobrevivência, uma comunidade que abandona parte de seus membros torna-se mais fraca.

Na Web acontece o mesmo.

Acessibilidade significa criar produtos que possam ser utilizados pelo maior número possível de pessoas.

Isso envolve considerar usuários com:

  • limitações visuais;

  • limitações auditivas;

  • limitações motoras;

  • limitações cognitivas;

  • dificuldades temporárias;

  • restrições do ambiente.

Uma aplicação acessível deve considerar:

  • navegação por teclado;

  • leitores de tela;

  • foco visível;

  • contraste;

  • estrutura semântica;

  • textos alternativos;

  • mensagens compreensíveis;

  • áreas de toque adequadas;

  • formulários identificados corretamente.

Exemplo: informação apenas por cor

Verde = aprovado
Vermelho = reprovado

Nem todos conseguem distinguir essas cores.

Uma alternativa melhor:

✓ Aprovado
✕ Reprovado

Agora existem três sinais:

  • cor;

  • símbolo;

  • texto.

Exemplo: campo sem identificação

<input type="text" placeholder="Digite aqui">

Digite o quê?

Uma versão adequada:

<label for="email">E-mail</label>
<input id="email" type="email">

O label não é apenas uma conveniência.

Ele ajuda leitores de tela, amplia a clareza e melhora a interação.

Curiosidade Bellacosa

A acessibilidade beneficia pessoas que não possuem uma deficiência permanente.

Considere:

Permanente:
Pessoa com baixa visão.

Temporária:
Pessoa com o braço imobilizado.

Situacional:
Pessoa usando o celular sob forte luz solar.

Todos podem se beneficiar de bom contraste, botões maiores e navegação clara.

Acessibilidade não é caridade.

É engenharia de qualidade aplicada à experiência.



7. Responsividade: quando o espaço seguro diminui

Responsividade é a capacidade de a interface adaptar-se a diferentes telas e condições.

Um erro clássico é construir uma interface para desktop e depois reduzir tudo até caber no celular.

Isso não é responsividade.

É compressão visual.

Uma tela responsiva deve reorganizar:

  • conteúdo;

  • navegação;

  • prioridade;

  • espaçamento;

  • tamanho;

  • comportamento;

  • interação.

Considere uma tabela:

| Pedido | Cliente | Data | Valor | Status | Vendedor | Ações |

Em uma tela grande, ela pode funcionar.

No celular, pode transformar-se em:

PEDIDO #5821

Cliente: Carlos Mendes
Valor: R$ 320,00
Status: Em separação

[ VER DETALHES ]

Perceba que os dados não foram simplesmente encolhidos.

Eles foram reorganizados.

Mobile First

Uma abordagem útil é começar projetando para telas pequenas.

Isso força o time a responder:

O que é realmente essencial?
Qual é a ação principal?
Quais informações podem esperar?
O que deve permanecer sempre visível?

Depois, a interface pode crescer para telas maiores.

É como montar uma mochila de sobrevivência.

Quando o espaço é limitado, levamos o que realmente importa.


8. Arquitetura da informação: o mapa da zona segura

Arquitetura da informação é a organização dos conteúdos e funcionalidades.

Ela determina:

  • quais páginas existirão;

  • como serão agrupadas;

  • quais nomes serão utilizados;

  • como o usuário navegará;

  • onde encontrará cada função;

  • como retornará ao ponto anterior.

Imagine este menu:

Produtos
Soluções
Serviços
Recursos
Outros
Mais
Área
Opções

Tecnicamente, existem caminhos.

Na prática, ninguém sabe aonde levam.

Agora considere:

Cursos
Trilhas
Desafios
Certificados
Comunidade
Meu progresso

A segunda estrutura comunica melhor.

O menu não é a arquitetura

O menu é apenas uma representação da organização.

A arquitetura existe antes dele.

Pense em uma biblioteca.

As placas são a navegação.

As categorias, índices, estantes e relações entre livros formam a arquitetura da informação.

Uma aplicação grande pode possuir:

  • centenas de páginas;

  • diferentes perfis;

  • múltiplos fluxos;

  • funções restritas;

  • dados relacionados.

Sem arquitetura, o sistema transforma-se em uma cidade abandonada: ruas existem, edifícios permanecem de pé, mas ninguém sabe onde encontrar recursos.


9. Design conectado à arquitetura do sistema

Agora chegamos ao ponto em que muitos designers param.

Atrás da interface existem:

  • regras de negócio;

  • dados;

  • permissões;

  • integrações;

  • processamento;

  • serviços;

  • bancos de dados.

Uma tela de pedidos não pode ser projetada sem compreender os estados do pedido.

Exemplo:

Criado
   ↓
Pagamento aprovado
   ↓
Em separação
   ↓
Enviado
   ↓
Entregue

Também pode existir:

Criado
   ↓
Pagamento recusado
   ↓
Cancelado

O designer precisa saber:

  • quem pode cancelar;

  • em qual momento;

  • quais ações são irreversíveis;

  • quando é necessária uma confirmação;

  • quais informações precisam ser apresentadas;

  • como comunicar uma falha.

Exemplo de permissão

Um operador pode visualizar o pedido.

Um supervisor pode alterar o status.

Um administrador pode cancelar.

A interface precisa refletir essas permissões.

Não basta esconder um botão visualmente e acreditar que o problema está resolvido. A segurança deve existir também no servidor.

Interface oculta botão
        +
Back-end valida permissão
        =
Proteção adequada

Aqui surge um princípio importante:

A interface comunica a regra, mas o sistema deve garantir a regra.


10. Os estados que caminham escondidos

Ao projetar uma tela, iniciantes costumam desenhar apenas o estado perfeito.

Dados completos.

Sistema disponível.

Usuário autorizado.

Conexão rápida.

Mas uma interface real pode possuir vários estados:

Inicial
Carregando
Com resultados
Sem resultados
Com erro
Sem conexão
Sem permissão
Dados incompletos
Processamento pendente
Sessão expirada

Estado de carregamento

Consultando pedidos...

Estado vazio

Nenhum pedido foi encontrado.

Estado de erro

Não foi possível consultar os pedidos.
Tente novamente.

Estado de permissão

Seu perfil não possui acesso a esta função.

Estado de sessão expirada

Sua sessão terminou por segurança.
Entre novamente para continuar.

Projetar apenas a tela com dados é como preparar uma fortaleza apenas para dias ensolarados.

A primeira tempestade revelará tudo o que foi esquecido.


11. A API: o mensageiro entre os territórios

Uma API permite a comunicação entre partes de um sistema.

Exemplo:

Front-end
   ↓
GET /pedidos/5821
   ↓
API
   ↓
Regra de negócio
   ↓
Banco de dados
   ↓
Resposta JSON
   ↓
Interface atualizada

Uma resposta pode ser:

{
  "pedido": 5821,
  "cliente": "Carlos Mendes",
  "valor": 320.00,
  "status": "EM_SEPARACAO"
}

O designer não precisa implementar toda a API.

Entretanto, precisa compreender que:

  • os dados podem demorar;

  • a requisição pode falhar;

  • a resposta pode vir vazia;

  • o usuário pode não possuir permissão;

  • o serviço pode estar indisponível;

  • o formato pode mudar;

  • uma operação pode continuar em segundo plano.

Isso influencia a interface.

Se uma operação demora trinta segundos, não podemos deixar o usuário olhando para uma tela imóvel.

Podemos mostrar:

Processando solicitação...
Você pode continuar navegando.
Avisaremos quando o processo terminar.

Conhecer o funcionamento técnico permite projetar melhores respostas humanas.


12. Front-end: onde a barricada ganha forma

O Front-end é a camada executada no navegador.

As três tecnologias fundamentais são:

HTML       → estrutura
CSS        → apresentação
JavaScript → comportamento

HTML

O HTML organiza o conteúdo.

<h1>Consulta de pedidos</h1>

<label for="numero">Número do pedido</label>
<input id="numero" type="text">

<button type="submit">Consultar</button>

CSS

O CSS controla aparência e layout.

button {
  padding: 12px 20px;
  border-radius: 6px;
  font-weight: bold;
}

JavaScript

O JavaScript controla comportamentos.

button.addEventListener("click", consultarPedido);

O Web Designer não precisa necessariamente tornar-se um desenvolvedor completo.

Mas compreender esses fundamentos ajuda a criar interfaces viáveis, consistentes e conscientes.

Estados de um botão

Um botão não possui apenas uma aparência.

Ele pode estar:

Normal
Com o mouse sobre ele
Com foco do teclado
Pressionado
Desabilitado
Carregando
Concluído
Com erro

Um Design System deve considerar essas variações.


13. Back-end: a sala de máquinas

O Back-end executa operações que normalmente não aparecem diretamente para o usuário.

Ele pode cuidar de:

  • autenticação;

  • autorização;

  • regras de negócio;

  • bancos de dados;

  • integrações;

  • processamento;

  • envio de mensagens;

  • auditoria.

Considere um formulário:

Nome
E-mail
Senha
[ CRIAR CONTA ]

Atrás dele:

Validar nome
Validar e-mail
Verificar duplicidade
Validar senha
Criptografar senha
Criar usuário
Registrar auditoria
Enviar confirmação
Retornar resultado

Cada etapa pode gerar uma mensagem diferente:

O e-mail informado é inválido.
Este e-mail já está cadastrado.
A senha deve possuir pelo menos oito caracteres.
Não foi possível enviar a confirmação.
Cadastro concluído.

Sem compreender o Back-end, o designer pode criar apenas um espaço genérico para erros.

Com algum conhecimento técnico, ele consegue projetar uma experiência mais precisa.


14. O paralelo com COBOL, CICS e mainframe

Para o programador COBOL iniciante, a arquitetura pode ser visualizada assim:

Usuário
   ↓
Página Web
   ↓
JavaScript
   ↓
API REST
   ↓
z/OS Connect
   ↓
CICS
   ↓
Programa COBOL
   ↓
Db2 ou VSAM

O usuário clica:

[ CONSULTAR CLIENTE ]

A aplicação pode executar:

1. Validar os dados no navegador.
2. Enviar a requisição para a API.
3. Autenticar o usuário.
4. Converter a chamada para o ambiente mainframe.
5. Acionar uma transação CICS.
6. Executar o programa COBOL.
7. Consultar Db2 ou VSAM.
8. Retornar os dados.
9. Atualizar a interface.

No COBOL, poderíamos imaginar:

IDENTIFICATION DIVISION.
PROGRAM-ID. CONSULTA-CLIENTE.

PROCEDURE DIVISION.

    PERFORM VALIDAR-ENTRADA

    IF DADOS-VALIDOS
        PERFORM CONSULTAR-CLIENTE
        PERFORM MONTAR-RESPOSTA
    ELSE
        PERFORM MONTAR-ERRO
    END-IF

    GOBACK.

A interface precisa estar preparada para ambas as respostas:

Cliente encontrado.

ou:

Cliente não localizado.

ou ainda:

Serviço temporariamente indisponível.

Esse é o encontro entre Web Design e mainframe.

A tela moderna pode ser a porta de entrada para um programa COBOL criado décadas atrás e continuamente modernizado.


15. Design System: o manual da comunidade

Em um grupo de sobreviventes, cada pessoa construir uma barricada de maneira diferente seria perigoso.

Uma usaria madeira.

Outra usaria metal.

Outra deixaria uma abertura porque achou visualmente interessante.

Em sistemas digitais, a falta de padrão também cria riscos.

Um Design System reúne:

  • componentes;

  • estilos;

  • regras;

  • padrões;

  • documentação;

  • princípios;

  • exemplos.

Exemplo:

Botão primário
Botão secundário
Campo de texto
Alerta
Modal
Tabela
Card
Menu
Breadcrumb

Também podem existir tokens:

Espaçamento pequeno: 8px
Espaçamento médio: 16px
Espaçamento grande: 24px

Borda pequena: 4px
Borda média: 8px

Fonte normal: 16px
Título: 32px

O Design System promove:

  • consistência;

  • velocidade;

  • acessibilidade;

  • reutilização;

  • melhor comunicação;

  • menor chance de erro.

Entretanto, ele não deve transformar-se em uma prisão.

Componentes existem para resolver problemas recorrentes, não para impedir toda evolução.


16. Tailwind CSS: o kit de ferramentas

Tailwind CSS utiliza classes utilitárias.

Exemplo:

<button class="px-4 py-2 rounded font-semibold">
  Salvar
</button>

Nesse caso:

px-4       → espaçamento horizontal
py-2       → espaçamento vertical
rounded    → bordas arredondadas
font-semibold → fonte com maior peso

Tailwind pode acelerar a implementação e aproximar design e código.

Porém, existe um alerta:

Uma ferramenta de CSS não cria automaticamente uma boa experiência.

É possível construir uma interface confusa usando Tailwind.

É possível construir uma interface excelente usando CSS tradicional.

A ferramenta implementa decisões.

Ela não substitui a investigação.


17. Passo a passo para projetar uma interface sobrevivente

Passo 1 — Descubra o problema

Pergunte:

O que o usuário precisa fazer?

Não comece pela cor.

Comece pela necessidade.

Passo 2 — Conheça o usuário

Investigue:

  • conhecimento;

  • contexto;

  • dispositivo;

  • frequência de uso;

  • dificuldades;

  • objetivos.

Passo 3 — Mapeie o fluxo

Exemplo:

Entrar
   ↓
Localizar pedido
   ↓
Visualizar detalhes
   ↓
Solicitar cancelamento
   ↓
Confirmar
   ↓
Receber resultado

Passo 4 — Organize a informação

Defina:

  • títulos;

  • categorias;

  • menus;

  • prioridades;

  • relacionamentos.

Passo 5 — Identifique regras do sistema

Pergunte:

Quem pode fazer?
Quando pode fazer?
Quais dados são necessários?
Quais erros podem acontecer?

Passo 6 — Projete todos os estados

Não desenhe apenas o cenário perfeito.

Inclua:

  • carregamento;

  • vazio;

  • erro;

  • sucesso;

  • falta de permissão;

  • ausência de conexão.

Passo 7 — Considere acessibilidade

Teste:

  • teclado;

  • contraste;

  • foco;

  • leitores de tela;

  • textos;

  • tamanho de toque.

Passo 8 — Considere diferentes telas

Verifique:

  • celular;

  • tablet;

  • notebook;

  • monitor grande;

  • ampliação de tela.

Passo 9 — Conecte design e tecnologia

Converse com:

  • desenvolvedores Front-end;

  • desenvolvedores Back-end;

  • analistas;

  • especialistas em banco de dados;

  • segurança;

  • infraestrutura;

  • usuários.

Passo 10 — Teste com pessoas reais

Observe sem explicar tudo.

Se o usuário não consegue avançar sem ajuda, existe uma pista.




18. Dicas Bellacosa para o Padawan do Web Design

Dica 1 — Não confie apenas no “está bonito”

Pergunte também:

Está claro?
Está acessível?
Está previsível?
Está funcionando?

Dica 2 — Mensagens de erro devem ajudar

Evite:

Erro 500.

Prefira:

Não foi possível concluir a operação.
Tente novamente em alguns instantes.

Dica 3 — Toda ação precisa de retorno

O usuário clicou?

Mostre que algo aconteceu.

Dica 4 — Não use apenas cor

Combine cor, texto e símbolo.

Dica 5 — Desenhe para dados ruins

Teste:

  • nomes muito longos;

  • campos vazios;

  • números grandes;

  • imagens ausentes;

  • respostas demoradas.

Dica 6 — O sistema não é o usuário

Uma mensagem tecnicamente precisa pode ser incompreensível para quem está usando a aplicação.

Dica 7 — Aprenda fundamentos

Frameworks mudam.

Os fundamentos permanecem:

  • estrutura;

  • hierarquia;

  • semântica;

  • acessibilidade;

  • comunicação;

  • feedback.




19. Curiosidades do abrigo digital

Curiosidade 1 — O estado vazio é uma oportunidade

Uma tela sem dados não precisa ser apenas vazia.

Ela pode orientar:

Você ainda não possui projetos.
Crie seu primeiro projeto para começar.

Curiosidade 2 — Velocidade percebida também importa

Mesmo quando uma operação demora, mensagens e indicadores reduzem a sensação de abandono.

Curiosidade 3 — O texto faz parte do design

Compare:

Enviar

com:

Enviar solicitação

O segundo pode ser mais claro dependendo do contexto.

Curiosidade 4 — Sistemas antigos podem ter interfaces modernas

COBOL não impede a existência de aplicações Web atuais.

APIs, z/OS Connect, CICS e serviços permitem conectar interfaces modernas a regras de negócio consolidadas.

Curiosidade 5 — A interface é uma tradução

Ela traduz:

Complexidade técnica
        ↓
Ações compreensíveis

20. Easter egg: o registro que ninguém deveria encontrar

Durante a investigação no CPD, o jovem programador abriu o log da aplicação.

Entre milhares de mensagens, encontrou:

02:17:33 USER CLICKED "OK"
02:17:33 ACTION UNKNOWN
02:17:34 REQUEST SENT
02:17:34 BUSINESS RULE REJECTED
02:17:34 ERROR MESSAGE HIDDEN
02:17:35 USER CLICKED AGAIN
02:17:35 USER EXPERIENCE INFECTED

Ele ficou em silêncio.

O problema nunca fora um vírus.

Também não era um processo morto.

Era um botão chamado OK.

O botão não explicava o que faria.

A mensagem de erro não aparecia.

O usuário clicava novamente.

O sistema criava uma nova tentativa.

Cada tentativa gerava outra.

E outra.

E outra.

A aplicação não estava sendo atacada por mortos-vivos.

Estava sendo atacada por decisões de design que se recusavam a morrer.

O programador abriu o código da interface e substituiu:

[ OK ]

por:

[ CONFIRMAR CANCELAMENTO ]

Depois adicionou:

O cancelamento não poderá ser desfeito.
Deseja continuar?

E finalmente:

Cancelamento concluído.

Naquele instante, o terminal parou de piscar.

O contador de erros começou a cair.

No monitor principal surgiu:

USER EXPERIENCE: RECOVERING
INTERFACE INTEGRITY: 97%
SYSTEM STATUS: HUMAN AGAIN

Conclusão: no fim, projetamos para pessoas

Web Design é muito maior do que criar uma página bonita.

Ele envolve:

  • UI;

  • UX;

  • pesquisa;

  • acessibilidade;

  • responsividade;

  • arquitetura da informação;

  • arquitetura do sistema;

  • Front-end;

  • Back-end;

  • APIs;

  • regras de negócio;

  • dados;

  • comunicação.

Uma interface é o ponto de encontro entre três mundos:

PESSOA
   ↘
    INTERFACE
   ↗
SISTEMA

Se o projeto pensa apenas no sistema, pode tornar-se tecnicamente correto e humanamente impossível.

Se pensa apenas na aparência, pode tornar-se bonito e inutilizável.

Se pensa apenas no usuário, ignorando regras e limitações, pode propor algo inviável.

A boa experiência surge quando essas três dimensões trabalham juntas.

Para o programador COBOL iniciante, essa visão é especialmente valiosa.

Você poderá trabalhar em sistemas nos quais:

  • uma tela Web chama uma API;

  • a API acessa o z/OS;

  • o z/OS Connect chama o CICS;

  • o CICS executa um programa COBOL;

  • o COBOL consulta Db2 ou VSAM;

  • o resultado retorna para o navegador.

O usuário talvez nunca saiba que existe COBOL atrás daquela tela.

Mas sentirá imediatamente quando a interação for confusa, lenta ou incompleta.

Essa é a grande verdade escondida no subsolo do Web Design:

O usuário não enxerga a arquitetura inteira, mas experimenta todas as consequências dela.

Portanto, antes de perguntar apenas:

Está bonito?

Pergunte:

Está claro?
Está acessível?
Está organizado?
Está conectado ao sistema?
Está preparado para erros?
Está ajudando alguém?

Porque no mundo real das aplicações, interfaces mal projetadas raramente desaparecem.

Elas continuam caminhando.

Entram em produção.

Espalham confusão.

Geram chamados.

Produzem retrabalho.

E, quando ninguém investiga a causa, voltam na próxima versão com um novo layout, uma nova fonte e os mesmos velhos problemas.

No Bellacosa Mainframe, aprendemos a regra definitiva de sobrevivência:

Nunca julgue um sistema apenas pela tela inicial.

Atrás de cada botão existe uma operação.

Atrás de cada mensagem existe uma decisão.

Atrás de cada interface existe uma arquitetura.

E atrás de toda boa arquitetura deve existir uma pessoa que consiga utilizá-la sem precisar lutar contra ela.

  • Aprenda mais sobre SEO

https://eljefemidnightlunch.blogspot.com/2013/10/a-busca-pelo-santo-seo-o-indice-oficial.html

quarta-feira, 6 de dezembro de 2023

Bootcamp DIO Projeto LusoFlix : Programadores FrontEnd em HTML, CSS e JavaScript

Bellacosa Mainframe apresenta o projeto DIO Bootcamp Lusoflix


☕ Um Café no Bellacosa Mainframe

LusoFlix sem Mistérios para Programadores HTML, CSS e JavaScript

Quando um Programador Mainframe Descobre que uma Página Inspirada na Netflix Também Pode Guardar Viagens, Castelos, Histórias e Memórias de Portugal

Há projetos que nascem para ensinar uma propriedade do CSS.

Outros surgem para demonstrar uma biblioteca JavaScript.

Alguns existem apenas para cumprir uma atividade de bootcamp, receber uma avaliação e depois desaparecer em algum diretório chamado:

C:\CURSOS\PROJETOS\FINAL\FINAL_AGORA_VAI\

Mas, ocasionalmente, um exercício acadêmico escapa de sua finalidade original.

Ele ganha personalidade.

Recebe um nome próprio.

Passa a carregar fotografias, lembranças, histórias, viagens e pequenos fragmentos da vida de seu criador.

Foi exatamente isso que aconteceu com o LusoFlixhttps://vagnerbellacosa.github.io/002_WebDeveloper_ReplicaNetflix/

O projeto nasceu como uma recriação da interface inicial da Netflix, desenvolvida com HTML, CSS e JavaScript durante um laboratório de desenvolvimento web. Entretanto, em vez de simplesmente copiar filmes, séries e cartazes fictícios, a solução recebeu uma identidade própria: tornou-se uma homenagem a Portugal e um catálogo visual de vídeos publicados no YouTube sobre cidades, monumentos, castelos, praias, igrejas, gastronomia e experiências vividas em terras lusitanas. (GitHub)

Em outras palavras, o exercício deixou de ser apenas:

CLONE NETFLIX

e passou a funcionar como:

PORTAL AUDIOVISUAL DE MEMÓRIAS SOBRE PORTUGAL

É como se alguém tivesse recebido a missão de copiar uma tela de CICS e decidido transformá-la em um sistema completo de consulta histórica.

O LusoFlix demonstra algo essencial para todo programador iniciante:

Uma tecnologia pode ser aprendida através de exercícios, mas somente se torna realmente nossa quando a usamos para contar alguma coisa que nos pertence.

Nesta investigação do Bellacosa Mainframe, abriremos o código do LusoFlix como se estivéssemos analisando um dump de produção.

Examinaremos:

  • a estrutura HTML;

  • a estilização com CSS;

  • a pequena, mas importante, participação do JavaScript;

  • o uso de bibliotecas externas;

  • os carrosséis inspirados em serviços de streaming;

  • a integração com vídeos do YouTube;

  • o conteúdo sobre Portugal;

  • a hospedagem no GitHub Pages;

  • os recursos de SEO e compartilhamento;

  • os pontos fortes do projeto;

  • as melhorias possíveis;

  • e tudo aquilo que o HTML moderno permite construir atualmente.

Sirva o café.

Abra o navegador.

A investigação começou.


1. A cena inicial: o que é o LusoFlix?

O LusoFlix é uma aplicação web estática inspirada visualmente na página inicial da Netflix.

A página apresenta:

  • um cabeçalho com o logotipo LUSOFLIX;

  • um menu de navegação;

  • uma imagem principal de destaque;

  • botões de ação;

  • diversas categorias de vídeos;

  • carrosséis horizontais;

  • miniaturas clicáveis;

  • links para vídeos e playlists no YouTube;

  • informações adicionais sobre Portugal;

  • elementos de compartilhamento e SEO.

O próprio repositório define o projeto como uma réplica da página inicial da Netflix criada com HTML, CSS e JavaScript, utilizando bibliotecas externas. A adaptação temática substitui o catálogo tradicional por miniaturas de vídeos relacionados a viagens por Portugal. (GitHub)

Essa mudança de tema é mais importante do que pode parecer.

Um clone literal normalmente ensina apenas reprodução visual.

Já uma adaptação exige decisões.

O desenvolvedor precisa perguntar:

  • Qual será o conteúdo principal?

  • Como os itens serão categorizados?

  • Que imagem será usada no destaque?

  • Para onde apontarão os botões?

  • Como transformar vídeos do YouTube em um catálogo?

  • Como organizar dezenas de elementos sem perder coerência visual?

É justamente nessa adaptação que o exercício deixa de ser uma simples cópia.

O programador começa a trabalhar como projetista.


2. O HTML como DATA DIVISION da página

Para um programador COBOL, podemos comparar o HTML com uma mistura entre a DATA DIVISION e a estrutura de telas de um sistema online.

O HTML não determina, sozinho, todas as cores, animações ou comportamentos.

Sua principal responsabilidade é declarar:

  • o que existe;

  • qual é a hierarquia;

  • qual é o significado dos elementos;

  • como as partes da página estão organizadas.

O documento começa corretamente com:

<!DOCTYPE html>
<html lang="pt-br">

O DOCTYPE informa ao navegador que o documento utiliza HTML5.

Já o atributo:

lang="pt-br"

indica que o conteúdo está em português do Brasil.

Isso ajuda:

  • leitores de tela;

  • motores de busca;

  • ferramentas de tradução;

  • corretores ortográficos;

  • sistemas de acessibilidade.

Logo depois, o projeto define:

<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">

O charset="UTF-8" permite representar corretamente acentos, cedilhas e outros caracteres.

Sem isso, uma palavra como:

informações

poderia aparecer como uma pequena cena de crime digital:

informações

A meta tag viewport, por sua vez, é essencial para dispositivos móveis. Ela instrui o navegador a adaptar a largura da página à largura real da tela. Esses elementos aparecem logo no início do documento do LusoFlix.

Pense no viewport como um parâmetro de execução.

Sem ele, o navegador móvel tenta exibir a página como se estivesse simulando uma tela de desktop muito larga.

É praticamente um emulador 3270 tentando adivinhar a resolução de um smartphone.


3. O cabeçalho: identidade e navegação

O cabeçalho apresenta uma estrutura bastante clara:

<header>
    <div class="container">
        <h2 class="logo">LUSOFLIX</h2>

        <nav>
            <a href="...">Inicio</a>
            <a href="...">Lisboa</a>
            <a href="...">Turismo</a>
            <a href="...">Gastronomia</a>
        </nav>
    </div>
</header>

Temos aqui três componentes fundamentais:

header

Representa semanticamente o cabeçalho da página.

h2

Apresenta o nome do serviço.

nav

Agrupa os links principais de navegação.

O uso de elementos semânticos como header, nav, main e footer é uma das grandes evoluções do HTML moderno.

No passado, muitas páginas eram construídas quase exclusivamente com:

<div>

Era comum encontrar algo assim:

<div id="topo">
<div id="menu">
<div id="conteudo">
<div id="rodape">

Funcionava, mas o navegador não compreendia claramente a função de cada bloco.

Com HTML5, podemos informar o significado estrutural:

<header>
<nav>
<main>
<section>
<article>
<footer>

Essa semântica ajuda tanto os mecanismos de busca quanto as tecnologias assistivas.

No LusoFlix, os links do menu direcionam o visitante para vídeos relacionados ao início da jornada, Lisboa, turismo e gastronomia.

O menu não está ali apenas como decoração.

Ele funciona como um pequeno índice temático do acervo audiovisual.


4. O herói da página: a área de destaque

Todo serviço de streaming possui um conteúdo destacado.

É aquele grande painel que tenta capturar a atenção do visitante antes que ele comece a navegar pelo catálogo.

No LusoFlix, essa responsabilidade pertence à classe:

<div class="filme-principal">

Dentro dela encontramos:

<h3 class="titulo">Portugal</h3>

<p class="descricao">
    Venha conhecer uma terra belissima...
</p>

e dois botões principais:

ASSISTIR AGORA
MAIS INFORMAÇÕES

O primeiro direciona para uma playlist do YouTube.

O segundo leva o visitante a um blog com informações adicionais sobre Portugal.

Isso representa um padrão clássico de UX, a experiência do usuário:

  • uma ação principal;

  • uma ação secundária.

A ação principal diz:

Veja o conteúdo.

A ação secundária diz:

Conheça o contexto.

Em termos de sistema, poderíamos representar:

OPÇÃO 1 — EXECUTAR
OPÇÃO 2 — CONSULTAR DETALHES

A interface inspirada na Netflix funciona justamente porque aproveita um modelo mental que o usuário já conhece.

Ele vê um grande banner, encontra um botão de reprodução e imediatamente entende o que deve fazer.

Não é necessário explicar o fluxo.

A própria interface conduz o visitante.


5. O CSS entra na sala de interrogatório

Se o HTML define a estrutura, o CSS define a apresentação.

No arquivo principal de estilos, o LusoFlix começa declarando duas variáveis:

:root {
    --vermelho: #E50914;
    --preta: #141414;
}

Essas são Custom Properties, popularmente chamadas de variáveis CSS.

Em vez de repetir uma cor em vários lugares:

color: #E50914;
background: #141414;

o desenvolvedor pode usar:

color: var(--vermelho);
background: var(--preta);

As variáveis CSS funcionam como constantes de configuração visual.

Para um programador COBOL, a ideia lembra declarar valores centralizados na WORKING-STORAGE:

01 WS-COR-PRINCIPAL PIC X(7) VALUE '#E50914'.

Naturalmente, CSS e COBOL são mundos diferentes, mas a filosofia é semelhante:

Evite espalhar valores mágicos pelo programa.

Se amanhã o LusoFlix quiser trocar o vermelho por verde, basta alterar a variável principal.

Sem variáveis, seria necessário procurar dezenas de ocorrências.

Com variáveis, temos uma espécie de tabela de parâmetros visuais.

As cores escolhidas reproduzem a identidade clássica de uma plataforma de streaming: fundo quase preto, texto branco e destaque vermelho. O arquivo CSS centraliza essas cores e aplica o fundo escuro ao corpo da página.


6. O reset global e o misterioso box-sizing

O projeto utiliza:

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

O seletor universal * aplica regras a todos os elementos.

Os navegadores incluem margens e espaçamentos padrão em títulos, parágrafos e outros componentes. Ao definir:

margin: 0;
padding: 0;

o desenvolvedor zera esses valores e passa a controlar o layout de forma mais previsível.

Já:

box-sizing: border-box;

resolve um problema histórico do CSS.

Imagine um elemento com:

width: 300px;
padding: 20px;
border: 2px;

No modelo tradicional, a largura total poderia ultrapassar os 300 pixels, pois padding e borda seriam somados à largura declarada.

Com border-box, a largura total permanece dentro dos 300 pixels.

É como reservar um registro de 300 bytes e garantir que os campos internos não ultrapassem o LRECL.

Sem isso, o layout pode sofrer o equivalente visual de um:

IEC141I 013-18

O conteúdo simplesmente não cabe onde deveria.


7. Flexbox: o organizador de filas do HTML moderno

O cabeçalho utiliza Flexbox:

header .container {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
}

Essa combinação organiza o logotipo e o menu na mesma linha.

Vamos interpretar cada instrução.

display: flex

Ativa o modelo Flexbox.

flex-direction: row

Organiza os filhos horizontalmente.

align-items: center

Alinha os itens verticalmente ao centro.

justify-content: space-between

Coloca um item no início, outro no final e distribui o espaço entre eles.

Antes do Flexbox, layouts desse tipo frequentemente dependiam de:

  • float;

  • posicionamento absoluto;

  • tabelas;

  • margens negativas;

  • pequenos pactos com forças ocultas.

Com Flexbox, o navegador assume a responsabilidade de calcular os alinhamentos.

O resultado é um código mais legível e adaptável.

O CSS do LusoFlix emprega Flexbox tanto no cabeçalho quanto na organização da área principal.


8. A imagem de fundo e a técnica do gradiente

A área de destaque é construída com:

background:
    linear-gradient(
        rgba(0, 0, 0, .50),
        rgba(0, 0, 0, .50)
    ),
    url('../img/PortugalViagens.png');

Aqui temos duas camadas.

A primeira é um gradiente preto semitransparente.

A segunda é a imagem de Portugal.

O navegador sobrepõe o gradiente à fotografia.

Por que fazer isso?

Porque textos brancos podem perder legibilidade sobre imagens claras.

A camada escura aumenta o contraste e permite que título, descrição e botões continuem visíveis.

Essa técnica é muito comum em:

  • plataformas de streaming;

  • sites de turismo;

  • páginas de jogos;

  • landing pages;

  • portfólios;

  • vitrines de produtos.

O efeito é simples, mas poderoso.

A fotografia continua aparecendo, porém deixa de competir com a informação textual.

É como diminuir o ruído de uma evidência antes de ampliá-la no laboratório.


9. Botões e microinterações

Os botões são estilizados assim:

.botao {
    background-color: rgba(0, 0, 0, .50);
    border: none;
    color: white;
    padding: 15px 30px;
    cursor: pointer;
    transition: .3s ease all;
}

Quando o ponteiro passa sobre o botão:

.botao:hover {
    background-color: white;
    color: black;
}

Temos aqui uma microinteração.

O usuário movimenta o mouse.

O botão reage.

Essa resposta visual confirma:

Este elemento é clicável.

A propriedade:

transition: .3s ease all;

faz a mudança ocorrer suavemente.

Sem transição, a troca de cores seria instantânea.

Com transição, o navegador interpola os valores ao longo de aproximadamente três décimos de segundo.

Parece um detalhe pequeno.

Mas interfaces agradáveis são construídas justamente com pequenos detalhes.

Uma aplicação não precisa executar uma animação cinematográfica a cada clique.

Às vezes basta confirmar elegantemente que o usuário está no caminho certo.


10. O coração visual: os carrosséis

O LusoFlix organiza o acervo em categorias.

Entre elas aparecem:

  • Portugal;

  • Lisboa;

  • Setúbal;

  • Uma Viagem na História;

  • Castelos e vilas medievais;

  • A religiosidade nas igrejas;

  • Praias e rios.

Cada categoria contém miniaturas de vídeos publicadas em um carrossel horizontal. A página pública apresenta dezenas de links do YouTube distribuídos nessas seções temáticas. (Vagner Bellacosa)

A estrutura básica é semelhante a:

<div class="owl-carousel owl-theme">
    <div class="item">
        <a href="VIDEO">
            <img
                class="box-filme"
                src="MINIATURA"
                title="DESCRIÇÃO"
                alt="DESCRIÇÃO">
        </a>
    </div>
</div>

A classe:

owl-carousel

revela o uso da biblioteca Owl Carousel.

Essa biblioteca JavaScript transforma uma lista comum de elementos em um componente deslizável.

Ela pode controlar:

  • quantidade de itens visíveis;

  • navegação;

  • rolagem;

  • responsividade;

  • velocidade;

  • reprodução automática;

  • comportamento em diferentes tamanhos de tela.

O projeto inclui os arquivos CSS do Owl Carousel e seu tema visual no cabeçalho do documento.

Aqui existe uma importante lição arquitetural.

O desenvolvedor não precisa construir tudo do zero.

Usar uma biblioteca consolidada é equivalente a chamar uma rotina confiável em vez de reescrever a mesma lógica em cada programa.

No mainframe, usamos:

  • SORT;

  • IDCAMS;

  • LE routines;

  • APIs de CICS;

  • serviços de Db2;

  • módulos compartilhados.

Na web, utilizamos:

  • bibliotecas;

  • frameworks;

  • componentes;

  • APIs;

  • pacotes.

Reutilização não é preguiça.

É engenharia.

A única condição é compreender o que a dependência faz e quais riscos ela introduz.


11. Onde está o JavaScript?

O visitante pode olhar o HTML do LusoFlix e pensar:

Onde está toda aquela programação JavaScript prometida?

Grande parte do comportamento interativo está relacionada à inicialização do carrossel e às bibliotecas carregadas.

Em projetos desse tipo, o JavaScript costuma conter uma configuração parecida com:

$('.owl-carousel').owlCarousel({
    loop: true,
    margin: 10,
    nav: false,
    responsive: {
        0: {
            items: 1
        },
        600: {
            items: 3
        },
        1000: {
            items: 5
        }
    }
});

A lógica determina quantos cartões serão apresentados conforme a largura da tela.

Em um celular:

1 item por vez

Em uma tela intermediária:

3 itens

Em um desktop:

5 itens

O JavaScript não precisa ser enorme para ser importante.

Nesse projeto, ele atua como um operador de sala de controle.

O HTML fornece os itens.

O CSS fornece a aparência.

O JavaScript coordena a movimentação e a adaptação dinâmica.

Podemos resumir assim:

HTML       = inventário do catálogo
CSS        = cenografia
JavaScript = operador da esteira

12. O YouTube como backend audiovisual

Uma das decisões mais inteligentes do LusoFlix foi não tentar hospedar os vídeos dentro do próprio GitHub Pages.

Os vídeos permanecem no YouTube.

A página funciona como catálogo e ponto de acesso.

Cada miniatura é envolvida por um link:

<a href="https://www.youtube.com/watch?v=...">
    <img src="img/...">
</a>

Quando o usuário clica, o vídeo é aberto no YouTube.

Arquiteturalmente, temos:

LUSOFLIX
   |
   +-- apresenta catálogo
   |
   +-- organiza categorias
   |
   +-- exibe miniaturas
   |
   +-- encaminha reprodução
           |
           +-- YOUTUBE

Isso reduz:

  • consumo de banda;

  • complexidade de infraestrutura;

  • necessidade de servidor próprio;

  • preocupação com codecs;

  • armazenamento de arquivos pesados;

  • desenvolvimento de um player completo.

O YouTube assume responsabilidades como:

  • streaming adaptativo;

  • disponibilidade;

  • armazenamento;

  • player;

  • legendas;

  • compatibilidade;

  • estatísticas;

  • comentários;

  • inscrições;

  • recomendações.

O LusoFlix assume outra missão:

Organizar e contextualizar o acervo.

É uma arquitetura simples, porém coerente.

O portal não tenta substituir o YouTube.

Ele cria uma camada editorial sobre o conteúdo.


13. O canal como arquivo de uma vida em Portugal

Os vídeos não aparecem como elementos aleatórios.

Eles formam um mapa de experiências.

Na seção dedicada a Lisboa, encontramos temas como:

  • Oceanário de Lisboa;

  • Castelo de São Jorge;

  • Campo Pequeno;

  • Terreiro do Paço;

  • chegada aérea à cidade;

  • Sé Catedral;

  • ruas históricas;

  • museus;

  • imigração;

  • memórias pessoais.

Na categoria histórica surgem referências a:

  • Templo de Diana, em Évora;

  • Tavira;

  • Ponte de Prado;

  • Banco de Portugal em Faro;

  • Vila Real de Santo António;

  • Óbidos;

  • Mosteiro de Santa Maria da Vitória;

  • Guimarães.

Também há seções dedicadas a castelos, vilas medievais, igrejas, santuários, praias, rios e localidades da Margem Sul. Esses temas são identificáveis nos títulos e textos alternativos das miniaturas declaradas no HTML.

O canal, portanto, não é apenas um repositório de vídeos turísticos.

Ele mistura:

  • memória familiar;

  • documentação de viagens;

  • história;

  • arquitetura;

  • patrimônio;

  • religiosidade;

  • cotidiano;

  • deslocamentos;

  • imigração;

  • descobertas pessoais.

Isso torna o LusoFlix parecido com uma videoteca temática.

Cada miniatura funciona como uma ficha de catálogo.

Cada categoria funciona como uma coleção.

Cada clique abre um registro audiovisual.

No mainframe, poderíamos imaginar:

ARQUIVO-MESTRE-DE-VIDEOS

com uma chave lógica composta por:

PAÍS + REGIÃO + CATEGORIA + LOCAL + DATA

O que vemos na tela é apenas a camada de apresentação de um acervo muito maior.


14. As miniaturas como registros indexados

Considere este padrão:

<img
    class="box-filme"
    src="img/Historia0007.png"
    title="Encantos medievais em Obidos e suas belas muralhas"
    alt="Encantos medievais em Obidos e suas belas muralhas">

Há três informações fundamentais:

src

Indica o arquivo da imagem.

title

Apresenta uma dica quando o usuário mantém o cursor sobre a miniatura.

alt

Fornece uma descrição alternativa.

O atributo alt é especialmente importante.

Ele pode ser utilizado:

  • por leitores de tela;

  • quando a imagem não carrega;

  • por mecanismos de busca;

  • para contextualização semântica.

Um alt vazio ou genérico desperdiça informação.

Em vez de:

alt="imagem"

é melhor usar:

alt="Vista das muralhas medievais de Óbidos, Portugal"

Isso melhora acessibilidade e SEO.

No LusoFlix, muitas miniaturas já possuem descrições individualizadas, demonstrando a intenção de contextualizar o conteúdo visual.


15. SEO: deixando pistas para os mecanismos de busca

O documento inclui diversas meta tags:

<meta name="Author" content="Vagner Bellacosa">

<meta
    name="Description"
    content="Aplicação dos comandos HTML, CSS e JavaScript...">

Também existem propriedades Open Graph:

<meta property="og:title" content="LusoFlix - Viagens a Portugal">
<meta property="og:site_name" content="LusoFlix">
<meta property="og:description" content="...">
<meta property="og:image" content="...">
<meta property="og:type" content="article">

Essas propriedades ajudam plataformas sociais a gerar uma prévia quando a página é compartilhada.

Sem Open Graph, um link pode aparecer apenas como uma URL seca.

Com os metadados corretos, o compartilhamento pode apresentar:

  • título;

  • descrição;

  • imagem;

  • identificação do site.

É como anexar uma capa, um resumo e uma classificação ao registro antes de enviá-lo para outro sistema.

O projeto também declara autoria, palavras-chave, descrição, imagem social, seção temática e endereço canônico utilizado no compartilhamento.

Atualmente, a meta tag keywords possui pouco peso nos grandes mecanismos de busca, mas a descrição, o título, o conteúdo visível, os cabeçalhos, o texto alternativo e a estrutura semântica continuam importantes.

Uma evolução moderna poderia incluir:

<link
    rel="canonical"
    href="https://vagnerbellacosa.github.io/002_WebDeveloper_ReplicaNetflix/">

E também dados estruturados em JSON-LD:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "CollectionPage",
  "name": "LusoFlix",
  "description": "Catálogo de vídeos sobre Portugal",
  "inLanguage": "pt-BR"
}
</script>

Isso ajudaria os mecanismos de busca a compreenderem que a página representa uma coleção temática.


16. GitHub Pages: o pequeno data center gratuito

O LusoFlix está publicado por meio do GitHub Pages.

Essa solução permite transformar um repositório GitHub em um site estático acessível publicamente.

O fluxo básico é:

ARQUIVOS LOCAIS
      |
      v
GIT COMMIT
      |
      v
GIT PUSH
      |
      v
REPOSITÓRIO GITHUB
      |
      v
GITHUB PAGES
      |
      v
SITE PUBLICADO

Para projetos HTML, CSS e JavaScript que não dependem de processamento no servidor, o GitHub Pages é extremamente útil.

Ele pode hospedar:

  • portfólios;

  • documentação;

  • páginas institucionais;

  • demonstrações;

  • laboratórios;

  • currículos;

  • catálogos;

  • jogos JavaScript;

  • páginas educacionais;

  • protótipos.

O repositório do LusoFlix contém diretórios separados para imagens, JavaScript e estilos, além do index.html, documentação, licença e histórico de commits. (GitHub)

Essa organização já introduz boas práticas:

/index.html
/img
/js
/style

É simples, direta e compreensível para quem está começando.


17. O que o HTML moderno permite fazer?

O LusoFlix demonstra uma parte do poder da web, mas o HTML moderno permite ir muito além.

Hoje, um navegador é quase uma pequena plataforma operacional.

Com tecnologias abertas, podemos criar:

  • players de vídeo;

  • editores;

  • jogos;

  • dashboards;

  • aplicativos offline;

  • mapas;

  • gráficos;

  • sistemas de voz;

  • videoconferência;

  • reconhecimento de dispositivos;

  • armazenamento local;

  • notificações;

  • aplicações instaláveis;

  • experiências tridimensionais.

Vamos examinar algumas possibilidades.


18. Vídeos incorporados diretamente na página

O próprio código possui um comentário indicando uma intenção futura de incorporar vídeos do YouTube ao corpo da página.

Isso poderia ser feito com:

<iframe
    src="https://www.youtube.com/embed/ID_DO_VIDEO"
    title="Vídeo sobre Portugal"
    loading="lazy"
    allowfullscreen>
</iframe>

A vantagem seria permitir a reprodução sem abandonar o LusoFlix.

Uma evolução ainda melhor seria abrir o vídeo em uma janela modal:

CLIQUE NA MINIATURA
        |
        v
ABRE MODAL
        |
        v
CARREGA PLAYER
        |
        v
REPRODUZ VÍDEO

O JavaScript poderia capturar o clique:

const cards = document.querySelectorAll('[data-video]');

cards.forEach(card => {
    card.addEventListener('click', () => {
        abrirVideo(card.dataset.video);
    });
});

Assim, cada cartão receberia:

<button data-video="ylPVYS7Rgyg">
    <img src="img/portugal0001.png" alt="Elvas">
</button>

O uso de button seria semanticamente melhor quando a ação não fosse navegar, mas abrir uma interface interna.


19. Carregamento preguiçoso de imagens

Uma página com dezenas de miniaturas pode consumir muitos recursos.

O HTML moderno oferece:

<img
    src="img/miniatura.png"
    loading="lazy"
    alt="Descrição do vídeo">

Com loading="lazy", o navegador adia o carregamento de imagens que ainda estão fora da área visível.

Isso melhora:

  • tempo inicial de abertura;

  • consumo de banda;

  • experiência em celulares;

  • desempenho;

  • métricas de carregamento.

É semelhante a não carregar um arquivo inteiro quando o programa utilizará apenas alguns registros.

A diferença é que o navegador administra esse acesso sob demanda.


20. Imagens responsivas

O atributo srcset, presente em várias imagens do projeto, pode ser explorado de forma mais completa.

Por exemplo:

<img
    src="img/lisboa-800.jpg"
    srcset="
        img/lisboa-400.jpg 400w,
        img/lisboa-800.jpg 800w,
        img/lisboa-1200.jpg 1200w
    "
    sizes="
        (max-width: 600px) 90vw,
        300px
    "
    alt="Vista histórica de Lisboa">

O navegador escolhe automaticamente a imagem mais apropriada.

Um celular não precisa baixar uma imagem de 3.000 pixels se ela será exibida em um cartão de 300 pixels.

Isso é otimização orientada pelo cliente.


21. CSS Grid: organizando catálogos complexos

O Flexbox é excelente para linhas e alinhamentos.

O CSS Grid é especialmente poderoso para layouts bidimensionais.

Uma futura página de pesquisa do LusoFlix poderia utilizar:

.catalogo {
    display: grid;
    grid-template-columns:
        repeat(auto-fit, minmax(220px, 1fr));
    gap: 1rem;
}

Essa única regra cria uma grade adaptável.

Os cartões se reorganizam conforme a largura disponível.

Em desktop:

[1] [2] [3] [4] [5]

Em tablet:

[1] [2] [3]
[4] [5]

Em celular:

[1]
[2]
[3]

Sem calcular manualmente cada posição.

É uma revolução quando comparada às antigas tabelas HTML utilizadas para diagramar páginas.


22. Busca dinâmica com JavaScript

Imagine um campo:

<input
    type="search"
    id="busca"
    placeholder="Pesquisar Lisboa, castelos, praias...">

O JavaScript poderia filtrar os cartões:

const busca = document.querySelector('#busca');
const videos = document.querySelectorAll('.video-card');

busca.addEventListener('input', evento => {
    const termo = evento.target.value.toLowerCase();

    videos.forEach(video => {
        const texto = video.textContent.toLowerCase();
        video.hidden = !texto.includes(termo);
    });
});

O usuário poderia digitar:

castelo

e visualizar apenas os vídeos relacionados.

Isso transformaria o catálogo estático em uma interface de consulta.

O equivalente mainframe seria sair de uma listagem sequencial e criar uma pesquisa indexada.


23. Catálogo alimentado por JSON

No código atual, cada vídeo é declarado manualmente no HTML.

Funciona, mas gera repetição.

Uma arquitetura moderna poderia armazenar o catálogo em JSON:

[
  {
    "titulo": "Castelo de São Jorge",
    "categoria": "Lisboa",
    "videoId": "rjypUMC2RxI",
    "imagem": "img/lisboa0002.png"
  },
  {
    "titulo": "Templo de Diana em Évora",
    "categoria": "História",
    "videoId": "gLpjM3Xn2Rk",
    "imagem": "img/Historia0001.png"
  }
]

O JavaScript carregaria esses dados:

fetch('./data/videos.json')
    .then(resposta => resposta.json())
    .then(videos => montarCatalogo(videos))
    .catch(erro => console.error(
        'Falha ao carregar catálogo:',
        erro
    ));

A página seria criada dinamicamente.

As vantagens seriam:

  • menos repetição;

  • manutenção facilitada;

  • filtros;

  • ordenação;

  • busca;

  • geração automática de categorias;

  • possibilidade de integrar APIs.

Em termos de arquitetura:

ANTES
HTML = estrutura + dados + catálogo

DEPOIS
HTML = estrutura
CSS  = apresentação
JSON = dados
JS   = montagem e comportamento

Essa separação lembra a divisão entre programa, arquivo e camada de apresentação.


24. Progressive Web App: um LusoFlix instalável

Com um arquivo de manifesto e um Service Worker, o LusoFlix poderia se tornar uma Progressive Web App, ou PWA.

Isso permitiria:

  • instalação na tela inicial;

  • ícone próprio;

  • abertura semelhante a aplicativo;

  • cache de arquivos;

  • funcionamento parcial offline;

  • carregamento mais rápido em visitas futuras.

Um manifesto básico poderia declarar:

{
  "name": "LusoFlix",
  "short_name": "LusoFlix",
  "start_url": "/",
  "display": "standalone",
  "background_color": "#141414",
  "theme_color": "#E50914"
}

O Service Worker poderia armazenar:

  • HTML;

  • CSS;

  • JavaScript;

  • logotipo;

  • imagens principais.

Naturalmente, os vídeos do YouTube ainda dependeriam de conexão.

Mas a estrutura do catálogo poderia continuar acessível.


25. Acessibilidade: o usuário que não vemos

Uma interface moderna deve ser utilizável por pessoas com diferentes necessidades.

Algumas melhorias possíveis seriam:

Navegação por teclado

Todos os cartões e controles precisam ser alcançáveis com Tab.

Foco visível

a:focus-visible,
button:focus-visible {
    outline: 3px solid white;
    outline-offset: 3px;
}

Botões semanticamente corretos

Evitar colocar <button> dentro de <a> quando uma única ação pode ser representada por um link estilizado.

Por exemplo:

<a class="botao" href="PLAYLIST">
    Assistir agora
</a>

Rótulos descritivos

<a
    href="VIDEO"
    aria-label="Assistir ao vídeo sobre o Castelo de São Jorge">

Contraste

Garantir que textos cinza possuam contraste suficiente sobre o fundo escuro.

Movimento reduzido

@media (prefers-reduced-motion: reduce) {
    * {
        scroll-behavior: auto;
        transition: none;
        animation: none;
    }
}

Uma interface acessível não é uma versão especial do sistema.

É o sistema construído corretamente.


26. Pequenas evidências encontradas no código

Toda investigação encontra detalhes curiosos.

No LusoFlix, alguns pontos merecem atenção.

Há links em determinadas seções nos quais as aspas do endereço parecem não estar encerradas antes de target="_blank".

Um exemplo conceitual do problema seria:

<a href="https://www.youtube.com/watch?v=ABC target="_blank">

O correto é:

<a
    href="https://www.youtube.com/watch?v=ABC"
    target="_blank"
    rel="noopener noreferrer">

Quando usamos target="_blank", também é recomendável adicionar:

rel="noopener noreferrer"

Isso reduz riscos associados à página aberta acessar o contexto da página original.

Também aparecem casos de atributos alt duplicados em algumas imagens.

O navegador normalmente tentará tolerar o erro, mas o HTML deveria manter apenas um atributo:

<img
    src="imagem.png"
    alt="Descrição correta">

Esses problemas não diminuem o mérito do projeto.

Ao contrário.

Eles são parte natural do aprendizado.

Todo código antigo funciona como uma fotografia do conhecimento que tínhamos quando o escrevemos.

Revisitar um projeto anos depois é semelhante a abrir um programa COBOL da década de 1990.

Você encontra:

  • decisões corretas;

  • soluções criativas;

  • limitações da época;

  • convenções antigas;

  • oportunidades de modernização;

  • e comentários que parecem mensagens deixadas por uma versão anterior de nós mesmos.


27. Modernizar sem destruir a personalidade

Uma atualização do LusoFlix não deveria apagar sua origem.

Seria um erro transformá-lo em mais um template genérico, tecnicamente perfeito e emocionalmente vazio.

A modernização ideal preservaria:

  • o nome;

  • o tema português;

  • o vermelho característico;

  • as miniaturas;

  • a divisão por localidades;

  • a conexão com o canal;

  • o caráter de diário audiovisual;

  • a simplicidade do projeto original.

Ao mesmo tempo, poderia adicionar:

  • modal de reprodução;

  • busca;

  • filtros;

  • carregamento dinâmico;

  • catálogo JSON;

  • melhor responsividade;

  • acessibilidade;

  • lazy loading;

  • dados estruturados;

  • página individual para cada vídeo;

  • favoritos em localStorage;

  • compartilhamento pela Web Share API;

  • modo claro e escuro;

  • mapa interativo de Portugal.

A modernização correta não pergunta:

Como substituímos tudo?

Ela pergunta:

O que merece permanecer e o que precisa evoluir?

Essa é a mesma pergunta feita em qualquer projeto sério de modernização de legado.


28. Um mapa interativo para as viagens

Uma expansão fascinante seria relacionar vídeos a localidades geográficas.

Cada registro poderia possuir:

{
  "titulo": "Castelo de São Jorge",
  "cidade": "Lisboa",
  "latitude": 38.7139,
  "longitude": -9.1335,
  "videoId": "..."
}

Uma biblioteca de mapas poderia apresentar marcadores em:

  • Lisboa;

  • Setúbal;

  • Évora;

  • Tavira;

  • Faro;

  • Óbidos;

  • Guimarães;

  • Fátima;

  • Sintra;

  • Tomar;

  • Leiria;

  • Elvas.

O visitante poderia clicar em um ponto do mapa e abrir o vídeo correspondente.

A experiência deixaria de ser apenas um catálogo linear.

Tornar-se-ia uma viagem digital.

MAPA
 |
 +-- LISBOA
 |     +-- CASTELO
 |     +-- OCEANÁRIO
 |     +-- BELÉM
 |
 +-- ÉVORA
 |     +-- TEMPLO DE DIANA
 |
 +-- SINTRA
       +-- CASTELO DOS MOUROS

Seria praticamente um KSDS turístico, no qual a chave de acesso seria a localização geográfica.


29. Favoritos com localStorage

O navegador permite armazenar pequenas informações localmente.

Um visitante poderia marcar vídeos favoritos:

const favoritos =
    JSON.parse(localStorage.getItem('favoritos')) || [];

function salvarFavorito(videoId) {
    if (!favoritos.includes(videoId)) {
        favoritos.push(videoId);

        localStorage.setItem(
            'favoritos',
            JSON.stringify(favoritos)
        );
    }
}

Na próxima visita, os favoritos continuariam disponíveis.

Isso não exige banco de dados nem autenticação.

É armazenamento local no navegador.

Naturalmente, possui limitações:

  • os dados ficam naquele dispositivo;

  • podem ser apagados;

  • não são sincronizados;

  • não servem para informações sensíveis.

Mas, para um catálogo pessoal, é uma solução simples e eficiente.


30. Web Share API: compartilhar uma descoberta

Em celulares compatíveis, a Web Share API permite abrir o menu nativo de compartilhamento:

async function compartilhar(video) {
    if (!navigator.share) {
        return;
    }

    await navigator.share({
        title: video.titulo,
        text: 'Conheça este lugar em Portugal',
        url: video.url
    });
}

O visitante poderia compartilhar o vídeo por:

  • WhatsApp;

  • e-mail;

  • redes sociais;

  • aplicativos instalados.

O navegador torna-se uma ponte entre a página e o sistema operacional.


31. O HTML como plataforma, não apenas marcação

Durante muitos anos, ensinar HTML significava apresentar:

<h1>
<p>
<a>
<img>
<table>

Tudo isso continua importante.

Mas a plataforma web moderna inclui muito mais.

O navegador atual oferece recursos para:

  • áudio e vídeo;

  • desenho com Canvas;

  • gráficos vetoriais SVG;

  • comunicação em tempo real;

  • armazenamento;

  • criptografia;

  • localização, mediante autorização;

  • câmera e microfone, mediante autorização;

  • arrastar e soltar;

  • arquivos locais;

  • notificações;

  • execução offline;

  • acessibilidade;

  • animações;

  • componentes personalizados;

  • integração com dispositivos.

O HTML não substitui sozinho Java, C#, COBOL ou Python.

Mas, combinado com CSS e JavaScript, ele se transforma na interface universal de inúmeros sistemas.

O navegador é hoje o terminal de acesso do mundo.

O 3270 conectava o usuário ao mainframe.

O browser conecta o usuário a:

  • nuvens;

  • APIs;

  • bancos;

  • vídeos;

  • aplicações corporativas;

  • inteligência artificial;

  • sistemas governamentais;

  • comércio eletrônico;

  • plataformas educacionais.

Mudou a tela.

A necessidade de arquitetura permaneceu.


32. Um exercício que ensina mais do que parece

À primeira vista, o LusoFlix pode parecer apenas um clone visual criado em um bootcamp.

Mas, ao investigarmos o projeto, encontramos várias disciplinas:

HTML

Estrutura, links, imagens, metadados e semântica.

CSS

Cores, Flexbox, fundos, gradientes, botões, hover e responsividade.

JavaScript

Inicialização de componentes e comportamento do carrossel.

Bibliotecas

Owl Carousel, ícones e dependências externas.

UX

Organização por categorias e ações claramente identificadas.

Arquitetura de conteúdo

Classificação dos vídeos por região e tema.

SEO

Descrição, título, Open Graph e textos alternativos.

DevOps básico

Versionamento com Git e publicação no GitHub Pages.

Produção audiovisual

Integração com vídeos e playlists do YouTube.

Identidade

Transformação de um exercício genérico em uma homenagem pessoal a Portugal.

Isso é desenvolvimento de software.

Não se trata apenas de escrever comandos.

Trata-se de combinar tecnologias para comunicar uma ideia.


33. Passo a passo para um padawan criar seu próprio catálogo

Um desenvolvedor iniciante poderia usar o LusoFlix como referência e seguir esta sequência.

Passo 1 — Escolher um tema

Pode ser:

  • viagens;

  • mainframe;

  • animes;

  • filmes clássicos;

  • cursos;

  • músicas;

  • jogos;

  • patrimônio histórico;

  • receitas;

  • vídeos familiares.

Passo 2 — Criar a estrutura

/projeto
    index.html
    /css
    /js
    /img
    /data

Passo 3 — Montar o HTML sem estilo

Primeiro, crie:

  • cabeçalho;

  • menu;

  • destaque;

  • categorias;

  • cartões;

  • rodapé.

Passo 4 — Aplicar o CSS

Defina:

  • paleta;

  • tipografia;

  • espaçamento;

  • Flexbox;

  • Grid;

  • estados de hover;

  • responsividade.

Passo 5 — Adicionar JavaScript

Implemente:

  • carrossel;

  • busca;

  • filtros;

  • modal;

  • favoritos.

Passo 6 — Trabalhar acessibilidade

Revise:

  • alt;

  • foco;

  • teclado;

  • contraste;

  • títulos;

  • rótulos.

Passo 7 — Melhorar SEO

Inclua:

  • título;

  • descrição;

  • Open Graph;

  • canonical;

  • JSON-LD;

  • conteúdo textual útil.

Passo 8 — Publicar

Use:

  • Git;

  • GitHub;

  • GitHub Pages.

Passo 9 — Testar

Teste em:

  • desktop;

  • celular;

  • tablet;

  • teclado;

  • conexão lenta;

  • imagens desativadas.

Passo 10 — Evoluir

Não tente terminar tudo na primeira versão.

Publique.

Observe.

Melhore.


34. Easter egg localizado

Entre os textos das miniaturas existe uma referência curiosa a:

42 e a resposta

Para os viajantes intergalácticos que carregam uma toalha, o número 42 é a resposta para a pergunta fundamental sobre a vida, o universo e tudo mais.

No LusoFlix, ele aparece associado a uma memória de aniversário.

É um pequeno detalhe, mas combina perfeitamente com a tradição Bellacosa:

  • tecnologia;

  • memória;

  • cultura pop;

  • viagens;

  • uma referência escondida esperando ser descoberta.

Todo bom sistema possui documentação.

Todo grande sistema possui lendas.


35. Conclusão: o clone que deixou de ser clone

O LusoFlix começou como um exercício inspirado na Netflix.

Mas chamar o projeto apenas de clone seria reduzir sua importância.

Tecnicamente, ele demonstra fundamentos essenciais:

  • HTML5;

  • CSS3;

  • Flexbox;

  • variáveis CSS;

  • gradientes;

  • responsividade;

  • bibliotecas JavaScript;

  • carrosséis;

  • integração com conteúdo externo;

  • SEO;

  • GitHub Pages.

Culturalmente, ele faz algo mais valioso.

Organiza lembranças sobre Portugal.

Transforma vídeos dispersos em coleções.

Apresenta Lisboa, Setúbal, castelos, igrejas, praias e cidades históricas como se fossem temporadas de uma grande série documental.

O visitante não encontra apenas cartões clicáveis.

Encontra registros de uma jornada.

E talvez essa seja a principal lição para quem começa a programar para a web.

Você pode aprender HTML criando uma página de exercícios.

Pode aprender CSS copiando um layout.

Pode aprender JavaScript movimentando um carrossel.

Mas o verdadeiro salto acontece quando o projeto deixa de ser uma reprodução e passa a carregar sua identidade.

O LusoFlix usa a linguagem visual de uma plataforma mundial para contar uma história pessoal sobre Portugal.

O código é simples.

A arquitetura é estática.

A infraestrutura é leve.

Mas a ideia é poderosa.

Porque software não é apenas aquilo que o computador executa.

Software também é aquilo que o desenvolvedor decide preservar.

No Bellacosa Mainframe, um registro somente existe enquanto permanece gravado.

Na web, uma memória somente atravessa o tempo quando alguém decide transformá-la em:

<article>
    <h1>Uma história que merece continuar acessível</h1>
</article>

E assim encerramos esta investigação.

O HTML estruturou a cena.

O CSS acendeu as luzes.

O JavaScript colocou o catálogo em movimento.

O YouTube armazenou as imagens do passado.

E o LusoFlix provou que um simples exercício de bootcamp pode se transformar em uma pequena cápsula digital de viagens, afetos e histórias portuguesas.

RETURN-CODE = 0000
CATÁLOGO CARREGADO
MEMÓRIA PRESERVADA
CAFÉ AINDA QUENTE

O texto já está estruturado para publicação no Blogspot, com introdução, análise técnica, exemplos, curiosidades, melhorias e conclusão no estilo Bellacosa Mainframe.

Produção original Bellacosa

LusoFlix: HTML, CSS e JavaScript

Uma coleção sobre desenvolvimento web, estudos em JavaScript, desafios de programação e o projeto LusoFlix, uma experiência visual inspirada nas plataformas de streaming e dedicada às viagens, histórias, castelos e paisagens de Portugal.

  • HTML5
  • CSS3
  • JavaScript
  • GitHub Pages
  • DIO
  • Portugal

Central de exibição

Explore o projeto e os artigos sem sair desta página. Caso o site de origem impeça a exibição em iframe, utilize o botão “Abrir original” abaixo de cada quadro.

Desenvolvimento web, JavaScript e aprendizagem contínua

O LusoFlix é um projeto front-end inspirado na experiência visual de uma plataforma de streaming. Desenvolvido com HTML, CSS e JavaScript, apresenta um catálogo de vídeos sobre Portugal organizado por temas como Lisboa, Setúbal, turismo, gastronomia, castelos, localidades históricas, igrejas, praias e rios.

O projeto demonstra como o HTML estrutura o conteúdo, como o CSS cria a identidade visual e como o JavaScript adiciona comportamento e interatividade. A publicação no GitHub Pages transforma o repositório em uma aplicação acessível diretamente pelo navegador.

JavaScript e plano de estudos

O artigo Dia 7: JavaScript e Plano de Estudos apresenta uma estratégia de aprendizagem baseada em aulas, exercícios, anotações, pesquisas, documentação oficial, repositórios GitHub, depuração no navegador e prática constante.

Bootcamps, desafios e comunidade

O artigo Dia 21: Minha incrível aventura nos desafios da DIO registra experiências com cursos, bootcamps, laboratórios, desafios de programação, VS Code, Node.js, fóruns, mentorias e produção de conhecimento para a comunidade de desenvolvedores.

Juntos, os três conteúdos formam uma pequena trilogia sobre criação, estudo e evolução profissional: primeiro o programador organiza sua aprendizagem, depois enfrenta os desafios e, finalmente, transforma conhecimento em um projeto web publicado.

Bellacosa Mainframe Developer Collection
HTML, CSS, JavaScript, GitHub Pages, educação tecnológica e compartilhamento de conhecimento.
Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...