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.
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?
Do I have to tag every asset myself?
Can it describe video files too?
What happens when usage rights expire?
Can I share an asset with someone outside the team?
Related templates
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.
One board showing every dashboard and Look with its folder, owner and favorite count, so you can find dead content and retire it safely.
Watch every live room on one screen, remove disruptive guests, start recordings and end stuck sessions without anyone opening a terminal.
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.
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.
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.
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.