Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found

Submitted

Advice Generator App w/ (HTML + SASS + JS + API) đŸ‘šâ€đŸ’»

#accessibility#fetch#webpack#sass/scss
Adriano‱ 33,960

@AdrianoEscarabote

Desktop design screenshot for the Advice generator app coding challenge

This is a solution for...

  • HTML
  • CSS
  • JS
  • API
2junior
View challenge

Design comparison


SolutionDesign

Solution retrospective


đŸ‘šâ€đŸ’» Hello everyone. This is my solution for Advice Generator App.

This was my first project consuming an API, I learned a lot of things, but I feel that I need to study a little more about it, that is, my next projects will have API integration, after all I need to practice and learn a little more about it!

Also for the first time using babel and webpack I tried to make my folders as organized as possible, with babel I made my js code accessible to all browsers! and with webpack I compiled all the modules used in the development of the project to the dist folder! feel free to comment on how I can improve the organization!

I have added:

  • đŸ‘šâ€đŸ’» This API has a mechanism that only accepts a request every 2 seconds, to solve this problem and the user doesn't keep clicking on the button and doesn't see any changes, I added a slightly slower animation!

Feel free to leave comments on how I can improve my code.

Thanks! 😊

Community feedback

P
Vander Santos‱ 1,750

@vanderms

Posted

Adorei sua solução! Parabéns!

Sobre babel e webpack, eu achei interessante que vocĂȘ tenha optado por configurar vocĂȘ mesmo a integração dessas duas tecnologias no projeto e imagino que deve ter sido uma experiĂȘncia incrĂ­vel como fonte de aprendizado.

Contudo, talvez seja importante observar que mesmo em projetos vanilla (sem uso de frameworks) o usual seria usar uma solução pronta que jå vem com transpiladores, builders, preprocessadores CSS e outras funcionalidades "out of the box", como Parcel ou Vite.

Outro ponto Ă© que, embora webpack ainda seja um bundler bastante popular, nos Ășltimos anos ele tem sido visto, nĂŁo sem alguma polĂȘmica, como um tanto ultrapassado. Recentemente, por exemplo, nextjs construiu um bundler chamado turbopack com Rust que Ă© supostamente 700 vezes mais rĂĄpido que Webpack.

O que eu particularmente nĂŁo gosto do Webpack Ă© que qualquer coisa que vocĂȘ precisa adicionar ao projeto Ă© um saco para configurar. Por exemplo, se eu quiser adicionar postcss a um projeto com webpack vou perder de uma a duas horas pesquisando como fazer isso e mais duas horas tentando entender o que deu de errado :).

Enfim, mais uma vez parabéns. Continue o excelente trabalho!

Marked as helpful

2

Adriano‱ 33,960

@AdrianoEscarabote

Posted

@vanderms Obrigado Vander!

Sim, foi bem legal e diferente fazer um projeto com o babel e o webpack, confesso que eu achei ele bem demorado kkkkk é interessante saber que existem outras opçÔes e possivelmente melhores que ele.

Eu ainda sou novo nesses termos de bundler, mas valeu demais por compartilhar o seu conhecimento!

vocĂȘ Ă© brabo!

1
Julio Cinquina‱ 270

@JulioCinquina

Posted

ParabĂ©ns pela solução, Adriano! 🎉

Ainda quero fazer esse desafio e aprender a usar o Babel e o Webpack.

Algumas sugestÔes para melhorar a acessibilidade:

1 - Usar uma borda transparente no botĂŁo (border: 1px solid transparent) em vez de removĂȘ-la totalmente com border: none. Essa borda transparente aparece quando o sistema estĂĄ no modo de alto contraste, deixando o botĂŁo mais visĂ­vel.

2 - Indicar que o botão estå em foco para usuårios que navegam com o teclado. Aqui, bastaria remover o outline: none. Assim, o próprio navegador adiciona um contorno ao focar no botão com a tecla Tab. Nos meus testes, isso não alterou o visual do botão. Esse contorno pode ser personalizado através da pseudoclasse focus-visible.

E é bastante comum aplicar os estilos de :hover à pseudoclasse :focus, o que também ajuda a indicar o foco no botão ao navegar com o teclado.

Um artigo sobre essa questĂŁo da borda e do contorno (focus ring): Use transparent borders and outlines to assist with high contrast mode (Andy Bell)

3 - Fazer com que o novo conselho seja lido para usuĂĄrios de leitores de tela. No momento, usando um leitor de tela, o novo texto nĂŁo Ă© lido automaticamente depois de apertar o botĂŁo; o usuĂĄrio precisa "navegar para trĂĄs" para perceber que o texto mudou.

Um jeito fåcil de fazer isso é colocando o atributo aria-live="polite" no elemento que contém o texto do conselho. Assim, o novo texto é lido automaticamente depois de carregar.

PorĂ©m, testando esse mĂ©todo, vi que tanto o TalkBack no Android quanto o VoiceOver no iOS leem o novo texto com a voz do idioma do sistema (portuguĂȘs, no meu caso) em vez de no idioma da pĂĄgina, entĂŁo a pronĂșncia fica estranha. Um jeito de resolver isso Ă© voltar a focar no texto apĂłs ele ser atualizado. Este vĂ­deo mostra como fazer isso: Managing Focus - A11ycasts #22

Achei uma boa ideia vocĂȘ ter colocado uma animação mais demorada para simular um carregamento do texto, jĂĄ que a API tem um cachĂȘ de dois segundos.

O usuårio ainda pode sair clicando vårias vezes no botão, o que resulta em vårias requisiçÔes por segundo (veja a aba "Rede" nas DevTools).

Se quiser implementar um mecanismo no front-end para prevenir um "spam" de requisiçÔes, vocĂȘ pode desativar o botĂŁo apĂłs o clique e sĂł reativĂĄ-lo depois do tempo do seu setTimeout() (adicionando e removendo o atributo "disabled"):

button.addEventListener("click", () => {
  // ...
  button.setAttribute("disabled", "");

  setTimeout(async () => {
    await loadAdvice();
    button.removeAttribute("disabled");
  }, 960);
});

Parabéns mais uma vez pela solução! Espero ter ajudado!

Marked as helpful

1

Adriano‱ 33,960

@AdrianoEscarabote

Posted

@JulioCinquina Nossa muito obrigado Julio, ajudou muito mano!

vou anotar e ler todos os links que vocĂȘ mandou S2

0
hernannadotti‱ 560

@hernannadotti

Posted

Hi @AdrianoEscarabote awesome work! Mianly the flip square animation!! But something weird with the initial load of advices, in the first second the app show us one and quickly change to no another... Can you see it ? Thanks!

Marked as helpful

1

Adriano‱ 33,960

@AdrianoEscarabote

Posted

@hernannadotti yea! I had noticed that but I forgot to fix it hahah

this is happening due to the fact that I put the defer attribute in the js file, and as i imported my css in it, and used webpack to compile everything when the page loads first it renders the HTML, and then the CSS and the js!

Thanks for remembering!

0
hernannadotti‱ 560

@hernannadotti

Posted

@AdrianoEscarabote awrsome. You welcome

0

Please log in to post a comment

Log in with GitHub
Discord logo

Join our Discord community

Join thousands of Frontend Mentor community members taking the challenges, sharing resources, helping each other, and chatting about all things front-end!

Join our Discord