Bristol Carousel is a format-first carousel studio for local newsletters, local media outlets, community publishers, and city-focused creators.
It helps editors turn recurring local information, starting with Bristol events roundups, into reviewable Instagram carousel assets without rebuilding every slide manually in Canva.
The repository currently includes a working Next.js foundation for the Events Roundup MVP:
- Format library route for choosing the controlled Events Roundup format
- Source intake and review components for messy or structured event material
- Editable source-item cards with image attachment support
- SVG-backed slide preview components
- Sharp-powered export route coverage for PNG/JPG carousel assets
- Convex schema/functions for workspaces, formats, source items, assets, slides, and exports
- Vitest, Convex, render, text-fit, and Playwright coverage for the core flow
Saved project workspaces require Convex environment variables. Without Convex configured, the static routes still render and the tests cover the intended creation path.
The core product use case is simple: turn structured local information into polished carousel content, such as:
- 10 events happening in Bristol this weekend
- 7 new restaurants to try this month
- 5 planning decisions residents should know about
- A weekly culture roundup
- A neighbourhood guide
- A matchday, market, festival, or public-meeting preview
The goal is to help small editorial teams publish useful, repeatable social content without manually designing every slide from scratch.
Bristol Carousel is designed for teams and individuals who regularly turn local information into visual social posts:
- Local newsletters
- Local newspapers and digital media outlets
- Events curators
- Community organisations
- Tourism and culture teams
- Independent city guides
- Social media editors
- Local creators and reporters
Although the initial focus is local media, the same workflow can support other recurring formats, including product roundups, internal comms, campaign explainers, educational posts, and niche community updates.
The app helps users move from raw information to a ready-to-post Instagram carousel.
At a high level, the workflow is:
- Add or import source content.
- Choose a carousel format.
- Generate slide copy.
- Apply a visual template.
- Review and edit the carousel.
- Export images for Instagram or other social platforms.
- Carousel generation: Create multi-slide posts from a list of events, stories, places, recommendations, or announcements.
- Local-media templates: Use repeatable formats such as event roundups, weekend guides, explainers, venue lists, and news summaries.
- Editorial controls: Edit titles, descriptions, ordering, dates, locations, calls to action, and source notes before export.
- Brand styling: Reuse colours, fonts, logos, spacing, and slide layouts so posts feel consistent.
- Image support: Add event images, venue photos, maps, or default visual treatments where no image is available.
- Export-ready output: Produce square or portrait carousel slides suitable for Instagram and other platforms.
- Reusable formats: Save formats that match common recurring posts, such as "10 events in Bristol" or "This week in the city".
A roundup carousel for newsletters and local media teams publishing weekly or weekend event guides.
Typical slides:
- Cover slide
- Event 1
- Event 2
- Event 3
- Event 4
- Event 5
- Event 6
- Event 7
- Event 8
- Final call-to-action slide
A more editorial format for city guides, combining events, food, culture, and family-friendly recommendations.
A carousel that turns one local story into a sequence of short, readable slides.
A format for posts like "8 independent cafes to try", "New openings this month", or "Best places for live music".
Depending on the final implementation, the app may support:
- Manual entry
- CSV uploads
- Newsletter drafts
- Website URLs
- Event listings
- Airtable or Google Sheets
- CMS exports
- Social captions or rough notes
Each item can include fields such as title, date, time, location, description, price, image, URL, category, and source.
The app should export carousel assets that are ready for publishing:
- PNG or JPG slide images
- Editable project files
- Suggested Instagram captions
- Alt text
- Hashtags
- Source links or credits
- Make local information easier to share: The app should help publishers turn useful information into formats people actually read and save.
- Keep editorial control: Automation should speed up drafting and layout, not remove human judgment.
- Respect local brands: Posts should feel like they come from the publisher, not from a generic template engine.
- Reduce repetitive design work: Recurring formats should become fast, consistent, and easy to update.
- Support small teams: The workflow should be simple enough for one editor, founder, or social media manager to use regularly.
Source content
-> Structured items
-> Carousel format
-> Generated slide copy
-> Branded visual template
-> Editor review
-> Exported carousel
- Template builder for recurring local media formats
- Brand kit management
- AI-assisted copy generation
- Auto-summarisation from article or event URLs
- Drag-and-drop slide editor
- Calendar-aware event sorting
- Duplicate detection across event feeds
- Caption and alt-text generation
- Multi-city support
- Team review and approval flow
- Direct scheduling or publishing integrations
The app is scaffolded as a root-level TypeScript Next.js App Router project with Convex client wiring and initial test harnesses for frontend, Convex functions, Sharp-compatible SVG rendering, and Playwright browser coverage.
npm installCreate local environment files as needed, but do not commit them.
NEXT_PUBLIC_CONVEX_URL=
CONVEX_DEPLOYMENT=NEXT_PUBLIC_CONVEX_URL enables the client-side Convex provider. Without it,
the app still renders the static scaffold routes so contributors can run the
foundation before connecting a Convex deployment.
npm run devThen open http://localhost:3000. The root page links to /studio, which is a
foundation route for later format selection, intake, SVG preview, and export
work.
To configure Convex locally, run:
npm run convex:devnpm run lint
npm run test
npm run build
npm run test:e2eThe current smoke suite covers:
- Root page rendering and navigation into the studio route.
- Convex provider availability for client components when configured.
- A Convex function smoke query through
convex-test. - Sharp reading SVG dimensions on a Node-compatible path.
- Playwright reaching the studio route from the root page.
Per the MVP plan, slide previews and exports use canonical SVG documents. The export route rasterizes those SVGs with Sharp on a Node.js runtime path rather than relying on HTML/CSS screenshot export.
Reusable product guidance for agent-assisted intake and editorial safety lives
in docs/agent-guidance/:
events-roundup-intake.mddefines how the Events Roundup intake lane turns supplied source material into reviewable candidate source items.editorial-safety.mddefines factual caution, ambiguity handling, slide-copy boundaries, image review behavior, and export-readiness principles.
These files are app-owned guidance for Bristol Carousel behavior. They are not Codex skills and should stay review-first: automation prepares structured material, while editors approve facts and final output.
MVP foundation in progress. The repo is beyond concept documentation: it has the application scaffold, format-selection UI, source review components, SVG rendering/export foundations, Convex backend model, and automated coverage. The next portfolio-level milestone is a deployed demo with Convex configured and a short walkthrough of the full Events Roundup flow.
