Objetivo: um app SPA com busca, filtros e favoritos persistidos. https://www.notion.so/Svelte-242d07fbcd4c805fb8b2cc8c8eba8232
Chuck Norris Jokes API (sem auth). Endpoints que você vai usar:
/jokes/categories
/jokes/random?category={cat}
/jokes/search?query={term}
- [ ] Svelte (ou SvelteKit em modo SPA).
- Stores (writable/derived) para:
- [ ] estado global (categoria selecionada, query, loading, errors);
- [ ] coleção de favoritos (com serialização para localStorage);
- [ ] Favoritos persistem ao recarregar.
- [ ] CategorySidebar.svelte, SearchBar.svelte, JokeCard.svelte, FavoritesDrawer.svelte, Paginator.svelte, Toast.svelte.
- [ ] Navegação por teclado (foco visível, aria-* em botões/menus).
- [ ] Leitores de tela: role="alert" para erros; labels nos inputs.
- [ ] Debounce na busca (300 ms);
- [ ] Cache in-memory de resultados por query e por category (Map).
- [ ] 1 teste de store (adicionar/remover favorito);
- [ ] 1 teste de componente (JokeCard renderiza e dispara evento de favorito);
- [ ] Tema claro/escuro com prefers-color-scheme + toggle manual (persistido);
- [ ] ESLint + Prettier.
- [ ] Tipagem JSDoc ou TypeScript opcional (se usar SvelteKit, prefira TS).
- [ ] README: setup, decisões, trade-offs e próximos passos.
- [ ] Critérios de aceitação
- [ ] Paginação funciona em /search.
- [ ] Repositório público com CI simples (lint + testes).
- [ ] Link do deploy.
- [ ] Offline-first para favoritos (Service Worker básico).
- [ ] Atalhos de teclado (ex.: / foca busca, f favorita a piada focada).
- [ ] Telemetria leve (contagem de buscas por sessão, sem libs externas).