Skip to content

Stream layout

The activity stream is configured under Appearance → Customize, with a global All posts group and a per-post-type group for each enabled stream type.

Global stream settings

Setting Effect
Show post-type filter pills above the stream Adds filter pills so visitors can narrow the stream to one type
Post-type filter pill corner size Corner radius of those pills
Use two-column stream layout on wide displays Switches to two columns above a wide breakpoint

Per-post-type settings

Each of All posts, Status Updates, Image Posts, and Video Posts gets its own group. A type inherits the global values until you enable Override All posts settings inside it.

Setting Effect
Display item header Shows the author/title header row on the card
Display timestamp Shows the post time on the card
Display post type pill Shows a pill naming the post type on the right of the header, below the date and level with the author handle, on cards and single views; plugins can add pills of their own
Display comment count Adds a pill with a speech bubble icon and the number of comments to the tags and reactions row; on cards it links to the comments, on the post page it opens and closes the reply form above the comments; hidden once comments are closed on a post without any
Display post navigation Shows the previous and next links below status, image, and video posts; All Posts only, with no per-type override
Timestamp format How that time is written — see Timestamp format
Custom timestamp pattern The pattern used when the format is Custom
Display featured image Whether the featured image renders in the stream
Stream image rendering How the featured image is fitted into the card
Use accent color for description links Applies the accent color to links in card text
Card appearance Whether cards render in the dark or light treatment
Enable card background blur Backdrop blur behind the card

Colors for card background, border, and the sticky variants are covered in Color schemes.

Reaction picker

The add-reaction button opens a picker with ten quick picks at the top and, below them, a scrollable list of every emoji: the 1,906 base emoji of Unicode 16.0 in their nine groups, without skin-tone variants. The list is fetched from assets/data/emoji.json the first time a picker opens on a page and shared by every picker on it. The loveshack_reaction_choices filter still sets the quick picks. The picker stays on screen: it opens downward when there is no room above, hugs the right edge when it would leave the viewport, and on narrow screens opens as a centred sheet with side margins. A close button sits in its top right corner.

Image hover zoom

The Image Posts section carries one extra checkbox, Zoom images on hover, that is not part of the override group: it shows whether or not the section's overrides are enabled. Off by default; when on, the picture on an image card enlarges slightly while the pointer is over it.

Two plain settings under Status Updates, shown whether or not the section's overrides are enabled:

  • Render link previews switches the preview cards for links in status updates on or off, on the stream and on the post page. On by default.
  • Render description decides where the page title and description go: as an overlay over the bottom of the preview image, which is the default, below the image, or not at all.

Every preview card opens the linked site in a new tab, and the site's domain follows the card in a small muted line with an external link icon, outside the card's background.

Timestamp format

Timestamp format controls the wording of the publication time on stream cards and on single posts. Like every other setting in these groups, it is set once under All posts and can be overridden per post type.

Option Recent posts Older posts
Relative, exact date after a week just now, 5 minutes ago, 3 hours ago, 3 days ago The date format from Settings → General, from one week on
Relative, exact date after a month The same wording, plus 1 week ago through 4 weeks ago The date format from Settings → General, from one month on
Locale date and time Sep 7, 2026, 8:46 AM — every post Same
Locale date without time Sep 7, 2026 — every post Same
Geek 2026-09-07-08-46 — every post Same
Custom pattern Whatever Custom timestamp pattern says Same

Relative, exact date after a month is the default and matches how Loveshack has always rendered timestamps, so existing sites are unchanged until the setting is saved.

The two Locale options write the date the way the site language conventionally does — Sep 7, 2026, 8:46 AM for en_US, 07.09.2026, 08:46 for de_DE — using the PHP intl extension. When intl is not installed, they fall back to the date and time formats from Settings → General.

Geek is always Y-m-d-H-i, regardless of locale, so timestamps sort as text.

Custom timestamp pattern

Choosing Custom pattern reveals a Custom timestamp pattern field. It takes an ICU date pattern, the same syntax the Locale options use internally, and it is prefilled with the pattern this site's locale already uses — so you can start from a working value and edit it rather than writing one from scratch.

Pattern Renders
yyyy-MM-dd HH:mm 2026-09-07 08:47
EEEE, d MMMM yyyy Monday, 7 September 2026
d MMM yy 7 Sep 26

Not strftime

The field is not strftime-style (%Y-%m-%d): PHP deprecated strftime() in 8.1 and removes it in 9.0. ICU patterns are what intl speaks, so the locale default can be handed to you as an editable starting point.

Letters ICU does not recognise are dropped rather than reported as an error, so check the preview after editing. Clearing the field restores the locale pattern, and without the intl extension the locale format is rendered instead of the pattern.

Hiding the current year

Hide the current year sits below the pattern field. When checked, dates that fall in the current year are written without the year: Sep 7 instead of Sep 7, 2026, 09-07-08-46 instead of 2026-09-07-08-46. Dates from earlier years keep it. The setting applies to every format that writes a date, including the date the relative options fall back to; relative wording such as 3 days ago is unaffected. Like the other timestamp settings it is set under All posts and can be overridden per post type.

Single post panel

The single-post view has its own settings, separate from the stream cards:

Setting Effect
Enable background on single template Turns the panel background on
Dark single background / light equivalent Panel background per scheme
Enable single panel glass blur Backdrop blur on the panel

Below the post

On status, image, and video pages, thread replies, the previous and next navigation, and the comments sit below the article rather than inside it. Each is its own panel with the post's background and border, separated by a small gap, so the single post panel settings above apply to all of them. When the ActivityPub plugin is active and a post has received likes from the fediverse, a row of the likers' avatars and a count appears under the post's tags.

Floating subscription panel

Setting Effect
Show floating subscription panel A persistent subscribe affordance over the stream

This is the highest-conversion placement in the theme, and also the most intrusive. Sites with a strong landing page often turn it off and rely on the Subscriptions block instead.

Design guidance

The per-type overrides make it possible to give each content kind a distinct rhythm — statuses dense and header-less, image posts edge-to-edge, videos with their text hidden. Used lightly this reads as intentional. Used on every setting it reads as four different websites stacked on one page.