# 03-Aug-2026 — a real Facebook feed on the site, share every photo, and links to the published posts [#16](https://github.com/nbarrett/ngx-ramblers/issues/16)

## [build 807](https://github.com/nbarrett/ngx-ramblers/actions/runs/30819075701) — [commit c013fd9](https://github.com/nbarrett/ngx-ramblers/commit/c013fd9bb6dee652a9e6def2a2013fbfed00a798)

_____

The Facebook panel on the home page used Facebook's own embedded page plugin, which meant an iframe that ignored the space it was given, needed scaling to fit, carried Facebook's cookies and script onto the page, and increasingly showed visitors a login prompt instead of any posts. It has been replaced with the group's actual recent posts, read through the Graph API using the Page connection the site already holds, and drawn in the site's own styling: a photo, the opening words of the post, who wrote it, how long ago, and how many photos it holds, each opening the real post on Facebook. While the posts are being fetched the panel shows placeholder rows rather than jumping about when they arrive, and if the Page is not connected or Facebook refuses the request the panel says so plainly instead of sitting empty.

When you share a walk photo album to social media, Facebook now receives every photo in the album, while Instagram keeps to its own chosen set of up to ten. Previously, auto-choosing ten photos for Instagram also capped Facebook to those same ten. The share panel has also been tidied so each network's already-shared status appears once, in a single place rather than repeated in several. Album pages now carry links through to the Facebook and Instagram posts they were published as, so any visitor can follow an album out to social media.

- The Facebook panel shows the group's own recent posts, in the site's styling, with no Facebook iframe, script or cookies on the page
- Each post shows its photo, opening text, author, how long ago it was posted and how many photos it holds, and opens the real post on Facebook
- Placeholder rows while posts load, a plain warning if the Page is not connected or Facebook refuses, and a prompt to connect a Page when there is nothing to show
- Instagram and Facebook post tooltips are now readable: wide enough to hold a caption, left aligned, and truncated rather than running off the screen
- Facebook now shares all of the album's photos, whatever is picked for Instagram
- Instagram still uses the selected set of 2 to 10 photos, with the count and aspect-ratio checks
- Each network's shared status now shows once, as a status card at the top of the share panel, with the date and a link to the post
- Removed the duplicate already-published wording that appeared in the header, the list and the toggles at the same time
- Once an album has been shared to every connected network, the panel collapses to just the status cards
- Album pages show "Also posted on Facebook / Instagram" links to the live posts, for everyone, not only for people who can edit the site
- Those links sit inline with the Share to social button, and hide themselves while the share panel is open, since it shows the same status below
- On narrow screens the share button and each post link stack to full width instead of wrapping raggedly
- A new "Show Links To Social Posts" album setting turns them off for an individual album; it is on by default

- `GET /api/social/facebook/recent-posts` reads the Page feed and profile through `graphApiRequest`, normalising Graph's `full_picture`, `attachments` and `subattachments` into `FacebookPagePost` so the client never sees Graph's shape. Photo count comes from the sub-attachments where a post is an album
- `FacebookComponent` drops `DomSanitizer`, the plugin URL, the resize listener and the width and scale arithmetic that existed only to make the iframe fit, and renders from `FacebookService.recentPosts()` instead. A single in-flight flag stops repeated system config events firing repeated requests
- The feed only loads when `externalSystems.facebook.showFeed` is set, and clears itself when that is turned off
- `social-media-tooltip` sets the tooltip width, alignment and wrapping in one place for both networks, and Instagram captions truncate through `stringUtils.truncate` rather than being passed whole
- `.social-card-body` becomes a flex column so a panel's content can size itself against the card rather than overflowing it
- `SocialShareAlbumComponent` now resolves a per-network image set: Facebook gets all album images, Instagram gets the selected subset
- Added `imageNamesByNetwork` to `SocialPublishJobRequest`; `social-publish-ws-handler` resolves and records each network's own image list, falling back to the shared `imageNames`
- Consolidated the published-network status into cream status cards in the header, removing the header chips, the prior-publications list, the disabled toggle cards and the per-network success alerts
- The publish toggles and photo controls now render only for networks that can still be published to
- New `SocialPostLinksComponent` loads an album's publications and renders one chip per network that has a permalink
- `DynamicContentViewAlbum` renders the chips inside the sticky share bar, next to the share button for editors and on their own for everyone else
- Added `showSocialPostLinks` to `AlbumData`, defaulted to true in `page-content-actions.service`, `create-walk-album.service` and when an existing album is opened for edit
- `GET /api/social/publications` no longer requires authentication and returns only album name, network, post id, permalink, image count and published date