diff --git a/projects/frontend/beginner/01-todo-list-app/README.md b/projects/frontend/beginner/01-todo-list-app/README.md
index fa0e83f..54cba98 100644
--- a/projects/frontend/beginner/01-todo-list-app/README.md
+++ b/projects/frontend/beginner/01-todo-list-app/README.md
@@ -1,34 +1,92 @@
# To-do List App
-## Idea
-Build a simple to-do list application where users can add, complete, and delete tasks. Learn fundamentals of DOM manipulation, state management, and local storage.
+> 🌐 **English** · [Português](./README.pt-BR.md)
+
+**Domain:** Frontend · **Level:** Beginner · **Estimated time:** 3–6 hours
+
+## Overview
+
+Build the classic to-do list: a single screen where a user types a task, presses Enter, sees it appear, checks it off when done, and removes it when it no longer matters. It looks trivial, but it is the smallest complete example of the core frontend loop — user input changes state, and state re-renders the UI. Everything is driven by an in-memory array of task objects that you persist to `localStorage` so the list survives a page reload. There is no server and no framework requirement; the interesting work is keeping your data model and what the user sees perfectly in sync.
+
+## Prerequisites
+
+- Basic HTML, CSS, and JavaScript (variables, arrays, functions)
+- How to read from and write to the DOM, or a component framework of your choice
+- Familiarity with array methods (`map`, `filter`, `find`)
+- A code editor and a browser with dev tools
## Learning Objectives
-- Understand DOM manipulation
-- Implement state management basics
-- Use local storage for persistence
-- Build interactive UI
-- Handle user events
-
-## Implementation Tips
-- Create task objects with id, title, completed status
-- Store tasks in local storage
-- Implement add task functionality
-- Add complete/uncomplete toggle
-- Implement delete task
-- Add visual feedback for completed tasks
-- Create clear all completed tasks button
-- Add task count display
-- Implement filter (all/active/completed)
-- Add keyboard shortcuts (Enter to add)
-- Create animations for task operations
-- Add task editing capability
-- Implement due dates (optional)
-- Create themed styling
-
-## Key Challenges
-- Local storage synchronization
-- State consistency
-- UI responsiveness
-- Local storage size limits
-- Task ordering and sorting
+
+By the end, you should be able to:
+
+- Model UI as a function of a single source-of-truth state
+- Add, toggle, edit, and delete items immutably rather than mutating in place
+- Persist and rehydrate state with the `localStorage` API
+- Render a filtered view (all / active / completed) without losing the underlying data
+- Wire up keyboard and click interactions with accessible, labelled controls
+
+## Functional Requirements
+
+1. The user can type a task and add it by pressing Enter or clicking an Add button.
+2. Empty or whitespace-only tasks must be rejected without adding a blank row.
+3. Each task can be toggled between active and completed, with a clear visual difference.
+4. The user can delete any individual task.
+5. A live counter shows how many tasks remain active.
+6. The user can filter the list by all, active, or completed.
+7. The full list must survive a page refresh via `localStorage`.
+
+## Suggested Milestones
+
+1. **Milestone 1 — Add & render:** Capture input, push a task object to state, render the list.
+2. **Milestone 2 — Toggle & delete:** Mark tasks done and remove them, updating the counter.
+3. **Milestone 3 — Filter & persist:** Add the filter view and save/load from `localStorage`.
+
+## Data & Interface Sketch
+
+```text
+Task
+ id: string (crypto.randomUUID())
+ title: string
+ completed: boolean
+ createdAt: number (Date.now())
+
+Layout
++------------------------------------------+
+| [ new task input............ ] [ Add ] |
++------------------------------------------+
+| [x] Buy milk (del) |
+| [ ] Call dentist (del) |
++------------------------------------------+
+| 1 item left [All] [Active] [Completed] |
++------------------------------------------+
+```
+
+## Stretch Goals
+
+- Inline edit: double-click a task title to rename it.
+- Add a "Clear completed" button that removes all done tasks at once.
+- Allow reordering tasks by drag-and-drop.
+- Add a light/dark theme toggle stored alongside the tasks.
+
+## Definition of Done
+
+- [ ] Adding, toggling, and deleting update both the UI and stored state.
+- [ ] Blank tasks cannot be added.
+- [ ] The remaining-items counter is always accurate after any action.
+- [ ] Filters change the visible list without discarding hidden tasks.
+- [ ] Reloading the page restores the exact previous list.
+
+## Common Pitfalls
+
+- Mutating the state array directly instead of producing a new one, causing stale renders.
+- Storing rendered HTML strings instead of a clean data model, making filters and edits painful.
+- Forgetting to `JSON.parse` / `JSON.stringify` around `localStorage`, which only stores strings.
+- Using array index as a key/id, which breaks after deletion and reordering.
+- Skipping labels on the checkbox and buttons, leaving the app unusable with a screen reader.
+
+## Resources
+
+- [MDN: Web Storage API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API) — how `localStorage` works and its limits.
+- [MDN: Introduction to the DOM](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Introduction) — reading and updating the page.
+- [web.dev: Learn Accessibility — Forms](https://web.dev/learn/accessibility/forms) — labelling inputs and controls.
+- [roadmap.sh: Frontend](https://roadmap.sh/frontend) — where these fundamentals sit in the bigger picture.
diff --git a/projects/frontend/beginner/01-todo-list-app/README.pt-BR.md b/projects/frontend/beginner/01-todo-list-app/README.pt-BR.md
new file mode 100644
index 0000000..6ebe23e
--- /dev/null
+++ b/projects/frontend/beginner/01-todo-list-app/README.pt-BR.md
@@ -0,0 +1,92 @@
+# Aplicativo de Lista de Tarefas
+
+> 🌐 [English](./README.md) · **Português**
+
+**Domínio:** Frontend · **Nível:** Iniciante · **Tempo estimado:** 3–6 horas
+
+## Visão Geral
+
+Construa a clássica lista de tarefas: uma única tela onde o usuário digita uma tarefa, pressiona Enter, a vê aparecer, marca como concluída e a remove quando não importa mais. Parece trivial, mas é o menor exemplo completo do laço central do frontend — a entrada do usuário muda o estado, e o estado re-renderiza a UI. Tudo é conduzido por um array de objetos de tarefa em memória que você persiste no `localStorage` para que a lista sobreviva a um recarregamento. Não há servidor nem exigência de framework; o trabalho interessante é manter seu modelo de dados e o que o usuário vê perfeitamente sincronizados.
+
+## Pré-requisitos
+
+- HTML, CSS e JavaScript básicos (variáveis, arrays, funções)
+- Como ler e escrever no DOM, ou um framework de componentes à sua escolha
+- Familiaridade com métodos de array (`map`, `filter`, `find`)
+- Um editor de código e um navegador com ferramentas de desenvolvedor
+
+## Objetivos de Aprendizado
+
+Ao final, você deve ser capaz de:
+
+- Modelar a UI como uma função de um único estado como fonte da verdade
+- Adicionar, alternar, editar e excluir itens de forma imutável em vez de mutar no lugar
+- Persistir e reidratar o estado com a API `localStorage`
+- Renderizar uma visão filtrada (todas / ativas / concluídas) sem perder os dados subjacentes
+- Conectar interações de teclado e clique com controles acessíveis e rotulados
+
+## Requisitos Funcionais
+
+1. O usuário pode digitar uma tarefa e adicioná-la pressionando Enter ou clicando em um botão Adicionar.
+2. Tarefas vazias ou só com espaços devem ser rejeitadas sem adicionar uma linha em branco.
+3. Cada tarefa pode ser alternada entre ativa e concluída, com uma diferença visual clara.
+4. O usuário pode excluir qualquer tarefa individual.
+5. Um contador ao vivo mostra quantas tarefas permanecem ativas.
+6. O usuário pode filtrar a lista por todas, ativas ou concluídas.
+7. A lista completa deve sobreviver a um recarregamento da página via `localStorage`.
+
+## Marcos Sugeridos
+
+1. **Marco 1 — Adicionar e renderizar:** Capture a entrada, adicione um objeto de tarefa ao estado, renderize a lista.
+2. **Marco 2 — Alternar e excluir:** Marque tarefas como feitas e remova-as, atualizando o contador.
+3. **Marco 3 — Filtrar e persistir:** Adicione a visão de filtro e salve/carregue do `localStorage`.
+
+## Esboço de Dados e Interface
+
+```text
+Tarefa
+ id: string (crypto.randomUUID())
+ title: string
+ completed: boolean
+ createdAt: number (Date.now())
+
+Layout
++------------------------------------------+
+| [ nova tarefa............... ] [Adicionar]|
++------------------------------------------+
+| [x] Comprar leite (del) |
+| [ ] Ligar para o dentista (del) |
++------------------------------------------+
+| 1 item restante [Todas][Ativas][Feitas] |
++------------------------------------------+
+```
+
+## Desafios Extras
+
+- Edição em linha: dê um duplo clique no título de uma tarefa para renomeá-la.
+- Adicione um botão "Limpar concluídas" que remove todas as tarefas feitas de uma vez.
+- Permita reordenar tarefas com arrastar e soltar.
+- Adicione um alternador de tema claro/escuro armazenado junto com as tarefas.
+
+## Definição de Pronto
+
+- [ ] Adicionar, alternar e excluir atualizam tanto a UI quanto o estado armazenado.
+- [ ] Tarefas em branco não podem ser adicionadas.
+- [ ] O contador de itens restantes está sempre correto após qualquer ação.
+- [ ] Os filtros mudam a lista visível sem descartar tarefas ocultas.
+- [ ] Recarregar a página restaura exatamente a lista anterior.
+
+## Armadilhas Comuns
+
+- Mutar o array de estado diretamente em vez de produzir um novo, causando renderizações desatualizadas.
+- Armazenar strings de HTML renderizado em vez de um modelo de dados limpo, tornando filtros e edições penosos.
+- Esquecer o `JSON.parse` / `JSON.stringify` em torno do `localStorage`, que só armazena strings.
+- Usar o índice do array como chave/id, o que quebra após exclusão e reordenação.
+- Pular rótulos nas caixas de seleção e botões, deixando o app inutilizável com um leitor de tela.
+
+## Recursos
+
+- [MDN: Web Storage API](https://developer.mozilla.org/pt-BR/docs/Web/API/Web_Storage_API) — como o `localStorage` funciona e seus limites.
+- [MDN: Introdução ao DOM](https://developer.mozilla.org/pt-BR/docs/Web/API/Document_Object_Model/Introduction) — ler e atualizar a página.
+- [web.dev: Learn Accessibility — Forms](https://web.dev/learn/accessibility/forms) — rotular entradas e controles.
+- [roadmap.sh: Frontend](https://roadmap.sh/frontend) — onde esses fundamentos se encaixam no quadro maior.
diff --git a/projects/frontend/beginner/02-calculator-ui/README.md b/projects/frontend/beginner/02-calculator-ui/README.md
index bcd9ea2..cd8d982 100644
--- a/projects/frontend/beginner/02-calculator-ui/README.md
+++ b/projects/frontend/beginner/02-calculator-ui/README.md
@@ -1,34 +1,93 @@
# Calculator UI
-## Idea
-Create a functional calculator UI with basic arithmetic operations. Learn about event handling, string manipulation, and UI state management.
+> 🌐 **English** · [Português](./README.pt-BR.md)
+
+**Domain:** Frontend · **Level:** Beginner · **Estimated time:** 3–6 hours
+
+## Overview
+
+Build a working calculator with a keypad, a display, and the four basic operations. The visual layout is the easy half; the real lesson is modelling calculator behaviour as a small state machine. A user taps `7`, `+`, `3`, `=` — each key means something different depending on what came before. You will track the current entry, the pending operator, and the accumulated value, and decide what every button does in every state. Get that model right and edge cases like chaining operations or pressing `=` twice stop being surprises.
+
+## Prerequisites
+
+- Basic HTML, CSS, and JavaScript
+- CSS Grid or Flexbox for laying out a button pad
+- Comfort with `switch`/conditional logic and number parsing
+- A code editor and a browser with dev tools
## Learning Objectives
-- Handle button click events
-- Manage calculator state
-- Implement operation logic
-- Format number display
-- Handle edge cases
-
-## Implementation Tips
-- Design calculator layout with buttons
-- Implement number input handling
-- Add arithmetic operations (+, -, *, /)
-- Implement equals functionality
-- Add clear/reset button
-- Display current calculation
-- Handle decimal numbers
-- Implement backspace functionality
-- Add operation chaining
-- Implement percentage calculation
-- Add keyboard support
-- Create responsive design
-- Add operation history (optional)
-- Implement memory functions (optional)
-
-## Key Challenges
-- Floating point precision
-- Operation chaining logic
-- State management during calculations
-- Keyboard vs mouse input
-- Error handling (division by zero)
+
+By the end, you should be able to:
+
+- Represent interactive behaviour as explicit state rather than reading the display back as data
+- Handle operator precedence for a simple left-to-right calculator and chained operations
+- Format numeric output and avoid raw floating-point artefacts
+- Support both mouse/touch and physical keyboard input for the same actions
+- Guard against invalid states like multiple decimals or division by zero
+
+## Functional Requirements
+
+1. The calculator performs addition, subtraction, multiplication, and division.
+2. The display shows the number being entered and the result after `=`.
+3. Pressing an operator after a result uses that result as the new left operand (chaining).
+4. A clear button resets all state; a backspace removes the last entered digit.
+5. Only one decimal point is allowed per number.
+6. Division by zero shows a clear error state rather than `Infinity` or `NaN`.
+7. Number and operator keys on the physical keyboard mirror the on-screen buttons.
+
+## Suggested Milestones
+
+1. **Milestone 1 — Entry & display:** Build the keypad and show digits, decimals, and backspace.
+2. **Milestone 2 — Single operation:** Store an operator and left operand, compute on `=`.
+3. **Milestone 3 — Chaining & guards:** Chain operations, handle clear, decimals, and divide-by-zero.
+
+## Data & Interface Sketch
+
+```text
+State
+ current: string (digits being typed, e.g. "12.5")
+ operator: "+"|"-"|"*"|"/"|null
+ accumulator: number|null
+ justEvaluated: boolean
+
+Layout (4-column grid)
++-------------------------------+
+| 123.45 | <- display
++-------------------------------+
+| C | +/- | % | / |
+| 7 | 8 | 9 | * |
+| 4 | 5 | 6 | - |
+| 1 | 2 | 3 | + |
+| 0 | . | = |
++-------------------------------+
+```
+
+## Stretch Goals
+
+- Add a running history/tape of previous calculations.
+- Add memory keys (M+, M-, MR, MC).
+- Support percentage relative to the current accumulator.
+- Add a keyboard-only mode with visible focus indicators on each key.
+
+## Definition of Done
+
+- [ ] All four operations produce correct results, including chained sequences.
+- [ ] The display never shows `NaN`, `Infinity`, or `undefined`.
+- [ ] Clear fully resets state; backspace edits the current entry only.
+- [ ] Keyboard and on-screen buttons behave identically.
+- [ ] Only one decimal point can be entered per number.
+
+## Common Pitfalls
+
+- Using the display text as your source of truth instead of a separate state model.
+- Concatenating strings for math and getting `"1" + "2" = "12"` instead of `3`.
+- Ignoring floating-point rounding, so `0.1 + 0.2` shows `0.30000000000000004`.
+- Forgetting the "just evaluated" flag, so the next digit appends to the result instead of starting fresh.
+- Leaving buttons as non-focusable `
`s, breaking keyboard access.
+
+## Resources
+
+- [MDN: Number.prototype.toFixed()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed) — controlling decimal display.
+- [MDN: CSS Grid Layout](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_grid_layout) — laying out the keypad.
+- [0.30000000000000004.com](https://0.30000000000000004.com/) — why floating-point math misbehaves.
+- [MDN: KeyboardEvent.key](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key) — mapping physical keys to actions.
diff --git a/projects/frontend/beginner/02-calculator-ui/README.pt-BR.md b/projects/frontend/beginner/02-calculator-ui/README.pt-BR.md
new file mode 100644
index 0000000..80214a7
--- /dev/null
+++ b/projects/frontend/beginner/02-calculator-ui/README.pt-BR.md
@@ -0,0 +1,93 @@
+# Calculadora (UI)
+
+> 🌐 [English](./README.md) · **Português**
+
+**Domínio:** Frontend · **Nível:** Iniciante · **Tempo estimado:** 3–6 horas
+
+## Visão Geral
+
+Construa uma calculadora funcional com teclado, visor e as quatro operações básicas. O layout visual é a metade fácil; a lição real é modelar o comportamento da calculadora como uma pequena máquina de estados. Um usuário toca `7`, `+`, `3`, `=` — cada tecla significa algo diferente dependendo do que veio antes. Você vai rastrear a entrada atual, o operador pendente e o valor acumulado, e decidir o que cada botão faz em cada estado. Acerte esse modelo e casos limítrofes como encadear operações ou pressionar `=` duas vezes deixam de ser surpresas.
+
+## Pré-requisitos
+
+- HTML, CSS e JavaScript básicos
+- CSS Grid ou Flexbox para dispor um teclado de botões
+- Conforto com lógica de `switch`/condicionais e parsing de números
+- Um editor de código e um navegador com ferramentas de desenvolvedor
+
+## Objetivos de Aprendizado
+
+Ao final, você deve ser capaz de:
+
+- Representar o comportamento interativo como estado explícito em vez de ler o visor de volta como dado
+- Tratar a ordem das operações de uma calculadora simples da esquerda para a direita e operações encadeadas
+- Formatar a saída numérica e evitar artefatos brutos de ponto flutuante
+- Suportar entrada por mouse/toque e por teclado físico para as mesmas ações
+- Proteger contra estados inválidos como múltiplos decimais ou divisão por zero
+
+## Requisitos Funcionais
+
+1. A calculadora realiza adição, subtração, multiplicação e divisão.
+2. O visor mostra o número sendo digitado e o resultado após `=`.
+3. Pressionar um operador após um resultado usa esse resultado como novo operando à esquerda (encadeamento).
+4. Um botão limpar reseta todo o estado; um backspace remove o último dígito digitado.
+5. Apenas um ponto decimal é permitido por número.
+6. Divisão por zero mostra um estado de erro claro em vez de `Infinity` ou `NaN`.
+7. Teclas de número e operador no teclado físico espelham os botões da tela.
+
+## Marcos Sugeridos
+
+1. **Marco 1 — Entrada e visor:** Construa o teclado e mostre dígitos, decimais e backspace.
+2. **Marco 2 — Operação única:** Armazene um operador e o operando à esquerda, calcule no `=`.
+3. **Marco 3 — Encadeamento e proteções:** Encadeie operações, trate limpar, decimais e divisão por zero.
+
+## Esboço de Dados e Interface
+
+```text
+Estado
+ current: string (dígitos sendo digitados, ex.: "12.5")
+ operator: "+"|"-"|"*"|"/"|null
+ accumulator: number|null
+ justEvaluated: boolean
+
+Layout (grade de 4 colunas)
++-------------------------------+
+| 123.45 | <- visor
++-------------------------------+
+| C | +/- | % | / |
+| 7 | 8 | 9 | * |
+| 4 | 5 | 6 | - |
+| 1 | 2 | 3 | + |
+| 0 | . | = |
++-------------------------------+
+```
+
+## Desafios Extras
+
+- Adicione um histórico/fita das cálculos anteriores.
+- Adicione teclas de memória (M+, M-, MR, MC).
+- Suporte porcentagem relativa ao acumulador atual.
+- Adicione um modo somente teclado com indicadores de foco visíveis em cada tecla.
+
+## Definição de Pronto
+
+- [ ] As quatro operações produzem resultados corretos, incluindo sequências encadeadas.
+- [ ] O visor nunca mostra `NaN`, `Infinity` ou `undefined`.
+- [ ] Limpar reseta totalmente o estado; backspace edita apenas a entrada atual.
+- [ ] Teclado e botões da tela se comportam de forma idêntica.
+- [ ] Apenas um ponto decimal pode ser inserido por número.
+
+## Armadilhas Comuns
+
+- Usar o texto do visor como fonte da verdade em vez de um modelo de estado separado.
+- Concatenar strings para a matemática e obter `"1" + "2" = "12"` em vez de `3`.
+- Ignorar o arredondamento de ponto flutuante, fazendo `0.1 + 0.2` mostrar `0.30000000000000004`.
+- Esquecer o sinalizador "acabou de avaliar", de modo que o próximo dígito se anexa ao resultado em vez de começar do zero.
+- Deixar botões como `
`s não focáveis, quebrando o acesso pelo teclado.
+
+## Recursos
+
+- [MDN: Number.prototype.toFixed()](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed) — controlar a exibição de decimais.
+- [MDN: CSS Grid Layout](https://developer.mozilla.org/pt-BR/docs/Web/CSS/CSS_grid_layout) — dispor o teclado.
+- [0.30000000000000004.com](https://0.30000000000000004.com/) — por que a matemática de ponto flutuante se comporta mal.
+- [MDN: KeyboardEvent.key](https://developer.mozilla.org/pt-BR/docs/Web/API/KeyboardEvent/key) — mapear teclas físicas para ações.
diff --git a/projects/frontend/beginner/03-static-portfolio/README.md b/projects/frontend/beginner/03-static-portfolio/README.md
index 2a32740..2189d45 100644
--- a/projects/frontend/beginner/03-static-portfolio/README.md
+++ b/projects/frontend/beginner/03-static-portfolio/README.md
@@ -1,34 +1,99 @@
# Static Portfolio Website
-## Idea
-Build a personal portfolio website showcasing projects and skills. Learn about semantic HTML, CSS styling, and responsive design.
+> 🌐 **English** · [Português](./README.pt-BR.md)
+
+**Domain:** Frontend · **Level:** Beginner · **Estimated time:** 3–6 hours
+
+## Overview
+
+Build a personal portfolio site that presents who you are, what you have built, and how to reach you — all as static, content-first pages with no backend. The point is not flashy animation; it is writing clean, semantic HTML and a responsive CSS layout that reads well from a 320px phone to a wide desktop. You will structure real sections (intro, projects, skills, contact), make the navigation usable by keyboard and screen reader, and let the content drive the design rather than the other way around. Done well, this becomes something you actually deploy and link on your résumé.
+
+## Prerequisites
+
+- HTML fundamentals and the difference between semantic and generic elements
+- CSS box model, Flexbox, and CSS Grid basics
+- An understanding of media queries and relative units (`rem`, `%`, `vw`)
+- A code editor and a browser with dev tools
## Learning Objectives
-- Create semantic HTML structure
-- Implement responsive CSS layout
-- Use CSS Grid and Flexbox
-- Implement navigation
-- Create professional styling
-
-## Implementation Tips
-- Create sections: header, about, projects, skills, contact
-- Design responsive navigation bar
-- Add project showcase with descriptions
-- Implement skills section with categories
-- Create contact form or links
-- Add smooth scrolling navigation
-- Implement mobile-responsive design
-- Add footer with social links
-- Create dark mode toggle (optional)
-- Add project filtering by category
-- Implement lazy loading for images
-- Add scroll-to-top button
-- Create animations on scroll
-- Add blog or testimonials section
-
-## Key Challenges
-- Responsive design across devices
-- CSS complexity management
-- Image optimization
-- Scroll performance
-- Browser compatibility
+
+By the end, you should be able to:
+
+- Structure a page with semantic landmarks (`header`, `nav`, `main`, `section`, `footer`)
+- Build a layout that reflows gracefully across screen sizes without horizontal scroll
+- Use Grid and Flexbox for the right jobs (page skeleton vs. component alignment)
+- Write accessible navigation with a logical heading order and visible focus states
+- Optimize images with responsive `srcset`/`sizes` and meaningful `alt` text
+
+## Functional Requirements
+
+1. The site has clearly separated sections: intro/hero, about, projects, skills, and contact.
+2. A navigation bar links to each section and works with keyboard and touch.
+3. The layout is fully responsive with no horizontal overflow at 320px width.
+4. Each project entry shows a title, short description, and a link to code or a live demo.
+5. All images have descriptive `alt` text; decorative images use empty `alt`.
+6. Headings follow a single, logical order (`h1` → `h2` → `h3`) with no skipped levels.
+7. Color contrast meets WCAG AA for body text and interactive elements.
+
+## Suggested Milestones
+
+1. **Milestone 1 — Structure & content:** Write the semantic HTML for all sections with real placeholder content.
+2. **Milestone 2 — Responsive layout:** Style with Grid/Flexbox and add media queries for mobile, tablet, and desktop.
+3. **Milestone 3 — Polish & a11y:** Add focus states, contrast fixes, responsive images, and smooth in-page navigation.
+
+## Data & Interface Sketch
+
+```text
+Page landmarks
+ header > nav (logo + section links)
+ main
+ section#hero (name, role, one-line pitch, CTA)
+ section#about (short bio)
+ section#projects (grid of project cards)
+ section#skills (grouped skill tags)
+ section#contact (email + social links)
+ footer (copyright, back-to-top)
+
+Project card
+ title: string
+ summary: string
+ tags: string[]
+ repoUrl / liveUrl: string
+
+Desktop grid Mobile (stacked)
++----+----+----+ +-----------+
+| c1 | c2 | c3 | | c1 |
++----+----+----+ --> +-----------+
+| c4 | c5 | c6 | | c2 |
++----+----+----+ +-----------+
+```
+
+## Stretch Goals
+
+- Add a light/dark theme toggle that respects `prefers-color-scheme`.
+- Filter projects by tag/category without a page reload.
+- Add subtle scroll-reveal animations gated behind `prefers-reduced-motion`.
+- Deploy to a free static host and wire up a custom domain.
+
+## Definition of Done
+
+- [ ] Every section is reachable from the nav by mouse, touch, and keyboard.
+- [ ] The layout has zero horizontal scroll from 320px up to desktop widths.
+- [ ] All content images have appropriate `alt` text.
+- [ ] Heading levels are ordered with no skips, and there is exactly one `h1`.
+- [ ] Text and interactive colors pass WCAG AA contrast.
+
+## Common Pitfalls
+
+- Wrapping everything in `
`s instead of semantic landmarks, hurting screen-reader navigation.
+- Fixed pixel widths that force horizontal scrolling on small screens.
+- Skipping heading levels (`h1` straight to `h4`) for visual size instead of using CSS.
+- Low-contrast "designer grey" text that fails accessibility checks.
+- Shipping huge unoptimized images that tank load time on mobile.
+
+## Resources
+
+- [MDN: HTML elements reference](https://developer.mozilla.org/en-US/docs/Web/HTML/Element) — choosing the right semantic element.
+- [web.dev: Learn Responsive Design](https://web.dev/learn/design) — building layouts that adapt.
+- [web.dev: Learn Accessibility](https://web.dev/learn/accessibility) — landmarks, headings, and contrast.
+- [MDN: Responsive images](https://developer.mozilla.org/en-US/docs/Web/HTML/Responsive_images) — `srcset` and `sizes`.
diff --git a/projects/frontend/beginner/03-static-portfolio/README.pt-BR.md b/projects/frontend/beginner/03-static-portfolio/README.pt-BR.md
new file mode 100644
index 0000000..2800e94
--- /dev/null
+++ b/projects/frontend/beginner/03-static-portfolio/README.pt-BR.md
@@ -0,0 +1,99 @@
+# Site de Portfólio Estático
+
+> 🌐 [English](./README.md) · **Português**
+
+**Domínio:** Frontend · **Nível:** Iniciante · **Tempo estimado:** 3–6 horas
+
+## Visão Geral
+
+Construa um site de portfólio pessoal que apresenta quem você é, o que você construiu e como entrar em contato — tudo como páginas estáticas focadas em conteúdo, sem backend. O objetivo não é animação chamativa; é escrever HTML semântico e limpo e um layout CSS responsivo que se leia bem de um celular de 320px a um desktop largo. Você vai estruturar seções reais (introdução, projetos, habilidades, contato), tornar a navegação utilizável por teclado e leitor de tela, e deixar o conteúdo guiar o design em vez do contrário. Bem feito, isso se torna algo que você de fato publica e coloca no currículo.
+
+## Pré-requisitos
+
+- Fundamentos de HTML e a diferença entre elementos semânticos e genéricos
+- Modelo de caixa do CSS, Flexbox e o básico de CSS Grid
+- Entendimento de media queries e unidades relativas (`rem`, `%`, `vw`)
+- Um editor de código e um navegador com ferramentas de desenvolvedor
+
+## Objetivos de Aprendizado
+
+Ao final, você deve ser capaz de:
+
+- Estruturar uma página com marcos semânticos (`header`, `nav`, `main`, `section`, `footer`)
+- Construir um layout que se rearranja graciosamente em vários tamanhos de tela sem rolagem horizontal
+- Usar Grid e Flexbox para os trabalhos certos (esqueleto da página vs. alinhamento de componente)
+- Escrever navegação acessível com ordem lógica de títulos e estados de foco visíveis
+- Otimizar imagens com `srcset`/`sizes` responsivos e texto `alt` significativo
+
+## Requisitos Funcionais
+
+1. O site tem seções claramente separadas: introdução/hero, sobre, projetos, habilidades e contato.
+2. Uma barra de navegação leva a cada seção e funciona com teclado e toque.
+3. O layout é totalmente responsivo, sem estouro horizontal em 320px de largura.
+4. Cada entrada de projeto mostra um título, uma descrição curta e um link para o código ou uma demo ao vivo.
+5. Todas as imagens têm texto `alt` descritivo; imagens decorativas usam `alt` vazio.
+6. Os títulos seguem uma ordem única e lógica (`h1` → `h2` → `h3`) sem pular níveis.
+7. O contraste de cores atende ao WCAG AA para texto de corpo e elementos interativos.
+
+## Marcos Sugeridos
+
+1. **Marco 1 — Estrutura e conteúdo:** Escreva o HTML semântico de todas as seções com conteúdo de exemplo real.
+2. **Marco 2 — Layout responsivo:** Estilize com Grid/Flexbox e adicione media queries para celular, tablet e desktop.
+3. **Marco 3 — Polimento e acessibilidade:** Adicione estados de foco, correções de contraste, imagens responsivas e navegação suave na página.
+
+## Esboço de Dados e Interface
+
+```text
+Marcos da página
+ header > nav (logo + links de seção)
+ main
+ section#hero (nome, cargo, frase de efeito, CTA)
+ section#about (bio curta)
+ section#projects (grade de cartões de projeto)
+ section#skills (tags de habilidades agrupadas)
+ section#contact (e-mail + links sociais)
+ footer (copyright, voltar ao topo)
+
+Cartão de projeto
+ title: string
+ summary: string
+ tags: string[]
+ repoUrl / liveUrl: string
+
+Grade desktop Celular (empilhado)
++----+----+----+ +-----------+
+| c1 | c2 | c3 | | c1 |
++----+----+----+ --> +-----------+
+| c4 | c5 | c6 | | c2 |
++----+----+----+ +-----------+
+```
+
+## Desafios Extras
+
+- Adicione um alternador de tema claro/escuro que respeite `prefers-color-scheme`.
+- Filtre projetos por tag/categoria sem recarregar a página.
+- Adicione animações sutis de revelação ao rolar, condicionadas a `prefers-reduced-motion`.
+- Publique em um host estático gratuito e configure um domínio personalizado.
+
+## Definição de Pronto
+
+- [ ] Toda seção é alcançável pela navegação por mouse, toque e teclado.
+- [ ] O layout tem zero rolagem horizontal de 320px até larguras de desktop.
+- [ ] Todas as imagens de conteúdo têm texto `alt` apropriado.
+- [ ] Os níveis de título estão ordenados sem pulos, e há exatamente um `h1`.
+- [ ] As cores de texto e interativas passam no contraste WCAG AA.
+
+## Armadilhas Comuns
+
+- Envolver tudo em `
`s em vez de marcos semânticos, prejudicando a navegação por leitor de tela.
+- Larguras fixas em pixels que forçam rolagem horizontal em telas pequenas.
+- Pular níveis de título (`h1` direto para `h4`) por tamanho visual em vez de usar CSS.
+- Texto "cinza de designer" de baixo contraste que falha nas verificações de acessibilidade.
+- Publicar imagens enormes e não otimizadas que arruínam o tempo de carga no celular.
+
+## Recursos
+
+- [MDN: Referência de elementos HTML](https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element) — escolher o elemento semântico certo.
+- [web.dev: Learn Responsive Design](https://web.dev/learn/design) — construir layouts que se adaptam.
+- [web.dev: Learn Accessibility](https://web.dev/learn/accessibility) — marcos, títulos e contraste.
+- [MDN: Imagens responsivas](https://developer.mozilla.org/pt-BR/docs/Web/HTML/Responsive_images) — `srcset` e `sizes`.
diff --git a/projects/frontend/beginner/04-weather-app/README.md b/projects/frontend/beginner/04-weather-app/README.md
index b224d9e..31d621d 100644
--- a/projects/frontend/beginner/04-weather-app/README.md
+++ b/projects/frontend/beginner/04-weather-app/README.md
@@ -1,34 +1,97 @@
-# Weather App (API consumption)
+# Weather App
-## Idea
-Create a weather application that fetches and displays weather data from an API. Learn about HTTP requests, API integration, and data display.
+> 🌐 **English** · [Português](./README.pt-BR.md)
+
+**Domain:** Frontend · **Level:** Beginner · **Estimated time:** 3–6 hours
+
+## Overview
+
+Build a small app where a user types a city, and you fetch and display its current weather from a public API. This is the beginner's first real taste of the async web: a request goes out, time passes, and something — data, an error, or nothing — comes back. The interesting work is not the layout but handling the three states every network UI must show: loading, success, and failure. You will read JSON, map it onto a clean view, and make sure the user is never staring at a frozen screen wondering what happened.
+
+## Prerequisites
+
+- JavaScript basics including functions and objects
+- Promises and `async`/`await`, or `.then()` chains
+- How to read API documentation and inspect a JSON response
+- A free API key from a weather provider (e.g. OpenWeather or Open-Meteo, which needs none)
## Learning Objectives
-- Make API requests with fetch/axios
-- Parse JSON responses
-- Handle API errors
-- Display API data in UI
-- Implement loading states
-
-## Implementation Tips
-- Use free weather API
-- Create search by city functionality
-- Display current weather with icon
-- Show temperature, humidity, wind speed
-- Implement forecast view (daily/hourly)
-- Add weather alerts
-- Create favorite cities list
-- Implement geolocation for current weather
-- Add unit conversion (C/F)
-- Display weather maps
-- Create loading and error states
-- Add weather history
-- Implement caching to reduce API calls
-- Create dark/light theme based on weather
-
-## Key Challenges
-- API rate limiting handling
-- Error states and user feedback
-- Geolocation permission handling
-- Data caching strategy
-- Weather icon selection
+
+By the end, you should be able to:
+
+- Make HTTP requests with `fetch` and parse a JSON response
+- Model and render explicit loading, success, and error states
+- Handle failures gracefully: bad city, network error, non-200 responses
+- Keep an API key out of source control and understand its limits
+- Transform raw API data into a small, UI-friendly shape
+
+## Functional Requirements
+
+1. The user can search for a city by name and trigger a weather lookup.
+2. While the request is in flight, a loading indicator is shown.
+3. On success, the UI shows temperature, a condition description, and humidity.
+4. An unknown city or failed request shows a clear, human-readable error message.
+5. Rapid repeated submissions must not leave a stale result on screen.
+6. The search input is keyboard-accessible and submittable via Enter.
+7. Temperature units are labelled explicitly (°C or °F).
+
+## Suggested Milestones
+
+1. **Milestone 1 — Fetch & display:** Call the API for a hardcoded city and render the result.
+2. **Milestone 2 — Search & states:** Wire up the input, add loading and error handling.
+3. **Milestone 3 — Robustness:** Handle empty input, bad cities, and out-of-order responses.
+
+## Data & Interface Sketch
+
+```text
+View state (one of)
+ { status: "idle" }
+ { status: "loading" }
+ { status: "success", data: Weather }
+ { status: "error", message: string }
+
+Weather (mapped from API JSON)
+ city: string
+ tempC: number
+ condition: string ("Clouds", "Rain", ...)
+ humidity: number (percent)
+ icon: string (code -> your own icon)
+
+Layout
++--------------------------------------+
+| [ search city......... ] [ Search ] |
++--------------------------------------+
+| London [ loading... ] |
+| 18°C Cloudy Humidity 72% |
++--------------------------------------+
+```
+
+## Stretch Goals
+
+- Add a multi-day forecast below the current conditions.
+- Toggle between Celsius and Fahrenheit without re-fetching.
+- Use the Geolocation API to load weather for the user's current location.
+- Cache the last successful result so a reload shows something instantly.
+
+## Definition of Done
+
+- [ ] A valid city shows real weather data with a labelled unit.
+- [ ] Loading, success, and error states each render distinctly.
+- [ ] A nonexistent city produces a friendly error, not a blank screen or crash.
+- [ ] The API key is not committed to the repository.
+- [ ] Submitting with Enter and clicking Search behave identically.
+
+## Common Pitfalls
+
+- Assuming `fetch` rejects on HTTP errors — it only rejects on network failure; check `response.ok`.
+- Forgetting to handle the loading state, so the UI looks broken during the request.
+- Race conditions where a slow earlier request overwrites a newer result.
+- Hardcoding and committing your API key, then hitting rate limits or leaking it.
+- Rendering the raw API JSON shape directly, coupling your UI to the provider.
+
+## Resources
+
+- [MDN: Using the Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch) — requests, responses, and error checking.
+- [MDN: Response.ok](https://developer.mozilla.org/en-US/docs/Web/API/Response/ok) — why you must check status yourself.
+- [Open-Meteo API](https://open-meteo.com/en/docs) — a free weather API with no key required.
+- [web.dev: Loading states and skeletons](https://web.dev/articles/optimize-cls) — communicating progress to users.
diff --git a/projects/frontend/beginner/04-weather-app/README.pt-BR.md b/projects/frontend/beginner/04-weather-app/README.pt-BR.md
new file mode 100644
index 0000000..328d214
--- /dev/null
+++ b/projects/frontend/beginner/04-weather-app/README.pt-BR.md
@@ -0,0 +1,97 @@
+# Aplicativo de Clima
+
+> 🌐 [English](./README.md) · **Português**
+
+**Domínio:** Frontend · **Nível:** Iniciante · **Tempo estimado:** 3–6 horas
+
+## Visão Geral
+
+Construa um pequeno app onde o usuário digita uma cidade, e você busca e exibe o clima atual dela a partir de uma API pública. Este é o primeiro gostinho real da web assíncrona para iniciantes: uma requisição sai, o tempo passa, e algo — dados, um erro ou nada — volta. O trabalho interessante não é o layout, mas tratar os três estados que toda UI de rede precisa mostrar: carregando, sucesso e falha. Você vai ler JSON, mapeá-lo em uma visão limpa e garantir que o usuário nunca fique olhando para uma tela congelada sem saber o que aconteceu.
+
+## Pré-requisitos
+
+- Básico de JavaScript incluindo funções e objetos
+- Promises e `async`/`await`, ou cadeias de `.then()`
+- Como ler a documentação de uma API e inspecionar uma resposta JSON
+- Uma chave de API gratuita de um provedor de clima (ex.: OpenWeather ou Open-Meteo, que não requer nenhuma)
+
+## Objetivos de Aprendizado
+
+Ao final, você deve ser capaz de:
+
+- Fazer requisições HTTP com `fetch` e analisar uma resposta JSON
+- Modelar e renderizar estados explícitos de carregamento, sucesso e erro
+- Tratar falhas graciosamente: cidade inválida, erro de rede, respostas não-200
+- Manter uma chave de API fora do controle de versão e entender seus limites
+- Transformar dados brutos da API em um formato pequeno e amigável à UI
+
+## Requisitos Funcionais
+
+1. O usuário pode buscar uma cidade pelo nome e disparar uma consulta de clima.
+2. Enquanto a requisição está em andamento, um indicador de carregamento é exibido.
+3. No sucesso, a UI mostra temperatura, uma descrição da condição e umidade.
+4. Uma cidade desconhecida ou requisição falha mostra uma mensagem de erro clara e legível.
+5. Envios repetidos e rápidos não devem deixar um resultado desatualizado na tela.
+6. O campo de busca é acessível por teclado e enviável via Enter.
+7. As unidades de temperatura são rotuladas explicitamente (°C ou °F).
+
+## Marcos Sugeridos
+
+1. **Marco 1 — Buscar e exibir:** Chame a API para uma cidade fixa e renderize o resultado.
+2. **Marco 2 — Busca e estados:** Conecte o campo de entrada, adicione carregamento e tratamento de erro.
+3. **Marco 3 — Robustez:** Trate entrada vazia, cidades inválidas e respostas fora de ordem.
+
+## Esboço de Dados e Interface
+
+```text
+Estado da view (um de)
+ { status: "idle" }
+ { status: "loading" }
+ { status: "success", data: Weather }
+ { status: "error", message: string }
+
+Weather (mapeado do JSON da API)
+ city: string
+ tempC: number
+ condition: string ("Clouds", "Rain", ...)
+ humidity: number (percentual)
+ icon: string (código -> seu próprio ícone)
+
+Layout
++--------------------------------------+
+| [ buscar cidade....... ] [ Buscar ] |
++--------------------------------------+
+| London [ carregando... ] |
+| 18°C Nublado Umidade 72% |
++--------------------------------------+
+```
+
+## Desafios Extras
+
+- Adicione uma previsão de vários dias abaixo das condições atuais.
+- Alterne entre Celsius e Fahrenheit sem refazer a busca.
+- Use a API de Geolocalização para carregar o clima da localização atual do usuário.
+- Faça cache do último resultado bem-sucedido para que um recarregamento mostre algo instantaneamente.
+
+## Definição de Pronto
+
+- [ ] Uma cidade válida mostra dados reais de clima com uma unidade rotulada.
+- [ ] Os estados de carregamento, sucesso e erro renderizam distintamente.
+- [ ] Uma cidade inexistente produz um erro amigável, não uma tela em branco ou travamento.
+- [ ] A chave de API não é commitada no repositório.
+- [ ] Enviar com Enter e clicar em Buscar se comportam de forma idêntica.
+
+## Armadilhas Comuns
+
+- Assumir que o `fetch` rejeita em erros HTTP — ele só rejeita em falha de rede; verifique `response.ok`.
+- Esquecer de tratar o estado de carregamento, fazendo a UI parecer quebrada durante a requisição.
+- Condições de corrida onde uma requisição anterior lenta sobrescreve um resultado mais novo.
+- Fixar e commitar sua chave de API, e então atingir limites de taxa ou vazá-la.
+- Renderizar o formato bruto do JSON da API diretamente, acoplando sua UI ao provedor.
+
+## Recursos
+
+- [MDN: Usando a Fetch API](https://developer.mozilla.org/pt-BR/docs/Web/API/Fetch_API/Using_Fetch) — requisições, respostas e verificação de erro.
+- [MDN: Response.ok](https://developer.mozilla.org/en-US/docs/Web/API/Response/ok) — por que você deve verificar o status por conta própria.
+- [Open-Meteo API](https://open-meteo.com/en/docs) — uma API de clima gratuita sem chave requerida.
+- [web.dev: Loading states](https://web.dev/articles/optimize-cls) — comunicar progresso aos usuários.
diff --git a/projects/frontend/beginner/05-simple-blog-ui/README.md b/projects/frontend/beginner/05-simple-blog-ui/README.md
index 65e1f61..347feef 100644
--- a/projects/frontend/beginner/05-simple-blog-ui/README.md
+++ b/projects/frontend/beginner/05-simple-blog-ui/README.md
@@ -1,34 +1,100 @@
# Simple Blog UI
-## Idea
-Create a blog interface displaying posts and content. Learn about content display, filtering, and navigation between pages.
+> 🌐 **English** · [Português](./README.pt-BR.md)
+
+**Domain:** Frontend · **Level:** Beginner · **Estimated time:** 3–6 hours
+
+## Overview
+
+Build the reading side of a blog: a list of posts you can browse, search, and filter by category, plus a detail view for reading a single post in full. There is no writing or backend — posts come from a local JSON file or a small in-memory array — so the focus stays on presenting content clearly and moving between a list and a detail without a full page reload. This is where beginners first meet the idea of a "view": the same data rendered two ways, and simple client-side navigation that keeps the URL and the screen in agreement.
+
+## Prerequisites
+
+- HTML, CSS, and JavaScript fundamentals
+- Array methods (`filter`, `map`, `find`) for list transformations
+- Basic understanding of client-side routing or show/hide view switching
+- A component framework of your choice is optional but welcome
## Learning Objectives
-- Display lists of content
-- Implement post pagination
-- Create post detail view
-- Build search functionality
-- Implement category filtering
-
-## Implementation Tips
-- Design blog layout with post list
-- Create post card components
-- Implement post detail/full view
-- Add pagination or infinite scroll
-- Create search functionality
-- Implement category filtering
-- Add tags display
-- Create author information
-- Implement comment display (optional)
-- Add reading time estimate
-- Create related posts section
-- Add breadcrumb navigation
-- Implement table of contents for posts
-- Add sharing buttons
-
-## Key Challenges
-- Large post list performance
-- Search functionality implementation
-- Pagination logic
-- Category management
-- Content formatting
+
+By the end, you should be able to:
+
+- Render a list of items from a data source and a detail view for one item
+- Implement client-side search and category filtering over the same dataset
+- Navigate between list and detail views while keeping state consistent
+- Paginate or lazily reveal a long list without overwhelming the DOM
+- Present readable typography and an accessible reading order
+
+## Functional Requirements
+
+1. The home view lists posts with title, excerpt, category, and estimated reading time.
+2. Selecting a post opens a detail view showing its full content.
+3. A search box filters the list by matching title or excerpt text.
+4. Category filters narrow the list; clearing them restores the full set.
+5. A long list is paginated or uses "load more" rather than rendering everything at once.
+6. The user can return from a detail view to the list without losing their filter.
+7. Each post detail has a single `h1` and a logical heading structure.
+
+## Suggested Milestones
+
+1. **Milestone 1 — List & detail:** Load posts and render the list, then a full detail view on selection.
+2. **Milestone 2 — Search & filter:** Add text search and category filtering over the dataset.
+3. **Milestone 3 — Navigation & paging:** Preserve filters across views and paginate the list.
+
+## Data & Interface Sketch
+
+```text
+Post
+ id: string
+ title: string
+ excerpt: string
+ body: string
+ category: string
+ publishedAt: string (ISO-8601)
+ readMinutes: number
+
+Views
+ list -> filtered/paged array of Post summaries
+ detail -> one Post by id
+
+Layout (list) Layout (detail)
++-------------------------+ +----------------------+
+| [ search ] [Category v] | | < Back |
++-------------------------+ | Title (h1) |
+| Post card | | meta: cat · 5 min |
+| Post card | | |
+| Post card | | body paragraphs... |
++-------------------------+ +----------------------+
+| < 1 2 3 > |
++-------------------------+
+```
+
+## Stretch Goals
+
+- Sync the current view and filters to the URL (query params or hash) so links are shareable.
+- Add a tag cloud and cross-link related posts by shared tags.
+- Add a table of contents generated from the post's headings.
+- Show a "no results" empty state with a way to reset filters.
+
+## Definition of Done
+
+- [ ] The list and detail views render the same data correctly from one source.
+- [ ] Search and category filters combine and can be cleared.
+- [ ] Returning to the list preserves the active search and filter.
+- [ ] A long list does not render all posts to the DOM at once.
+- [ ] Each detail page has exactly one `h1` and ordered headings.
+
+## Common Pitfalls
+
+- Duplicating post data for the list and detail instead of deriving both from one source.
+- Losing the active filter when navigating back from a detail view.
+- Case-sensitive search that misses obvious matches.
+- Rendering hundreds of cards up front, making the page janky.
+- Forgetting an empty state, so a filtered-out list looks like a bug.
+
+## Resources
+
+- [MDN: Array.prototype.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) — building search and category filtering.
+- [MDN: History API](https://developer.mozilla.org/en-US/docs/Web/API/History_API) — reflecting views in the URL.
+- [web.dev: Learn Accessibility — Content structure](https://web.dev/learn/accessibility/structure) — headings and reading order.
+- [MDN: Working with JSON](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON) — loading and parsing local data.
diff --git a/projects/frontend/beginner/05-simple-blog-ui/README.pt-BR.md b/projects/frontend/beginner/05-simple-blog-ui/README.pt-BR.md
new file mode 100644
index 0000000..6510baf
--- /dev/null
+++ b/projects/frontend/beginner/05-simple-blog-ui/README.pt-BR.md
@@ -0,0 +1,100 @@
+# Interface de Blog Simples
+
+> 🌐 [English](./README.md) · **Português**
+
+**Domínio:** Frontend · **Nível:** Iniciante · **Tempo estimado:** 3–6 horas
+
+## Visão Geral
+
+Construa o lado de leitura de um blog: uma lista de posts que você pode navegar, buscar e filtrar por categoria, mais uma visão de detalhe para ler um único post por completo. Não há escrita nem backend — os posts vêm de um arquivo JSON local ou de um pequeno array em memória — então o foco fica em apresentar o conteúdo com clareza e transitar entre uma lista e um detalhe sem recarregar a página inteira. É aqui que iniciantes encontram pela primeira vez a ideia de uma "view": os mesmos dados renderizados de duas formas, e uma navegação simples no cliente que mantém a URL e a tela em acordo.
+
+## Pré-requisitos
+
+- Fundamentos de HTML, CSS e JavaScript
+- Métodos de array (`filter`, `map`, `find`) para transformações de listas
+- Entendimento básico de roteamento no cliente ou alternância mostrar/ocultar de views
+- Um framework de componentes à sua escolha é opcional, mas bem-vindo
+
+## Objetivos de Aprendizado
+
+Ao final, você deve ser capaz de:
+
+- Renderizar uma lista de itens de uma fonte de dados e uma visão de detalhe para um item
+- Implementar busca no cliente e filtragem por categoria sobre o mesmo conjunto de dados
+- Navegar entre as views de lista e detalhe mantendo o estado consistente
+- Paginar ou revelar preguiçosamente uma lista longa sem sobrecarregar o DOM
+- Apresentar tipografia legível e uma ordem de leitura acessível
+
+## Requisitos Funcionais
+
+1. A view inicial lista posts com título, resumo, categoria e tempo estimado de leitura.
+2. Selecionar um post abre uma view de detalhe mostrando seu conteúdo completo.
+3. Uma caixa de busca filtra a lista comparando o texto do título ou do resumo.
+4. Filtros de categoria restringem a lista; limpá-los restaura o conjunto completo.
+5. Uma lista longa é paginada ou usa "carregar mais" em vez de renderizar tudo de uma vez.
+6. O usuário pode retornar de uma view de detalhe para a lista sem perder seu filtro.
+7. Cada detalhe de post tem um único `h1` e uma estrutura lógica de títulos.
+
+## Marcos Sugeridos
+
+1. **Marco 1 — Lista e detalhe:** Carregue os posts e renderize a lista, depois uma view de detalhe completa na seleção.
+2. **Marco 2 — Busca e filtro:** Adicione busca por texto e filtragem por categoria sobre o conjunto de dados.
+3. **Marco 3 — Navegação e paginação:** Preserve filtros entre views e pagine a lista.
+
+## Esboço de Dados e Interface
+
+```text
+Post
+ id: string
+ title: string
+ excerpt: string
+ body: string
+ category: string
+ publishedAt: string (ISO-8601)
+ readMinutes: number
+
+Views
+ list -> array filtrado/paginado de resumos de Post
+ detail -> um Post por id
+
+Layout (lista) Layout (detalhe)
++-------------------------+ +----------------------+
+| [ busca ] [Categoria v] | | < Voltar |
++-------------------------+ | Título (h1) |
+| Cartão de post | | meta: cat · 5 min |
+| Cartão de post | | |
+| Cartão de post | | parágrafos... |
++-------------------------+ +----------------------+
+| < 1 2 3 > |
++-------------------------+
+```
+
+## Desafios Extras
+
+- Sincronize a view atual e os filtros com a URL (query params ou hash) para que os links sejam compartilháveis.
+- Adicione uma nuvem de tags e cruze links de posts relacionados por tags compartilhadas.
+- Adicione um sumário gerado a partir dos títulos do post.
+- Mostre um estado vazio de "nenhum resultado" com uma forma de resetar os filtros.
+
+## Definição de Pronto
+
+- [ ] As views de lista e detalhe renderizam os mesmos dados corretamente de uma fonte.
+- [ ] Busca e filtros de categoria se combinam e podem ser limpos.
+- [ ] Retornar à lista preserva a busca e o filtro ativos.
+- [ ] Uma lista longa não renderiza todos os posts no DOM de uma vez.
+- [ ] Cada página de detalhe tem exatamente um `h1` e títulos ordenados.
+
+## Armadilhas Comuns
+
+- Duplicar os dados do post para a lista e o detalhe em vez de derivar ambos de uma fonte.
+- Perder o filtro ativo ao voltar de uma view de detalhe.
+- Busca sensível a maiúsculas que perde correspondências óbvias.
+- Renderizar centenas de cartões de imediato, deixando a página travada.
+- Esquecer um estado vazio, fazendo uma lista totalmente filtrada parecer um bug.
+
+## Recursos
+
+- [MDN: Array.prototype.filter()](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) — construir busca e filtragem por categoria.
+- [MDN: History API](https://developer.mozilla.org/pt-BR/docs/Web/API/History_API) — refletir views na URL.
+- [web.dev: Learn Accessibility — Content structure](https://web.dev/learn/accessibility/structure) — títulos e ordem de leitura.
+- [MDN: Trabalhando com JSON](https://developer.mozilla.org/pt-BR/docs/Learn/JavaScript/Objects/JSON) — carregar e analisar dados locais.
diff --git a/projects/frontend/beginner/06-login-register-forms/README.md b/projects/frontend/beginner/06-login-register-forms/README.md
index 93b095d..04448b2 100644
--- a/projects/frontend/beginner/06-login-register-forms/README.md
+++ b/projects/frontend/beginner/06-login-register-forms/README.md
@@ -1,34 +1,98 @@
-# Login/Register Forms
+# Login & Register Forms
-## Idea
-Build authentication forms for user login and registration. Learn about form validation, error handling, and secure input handling.
+> 🌐 **English** · [Português](./README.pt-BR.md)
+
+**Domain:** Frontend · **Level:** Beginner · **Estimated time:** 3–6 hours
+
+## Overview
+
+Build the front end for authentication: a login form and a registration form with real, client-side validation. There is no backend — you simulate submission — so the lesson is entirely about form UX, which is where a huge amount of frontend craft lives. You will validate fields as the user types, show precise error messages next to the right inputs, disable submission until the form is valid, and do all of it accessibly so screen-reader users know exactly what went wrong. Getting validation timing and messaging right is the difference between a form people complete and one they abandon.
+
+## Prerequisites
+
+- HTML forms, inputs, and the `