Inspiration

In our team, we’ve long dealt with the inefficiencies of managing images scattered across various platforms - local storage on individual computers, Google Drive, Slack conversations, and Confluence pages. Every time we needed to reuse an image or locate a specific asset, it felt like embarking on a scavenger hunt. This was not only time-consuming but also frustrating, especially when collaborating across teams or departments. We realized this wasn’t just a pain point for us but a common challenge for many organizations.

Options

As a team that creates most of our content on Confluence, we saw the opportunity to address this problem right where it mattered most. Why not turn Confluence into the ultimate hub for storing, organizing, and sharing images? It was the logical solution to centralize visual resources, reduce duplication of effort, and simplify collaboration.

The idea for Capable Images for Confluence emerged directly from these challenges. We envisioned a tool that would make image management seamless within Confluence. Our goal was to empower teams to:

  1. Store images securely in a centralized location
  2. Effortlessly access and reuse images
  3. Enhance Confluence pages

Using the intuitive integration of the visual asset library and the Confluence editor, easily insert images and enjoy unmatched flexibility in image positioning, including text wrapping, captions and more.

By developing Capable Images, we aimed to bridge the gap between collaboration and visual communication, giving teams the tools they need to stay organized and work smarter—not harder.

This solution wasn’t just about solving our frustrations - it was about sharing our innovation with other organizations, helping them reclaim lost time and energy spent searching for scattered resources. Now, teams can focus on creating and collaborating, with their image assets right at their fingertips.


What it does

Capable Images for Confluence is a robust image asset library and manager designed to make image storage and sharing effortless within Confluence. Teams can upload, store, and share images either at the space level or across the entire site, creating a centralized repository of visual content that’s accessible to everyone. This eliminates the hassle of hunting for the right image across multiple platforms (images can also be downloaded easily).

Centralised Image Storage

With just a few clicks, users can insert images directly into their Confluence pages, streamlining collaboration and ensuring that visual assets are always on hand. The app also integrates with Unsplash, providing seamless access to a wide variety of high-quality stock images without ever leaving Confluence.

Steps

To take image organization to the next level, Capable Images also supports folders, empowering users to categorize and group their assets based on their needs. Whether it’s sorting headshots, banners, icons, logos, or other image types, teams can structure their libraries for maximum efficiency. This added layer of organization makes the app an all-in-one solution for managing and sharing assets across an entire company.

Folders

The folder system is particularly beneficial for marketers and creative teams who deal with diverse visual content. By enabling them to keep assets neatly categorized and easy to locate, Capable Images reduces clutter and increases productivity, making it the ultimate tool for visual asset management in Confluence.


How we built it

Capable Images for Confluence was developed using Atlassian's Forge platform, leveraging its native capabilities to ensure a seamless and secure integration with Confluence. Forge provided us with a development environment that emphasized security, scalability, and ease of deployment, allowing us to focus on building a solution tailored to Confluence users. We combined this with a Custom UI written in React and UI components built on the amazing shadcn UI library.

Forge

To store images securely and natively within Confluence, we utilized the Custom Content Forge Confluence module, enabling us to create a dedicated structure for managing images as first-class entities within the Confluence ecosystem. This approach ensures that all assets remain stored locally on the Confluence site itself, allowing permissions and access controls to be managed using Atlassian's built-in frameworks. By avoiding external storage solutions like S3, we eliminated potential privacy concerns and kept data handling fully transparent for users, with their data staying where they have chosen it to be stored with the data residency feature

Folders were also implemented using Custom Content, allowing for a logical hierarchy, as they support a recursive relationship that mirrors how teams naturally organize their assets. This structure enables users to categorize images into folders, such as banners, headshots, and logos, creating a well-organized and easily navigable library. The folder system works seamlessly within Confluence, providing a clear and intuitive way to manage and locate assets without adding complexity.

In addition to the Custom Content module, we used Content Properties to index metadata for both images and folders - as this hasn't got a Forge module, we used the compatibility functionality of Forge to include these in our manifest file - which we hope to move to a Forge native one when it comes available. This metadata includes details like uploader, upload date, and technical specifications such as camera model or lens type (if available). These content properties enable powerful search functionality, allowing users to filter and locate assets based on specific criteria.

Metadata

For teams that don’t have a specific image in mind, Unsplash integration provides a library of high-quality, properly licensed, and royalty-free images. The integration ensures that images are automatically credited, making it effortless to incorporate stunning visuals into Confluence pages while adhering to licensing requirements.

The app is designed with an intuitive interface and robust organizational features, making it simple for users to securely store, organize, and search their assets. With its privacy-first, user-centric approach, Capable Images empowers teams to streamline their visual workflows—all directly within Confluence.

If we could change one aspect, it would be the requirement to open the Capable Images interface in a popup dialog. However, due to the need for full control over the interface area and the implementation of internal scrolling, using a dialog box became necessary.


Challenges we ran into

Building Capable Images for Confluence presented several challenges, particularly around managing permissions, optimizing performance, and handling file uploads. One of the most significant hurdles was designing a robust permissions system for image access across different spaces. Confluence’s permission structure is inherently powerful but complex, and we needed to align our custom-content implementation with it. We wanted users to have the flexibility to share images within their team or across spaces while ensuring sensitive content remained secure. This required us to account for scenarios where permissions might overlap, change dynamically, or differ between individual images and folders. Ensuring a balance between accessibility and security was critical, and we devoted significant time to refining this aspect.

File uploading posed another major challenge. We needed to ensure that uploads were fast, reliable, and handled edge cases like network interruptions gracefully. Additionally, we implemented automatic image compression to prevent excessively large files from impacting performance or storage limits. This required balancing compression quality and speed to ensure that users wouldn’t notice any degradation in image quality while maintaining optimal file sizes. Handling uploads for large batches of images while maintaining app stability also required careful design and optimization.

Rendering images efficiently was equally challenging. As users scroll through image galleries or switch between folders, it was important to load and display images quickly without straining resources. We employed techniques like lazy loading and pre-fetching to ensure smooth navigation and seamless image previews. Ensuring compatibility with various image formats and handling edge cases—like corrupt or unsupported files—added an additional layer of complexity.

Performance optimization further extended into caching strategies. Using react-query and it's useInfiniteQuery hook, we implemented robust server-state management and custom caching logic to speed up the loading of image containers and folders. By caching previously loaded data and preloading adjacent folders, we minimized redundant API calls and improved perceived performance. We also had to address challenges like cache invalidation when images or metadata were updated, ensuring that users always worked with accurate data without compromising responsiveness.

These challenges required innovative problem-solving and extensive testing. The result is an application that is fast, secure, and user-friendly, handling large-scale image management with ease while staying fully integrated with Confluence.

Dropzone


Accomplishments that we're proud of

We’re proud of creating an app that addresses a genuine pain point for Confluence users. Capable Images for Confluence empowers teams to manage and share their visual content with ease, streamlining collaboration and eliminating the frustration of scattered image storage. One of our standout achievements is implementing folder support with a logical hierarchy, enabling users to organize images into categories such as banners, headshots, or logos. This feature ensures a well-structured and easily navigable library, especially for teams working with a large volume of assets.

We’re also particularly proud of the seamless experience we’ve created for inserting images into Confluence pages. Using our dedicated macro, users can quickly add selected images to their pages with just a few clicks, ensuring that the app integrates naturally into existing workflows. Seeing the positive feedback from early users reaffirmed that we successfully addressed a major gap in image management within Confluence.

Insert image macro


What we learned

The development of Capable Images for Confluence provided us with invaluable insights into the nuances of managing image assets within the Confluence ecosystem. We deepened our understanding of how user permissions and sharing controls affect asset accessibility, especially when dealing with complex use cases across different spaces. We also learned the importance of designing a solution that balances robust functionality with simplicity, ensuring users can quickly understand and leverage the app’s features.

Implementing folder support with the Forge Confluence Custom Content module required us to master Confluence’s APIs and adapt our approach to achieve a smooth and intuitive user experience. Additionally, we gained valuable lessons in optimizing performance for large libraries of images, from caching strategies to efficient rendering. These learnings have been crucial in shaping Capable Images into the robust tool it is today.


What's next for Capable Images for Confluence

Looking ahead, we’re excited to expand the capabilities of Capable Images for Confluence and make it an even more powerful tool for teams. Some of the key features on our roadmap include:

  1. Expanded Metadata Support: Adding more fields to enhance the context of images, such as detailed descriptions, tagging, and additional technical information.
  2. Advanced Filtering: Introducing the ability to filter images by criteria like metadata, upload date, or uploader, making it even easier to find the right asset.
  3. Nested Folders: Allowing users to create subfolders within their organizational hierarchy for even greater control over their image libraries.
  4. GIF Insertion with Tenor: Integrating Tenor to support the insertion of GIFs, providing a dynamic and engaging option for visual content.
  5. Browser for Inserted Images: Adding a feature to browse and manage images that have already been inserted into Confluence pages, ensuring users can easily reuse or update visuals.

These enhancements are designed to address user feedback and take Capable Images to the next level as the go-to image management solution for Confluence users. Our goal is to continue improving the app to meet the evolving needs of teams and empower them to collaborate visually with ease.

Try Capable Images

Try it now!


Appendix

+ 1 more
Share this project:

Updates

posted an update

Today marks a pivotal moment for our Codegeist hackathon journey as we gear up to finalize the last key marketing resource - the video for the top of our Codegeist page! This video is the cherry on top, giving us the opportunity to visually showcase our product's innovative features and highlight what makes it truly stand out. We also recorded a discussion between all team members speaking about some of our experiences on the project.

On the development side, we hit a major milestone last week by wrapping up all features, including the highly anticipated folder feature, designed to make organizing and managing content even more intuitive. Since then, we’ve been rigorously testing the application to ensure it’s polished, bug-free, and ready to deliver an exceptional experience.

From initial design and planning to development and testing, it’s been an intense but rewarding journey. We’re proud of what we’ve built and can’t wait to share it with the Codegeist community. Stay tuned for the launch - we’re excited to hear your thoughts!

Log in or sign up for Devpost to join the conversation.

posted an update

Devlog Update: Integrating Essential Folder Support into Images for Confluence

After completing development of our MVP, we discovered that folder support which we initially considered a stretch goal was an essential feature to ensure scalability and improve user experience. In this update, we delve into the technical challenges we faced and the solutions we implemented to integrate this vital feature.

MVP Recap: Establishing the Foundation

Our MVP focused on core functionalities that addressed the primary requirements:

  • Centralized Image Storage: Leveraging Forge’s custom-content modules, we enabled secure storage of images as attachments within Confluence with our own intermediary formats and indexes entries, all while striking a good balance between performance/image size and quality.
  • Macro-Based Insertion: Developed a dedicated macro allowing users to effortlessly insert images into Confluence page. This lets users use images with a full native feature set available and unmatched compatibility.
  • Permission Management: Utilized Confluence’s space permissions to control access to images, ensuring robust security and appropriate access levels with seamless integration and access controls with pre-existing permission models.
  • Centralised Asset overview and management: We developed a centralised image repository and management interface.

During MVP testing, it became evident that managing and locating images without a hierarchical structure was becoming increasingly cumbersome. Users struggled as lack of a folder-based system made finding what you were looking for a hassle if you couldn’t remember the name of the uploaded asset, as you would have to scroll through pages and pages of content.

Recognising these challenges, we changed our plans and set folders as an MVP requirement to ensure the app could scale alongside our users’ needs.

Technical Implementation: Building Folder Support

Integrating folder support required significant architectural and functional enhancements. Here’s an overview of our development process:

  1. Extending Custom Content Types for Hierarchical Structure

To support folder hierarchies, we extended our custom content types:

  • Folder Entities: Extended our existing Storage system to support multiple storage Nodes with each node representing a folder, this approach ensured future extendability and control.
  • Parent-Child Relationships: Upgraded search, caching and other data control/storage functionality to support folders and flexible hierarchies such as folders.
  • Metadata Management: Enhanced our metadata system to include details about folders.
  • Enhancing the User Interface for Folder Navigation

A user-friendly interface was crucial for effective folder management:

  • Tree-Like Navigation: Implemented a collapsible tree structure, allowing users to navigate through folders effortlessly.
  • Intuitive additions: Enabled intuitive folder creation, deletion and file uploads with helpful prompts and indicators without introducing visual clutter.
  • Updating the Image Insertion Macro

To accommodate the new folder structure, we updated the image insertion to support folder browsing:

  • Image Selection: Modified the image selection dialog to display folders, allowing users to navigate and select images from specific folders.
  • Contextual Search: Enhanced search functionality to allow users to search within specific folders, improving the relevance and speed of search results.
  • Performance Optimization

Ensuring smooth performance with the added complexity of folders was critical as the amount of data loaded could potentially cause issues if

  • Lazy Loading: Implemented lazy loading for folders and images to reduce initial load times and improve responsiveness.
  • Caching Strategies: Improved caching mechanisms to minimize redundant data fetching and accelerate data retrieval and improving app responsivenes.
  • Optimised Data Retrieval: Refined our data queries to handle folder hierarchies without compromising performance.

Overcoming Development Challenges

Integrating folder support introduced several technical challenges that required innovative solutions:

  • Managing Hierarchical Data: Introducing new hierarchies and levels added quite a lot of complexity to our search and caching strategies as the retrieval strategies and key generation needs to be flexible but still information dense to ensure we can load and retrieve subsets efficiently.
  • Ensuring Data Consistency: Maintaining consistency across nested structures was paramount. We employed transactional operations to ensure atomic changes and rollback.

Next Steps

With folder support now robustly integrated, our development roadmap includes:

  • Improved filtering: Introducing comprehensive tagging systems to complement folder hierarchies, allowing multi-faceted organisation and retrieval.
  • Drag and Drop: Enabling intuitive interactions for actions such moving, deleting, and renaming folders and images to enhance the user experience.
  • Enhanced External Integrations: Expanding our external integrations with additional image repositories to provide users with a broader range of assets.
  • User Interface Refinements: Continuously improving the UI for better performance and usability based on ongoing user feedback.

Integrating folder support into Images for Confluence has been a challenging yet rewarding endeavor. By addressing the critical need for scalable and intuitive organization, we’ve significantly enhanced the app’s functionality and user experience. This update not only strengthens our solution but also underscores the importance of adaptability and user-centric development in creating effective tools.

Log in or sign up for Devpost to join the conversation.

posted an update

With Capable Images for Confluence moving beyond the proof-of-concept stage, now we’re ready to demonstrate its value to the teams who need it most. Our focus is on crafting marketing that resonates with users and shows how it simplifies image management.

Targeting the Right Teams

Our key audience includes:

  • Marketing Teams juggling logos, banners, and campaign graphics.
  • Product Teams managing screenshots for consistent documentation.
  • HR and Design Teams centralizing brand assets like logos and templates.

These teams will benefit from a centralized image library that eliminates confusion, saves time, and allows them to focus on meaningful work instead of hunting for files.

Professional Meets Relatable

Our marketing strategy blends professionalism with a relatable tone that speaks to users’ everyday frustrations.

For example:

“Your campaign launch is hours away, but the banner graphic? It’s lost in a Slack thread or a file ominously titled ‘Final_Final_2.’ Enter Capable Images for Confluence: find the right image, insert it, and breathe a sigh of relief.”

This approach highlights how our app delivers stress relief, time savings, and simplicity, making it an indispensable tool for teams.

Real-World Use Cases

We’ll use relatable scenarios to show how the app transforms workflows:

  • “The Lost Logo” Hunt: Sales needs a logo, and the centralized library saves the day.
  • “Screenshot Chaos” Solved: Product teams insert feature screenshots quickly and seamlessly.
  • One Source of Truth: HR keeps brand assets in one place, ensuring consistency across the organization.

These stories demonstrate how Capable Images turns chaos into clarity.

Deliverables & Schedule

To ensure a strong lead-up to the December 11th Codegeist deadline, we’ll create the following assets to showcase the app’s potential and engage our audience:

  • Blog Post (November 25th): A story-driven introduction to Capable Images, focusing on its core benefits.
  • Video (November 27th): A concise demo showcasing features and ease of use.
  • Marketplace Assets (December 4th): Polished visuals and descriptions for the Atlassian Marketplace.
  • Atlassian Community Post (December 8th): A detailed walkthrough for the Atlassian community, encouraging feedback and discussion.

Log in or sign up for Devpost to join the conversation.

posted an update

Mapping requirements to Confluence

As we design Capable Images for Confluence, we're carefully evaluating how to integrate a seamless, scalable image management solution into Confluence using the Forge framework. Here's an outline of the architectural possibilities we've considered and why we've chosen certain approaches to best meet our goals.

  1. Image Storage as Attachments on Custom Content: We explored several storage options for images, but using Confluence's "custom content" with attachments offers a compelling solution. This setup allows us to create custom content types that function similarly to Confluence pages but are specifically tailored to store and manage images. By treating each image as an attachment against a custom content type, we can maintain the flexibility of standard pages while organizing images centrally and logically within the Confluence space. This also enables us to use the Confluence Index to provide search capability to the feature.
  2. Macro-Based Image Insertion: To maintain a smooth, non-disruptive workflow, we decided to consider a macro-based approach for image insertion. This lets users place images directly into Confluence pages from our image library without taking them out of the content flow or requiring manual uploads each time.
  3. Project and Global Pages for Management Interface: When thinking about the image management interface, we considered several access points. A combination of project-level and global pages for image organization seems ideal, as this approach offers a familiar Confluence-like experience while allowing users to find and manage images from a single interface. By making the library accessible at both project and global levels, we give teams flexibility in organizing assets by project or sharing them across the organization.
  4. Permissions via Space Permissions: Managing access and security was another essential factor. After exploring different ways to handle permissions, we determined that aligning our solution with Confluence's space permissions would best meet security needs without adding complexity. This approach ensures that image access naturally follows Confluence's established role-based permissions, keeping assets secure while simplifying permission management.

In summary, we chose these architectural approaches to ensure Capable Images for Confluence feels native to Confluence, leverages Forge's strengths, and seamlessly integrates with users' workflows. This approach should allow us to deliver a feature-rich image management tool that's easy for teams to adopt and use.

Log in or sign up for Devpost to join the conversation.

posted an update

We have produced mockups and wireframes showcasing the core UI elements of this solution. These visuals highlight key user interactions, from image management and browsing to seamless insertion within Confluence pages:

Image Management Page

  • Sidebar: Displays collections (space or global). Users can quickly switch between different collections to access relevant images.
  • Main Panel: Shows images within the selected collection. Users can preview and manage images in this panel, with options for upload, download, and inserting images into pages.
  • Upload Options: Supports drag-and-drop uploads as well as a button for manual uploads.

Manage page

Insert Image Dialog

  • Insertion Options: Users can insert single or multiple images from the dialog.
  • Capable Menu: Provides quick access to the image library from any Confluence page, allowing on-the-fly insertion of images without disrupting the workflow.

Insert image dialog

View Image Page

  • Detailed Image View: Allows users to open a larger version of the image, view metadata, and download the full-resolution version if needed.

View image page

Image Thumbnail

  • Thumbnail & Metadata: Displays a preview of the image, title, date of creation, and uploader.
  • Hover Information: Shows additional details, such as the image description (if available), giving users more context.

Image thumbnail

Log in or sign up for Devpost to join the conversation.

posted an update

We’ve designed streamlined user flows for image management, browsing, and insertion within Confluence, enhancing ease and efficiency:

Upload & Manage Images

Users can upload images to specific areas on their Confluence site (space-specific or global collections).

Steps:

  1. Navigate to the desired collection (either a space-specific or global collection).
  2. Use drag-and-drop or the ‘Upload’ button to add images.
  3. Uploaded images appear with metadata (title, date, uploader) for quick reference.
  4. Users can then download, update or delete images in their library.

Image Browsing & Insertion

Users easily browse through the image library and insert them into Confluence pages.

Steps:

  1. Open the Confluence Editor
  2. Type /image and select 'Capable Image'
  3. Use the search functionality to locate specific images by name.
  4. Click Insert to insert the selected images into the page

Log in or sign up for Devpost to join the conversation.

posted an update

To support the development of this feature, we've identified a set of use cases that illustrate the app's potential impact on streamlining image management in Confluence. These scenarios demonstrate how teams can benefit from an integrated, centralized approach to visual asset organization:

  1. Centralized Image Repository for Projects
    • Scenario: A marketing team working on a campaign uploads visual assets (logos, banners, graphics) to a Confluence space dedicated to the campaign. Each team member can quickly access these images from the space’s image library without needing to search across other spaces.
    • User Flow:
      • Team members upload images to the campaign’s designated space.
      • They browse and download images directly, accessing them from the sidebar for easy project alignment.
  2. Efficient Documentation with Visuals
    • Scenario: A product team documents a new feature with screenshots. They use the app’s image library to store all related screenshots in a single collection, making it easy to update and maintain visual consistency.
    • User Flow:
      • Screenshots are uploaded to a shared collection within the product’s Confluence space.
      • Using the macro, team members can insert multiple images from the library into pages to keep documentation organized and visually cohesive.
  3. Company-Wide Image Resource Library
    • Scenario: HR or the design team creates a global library of official company visuals, such as logos, brand guidelines, and templates, ensuring that everyone uses the latest assets.
    • User Flow:
      • Assets are uploaded to a global image collection.
      • Users across the company access these assets through the Capable menu or the sidebar, with the ability to download and insert images as needed.
  4. On-the-Fly Image Insertion During Page Edits
    • Scenario: While editing a Confluence page, a team member realizes they need to add a visual. Using the Capable menu, they can quickly insert the needed image from the library without leaving the page. No more browsing for images on your computer and re-uploading the same files!
    • User Flow:
      • The user clicks on the Capable menu, browses the image library, and selects images to insert into the page.

Log in or sign up for Devpost to join the conversation.