Evergreen social library: put your best posts back to work

By General Input

Rank everything you have published, save the winners with topic tags, and reschedule them with a fresh caption once the cooldown clears.

Integrations

  • bundle.social
  • Google Sheets

Type

App

Categories

  • Marketing

Build me an evergreen content library app on top of bundle.social. Most of my best social content only ever ran once, so I want a place where I can mine what already worked, curate it, and put it back to work on a schedule I control. The library itself is the app's persistent state, so it has to survive between sessions rather than being rebuilt on every load.

The main screen is a ranked table of everything I have published. Build it from the bundle.social "Get post list" operation filtered to status POSTED for a date range and team I choose in the toolbar, then enrich each row with "Get Bulk Post Analytics" so the table can show likes, comments, shares and views per post. Columns: media thumbnail, caption excerpt, platform, published date, and the four engagement metrics plus a total. Default sort is engagement descending so the winners float to the top, and I can re-sort by any metric or filter by platform. Both endpoints paginate, so the handler needs to page rather than fetch everything at once: the post list uses offset and limit against a returned total, and bulk analytics caps at 60 posts per paginated request, so chunk the post ids into batches of 60.

Analytics from bundle.social are cached, not live, so never imply the numbers are real time. Show a "last updated" stamp on the table and on each row, and give me a refresh control that calls "Force refresh post analytics" for the rows I select and then re-reads them. For a single post opened in detail, use "Get Post Analytics" for the normalized likes, comments, shares and views.

Each row has a checkbox. I tick the posts worth keeping and hit a button that adds them to the evergreen library. A library entry stores the source post id, the caption text, the media upload ids attached to the original, the original platform and publish date, and a snapshot of the original performance numbers taken at the moment I saved it. Entries also carry topic tags that I control: I can create, rename and delete tags, and assign several to an entry. The library view is a filterable list or grid by tag, showing for each entry the original performance, how many times it has been re-run, the date of the last re-run, and how the re-runs performed against the original as a per metric delta or percentage.

To repost, I open a library entry in a composer. The composer reuses the original media by upload id rather than re-uploading anything: read the media back with "Get upload list" or "Get upload" and show a preview so I can confirm it is the right asset. It has an AI rewrite action that produces a fresh version of the caption, keeping the hook and the point but not the exact wording, with the option to generate another variant and to edit the text myself. I pick which connected account the repost targets, and it does not have to be the same platform as the original, so a LinkedIn winner can go out as an Instagram post. Where I am posting to more than one platform at once, give me per platform text fields, which map onto the per-platform data object that "Create post" takes alongside the shared payload. I choose a date and time and the composer schedules it with "Create post". A scheduled repost that has not published yet stays editable in the app through "Update post".

Never queue a byte identical repost. If the caption I am about to schedule matches the original exactly, block the schedule action and tell me to rewrite it, because republishing identical text repeatedly across accounts can itself cause account problems.

Enforce a cooldown that I set in settings, defaulting to 90 days. Any entry whose last run, original or repost, falls inside that window is greyed out in the library with its repost action disabled, showing the reason and the date it becomes eligible again. Keep it visible rather than hiding it. Separately, when I schedule a repost, check the other reposts already queued and warn me if another library entry sharing a topic tag is scheduled in the same calendar week, so I do not flood one theme.

After a repost publishes, the entry records the new post id, increments its re-run count, updates the last re-run date, and pulls that post's analytics so the comparison against the original fills in over time.

Give me a sync button that pushes the whole library out to a Google Sheet I nominate, using "Update Values" or "Batch Update Values" with a header row and one row per entry: caption excerpt, topic tags, original platform, original likes, comments, shares and views, times reposted, last re-run date, and next eligible date. Rewrite the sheet on each sync so it always reflects current state, and show me when it last synced. The team should be able to browse the bank of proven content from the spreadsheet without opening the app.

Settings holds the bundle.social team, the default date range for the ranked table, the cooldown in days, the topic tag list, and the target spreadsheet and tab.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to LoopsTurn the people who engage with your posts into Pipedrive leads