ernestdefoe / mosaic
Mosaic — a polished, configurable Flarum 2 theme with a tiled hero, category grid, sidebar widgets, and optional integrations for support tickets (linkrobins/support) and a marketplace storefront (ramon/marketplace).
Package info
Language:HTML
Type:flarum-extension
pkg:composer/ernestdefoe/mosaic
Requires
- flarum/core: ^2.0
- dev-main
- 2.1.8
- 2.1.7
- 2.1.6
- 2.1.5
- 2.1.4
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.48
- 2.0.47
- 2.0.46
- 2.0.45
- 2.0.44
- 2.0.43
- 2.0.42
- 2.0.41
- 2.0.40
- 2.0.39
- 2.0.38
- 2.0.37
- 2.0.36
- 2.0.35
- 2.0.34
- 2.0.33
- 2.0.32
- 2.0.31
- 2.0.30
- 2.0.29
- 2.0.28
- 2.0.27
- 2.0.26
- 2.0.25
- 2.0.24
- 2.0.23
- 2.0.22
- 2.0.21
- 2.0.20
- 2.0.19
- 2.0.18
- 2.0.17
- 2.0.16
- 2.0.15
- 2.0.14
- 2.0.13
- 2.0.12
- 2.0.11
- 2.0.10
- 2.0.9
- 2.0.8
- 2.0.7
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
This package is auto-updated.
Last update: 2026-05-18 02:41:16 UTC
README
A polished, configurable Flarum 2 theme. Works as a standalone visual upgrade on any forum, with opt-in integrations for fof/best-answer, fof/reactions, ram0ng1/colored, and (when installed) linkrobins/support and ramon/marketplace.
Status: active development. LESS theme is complete, JS components are in place, design preview ships in
preview/.
What you get
- Tiled hero panel with title, search, and a configurable stats strip (Members / Discussions / Posts / Online Now — and Tickets Resolved when
linkrobins/supportis detected) - Category tiles below the hero — auto-populated from
flarum/tagswhen installed - Configurable sidebar — Marketplace promo, Quick Actions (admin-editable rows: icon, label, URL), Top Contributors, Trending. Each panel can be hidden from the admin UI
- Optional support-ticket styling — when
linkrobins/supportis enabled, the 5-state workflow (Open → In Progress → Awaiting You → Resolved → Closed), staff control bar, internal notes, and SLA pills all light up - Optional marketplace styling — when
ramon/marketplaceis enabled, the storefront, product cards, and cart get themed (verified against the real.MpShop-*DOM) - Best-answer highlight for
fof/best-answer— full-width banner on the chosen reply - Reactions popup styled after
ram0ng1/avocado's cascade pattern - Tag-coloured borders for
ram0ng1/coloredon the discussion list and posts - Full dark mode via Flarum 2's native
[data-theme^=dark]selector - DM Sans typography, organic 14px radii, calm primary palette
Install
composer require ernestdefoe/mosaic php flarum cache:clear
Then enable in Admin → Extensions → Mosaic.
Configure
All theme settings live in Admin → Extensions → Mosaic:
- Hide sidebar widgets — toggle Marketplace promo / Quick Actions / Top Contributors / Trending individually
- Quick Actions editor — dynamic row editor for the sidebar's Quick Actions card. Each row is an icon class, a label, and a URL. Defaults to
Start a Discussion / Browse Tags / Recent Activityfor any Flarum install, and surfacesOpen a Support Ticket/Visit the Marketplaceextras when those extensions are detected - Section URL overrides — point the auto-detected support / marketplace links elsewhere if you've mounted them on non-default paths
Develop
cd js npm install npm run dev # watch mode npm run build # production
The frontend uses flarum-webpack-config v3 — js/forum.js and js/admin.js are auto-discovered, with webpack running from js/ and emitting to js/dist/. Compiled bundles in js/dist/ are committed because Flarum extensions installed via Composer ship prebuilt assets.
Structure
mosaic/
├── composer.json # Flarum 2 extension manifest
├── extend.php # PHP extender — registers forum/admin frontends + settings bridge
├── src/Api/
│ ├── AddForumSettings.php # SettingsRepositoryInterface helpers
│ └── AddForumStatistics.php # Member/online/resolved counts
├── js/
│ ├── package.json
│ ├── webpack.config.js
│ ├── forum.js / admin.js # entries (discovered by webpack)
│ ├── dist/ # compiled bundles, committed
│ └── src/
│ ├── forum/
│ │ ├── index.js # initializer + IndexPage hooks
│ │ └── components/
│ │ ├── HeroPanel.js # branded hero + stats strip
│ │ ├── CategoryTiles.js # category grid
│ │ ├── SidebarPanels.js # Marketplace promo / QA / contributors / trending
│ │ ├── MarketplacePromoCard.js # sidebar CTA
│ │ ├── HeaderNav.js # primary nav items
│ │ └── SectionHeader.js
│ └── admin/
│ ├── index.js
│ └── extend.js # Admin settings (visibility, URLs, QA editor)
├── less/
│ ├── forum.less / admin.less # entries
│ ├── tokens.less # CSS custom properties
│ ├── base.less, header.less, hero.less, categories.less, discussions.less,
│ │ post.less, sidebar.less, composer.less, support.less, marketplace.less,
│ │ reactions.less, colored.less, layout.less, dark.less
├── locale/en.yml
└── preview/ # static HTML mockup (design source of truth)
Pairing with optional extensions
| Surface | Source | Where styled |
|---|---|---|
| Discussion list / detail | Flarum core | discussions.less, post.less |
| Tags (coloured borders) | ram0ng1/colored |
colored.less |
| Reactions popup | fof/reactions |
reactions.less |
| Best-answer highlight | fof/best-answer |
post.less .Post--bestAnswer |
| Tickets (5-state workflow, internal notes) | linkrobins/support (optional) |
support.less |
| Marketplace storefront / cards / cart | ramon/marketplace (optional, paid) |
marketplace.less |
Each integration's LESS is a no-op when the source extension isn't installed — Mosaic stays clean on a vanilla Flarum.
Design preview
The preview/ directory ships a static HTML mockup of every surface — open preview/index.html directly or run npx serve preview/ to inspect the design without a Flarum install. Treat that mockup as the visual source of truth.
Credits
- DM Sans by Colophon Foundry, via Google Fonts
- Font Awesome 7 for iconography
- Visual cues borrowed from Avocado by ramon
License
MIT — see LICENSE.