Skip to content

feat: Integrate FoF Bookmarks support into Avocado theme - #195

Merged
ram0ng1 merged 1 commit into
masterfrom
refatoracao-tokens-design-system
Aug 9, 2026
Merged

feat: Integrate FoF Bookmarks support into Avocado theme#195
ram0ng1 merged 1 commit into
masterfrom
refatoracao-tokens-design-system

Conversation

@ram0ng1

@ram0ng1 ram0ng1 commented Aug 9, 2026

Copy link
Copy Markdown
Owner
  • Refactor bookmark handling to support both Avocado's native bookmarks and FoF Bookmarks.
  • Update ThreadCard component to conditionally render bookmark actions based on the active bookmark system.
  • Implement new bookmark utility functions to manage interactions with both bookmark systems.
  • Create a paginated state for bookmarked posts, aligning with FoF Bookmarks functionality.
  • Enhance the bookmarks API to expose new attributes and filters for discussions.
  • Add styles for bookmarks in the sidebar and post controls, ensuring a cohesive UI.
  • Update localization files to reflect changes in bookmark terminology and functionality.
  • Introduce a new BookmarksRoute class to manage routing conflicts with FoF Bookmarks.

- Refactor bookmark handling to support both Avocado's native bookmarks and FoF Bookmarks.
- Update ThreadCard component to conditionally render bookmark actions based on the active bookmark system.
- Implement new bookmark utility functions to manage interactions with both bookmark systems.
- Create a paginated state for bookmarked posts, aligning with FoF Bookmarks functionality.
- Enhance the bookmarks API to expose new attributes and filters for discussions.
- Add styles for bookmarks in the sidebar and post controls, ensuring a cohesive UI.
- Update localization files to reflect changes in bookmark terminology and functionality.
- Introduce a new BookmarksRoute class to manage routing conflicts with FoF Bookmarks.
@ram0ng1 ram0ng1 added melhoria Nova funcionalidade ou aprimoramento (minor) release Release e bump de versão labels Aug 9, 2026
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🔒 Regressão de segurança (Semgrep diff vs master)

✅ Sem regressão — nenhum achado novo de vulnerabilidade introduzido por esta PR.

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

📦 Bundle size

✅ Sem regressão de tamanho — gzip total −2.9 KB (-4.0%).

Arquivo PR (gzip) Master (gzip) Δ gzip PR (raw) Δ raw
admin.js 12.7 KB 12.3 KB 🔴 +0.3 KB (2.8%) 50.4 KB 🔴 +1.0 KB (2.1%)
forum.js 44.9 KB 40.9 KB 🔴 +4.0 KB (9.7%) 175.4 KB 🔴 +16.1 KB (10.1%)
forum/components/AllDiscussionsPage.js 1.7 KB 2.7 KB 🟢 −1.0 KB (-35.9%) 4.8 KB 🟢 −3.9 KB (-44.7%)
forum/components/AvocadoPostsSearchPage.js 1.8 KB 2.4 KB 🟢 −0.6 KB (-25.8%) 4.6 KB 🟢 −2.7 KB (-36.8%)
forum/components/AvocadoSearchPage.js 3.9 KB 5.3 KB 🟢 −1.4 KB (-26.7%) 13.7 KB 🟢 −5.9 KB (-30.0%)
forum/components/BookmarksPage.js — (removido) 2.3 KB
forum/components/TagPage.js 2.4 KB 3.4 KB 🟢 −0.9 KB (-28.0%) 7.1 KB 🟢 −3.9 KB (-35.4%)
forum/components/TeamPage.js 1.5 KB 1.5 KB = 4.1 KB =
forum/components/UserProfilePage.js 1.5 KB 2.5 KB 🟢 −1.0 KB (-39.1%) 7.1 KB 🟢 −3.2 KB (-30.9%)
Total 70.4 KB 73.3 KB 🟢 −2.9 KB (-4.0%) 267.1 KB 🟢 −9.4 KB (-3.4%)

gzip nível 9. 🟢 = menor que o master · 🔴 = maior. Report-only — não bloqueia o merge.

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🔬 Performance benchmark

Home (/)

Métrica PR Master (baseline) Δ
Performance (score) 82 82 (=)
FCP 1613 ms 1738 ms 🟢 -125 ms (-7.2%)
LCP 1976 ms 2007 ms 🟢 -31 ms (-1.5%)
TBT 120 ms 63 ms 🔴 +57 ms (90.5%)
CLS 0.000 0.000 (=)
Speed Index 1613 ms 1738 ms 🟢 -125 ms (-7.2%)
TTI 1978 ms 2009 ms 🟢 -31 ms (-1.5%)

💡 Recomendações (Lighthouse + dicas Flarum 2 / Avocado)

  • Sem compressão de texto — economia ~960 ms · ~1175 KB
    Habilite gzip/brotli no servidor (nginx: gzip on; gzip_types text/css application/javascript; ou brotli on; brotli_types ...). Esse é um setting de host, não da extensão, mas reportar aqui ajuda.
  • JavaScript não utilizado — economia ~680 ms · ~549 KB
    Use import() dinâmico para componentes só usados em rotas específicas (TeamPage, AvocadoSearchPage). O webpack faz split automático se você usar import("./components/TeamPage") dentro do routes ao invés de import estático no topo do index.tsx.
  • CSS não utilizado — economia ~480 ms · ~584 KB
    O bundle forum.css carrega tudo de less/forum/**. Divida por rota (Home/Discussion/Tag) via Extend\Frontend->css() condicional no JS, ou use PurgeCSS no webpack para o build de produção.
  • Recursos bloqueando o render — economia ~480 ms
    Mova CSS não-crítico para <link rel="preload"> ou injete inline o CSS above-the-fold do forum.less. Em Flarum 2, o forum.css é servido como bloqueante por padrão — considere media="print" onload para folhas não-críticas (ex.: dark theme).
  • Cache HTTP curto — 8 resources found
    Os assets versionados em /assets/forum-<hash>.js deveriam ter Cache-Control: public, max-age=31536000, immutable. Configure no nginx/apache, não no Flarum.

/discussions

Métrica PR Master (baseline) Δ
Performance (score) 86 86 (=)
FCP 1504 ms 1499 ms 🔴 +5 ms (0.3%)
LCP 1811 ms 1806 ms 🔴 +4 ms (0.2%)
TBT 1 ms 0 ms 🔴 +1 ms
CLS 0.000 0.000 (=)
Speed Index 1504 ms 1499 ms 🔴 +5 ms (0.3%)
TTI 1811 ms 1806 ms 🔴 +4 ms (0.2%)

💡 Recomendações (Lighthouse + dicas Flarum 2 / Avocado)

  • Sem compressão de texto — economia ~920 ms · ~1178 KB
    Habilite gzip/brotli no servidor (nginx: gzip on; gzip_types text/css application/javascript; ou brotli on; brotli_types ...). Esse é um setting de host, não da extensão, mas reportar aqui ajuda.
  • JavaScript não utilizado — economia ~530 ms · ~574 KB
    Use import() dinâmico para componentes só usados em rotas específicas (TeamPage, AvocadoSearchPage). O webpack faz split automático se você usar import("./components/TeamPage") dentro do routes ao invés de import estático no topo do index.tsx.
  • Recursos bloqueando o render — economia ~520 ms
    Mova CSS não-crítico para <link rel="preload"> ou injete inline o CSS above-the-fold do forum.less. Em Flarum 2, o forum.css é servido como bloqueante por padrão — considere media="print" onload para folhas não-críticas (ex.: dark theme).
  • CSS não utilizado — economia ~480 ms · ~590 KB
    O bundle forum.css carrega tudo de less/forum/**. Divida por rota (Home/Discussion/Tag) via Extend\Frontend->css() condicional no JS, ou use PurgeCSS no webpack para o build de produção.
  • Cache HTTP curto — 9 resources found
    Os assets versionados em /assets/forum-<hash>.js deveriam ter Cache-Control: public, max-age=31536000, immutable. Configure no nginx/apache, não no Flarum.

/tags

Métrica PR Master (baseline) Δ
Performance (score) 87 87 (=)
FCP 1501 ms 1498 ms 🔴 +4 ms (0.2%)
LCP 1763 ms 1758 ms 🔴 +6 ms (0.3%)
TBT 0 ms 0 ms (=)
CLS 0.000 0.000 (=)
Speed Index 1501 ms 1498 ms 🔴 +4 ms (0.2%)
TTI 1763 ms 1758 ms 🔴 +6 ms (0.3%)

💡 Recomendações (Lighthouse + dicas Flarum 2 / Avocado)

  • Sem compressão de texto — economia ~920 ms · ~1175 KB
    Habilite gzip/brotli no servidor (nginx: gzip on; gzip_types text/css application/javascript; ou brotli on; brotli_types ...). Esse é um setting de host, não da extensão, mas reportar aqui ajuda.
  • JavaScript não utilizado — economia ~520 ms · ~579 KB
    Use import() dinâmico para componentes só usados em rotas específicas (TeamPage, AvocadoSearchPage). O webpack faz split automático se você usar import("./components/TeamPage") dentro do routes ao invés de import estático no topo do index.tsx.
  • Recursos bloqueando o render — economia ~520 ms
    Mova CSS não-crítico para <link rel="preload"> ou injete inline o CSS above-the-fold do forum.less. Em Flarum 2, o forum.css é servido como bloqueante por padrão — considere media="print" onload para folhas não-críticas (ex.: dark theme).
  • CSS não utilizado — economia ~480 ms · ~588 KB
    O bundle forum.css carrega tudo de less/forum/**. Divida por rota (Home/Discussion/Tag) via Extend\Frontend->css() condicional no JS, ou use PurgeCSS no webpack para o build de produção.
  • Cache HTTP curto — 8 resources found
    Os assets versionados em /assets/forum-<hash>.js deveriam ter Cache-Control: public, max-age=31536000, immutable. Configure no nginx/apache, não no Flarum.

🥑 Dicas gerais para acelerar o tema (Flarum 2 + Avocado)

  1. Build de produção minificado — confirme que npm run build rodou com mode: production (já é o caso no js/package.json). Webpack tree-shakes import { x } from "flarum/..." se o consumo for explícito.
  2. Split por rotaindex.tsx importa todos os Components no topo. Trocar para import() dinâmico nas rotas raramente acessadas (TeamPage, AvocadoSearchPage, TagsPage) reduz o forum.js inicial.
  3. Less crítico inline — Flarum 2 serve forum.css bloqueando. Considere extrair o CSS above-the-fold (header + 1ª thread visível) e injetar inline via Extend\Frontend->content(InlineCriticalCss::class).
  4. Avatares — sirva via <img loading="lazy"> em todos os ThreadCards/PostCards que não estiverem no fold inicial.
  5. <link rel="preconnect"> — se você usa CDN para fontes ou avatares S3, adicione preconnects no header.
  6. Extend\Frontend->js() rodam síncronos — todo arquivo js/dist/forum.js é parseado no boot. Cada extend() no index.tsx roda antes da primeira pintura.
  7. opcache + view cache — no host: opcache.enable=1, opcache.validate_timestamps=0 em produção, e php flarum cache:clear no deploy.
  8. HTTP/2 + Brotli no host — o Flarum gera bundles grandes; sem brotli você paga em transferência.

Lighthouse desktop, 1 run por URL. 🟢 = melhorou vs master · 🔴 = regrediu.

@ram0ng1
ram0ng1 merged commit 28ae720 into master Aug 9, 2026
24 checks passed
@ram0ng1 ram0ng1 self-assigned this Aug 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

melhoria Nova funcionalidade ou aprimoramento (minor) release Release e bump de versão

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant