Skip to content

Releases: ernestdefoe/mosaic

3.4.2 — audit hardening

Choose a tag to compare

@github-actions github-actions released this 08 Jun 20:22

Floxum audit hardening. Removed an unused RuntimeException import, locale-aware number formatting (dropped hardcoded en-US), and wired the sidebar card titles + quick-action labels through the translator. Two LOW findings (the app.routes wrapping and the openComposer DOM/rAF shim) are intentionally retained with documented rationale.

3.4.1

Choose a tag to compare

@ernestdefoe ernestdefoe released this 31 May 21:53

Added

  • Hero nav: a pill for each Page Builder content type (e.g. Articles) now appears in the hero navigation, linking to its /c/{slug} listing. Read from the pagebuilderContentTypes forum attribute, so it works automatically for any content type you define.

3.4.0

Choose a tag to compare

@ernestdefoe ernestdefoe released this 31 May 15:47

What's Changed

Adds blog post creation entry points and section navigation when linkrobins/blog is installed.

Added

  • Blog nav pill in the hero pill-row (uses the admin-configured blog nav label/icon, falling back to "Blog" with a feather icon).
  • "Write a Blog Post" in the Quick Actions sidebar panel — shown to members with permission to write posts.
  • "Write a Post" button in the site header on /blog routes — gives authors a direct path to the compose editor on the blog's own pages, which use the blog extension's layout rather than the forum index.
  • Section nav pills ("Discussions" / "Blog") above the blog index and category pages, so the blog feels like a first-class section — useful if you set the blog as your landing page.

All entry points are permission-gated (canCreateBlogPost) and only appear when the blog extension is present.

Fixed

  • A blank-page crash when navigating to the blog via the in-app nav pill. The blog-page nav wrapper now keys its fragment consistently, resolving a Mithril "vnodes must either all have keys or none have keys" error that only triggered on client-side route transitions.

3.3.0

Choose a tag to compare

@ernestdefoe ernestdefoe released this 31 May 14:46

What's Changed

Two visual fixes in the discussion list and the sidebar contributor panel.

Fixed

  • Top Contributors avatars — the panel now shows actual user profile photos when members have uploaded an avatar. Previously a PHP method-call bug ($u->avatarUrl() rather than $u->avatar_url) silently returned null for every user, falling back to colour-coded initials every time.
  • Tag pills beside the discussion title — tag chips now appear on the same line as the discussion title rather than in a separate full-width row below it. Uses display: contents on the info <ul> to promote tag <li> elements into the title row's flex context, with an invisible row-break sentinel pushing metadata (poster, time) to the next row.

3.2.0

Choose a tag to compare

@ernestdefoe ernestdefoe released this 31 May 05:01

What's Changed

A code-audit release — the contributor/trending panels now work forum-wide, plus internal robustness fixes.

Fixed

  • Top Contributors and Trending panels show real forum-wide data. They previously ranked only the handful of records the current page had loaded (≈20 discussions, often 0 users), so they were usually empty or unrepresentative — and the admin "top contributors" path never worked because its data was never sent to the frontend. Both are now computed and cached server-side and sent as forum attributes. Trending is computed against guest visibility, so it never surfaces a discussion a guest couldn't already see.
  • Marketplace promo + hero stat labels are translatable. They were hardcoded English; they now route through the locale file so translators' overrides take effect.

Internal

  • The forum-payload fields are built by a container-injected class instead of manual service resolution.
  • Resolved-ticket counting uses a small Eloquent read-model rather than a borrowed raw database connection.
  • The hero pill-row no longer instantiates a core component out of its lifecycle to read its nav items; it builds its own row.
  • Removed an unused duplicate component and de-duplicated the composer-open helper into a single utility.

3.1.0

Choose a tag to compare

@ernestdefoe ernestdefoe released this 31 May 04:20

What's Changed

A code-audit release — the hero stats are now accurate, plus internal robustness and type-safety fixes.

Fixed

  • Accurate hero counts. The "Discussions" and "Posts" tiles previously fell back to counting only the discussions loaded on the current page — so every visitor saw a small, misleading number (e.g. "20 Discussions"). They're now backed by real, cached forum-wide totals computed server-side.
  • Dead "extra nav links" branch removed. A header-nav feature that was never wired to any setting or admin control has been removed.
  • Fallback category tiles now navigate. On a fresh install without flarum/tags, the six placeholder category tiles linked to # and did nothing; they now go to the discussion index.

Internal

  • The statistics service no longer depends on a low-level database connection interface, and the support-extension table probe is now resolved through Flarum's own model connection (the DB/Schema facades aren't usable in Flarum).
  • The shared translate() helper, previously copy-pasted into three components, is now a single utility.
  • Every frontend component is fully TypeScript type-checked — the @ts-nocheck escape hatches are gone, so attribute typos are caught at compile time.

3.0.0

Choose a tag to compare

@github-actions github-actions released this 26 May 03:12

What's Changed

  • ci: auto-post releases to Flarum support site + draft release notes
  • ci: drop publish-to-flarum workflow
  • ci: restore publish-to-flarum workflow
  • Build changelog from commits when release body is a placeholder
  • Replace release-drafter with commit-based draft-release workflow
  • Add workflow_dispatch trigger to publish-to-flarum.yml
  • Convert to TypeScript (audit fix)
  • docs: add Floxum marketplace badges to README
  • feat(less): move tags under the discussion title

Full Changelog: 2.1.24...3.0.0

2.1.24

Choose a tag to compare

@ernestdefoe ernestdefoe released this 19 May 14:52
Hero: hide Tickets-resolved tile when support extension isn't install…

2.1.23

Choose a tag to compare

@ernestdefoe ernestdefoe released this 19 May 10:41
Remove MosaicMobileSession floating top-right pill

The body-mounted Mithril root rendered an avatar (or "Log In" pill for
guests) at the top-right of the phone viewport, escaping the
#drawer.App-drawer transform trap. The guest pill was reading as a
grayed-out / non-interactive label rather than an actionable button,
and duplicated the session affordance that already lives in the
hamburger drawer.

Mobile session controls now use Flarum 2's intended pattern: tap the
hamburger to access Log In / Sign Up / Notifications / user dropdown
inside the drawer.

Deletes:
- js/src/forum/components/MobileSessionAvatar.js
- Mount logic in forum/index.js
- .MosaicMobileSession / .MosaicMobileSession-trigger /
  .MosaicMobileSession-loginLabel rules in less/header.less

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

2.1.22

Choose a tag to compare

@ernestdefoe ernestdefoe released this 19 May 10:35
Polish guest login/signup buttons + harden TagDiscussionModal on mobile

- HeaderSecondary's logIn / signUp items get a paired pill treatment:
  Sign Up is the primary CTA (filled primary), Log In is a ghost pill
  that defers to it. Scoped to .Header-controls so the LogInButtons
  inside the modal keep stock styling.
- TagDiscussionModal: nail down surface bg + z-index above composer +
  reclaim phone top padding so the search input lands at the top of
  the viewport (was being eaten by header-height-phone). Tag tiles
  get a 44px min-height for proper touch targets on phone.

Note: this does not replace the modal with an inline dropdown —
that's a separate, larger change (override flarum/tags' chooseTags
hook). Mosaic continues to use stock Flarum tag selection behavior.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>