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.

Gridiron Nation — support and discussion

Featured Replies

  • Administrators
  • Community Expert

GridIron Nation 🏈

Floxum

Version

Downloads

Review

License

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.


Screenshots

Homepage — Light Mode

Homepage in light mode

Homepage — Dark Mode

Homepage in dark mode

Discussion Page — Light Mode

Discussion page in light mode

Discussion Page — Dark Mode

Discussion page in 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 Hero

  • Scoreboard 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 List

Standalone 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 Playcard

Posts 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 Ticker

  • Proxies 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 Widget

  • Pulls 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 Widget

  • Five 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 Decoration

  • Anchors 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 Mode

  • Full [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 System

  • Crimson 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.


Installation

Via 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)
  • Replies 13
  • Views 44
  • Created
  • Last Reply

Top Posters In This Topic

  • Author
  • Administrators
  • Community Expert

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

  • Author
  • Administrators
  • Community Expert

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

  • Author
  • Administrators
  • Community Expert

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

  • Author
  • Administrators
  • Community Expert

gridiron-nation 2.1.11

What's Changed

  • Fix overflowing messages-page nav
  • Stack messages-page nav vertically (correct selector .MessagesPage-nav)
  • Force nested SelectDropdown in messages nav into a vertical list
  • Refine messages nav: compact Send button, flat list, tighter spacing
  • Stop hero clipping the Online popover; raise its z-index
  • Give DM messages the stadium-ticket chrome + pull the thread up
  • Lay messages page out as nav-left / content-right columns
  • Revert messages page to stacked layout; just trim the top gap
  • Override Page-container gap directly to pull messages content up
  • Hide the redundant MessagesPageHero to pull the thread up
  • Compact the messages nav rows to lift the thread higher
  • Revert messages-page layout overrides; keep only the ticket chrome
  • Make messages nav strip full-width like default theme
  • Hide MessagesPageHero so the horizontal nav + thread sit at the top
  • Trim remaining messages content margin + nav padding
  • Force messages container to block stacking at all widths
  • Add small top margin so messages nav clears the fixed header
  • Restore the Messages hero banner

Full Changelog: https://github.com/ernestdefoe/gridiron-nation/compare/2.1.10...2.1.11

View release on GitHub

  • Author
  • Administrators
  • Community Expert

gridiron-nation 2.2.0

What's Changed

  • fix: keep wide team-wordmark hero decorations from being cut off
  • feat: stronger drop shadow on hero team decorations
  • fix: widen welcome-hero scoreboard so long newest-member names aren't cut off
  • feat: per-glyph hero decoration inset (measure real ink overflow in JS)

Full Changelog: https://github.com/ernestdefoe/gridiron-nation/compare/2.1.11...2.2.0

View release on GitHub

  • Author
  • Administrators
  • Community Expert

gridiron-nation 2.2.1

Hardening release from a code audit — includes a likes-counter fix that matters on non-MySQL databases.

Changes

  • Cross-database likes counter: the discussions.likes_count sync no longer uses MySQL-only CAST(... AS SIGNED) raw SQL. It now uses Eloquent's atomic increment()/decrement(), so it works on PostgreSQL and SQLite too (previously a like on those engines threw and left the count permanently stale). Floored at 0.
  • Like/unlike listeners are container-resolved (Class@method) — no manual resolve() per event.
  • The hero "newest member" field is cached for 5 minutes like the scoreboard counts, so it no longer adds a DB round-trip to every page load; the two ForumResource extenders are merged.
  • Live-scores controller injects its Guzzle client instead of constructing one per request.
  • Removed an unconditional ini_set('memory_limit') that ran on every web request (it's a CLI/build concern).
  • The composer trigger opens the composer via the core component loader instead of a hard-coded .IndexPage-newDiscussion DOM node.
  • Removed two unused locale keys.

Safe to update — no migrations.

View release on GitHub

Guest
Reply to this topic...

Want to reply?

Ask a question about any of these applications and it will be answered by the person who wrote them. It takes about thirty seconds, and you keep what you have already typed.

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.