A brand asset library your marketing team actually searches

Every logo, photo, video cut and ad export in one searchable grid, with previews, campaign tags and rights expiry dates at a glance.

App
General Input StorageGeneral Input DatabaseJigsawStackSlack BotMarketingOperationsContent GenerationDocument Processing
PromptCreate

I want a brand and campaign asset library my marketing team opens instead of digging through shared folders. Build it as an app whose home screen is a searchable grid of every asset we own: logos, product photos, video cuts and finished ad exports. Each tile shows a live preview of the file, its file size, the campaign it belongs to and who uploaded it.

The files themselves live in General Input Storage. Organize keys so every asset sits under its campaign prefix, something like campaigns/<campaign>/<asset-type>/<version>-<filename>, and page the grid with List Objects using that prefix and the cursor it returns rather than loading the whole store at once. Objects can be up to 5 GB, so raw video cuts belong here rather than in a shared drive.

All the searchable metadata lives in General Input Database. Create a table with one row per asset holding the storage key, campaign, asset type (logo, photo, video, ad export), tags, uploader, file size, upload date and the usage rights expiry date, plus the columns the cataloguing agent fills in later: a plain English description, alt text and suggested tags. The database is the source of truth for search and filtering, and the store holds the bytes. Never put file contents in a database column, only the key that points back at the file.

Uploading is drag and drop straight from the browser. When someone drops files onto the grid, ask for the campaign, asset type and rights expiry date, then call Presign Upload for each file and have the browser PUT the bytes directly to the returned URL, so nothing large moves through a handler. Pass the real file size on the presign call, because that is what the storage quota check uses. Once a PUT succeeds, write the metadata row into the database.

Previews and downloads both run on Presign Download. When a page of the grid renders, mint a fresh download URL for each visible tile and use it as the image or video source. When someone clicks Copy link on a tile, mint another one and put it on the clipboard. These URLs expire after about 15 minutes and are not stable links, so mint one per use and never store one in the database or bake one into a tile.

Put a rights expiry rail across the top of the library. Any licensed asset whose usage rights expire in the next 30 days floats up there, soonest first, with the days remaining and the campaign on each card. Anything already expired is called out more strongly and is filtered out of the main grid by default, with a toggle to show it, so nobody ships an ad using art we no longer have the rights to.

Keep versions grouped. Assets sharing a campaign prefix and base name are the same asset in different cuts, so collapse them into a single tile showing the newest version, with a count and an expandable list of the older ones underneath. Sort by upload date so the newest cut is obviously the newest.

Add a Catalog this batch button that kicks off a background agent over everything uploaded but not yet described: rows with no description yet, plus any keys List Objects returns that have no row at all. For each file the agent mints a Presign Download URL and hands that URL to the JigsawStack Extract Data with Vision OCR operation, which reads any text burned into the image and describes what the asset actually shows. The agent then writes a plain English description, a short alt text line and three to six suggested tags back into that asset's database row. Once the batch finishes, the grid is searchable across those descriptions and tags, so the team finds assets without anyone tagging by hand.

Vision OCR reads images and PDFs, so have the agent catalog those and skip video files rather than failing on them. For video, fall back to the filename, campaign and uploader already on the row and mark it as needing a manual description. Show batch progress in the app while the agent runs, with a per file status, and leave anything that errored in the uncatalogued queue so the next run picks it up.

Retiring a superseded version uses Delete Object, always behind a confirmation step that names the file and warns if it is the newest version of its group. After the object is deleted, remove or mark the database row so the grid stays consistent with the store.

Finally, let the team push a new assets are live note to a channel with the Slack Bot Send a Message operation. The message names the campaign, how many assets were added, the asset types and who uploaded them. Let the person pick the channel before sending.

What does this prompt do?

  • Puts every logo, photo, video cut and ad export in one searchable grid, with a live preview, file size, campaign and uploader on every tile.
  • Takes drag and drop uploads straight from the browser, so even multi gigabyte video cuts land in the library instead of a shared folder.
  • Catalogs new uploads for you: a background assistant reads the text inside each image, then writes a description, alt text and suggested tags so the grid is searchable without manual tagging.
  • Floats any licensed asset whose usage rights expire in the next 30 days to the top, and keeps versions grouped so the newest cut is obvious.

What do I need to use this?

  • A General Input Storage store for the files and a General Input Database for the searchable details. Both come with your account.
  • A JigsawStack account, used to read and describe the contents of each new image.
  • A Slack workspace, if you want to announce new assets to a channel.
  • Your campaign names and the usage rights expiry dates for anything licensed.

How can I customize it?

  • Change the expiry window. Thirty days is the default warning, but you can widen it to 60 or 90 days for slower legal cycles.
  • Adjust the asset types and tag vocabulary to match how your team already talks about campaigns.
  • Pick which Slack channel gets the new assets are live note, or turn the announcement off entirely.

FAQs

How big can the files be?
Up to 5 GB each, so full resolution video cuts and layered design exports are fine, not just thumbnails. Uploads travel straight from your browser to storage, so large files do not slow the app down.
Do I have to tag every asset myself?
No. Hit Catalog this batch and a background assistant looks at each new image, reads any text printed on it, and writes a plain English description, alt text and suggested tags for you. You can edit anything it suggests.
Can it describe video files too?
The automatic descriptions cover images and PDFs. Video cuts still live in the library with previews, campaign and uploader on the tile, and get flagged for a quick manual description.
What happens when usage rights expire?
Anything expiring in the next 30 days floats to a rail at the top of the library, soonest first, with the days remaining on each card. Already expired assets are hidden from the main grid by default so nobody ships an ad you no longer have the rights to.
Can I share an asset with someone outside the team?
Yes. Copy link on any tile gives you a temporary download link you can hand to anyone. The links expire on their own, so old copies do not stay live forever.

Related templates

Turn Mailjet email clicks into ranked HubSpot follow-ups

Twice a day we spot the people clicking your pricing and demo pages, create a follow-up task for their owner, and post a ranked recap to Slack.

Mailjet
HubSpot
Slack Bot
Agentic Task
Clean out the Looker dashboards and Looks nobody opens

One board showing every dashboard and Look with its folder, owner and favorite count, so you can find dead content and retire it safely.

Looker
Slack Bot
App
LiveKit live operations console for room moderation

Watch every live room on one screen, remove disruptive guests, start recordings and end stuck sessions without anyone opening a terminal.

LiveKit
Slack Bot
General Input Database
App
Wake up dormant Keap leads with a researched reason

Every Monday we find leads who never bought, research a real reason to reach out, and send a short personal email instead of another check in.

Keap
Slack Bot
Agentic Task
Chat quality review board for LiveChat support leads

Score last week's finished live chats against one rubric, let an AI grader draft the notes with quotes, and send coaching straight to the agent.

LiveChat
Slack
General Input Database
App
Competitor LinkedIn ad watchlist with a permanent archive

Browse every ad your competitors are running on LinkedIn, keep a permanent archive of the ones that stopped, and see what changed since your last visit.

LinkedIn Ad Library
LinkedIn Ads
General Input Database
App

Stop digging through shared folders for the right logo.

Give your marketing team one searchable library where every asset has a preview, a campaign and a rights expiry date.