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.
Link previews¶
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.