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.
Knowledge base

Things that cost me a day, so they cost you none

Working notes from building Invision Community and Flarum applications. Mostly the failures that give no error at all — the ones where everything installs cleanly and quietly does the wrong thing.

92 articles

Invision Community 5

86 articles

Extensions and contracts

39

What each extension point is for, what it must declare, and what happens when it is wrong — which is usually nothing visible.

Languages and text

5

The string table, translation, and the places where text does not appear where you expected it to.

Theming, templates and forms

9

Theme hooks, CSS that survives both colour schemes, and building forms that do not throw on render.

Background work and scheduled tasks

5

The queue system, work that has to happen after the response, and jobs that finish without doing anything.

Data, settings and storage

11

The database layer, settings, tags, file storage, and backing up a live site.

AI features and expectations

5

What these features do, what they cost, and what buyers reasonably but wrongly assume they do.

Application structure and releases

11

The JSON files an application is made of, versioning and upgrade steps, and testing from the command line.

Realtime, chat and calls

1

WebSocket gateways, relays and the server-side pieces live features depend on — where "it works when I test it" and "it works for your members" are different claims.

Nothing matches that.

The Invision Community 4 CSS class that silently does nothing in 5

A class name that no longer exists is not an error. It applies no styling, logs nothing, and breaks no build. The element simply renders unstyled, and because the surrounding markup is right, it is easy to look straight past.

This is how a panel shipped with its text flush against the left edge of its own box. The markup asked for ipsPad, which is an Invision Community 4 class. In 5 it does not exist, so there was no padding at all — and nothing anywhere said so.

Check before you trust a class name

The suite's own templates are the authority. If core does not use it, it almost certainly does not exist:

grep -ro "ipsPad" applications/*/dev/html/ | wc -l
# 0 - it is gone

grep -rho "ipsBox[^\"']*" applications/core/dev/html/ | sort | uniq -c | sort -rn | head
#  77 ipsBox__header
#  56 ipsBox
#  12 ipsBox i-padding_3     <- this is the modern form
#   7 ipsBox ipsBox--padding

Invision Community 5 moved spacing onto utility classes: i-padding_3, i-margin-bottom_1, i-flex, i-gap_2, i-align-items_center. Sizes are steps, not pixels.

<!-- 4 -->
<div class="ipsBox ipsPad">

<!-- 5 -->
<div class="ipsBox i-padding_3">

The same trap, one level down

CSS custom properties fail identically, and worse. var(--i-nope, #171b21) silently renders the fallback, so a rule written with a dark fallback is dark-only in both colour schemes — correct at night, wrong by day, with a fallback present that makes it look scheme-aware. Confirm a name exists before relying on it:

getComputedStyle( document.documentElement ).getPropertyValue( '--i-box--ba-co' )
// empty string means it does not exist, and your fallback is what renders

See custom CSS that works in both colour schemes for the verified names.

Why this survives review

Nothing catches it. PHP lints fine, the template compiles, the page returns 200, and a screenshot looks plausible unless you know what the spacing should be. The only reliable detection is to look at the rendered page — which is a good argument for capturing screenshots of your own screens as a matter of routine rather than only when a listing needs one.

If you scan your own source for these, remember to strip comments first. A checker that reads comments will happily report the cautionary note explaining this trap as an instance of the trap.



User Feedback

Recommended Comments

There are no comments to display.

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.