Skip to content
View in the app

A better way to browse. Learn more.

ernestdefoe.online

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
ernestdefoe.online

Extensions, themes & support for Flarum and Invision Community

Vibe coding for the community web. Report a bug, request a feature, or dig into the source — this is where the tools you use get built, in the open.

We do custom Bespoke Invision Community apps. If you have an idea for something you want then use the contact form to get in touch with us.

Ernest Defoe

Administrators

Everything posted by Ernest Defoe

  1. respawn 3.0.0 What's Changed 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 Full Changelog: https://github.com/ernestdefoe/respawn/compare/2.0.0...3.0.0 View release on GitHub
  2. gridiron-nation 2.1.10 What's Changed style(hero): title above pills, left-aligned, more prominent style(hero): make discussion title bigger and bolder fix(hero): bump title selector specificity so size/weight actually apply style(hero): bring discussion title size down a notch style(hero): bring discussion title size down a bit more style(hero): shift decorations further right style(hero): shift decorations a bit further right Full Changelog: https://github.com/ernestdefoe/gridiron-nation/compare/2.1.9...2.1.10 View release on GitHub
  3. gridiron-nation 2.1.9 What's Changed style(hero): flush discussion-hero decorations to the far-right edge style(hero): 10px right inset on discussion-hero decorations Full Changelog: https://github.com/ernestdefoe/gridiron-nation/compare/2.1.8...2.1.9 View release on GitHub
  4. social-groups v2.3.60 What's Changed No changes Full Changelog: https://github.com/ernestdefoe/social-groups/compare/v2.3.59...v2.3.60 View release on GitHub
  5. gridiron-nation 2.1.8 What's Changed fix(sidebar): exclude primary button from nav-link wrap rules fix(sidebar): scope nav-widen to IndexPage-nav, not all .Page-sidebar Full Changelog: https://github.com/ernestdefoe/gridiron-nation/compare/2.1.7...2.1.8 View release on GitHub
  6. gridiron-nation 2.1.7 What's Changed style(hero): stop the two decoration glyphs from overlapping style(sidebar): widen desktop left nav so conference names aren't cut off Full Changelog: https://github.com/ernestdefoe/gridiron-nation/compare/2.1.6...2.1.7 View release on GitHub
  7. gridiron-nation 2.1.6 What's Changed style(discussion): revert column widening, center scrubber instead fix(tags): force TagsPage grid icon spacing over flarum/tags Full Changelog: https://github.com/ernestdefoe/gridiron-nation/compare/2.1.5...2.1.6 View release on GitHub
  8. gridiron-nation 2.1.5 What's Changed fix(build): drop CSS min()/calc(min()) that broke the LESS compile Full Changelog: https://github.com/ernestdefoe/gridiron-nation/compare/2.1.4...2.1.5 View release on GitHub
  9. gridiron-nation 2.1.4 What's Changed fix(tags): force tag-icon spacing over flarum/tags + widen mobile nav style(index): wider showcase-card content area on desktop style(discussion): wider right-column (controls + scrubber) on desktop Full Changelog: https://github.com/ernestdefoe/gridiron-nation/compare/2.1.3...2.1.4 View release on GitHub
  10. gridiron-nation 2.1.3 What's Changed fix(hero,tags): scoreboard counts + wide conference-glyph spacing Full Changelog: https://github.com/ernestdefoe/gridiron-nation/compare/2.1.2...2.1.3 View release on GitHub
  11. social-groups v2.3.59 What's Changed No changes Full Changelog: https://github.com/ernestdefoe/social-groups/compare/v2.3.58...v2.3.59 View release on GitHub
  12. gridiron-nation 2.1.2 What's Changed style(tags): bigger FA icons on tag pills + TagLabel Full Changelog: https://github.com/ernestdefoe/gridiron-nation/compare/2.1.1...2.1.2 View release on GitHub
  13. social-groups v2.3.58 What's Changed No changes Full Changelog: https://github.com/ernestdefoe/social-groups/compare/v2.3.57...v2.3.58 View release on GitHub
  14. gridiron-nation 2.1.1 What's Changed style(widgets): bolder pigskin wash + white title text on widget headers style(widgets): black text outline on light-mode widget headers style(widgets): bump light-mode widget header outline from 1px to 2px Full Changelog: https://github.com/ernestdefoe/gridiron-nation/compare/2.1.0...2.1.1 View release on GitHub
  15. GridIron Nation 🏈 A Flarum 2 theme for college football fan forums. Crimson palette, DM Sans, stadium-scoreboard hero, showcase-card discussion list with clickable likes, ticket-stub post layout, live ESPN score ticker, recruit board, full dark mode. Renamed from ernestdefoe/fbsfb. v2.x ships as ernestdefoe/gridiron-nation (kebab-case, matches the rest of the ernestdefoe/* family). Upgraders: the package rename is handled by a settings-table migration that copies the legacy fbsfb.* / ernestdefoe-fbsfb.* rows under the new prefixes on first boot. Old rows stay in place so a rollback to v1 keeps working. ScreenshotsHomepage — Light Mode Homepage — Dark Mode Discussion Page — Light Mode Discussion Page — Dark Mode Screenshots are auto-generated by scripts/screenshots.mjs (puppeteer-core against flarum.test). Run after a UI change: node scripts/screenshots.mjs Features🏟 Stadium HeroScoreboard stats row — MEMBERS, TOPICS, POSTS, ONLINE, NEWEST. ONLINE opens a dropdown of who's around right now; NEWEST exposes the most recently registered user. Composer trigger — pill-shaped "Tell everyone what you're working on…" that opens the New Discussion composer. Reads as the primary affordance on the homepage. Pill nav row — rendered below the hero gradient (not inside it) so the chips read on the page background. Welcome hero forced visible — the per-visitor dismiss flag is honoured by Flarum core; we override it to keep the themed hero on for everyone, but the admin's empty-welcomeTitle escape hatch still hides it. 🃏 Showcase Discussion ListStandalone reimplementation built from Flarum 2 primitives — **no ramon/avocado dependency required**. Each row renders as a card with: Author avatar + name + relative time + tag pills + Reply button Bold title (highlighted on search hits) Two-line excerpt pulled from the OP Embedded last-reply preview chip (avatar + author + snippet) "See N other replies" overflow link Footer stats row (likes + replies, ICU-pluralised) Crimson yard-line accent strip down the left edge for unread / sticky rows; muted strip on read rows Locked rows get a subtle treatment so they don't disappear 📝 Post PlaycardPosts on the discussion page get card chrome with the same yard-line accent — crimson on the OP, muted on replies. Built **on top of Flarum 2's native Post grid** (no layout overrides), so it survives core updates and plays nicely with any extension that injects controls, reactions, or social-groups extras into the Post body. 📺 Live Scores TickerProxies ESPN's public college-football scoreboard endpoint — no API key required. Renders as a horizontal scrolling ticker above the discussion list, with up to 6 game cards sorted Live → Scheduled → Final. Pulsing green LIVE badge with quarter + clock detail. Winning score highlighted in crimson. Server-side cache: 60 seconds (visitors don't hammer ESPN). Refreshes client-side every 60 seconds. Graceful fallback — shows "Scores unavailable" if ESPN times out. ⭐ Top Recruits WidgetPulls live recruiting data from the ernestdefoe/recruiting extension when installed. Without that extension, the widget hides itself. Headshots via On3 photo enrichment. CollegeFootballData.com is the source of truth — set your API key in the GridIron Nation Recruiting admin panel. Crimson position badge (QB, WR, DT …), star rating, school slot. 🔥 Trending WidgetFive most-recently-active discussions straight from Flarum's store (no extra API round-trip). Rank 1–2 in crimson, rest in muted grey. Reply count + relative time per row. 🎯 Hero Tag DecorationAnchors up to two large, semi-transparent FontAwesome glyphs to the right side of every tagged discussion's hero, pulled from the secondary tag's icon (set per-tag in the Flarum Tags admin panel). Falls back to any tag with an icon if no secondary candidates exist — flat tag setups still get decoration. All three knobs (enabled, icon count, opacity 0–100) are admin-configurable. 🌙 Dark ModeFull [data-theme^="dark"] + system prefers-color-scheme: dark support. Surfaces shift from #0c0d10 through #16171c cards to #0f1013 inset areas (inputs, blockquotes, code blocks). Primary shifts to #e05c5c for legibility on dark backgrounds. Cascade-correct: dark block lives last in the stylesheet, no specificity fights. 🎨 Design SystemCrimson primary (#B22222) with #8B0000 dark + #d94f4f light variants. DM Sans Variable loaded from Google Fonts, replaces Flarum's default font throughout. 14 px organic border-radius on cards, dropdowns, modals, buttons, and inputs. CSS custom properties for --primary-color, --body-bg, --control-bg, --border-color, etc. — overlaying themes and ramon/colored compose cleanly. InstallationVia Composer php flarum migrate php flarum cache:clear``` ### Manual 1. Download or clone this repo into `extensions/ernestdefoe-gridiron-nation/` 2. Run `composer install` in the Flarum root 3. Run `php flarum migrate` 4. Run `php flarum cache:clear` 5. Enable **GridIron Nation** in the Flarum admin panel **JS is pre-compiled.** `js/dist/forum.js` and `js/dist/admin.js` are committed — no local build step needed for a vanilla install. --- ## Requirements | Dependency | Version | |---|---| | PHP | `^8.3` | | Flarum | `^2.0` | | guzzlehttp/guzzle | `^7.0` | ### Optional, but recommended | Extension | Why | |---|---| | `ernestdefoe/recruiting` | Powers the Top Recruits widget with live CFBD data + On3 photo headshots. Without it, the widget hides. | | `ramon/colored` | Per-tag color tinting on hero + discussion-list borders. GridIron Nation wires `data-colored-border=left/full` cleanly against the showcase card and yard-line accent. | | `flarum/realtime` | Live discussion-list / notification / typing-indicator updates over a websocket. We hide the "N updates available" banner so the list refreshes silently. | --- ## Admin Settings Under **Extensions → GridIron Nation** in the Flarum admin panel: | Setting | Default | Purpose | |---|---|---| | `widget_live_scores` | `true` | Show the Live Scores ticker | | `widget_trending` | `true` | Show the Trending sidebar widget | | `widget_top_recruits` | `true` | Show the Top Recruits sidebar widget | | `hero_deco_enabled` | `true` | Render FontAwesome glyph decoration on discussion heroes | | `hero_deco_icon_count` | `2` | 1 or 2 icons (2-icon mode requires ≥ 768 px viewport) | | `hero_deco_opacity` | `35` | Glyph opacity, 0–100 (set to `0` to hide without disabling) | --- ## API Endpoints | Method | Path | Description | |---|---|---| | `GET` | `/api/gn-live-scores` | ESPN scoreboard proxy (public, 60 s cache) | | `GET` | `/api/gn-online` | Users online in last 5 min (auth-aware, per-actor cache) | The retired `/api/gn-recruits` endpoints from v1.x have been removed — recruit data now comes from `ernestdefoe/recruiting`'s `/api/cfbd-recruits` endpoint when that extension is installed. --- ## Building JS from source ```cd js npm install npm run build # production npm run dev # watch mode``` --- ## Upgrading from `ernestdefoe/fbsfb` (v1.x) The composer rename forces Flarum to treat this as a fresh extension ID. To upgrade: ```composer remove ernestdefoe/fbsfb composer require ernestdefoe/gridiron-nation php flarum migrate # runs the settings copy migration php flarum cache:clear php flarum extension:enable ernestdefoe-gridiron-nation``` The settings migration copies every `fbsfb.*` and `ernestdefoe-fbsfb.*` row in your settings table to the new `gridiron-nation.*` and `ernestdefoe-gridiron-nation.*` prefixes. Legacy rows stay in place so a downgrade picks them back up cleanly. --- ## License MIT © [ernestdefoe](https://github.com/ernestdefoe)
  16. aurora 3.0.0 What's Changed 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 Render the palette button as a labeled row inside the mobile drawer Gate the palette-button drawer override on the phone breakpoint Convert to TypeScript (audit fix) docs: add Floxum marketplace badges to README Fix 8 audit findings + back hero widgets with real forum stats fix(hero-widgets): render on IndexPage, not WelcomeHero debug(temp): log IndexPage.contentItems extender + heroWidgets() fix(build): upgrade to flarum-webpack-config@3 so externals work on F2 fix(hero-widgets): move tiles inside WelcomeHero.bodyItems fix: widen DiscussionListItem padding + make hero non-dismissable fix(dropdown): stop discussion-list cards clipping & burying per-item menus Full Changelog: https://github.com/ernestdefoe/aurora/compare/2.0.1...3.0.0 View release on GitHub
  17. seo 2.0.8 What's Changed Fix 9 audit findings + add release-drafter and forum-publish workflows Full Changelog: https://github.com/ernestdefoe/seo/compare/2.0.7...2.0.8 View release on GitHub
  18. SEO for Flarum 2 SEO meta tags, OpenGraph, Twitter Cards, JSON-LD structured data, a bundled sitemap.xml generator, and search-console verification for Flarum 2 — a maintained, v2-compatible continuation of v17development/flarum-seo. What's different from the upstreamThe upstream extension targets Flarum 1.x and the partial Flarum 2 port in v17development/flarum-seo left the API layer broken — it won't even boot on Flarum 2 because four core classes (AbstractSerializer, AbstractListController, AbstractShowController, AbstractDeleteController, BasicDiscussionSerializer, ForumSerializer) were removed when the core API was rewritten around Resource + Endpoint + Schema. This fork: Boots and runs on Flarum 2.x. Full v2-API migration: the v1 serializer + 4 controllers became one SeoMetaResource with declarative Endpoint::make() + Schema\* fields + writable allowlist. v1 ApiSerializer + ApiController extenders replaced with ApiResource(...)->fields() callbacks mounting fields onto DiscussionResource and ForumResource. Eager-load via endpoint(...)->eagerLoad('seoMeta') to prevent N+1 on the discussion list. Migration bug fix. Upstream's 2023_02_01_create_seo_meta_table.php used $table->string('object_type', 65535) which silently coerces to MEDIUMTEXT and crashes the subsequent unique-index migration with "BLOB/TEXT column used in key specification without a key length". Reduced to varchar(60) so the unique index lands on first run. Bundled sitemap.xml generator. Auto-detects fof/sitemap — if installed, our controller 404s and defers to fof's. Otherwise generates a single-file sitemap (capped at 50k URLs per the protocol limit) with <lastmod> from last_posted_at, <changefreq> derived from posting recency (hourly→yearly), and <priority> weighted by comment count + recency. Visibility-scoped to Guest so restricted tags / private groups never leak into the public sitemap. 6-hour cache via the framework cache. Search-console verification meta tags. Four admin-configurable settings: Google Search Console, Bing Webmaster, Yandex Webmaster, Pinterest. Tokens are charset-restricted before interpolation so an admin can't (intentionally or by typo) inject markup into the head. Defensive try/catch around the injector so a verification-tag bug can never block a page render. robots.txt always references the sitemap. Upstream only added the Sitemap: directive when fof-sitemap was enabled. Since we now always serve a sitemap (ours or theirs), the reference is unconditional. Hardened UploadSocialMediaImageController. Full §11 upload pipeline: size cap (4 MB), extension allowlist (png/jpg/jpeg/webp), finfo-based MIME re-detection, server-generated filename, PSR-3 logger wrapped in try/catch. SeoMetaResource::find() handles dash-separated polymorphic lookups. The admin frontend sends GET /api/seo_meta/discussions-42 to find-or-create the SeoMeta row for a subject; the v2 Resource's Show endpoint normally requires a numeric id, so find() intercepts the {type}-{id} form and short-circuits to SeoMeta::findByObjectTypeOrCreate. Allowlist restricts type to discussions/users/tags/pages. What it does on every page| Surface | What gets emitted | |---|---| | OpenGraph | og:site_name, og:type, og:title, og:description, og:url, og:image | | Twitter Card | twitter:card, twitter:title, twitter:description, twitter:image, twitter:url | | Robots directives | index/noindex, follow/nofollow, noarchive, noimageindex, nosnippet (per-route + per-row override via SeoMeta) | | JSON-LD Schema.org | DiscussionForumPosting (with publisher Organization + author Person), BreadcrumbList, WebSite (with SearchAction for the sitelinks search box). QAPage instead of DiscussionForumPosting when fof/best-answer flags the thread answered. | | Article metadata | article:published_time, article:updated_time | | Canonical | <link rel="canonical"> on every route | | Verification | google-site-verification, msvalidate.01, yandex-verification, p:domain_verify (when admin has configured the token) | Quick start php flarum migrate php flarum cache:clear``` Enable from **Admin → Extensions → SEO**. Open the SEO settings tab to configure: * **Default fallback meta** — site description, keywords, default social-media image. * **Per-row overrides** — open any discussion / tag / page and click the SEO drawer to override the auto-generated title / description / image / robots directives for that specific subject. * **Search Console Verification** — paste the verification tokens from Google / Bing / Yandex / Pinterest; meta tags appear on every page on save. ## Composer suggests * `flarum/tags` — when present, the `Tags` page renderer emits proper category metadata + breadcrumb schema. * `fof/pages` — when present, the `Pages` page renderer treats pages as `WebPage` schema with publisher attribution. * `fof/best-answer` — when present, discussions flagged as answered switch from `DiscussionForumPosting` to `QAPage` schema, which search engines render as a Q&A rich snippet. * `fof/sitemap` — when present, owns `/sitemap.xml` with sitemap-index pagination for forums larger than 50k URLs. We auto-defer to it. * `ernestdefoe/og-image` — when present, auto-generates per-discussion social images. ## Compatibility & status * **Flarum**: 2.0+ (requires `flarum/core: ^2.0`). * **PHP**: 8.3+. * **MySQL / MariaDB**: any version that supports `utf8mb4_unicode_ci` (every version Flarum supports). * **License**: MIT. ## License & credits [MIT](https://github.com/ernestdefoe/seo/blob/main/LICENSE.md). Upstream credit: `v17development/flarum-seo` — this extension is a maintained Flarum 2 fork. Core architecture (SeoMeta table, Page drivers, Content injector, Schema.org payload shape) preserved from upstream.
  19. theme-toggle 3.0.6 What's Changed docs: add Floxum marketplace badges to README Full Changelog: https://github.com/ernestdefoe/theme-toggle/compare/3.0.5...3.0.6 View release on GitHub
  20. social-groups v2.3.57 What's Changed No changes Full Changelog: https://github.com/ernestdefoe/social-groups/compare/v2.3.56...v2.3.57 View release on GitHub
  21. cross-references 3.0.0 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 Full Changelog: https://github.com/ernestdefoe/cross-references/compare/2.0.1...3.0.0 View release on GitHub
  22. og-image v2.0.5 What's Changed No changes Full Changelog: https://github.com/ernestdefoe/og-image/compare/2.0.4...v2.0.5 View release on GitHub
  23. recruiting 3.0.0 What's Changed 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 Full Changelog: https://github.com/ernestdefoe/recruiting/compare/2.0.15...3.0.0 View release on GitHub
  24. espn-cfb-ticker v2.0.6 What's Changed No changes Full Changelog: https://github.com/ernestdefoe/espn-cfb-ticker/compare/2.0.5...v2.0.6 View release on GitHub
  25. flarum-facebook-post v2.1.4 What's Changed No changes Full Changelog: https://github.com/ernestdefoe/flarum-facebook-post/compare/v2.1.3...v2.1.4 View release on GitHub

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.