Categorias
PWA - Progressive web apps WordPress

Programando com o plugin de PWA para WordPress

Nesse post vamos ver como editar as propriedades do web app manifest json com o plugin de PWA oficial do google. No meu canal do YouTube recentemente fiz um vídeo falando sobre o plugin, e como transformar seu site WordPress em uma PWA. Nesse vídeo vamos ver como podemos alterar algumas propriedades via código.

Se você ainda não conhece o plugin, tem um post no blog sobre o o plugin.

Página do plugin PWA para WordPress

Utilizando o plugin temos dois caminhos criar um mini plugin ou adicionar uma função no functions.php do nosso tema. Para esse tutorial vamos utilizar o arquivo functions.php.

Um exemplo básico podemos alterar o short_name do nosso manifest.json essa propriedade pode ter no máximo 12 caracteres por padrão ela ler o título do site, caso tenha um título maior que 12 caracteres não teremos um manifest json válido para resolver esse problema adicionamos o seguinte código em nosso arquivo functions.php de nosso tema:

add_filter( 'web_app_manifest', function( $manifest ) { $manifest['short_name'] = 'Shortness'; return $manifest; } );

No código acima adicionamos um filtro na chamada da função web_app_manifest e interceptamos o array com as propriedades do manifest.json e alteramos o elemento responsável pela propriedade short_name.

O segundo exemplo é um pouco mais complexo pois vamos acessar a lista de ícones de nossa aplicação. Recentemente o lighthouse adicionou em sua auditoria a validação para maskable icons e ainda não saiu uma nova versão com essa propriedade, pode ser que no futuro temos essa propriedade disponível mas por enquanto que a atualização não sai podemos ver como editar o nosso manifest.json e corrigir esse problema, para isso vamos adicionar o seguinte código em nosso functions.php:

add_filter( 'web_app_manifest', function( $manifest ) { $manifest['icons'] = array_map( function ( $icon ) { if ( ! isset( $icon['purpose'] ) ) { $icon['purpose'] = 'any maskable'; } return $icon; }, $manifest['icons'] ); return $manifest; } );

Novamente adicionamos um filtro na função “web_app_manifest” ela recebe um parâmetro $manifest um array que contém as configurações do web app manifest. Assim conseguimos acessar o item do array com índice ‘icons’ e adicionamos uma nova propriedade ‘purpose’ atrelada ao ícone e por fim retornamos o manifest com os novos valores.

Propriedades

O manifest json é formado com os seguintes valores por padrão:

  • name: o título do site vindo da função get_option('blogname')
  • short_name: copia do título do site não maior que 12 caracteres
  • description: tag line do site vindo da função get_option('blogdescription')
  • lang: o idioma do site por get_bloginfo( 'language' )
  • dir: a direção de leitura do site is_rtl()
  • start_url: a home da aplicação get_home_url()
  • theme_color: vindo do background customizado via get_background_color()
  • background_color: também vindo do background customizado
  • displayminimal-ui é o valor padrão.
  • icons: os ícones do site via get_site_icon_url()

Todos os valores mencionados anteriormente podem ser alterados com a inclusão de filtros que vimos anteriormente. Então ficamos por aqui com esse post outro tipo de customização que conseguimos fazer com o plugin é a parte de estratégias de cache para isso vou dedicar um segundo post para entrar em mais detalhes. Mais posts sobre WordPress confiram a página da categoria.

Categorias
PWA - Progressive web apps

Novidades no Web app manifest: app shortcuts

Já anunciado nos eventos MSbuild e Web.dev live web app manifest tem algumas novas funcionalidades. Já nas versões 84 do Chrome Mobile e 85 para desktop agora temos a possibilidade de adicionar atalhos dentro de nossa aplicações com manifest.json.

Esse recursos para você usuário Apple, já era comum em apps nativos quando o usuário pressionava e segurava o ícone do aplicativo opções dentro do app eram exibidas. Como na imagem a seguir:

Exemplo de app shortcuts nativos no iOS

O recursos é ideal quando você deseja redirecionar usuários para funcionalidades chave de sua aplicação, navegação principal, buscas ou atividade de entrada de dados. Atualmente esse recurso pode ser implementado em Progressive Web apps em dispositivos Android e Windows desktop com Chrome e Edge o esse recurso em inglês é chamado de “app shortcuts” e conseguimos adicionar essa funcionalidade através da propriedade shortcuts.

Implementação

Para adicionar app shortcuts em nossa PWA precisamos adicionar a seguinte propriedade “shortcuts” em nosso manifest.json:

"shortcuts": [ { "name": "Abrir Contatos", "short_name": "Contatos", "description": "Visualize a lista de contatos cadastrados", "url": "/contatos", "icons": [ { "src": "//contatos.png", "sizes": "192x192" } ] }, ]

Shortcuts espera um array de atalhos com as seguintes propriedades:

  • name: nome mais descritivo
  • short_name(opcional): nome alternativo para ser usado em áreas de espaço limitado.
  • description(opcional): descrição do app pode ser utilizado pelo OS e tecnologias assistivas no futuro.
  • url: a url a qual o App irá abrir. Essa URL precisa estar no escopo do manifest.json para isso precisa ser uma URL relativa.
  • icons: um array de ícones para o atalho com as propriedades: src, sizes e type(opcional).

SVG não são suportados para ícones utilize para esse caso PNG. Os tamanhos esperados são 36×36 48×48, 72×72, 96×96, 144×144 e 192×192 pixels.

Caso queira testa os seus apps shortcuts eles estarão visíveis no devtools do chrome ou edge na aba de aplicação dentro da seção do manifest, como podemos ver na imagem a seguir:

Boas práticas

Agora que sabemos como implementar atalhos em nossa pwa vamos falar sobre algumas boas práticas:

  • Ordene os app shortcuts por prioridades
  • Utiliza nomes distintos para seus atalhos
  • Mesure o uso dos atalhos via google analytics exemplo “/contatos?utm_source=homescreen”

Para finalizar vamos dar uma olhada em nosso código do manifest.json completo:

{ "name": "Tutoriais Fellyph Web APIs", "display": "standalone", "start_url": "/", "short_name": "Web APIs", "theme_color": "#DA2461", "description": "Essa é uma aplicação de teste", "orientation": "any", "background_color": "#DA2461", "icons": [ { "src": "assets/icons/icon_512.png", "sizes": "512x512" }, { "src": "assets/icons/icon_192.png", "sizes": "192x192" } ], "shortcuts": [ { "name": "Geo Location API", "short_name": "Geo API", "description": "Acesse exemplos de geo localiização", "url": "/01_geolocation/01-example-geolocation-final.html", "icons": [ { "src": "//icons/gelocalizacao.png", "sizes": "192x192" } ] }, { "name": "Fetch API", "short_name": "Fecth API", "description": "Acesse exemplos utilizando a fetch api", "url": "/02_fetch_api/01-example-xmlhttp-request-final.html", "icons": [ { "src": "//icons/fetch.png", "sizes": "192x192" } ] }, { "name": "IndexedDB API", "short_name": "IndexedDB", "description": "Acesse exemplos utilizando IndexedDB", "url": "/03_indexedDB/01-indexedDB-events.html", "icons": [ { "src": "//icons/indexed.png", "sizes": "192x192" } ] } ] }

Fiz um pequeno texto com a aplicação que estamos desenvolvendo no curso de PWA e no windows o resultado será o seguinte:

Como podemos ver no screenshot no menu de opções temos os atalhos que definimos em nosso web app manifest.

Publiquei um post recentemente sobre o recurso em meu canal do youtube:

Então é isso pessoal o recurso novo nem todos os sistemas operacionais, windows e android já adicionaram o suporte agora só falta o suporte no iOS e MacOS. Para ler mais posts sobre PWA acesse a página da categoria PWA e até o próximo post.

Categorias
PWA - Progressive web apps

Adicionando os ícones para PWAs no iOS

Para adicionar ícones para PWA no iOS precisamos adicionar tags com diferentes tamanhos de imagens para serem usadas na tela principal dos usuário Apple, esses tamanhos mudaram com o passar dos anos em diferentes versões do Sistema operacional.

Nesse post vamos ver como Implementar esse recurso, Agosto de 2020 Safari ainda não segue as recomendações da W3C e utiliza um modo alternativo para definir os ícones de uma PWA, existe uma sinalização de parte do time do WebKit engine responsável pelo safari, mas isso já vem se arrastando a anos.

Enquanto o recurso na é padronizado precisamos, adicionar os ícones através da tag link passando um a propriedade rel=”apple-touch-icon”

<link rel="apple-touch-icon" href="/endereço-do-meu_icone.png">

Como mencionei anteriormente o tamanho muda entre versões do iOS atualmente os tamanhos esperados são 192×192 ou 180×180. A imagem precisa ser um PNG sem transparência.

Em versões mais antigas do iOS antes da versão 7 a propriedade era rel=”apple-touch-icon-precomposed” nesse caso podemos adicionar mais de uma tag caso queira adicionar fallback em sua aplicação web para versões antigas do iOS. E caso queira implementar os fallbacks os tamanhos serão:

  • 57×57px – iPhone iPod Touch sem display retina
  • 72×72px – iPad and iPad mini rodando iOS ≤ 6
  • 76×76px – iPad and iPad mini rodando iOS ≥ 7
  • 114×114px – iPhone com display retina iOS ≤ 6
  • 120×120px – iPhone com display retina rodando iOS ≥ 7
  • 144×144px – iPad and iPad mini com display retina rodando iOS ≤ 6
  • 152×152px – iPad and iPad mini com display retina rodando iOS 7
  • 180×180px – iPad and iPad mini com display retina rodando iOS 8+

Para adicionar uma aplicação em um dispositivo iOS o processo é um pouco escondido, primeiramente precisamos ir no botão de compartilhar:

Botão de compartilhar do safari

Em seguida precisamos adicionar nossa aplicação na tela principal:

Tela com a opção adicionando a tela principal

Por exemplo, uma aplicação sem a propriedade o ícone será um screenshot da sua aplicação como na imagem a seguir:

Exemplo de ícone sem a propriedade

Depois da adição do ícone apple-touch-icon o resultado será o o seguinte:

Resultado final com a adição da propriedade.

Esse é um conteúdo base do curso de PWA, para acompanhar as aulas acesso a playlist do curso: https://www.youtube.com/playlist?list=PLmIA3VZysEqQCi5xOJJDb5QIYgHwPhf_D

Para mais posts sobre Progressive web apps acesse a página da categoria: https://blog.fellyph.com.br/category/pwa/

Categorias
WordPress

Web Stories para WordPress

Stories nos últimos anos se tornou um dos conteúdos mais consumidos no mundo dos dispositivos móveis, formato introduzido pelo Snapchat se popularizou no Instagram e em seguida se espalhou pelo facebook, whatsApp e recentemente foi adicionado no LinkedIn.

Um ponto que todas essas plataformas tem em comum? Elas são plataformas privadas o conteúdo gerado nessas plataformas estão a controle de terceiros. Em fevereiro de 2018 com uma iniciativa de adicionar o recurso a web aberta, AMP lançou stories para web. O recurso está disponível no framework onde você pode criar seus próprios stories para qualquer dispositivo mobile independente do sistema operacional e sem a necessidades da instalação de um App.

Já se passaram dois anos e porque estamos falando de stories só agora? No Google I/O do ano passado tivemos o anúncio da inclusão de web stories nos resultados da busca do Google, esse resultados vão estar disponíveis no Google Images e Discovery(2019 o recurso teve 800 milhões de usuários ativos mensalmente).

Esse anúncio trás um novo significado para o recurso, agora temos uma nova oportunidade de capitalizar usuários de forma orgânica, atualmente o recurso está em formato de teste nos Estados Unidos e será lançado em outras regiões ainda esse ano.

Video de apresentação do web stories no Google I/O 2019

Web Stories é uma incógnita inicialmente alguns portais como Washington Post e CNN estão fazendo uso do recurso. Mas a pergunta é: stories é utilizado em sua maioria em redes sociais, será que o formato irá vingar em caracter informativo?

O plano inicial do Google é utilizar o recursos nas seguintes categorias:

  • Viagens
  • Filmes
  • Receitas
  • Fashion
  • Games
  • Shows de TV

Como criar Web Stories

A implementação dos Stories é em AMP teremos dois caminhos programando ou utilizar um editor visual. Depois de implementado os web stories seu conteúdo precise seguir alguns critérios para isso podemos testar nosso Web Stories com Search Console onde entraremos em mais detalhes a seguir.

Para a criação de web stories com programação vou dedica um post exclusivo para esse post vamos ter uma introdução e ver alguns conceitos relacionados utilizando editores visuais. Os editores visuais temos algumas opções plataformas gratuitas com recursos premium como:

makestories amp stories visual editor

Anteriormente tínhamos o plugin de AMP que tinha como recurso a possibilidade de criar AMP Stories esse recurso foi descontinuado no plugin de AMP oficial e o Google começou a focar em um plugin exclusivo para AMP Stories agora chamadoWeb Stories para WordPress. O plugin está na sua versão beta assim como o Site Kit o Google utilizou a mesma estratégia está utilizando sua base de seguidores para testar o plugin antes do seu lançamento no repositório oficial.

Como mencionei anteriormente o plugin está na versão beta então muita coisa ainda vai mudar e se caso queira testar o plugin saiba que ele ainda não está 100%. O plugin tem previsão para ficar disponível non final do verão nos EUA isso pode ser por meados de Setembro.

Plugin Web Stories for WordPress

Agora vamos falar sobre o plugin, vou realizar um teste aqui no meu blog e monitorar como se comporta a audiência referente aos stories. Para isso vamos instalar o plugin caso estiver lendo esse post após o lançamento do plugin no repositório oficial do WordPress o processo de instalação será diferente.

Mas caso queira instalar a versão beta os passos serão

1. Baixar o zip do plugin no endereço https://google.github.io/web-stories-wp/beta/

Página do plugin versão beta do WebStories

2. Logar no painel do WordPress em que você deseja instalar o plugin

3. Ir na seção plugin no menu lateral esquerdo e selecionar “adicionar novo”

Tela da administração de plugins

4. Na tela de adicionar novo escolher a opção no topo “Enviar plugin” e enviar o zip que acabamos de baixar no site do plugin.

Tela adição de plugins

5.Após o envio clique em “ativar plugin

último passo ativando plugin

6. Quando instalado o menu de stories ficará disponível na sessão Stories no seu menu lateral e ele terá o seguinte visual:

Criando Web Stories com o plugin

Instalei o plugin no meu blog pessoal, para esse post eu criei dois Stories como teste. Quando você clica em adicionar Web Stories a primeira impressão é que você está trabalhando eu outro software, o editor visual com um tema dark como podemos ver na imagem a seguir:

Editor de Web Stories

Primeiro passo foi criar minha primeira história, alguns momentos é difícil de identifica se o elemento na tela é editável ou é apenas uma informação, por exemplo, Rascunho automático é o título do meu stories completo e também vai definir o slug do meu story.

Mas o editor gráfico é completo com várias opções de edição alguns momentos a resposta não é precisa mas normal para um plugin que está na sua versão beta.

Criei dois stories sobre posts antigos em meu blog referente a lista de coisas que aprendi depois que me mudei para Dublin então já tinha o conteúdo a maior parte do trabalho foi achar as imagens. Cada Story contém 6 páginas. Com titulo e descrição a inclusão de texto é livre mas temos alguns items que são relevantes a validação de nosso stories.

Nesse post vamos focar no processo completo de criação de stories. Para o processo de edição de stories melhor material é seria gravar um vídeo com um passo-a-passo. Mas depois que concluímos o nosso Story temos que ficar atento a alguns pontos:

  • Primeiro no menu lateral direito temos os controles sobre o documento, como configurações gerais. Para ter um story válido precisamos de um ícone e uma imagem de cobertura esses itens serão essenciais para busca.
  • Quando completo o processo teremos um permalink para o nosso story em um endereço começando com /stories/, por exemplo : https://blog.fellyph.com.br/stories/5-coisas-que-aprendi-no-meu-primeiro-ano-de-trabalho-na-irlanda/
  • Possivelmente esse processo irá mudar mas na versão beta precisa desse link pra adicionar em nosso bloco Gutenberg como na imagem a seguir:
Exemplo de bloco web stories

Validando suas web stories

Depois de tudo pronto o último passo para verificar se nossos stories são válidos para os cards especiais na busca é validar nossos stories com Search Console https://search.google.com/test/amp, para testar sua web story você precisa somente passar o endereço de sua web story e assim você terá o feedback:

Conclusão

Quando comecei a escrever esse post tinha minhas dúvidas sobre web story após começar a criar stories comecei ver alguns benefícios. Por exemplo no meu blog sempre faço essas listas: “5 coisas que aprendi como…” ou “5 erros comuns na hora de…” e o esforço pra criar esse conteúdo foi mínimo, primeira web story passei 30 min para criar mas desse tempo maior parte foi escolhendo fotos e entendendo a interface do editor visual as seguintes foram mais rápidas em torno de 20 a 15 minutos.

Primeiro conteúdo que veio em mente para os stories foi reciclar meu conteúdo já existente isso pode ser uma boa forma de renovar seu conteúdo dando mais alternativas para os leitores. Por fim vou criar mais alguns stories e esperar um impacto na audiência do meu blog.

Sobre a experiência de edição o plugin está na versão Beta muita coisa ainda não funciona 100%. Mas se o Google colocar o mesmo investimento que fizeram no Site Kit em 3 meses teremos uma versão 100% estável.

Vale a pena investir em Web Stories? Como toda nova tecnologia essa é uma aposta você pode sair na frente da concorrência e assumir os riscos ou esperar ver como o mercado irá reagir e investir com mais segurança mais ai sua concorrência será ainda maior. Particularmente você não tem nada a perder pegue seus posts que não tem aquele desempenho e adicione stories e veja se você tem alguma melhoria no tráfego.

Mais posts sobre acesse a página da categoria WordPress.

Categorias
PWA - Progressive web apps WordPress

Transformando seu site WordPress em uma PWA

Nesse post iremos ver como utilizar o plugin oficial do Google para converter seu site WordPress em uma Progressive Web App, atualmente temos uma série de plugins para converter seu site em uma PWA, os 3 principais plugins são:

Plugin PWA Google

Nesse post vamos focar no plugin mantido pelo time do Google e XWP. Esse plugin foi criado com a intenção de fazer parte do core do WordPress aos poucos, no ano passado o plugin foi utilizado no tema do WordCamp Europe Berlin. Pelo fato que o plugin tem como objetivo fazer parte do core uma vez instalado o plugin não ativa nenhum painel mas quando realizamos auditoria com Lighthouse temos o seguinte resultado:

Lighthouse usa um checklist para fazer a validação se nosso site como uma PWA

Lighthouse olha para três categorias:

  • Rápido e estável: Rápido carregamento e suporte a offline.
  • Instalável: Uso de HTTPS e uso de web app manifest
  • Otimizado: Configurações para barra de navegação customizada, design responsivo, conteúdo disponível sem a execução de JavaScript, inclusão de configuração para apple-touch-icon

O plugin gera web app manifest através da REST API uma vez que o plugin é ativado você pode conferir o endereço /wp-json/wp/v2/web-app-manifest.

Meu blog por exemplo:

{ "name": "Blog Fellyph Cintra", "start_url": "https:\/\/blog.fellyph.com.br\/", "display": "minimal-ui", "dir": "ltr", "lang": "pt-BR", "background_color": "#fafafa", "theme_color": "#fafafa", "description": "Blog sobre WordPress, JavaScript, HTML, CSS, eventos e algo mais", "icons": [ { "src": "https:\/\/blog.fellyph.com.br\/wp-content\/uploads\/2018\/11\/cropped-1796698_795991100415208_12473649_n-192x192.jpg", "sizes": "192x192", "type": "image\/jpeg" }, { "src": "https:\/\/blog.fellyph.com.br\/wp-content\/uploads\/2018\/11\/cropped-1796698_795991100415208_12473649_n.jpg", "sizes": "512x512", "type": "image\/jpeg" } ] }

As propriedades são geradas da seguinte forma:

  • name: O título do site carregada pela função get_option(‘blogname’)
  • short_name: copia do site title com no máximo 12 caracteres
  • description: descrição do site get_option(‘blogdescription’)
  • lang: idioma do site get_bloginfo(‘language’)
  • start_url: home URL via get_home_url()
  • theme_color: background customizado via get_background_color()
  • background_color: também carregado pelo background customizado
  • display: por padrão é minimal-ui
  • icons: o ícone do site via get_site_icon_url()

Para a configuração completa sem modificação no código o título do site precisa ter menos de 12 caracteres, caso contrário precisamos customizar o nosso código, em outras palavras precisamos tocar no código. Weston criador do plugin PWA também criou um mini plugin para incluir essas informações sem código:

https://gist.github.com/westonruter/dec7d190060732e29a09751ab99cc549

A Primeira vez que rodei a auditoria tive dois problemas, o primeiro era o título do menu site era maior que 12 caracteres e o segundo o ícone do meu site era inferior a 512px.

Primeira auditoria com lighthouse

Para resolver o problema do short_name inclui o plugin do Weston, ele inclui um campo extra no meu painel de configuração

Atributo short name

Após corrigir o problema com o short name o segundo problema foi referente aos ícones para isso precisamos adicionar uma PNG com mais de 512px como ícone de nossa aplicação no menu Personalizar > Identidade do site:

Atualizando ícone do site

Com o manifest.json corrigido temos a possibilidade de instalar o nosso site WordPress como na imagem a seguir:

Banner de instalação

Personalizando manifest.json

Lembrando que a ideia que esse plugin faça parte do core, muita coisa ainda pode mudar na versão de Julho de 2020 caso queiramos personalizar informações do manifest.json precisamos adicionar filtros(codificar) em nossa aplicação via tema com function.php ou criando um plugin:

add_filter( 'web_app_manifest', function( $manifest ) { $manifest['short_name'] = 'Shortness'; return $manifest; } );

Caso o seu tema não suporte ícones ou background personalizado precisamos incluir a informação, por exemplo, o theme_color:

add_filter( 'web_app_manifest', function( $manifest ) { $manifest['theme_color'] = '#0073AA'; return $manifest; } );

Versão Offline

Um dos recursos do plugin é a inclusão de template para usuários offline Erro 500, caso queira enviar uma mensagem personalizada para o usuário você pode incluir uma template com seguinte nome offline.php, 500.php ou error.php para uma mensagem mais genérica.

Versão offline padrão

Caso queira testar seu template você pode acessar o seguinte endereços:

  • https://your-site-name.com/?wp_error_template=offline;
  • https://your-site-name.com/?wp_error_template=500

Comentários Offline

Outro recurso do plugin é a possibilidade de comentários offline, o plugin utiliza Background Sync API para enviar os comentários quando o usuário recuperar a conexão.

Estratégias de Cache

O plugin utiliza WorkBox integrado com PHP para realizar abstração da implementação das estratégias de cache, para isso precisamos indicar extensões e rotas e quais estratégias serão implementadas:

  • Cache first
  • Stale while revalidate
  • Cache only
  • Network only

Para implementar estratégias de cache precisamos utilizar hooks e adiciona-los em nosso function.php

add_action( 'wp_front_service_worker', function( \WP_Service_Worker_Scripts $scripts ) { $scripts->caching_routes()->register( '/wp-content/.*\.(?:png|gif|jpg|jpeg|svg|webp)(\?.*)?$', array( 'strategy' => WP_Service_Worker_Caching_Routes::STRATEGY_CACHE_FIRST, 'cacheName' => 'images', 'plugins' => array( 'expiration' => array( 'maxEntries' => 60, 'maxAgeSeconds' => 60 * 60 * 24, ), ), ) ); } );

No código acima adicionamos uma estratégia cache first a todas as imagens dentro da pasta \wp-content\.

add_action( 'wp_front_service_worker', function( \WP_Service_Worker_Scripts $scripts ) { $scripts->precaching_routes()->register( 'https://example.com/wp-content/themes/my-theme/my-theme-image.png', array( 'revision' => get_bloginfo( 'version' ), ) ); } );

No segundo exemplo acima realizamos precaching de uma image específica em nosso tema e vinculamos uma versão para manter em cache até o plugin atualizar a versão, mais informações na página do github plugin.

Conclusão

Caso faça parte do core do WordPress isso será uma grande adição para o core do WordPress, o uso de bibliotecas externas como Workbox pode adicionar mais complexidade na incorporação desse plugin, mas o plugin é uma alternativa rápida para implementação de recursos de uma Progressive web app em nossos sites WordPres.

Vantagens

  • Fácil integração com outros plugins do Google como AMP para WordPress e Site Kit.
  • Inclusão de template para versão offline.
  • Possiblidade de comentários offline
  • API para implementação de estratégias de cache
  • Geração automática de Web App Manifest

Desvantagens

  • Necessidade de codificação para alguns recursos
  • Ausência de um painel de personalização para determinadas informações
  • Nenhuma integração para service worker

Após as configurações adicionadas corretamente temos nosso site WordPress atingindo as três metas: Rápido, estável, instalável e otimizado.

Auditoria final

Para mais posts sobre PWA acesse a página da categoria.