PHPackages                             ernestdefoe/gridiron-nation - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. ernestdefoe/gridiron-nation

ActiveFlarum-extension[Utility &amp; Helpers](/categories/utility)

ernestdefoe/gridiron-nation
===========================

GridIron Nation — College football fan forum theme for Flarum 2. Crimson &amp; DM Sans, organic radius, dark mode, live score widget.

2.2.1(1mo ago)034MITLessPHP ^8.3CI passing

Since May 16Pushed 1mo agoCompare

[ Source](https://github.com/ernestdefoe/gridiron-nation)[ Packagist](https://packagist.org/packages/ernestdefoe/gridiron-nation)[ Docs](https://github.com/ernestdefoe/gridiron-nation)[ RSS](/packages/ernestdefoe-gridiron-nation/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (10)Dependencies (2)Versions (33)Used By (0)

GridIron Nation 🏈
=================

[](#gridiron-nation-)

[![Floxum](https://camo.githubusercontent.com/25050782aa8c7eb045bfce4e12e511a631b8ec4b1c6cb43b93ee458d75751eb4/68747470733a2f2f666c6f78756d2e636f6d2f657874656e73696f6e2f65726e6573746465666f652f6772696469726f6e2d6e6174696f6e2f62616467652f6e616d65)](https://floxum.com/extension/ernestdefoe/gridiron-nation)[![Version](https://camo.githubusercontent.com/918957c360bd66a4c7e26ebee523baf0f601a74e08d7754483ede66e0187a824/68747470733a2f2f666c6f78756d2e636f6d2f657874656e73696f6e2f65726e6573746465666f652f6772696469726f6e2d6e6174696f6e2f62616467652f686967686573742d76657273696f6e)](https://floxum.com/extension/ernestdefoe/gridiron-nation)[![Downloads](https://camo.githubusercontent.com/2f83ca7dbcc76df7b1419a914c1d9eb8658b77089304bcc4b7d660e77795acff/68747470733a2f2f666c6f78756d2e636f6d2f657874656e73696f6e2f65726e6573746465666f652f6772696469726f6e2d6e6174696f6e2f62616467652f646f776e6c6f616473)](https://floxum.com/extension/ernestdefoe/gridiron-nation)[![Review](https://camo.githubusercontent.com/cd34168e196f28ba0d1c9b7d512102aa7e6979ca7cfe6c236d9c37f6cdaf2748/68747470733a2f2f666c6f78756d2e636f6d2f657874656e73696f6e2f65726e6573746465666f652f6772696469726f6e2d6e6174696f6e2f62616467652f726576696577)](https://floxum.com/extension/ernestdefoe/gridiron-nation)[![License](https://camo.githubusercontent.com/66c6e5853b71677c87292c605785ddf249e9c7dbd18b271c79748e0b7a01bf2f/68747470733a2f2f666c6f78756d2e636f6d2f657874656e73696f6e2f65726e6573746465666f652f6772696469726f6e2d6e6174696f6e2f62616467652f6c6963656e7365)](https://floxum.com/extension/ernestdefoe/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.

---

Screenshots
-----------

[](#screenshots)

### Homepage — Light Mode

[](#homepage--light-mode)

[![Homepage in light mode](docs/screenshots/homepage-light.png)](docs/screenshots/homepage-light.png)

### Homepage — Dark Mode

[](#homepage--dark-mode)

[![Homepage in dark mode](docs/screenshots/homepage-dark.png)](docs/screenshots/homepage-dark.png)

### Discussion Page — Light Mode

[](#discussion-page--light-mode)

[![Discussion page in light mode](docs/screenshots/discussion-light.png)](docs/screenshots/discussion-light.png)

### Discussion Page — Dark Mode

[](#discussion-page--dark-mode)

[![Discussion page in dark mode](docs/screenshots/discussion-dark.png)](docs/screenshots/discussion-dark.png)

Screenshots are auto-generated by `scripts/screenshots.mjs`(puppeteer-core against `flarum.test`). Run after a UI change:

```
node scripts/screenshots.mjs
```

---

Features
--------

[](#features)

### 🏟 Stadium Hero

[](#-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

[](#-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

[](#-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

[](#-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

[](#-top-recruits-widget)

- Pulls live recruiting data from the [ernestdefoe/recruiting](https://github.com/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

[](#-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

[](#-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

[](#-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

[](#-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
------------

[](#installation)

### Via Composer

[](#via-composer)

```
composer require ernestdefoe/gridiron-nation
php flarum migrate
php flarum cache:clear
```

### Manual

[](#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
------------

[](#requirements)

DependencyVersionPHP`^8.3`Flarum`^2.0`guzzlehttp/guzzle`^7.0`### Optional, but recommended

[](#optional-but-recommended)

ExtensionWhy[`ernestdefoe/recruiting`](https://github.com/ernestdefoe/recruiting)Powers the Top Recruits widget with live CFBD data + On3 photo headshots. Without it, the widget hides.[`ramon/colored`](https://github.com/ramon-1106/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`](https://github.com/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
--------------

[](#admin-settings)

Under **Extensions → GridIron Nation** in the Flarum admin panel:

SettingDefaultPurpose`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
-------------

[](#api-endpoints)

MethodPathDescription`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
-----------------------

[](#building-js-from-source)

```
cd js
npm install
npm run build   # production
npm run dev     # watch mode
```

---

Upgrading from `ernestdefoe/fbsfb` (v1.x)
-----------------------------------------

[](#upgrading-from-ernestdefoefbsfb-v1x)

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.

---

Support
-------

[](#support)

Questions, bug reports, and feature requests:

- **Support forum:**
- **Issues:**

License
-------

[](#license)

MIT © [ernestdefoe](https://github.com/ernestdefoe)

###  Health Score

44

—

FairBetter than 90% of packages

Maintenance90

Actively maintained with recent releases

Popularity7

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

32

Last Release

55d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/c9978664264055711c21fbcf73c937f758df771d9cb40f6a25370b10123e7abc?d=identicon)[ernestdefoe](/maintainers/ernestdefoe)

---

Top Contributors

[![ernestdefoe](https://avatars.githubusercontent.com/u/24905286?v=4)](https://github.com/ernestdefoe "ernestdefoe (124 commits)")

---

Tags

themeflarumsportscollege footballgridiron

### Embed Badge

![Health badge](/badges/ernestdefoe-gridiron-nation/health.svg)

```
[![Health](https://phpackages.com/badges/ernestdefoe-gridiron-nation/health.svg)](https://phpackages.com/packages/ernestdefoe-gridiron-nation)
```

###  Alternatives

[flarum-lang/russian

Russian language pack for Flarum.

12128.3k](/packages/flarum-lang-russian)[eslazarev/wildberries-sdk

Wildberries OpenAPI clients (generated).

293.1k](/packages/eslazarev-wildberries-sdk)[fof/sitemap

Generate a sitemap

1799.7k2](/packages/fof-sitemap)[fof/discussion-language

Specify the language a discussion is written in &amp; sort by language

1034.8k7](/packages/fof-discussion-language)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
