Inspiration

Every company has the same plan in three places. Engineering's launch plan says September 15; Marketing copied it in June and their copy now says October 1; the Jira epic agrees with Marketing. Nobody notices until launch week. Search finds pages. It doesn't tell you which one is true.

What it does

Space Atlas reads Confluence pages and Jira issues read-only, as the signed-in user, so it only sees what that person can already see. It maps them into initiatives: groups of pages and issues about the same piece of work, across spaces and across products. For each initiative it shows:

  • the current page (most recently updated),
  • every connection and why it exists: shared title words, an explicit mention of another page, or copied text (near-copy),
  • conflicts: the same topic (launch, release, deadline, due, go-live, ship, start, freeze, budget) with different dates, each quoted word-for-word with a link to the page or issue.

Pages that belong to nothing stay ungrouped. The app never edits, moves or archives anything.

How we built it

  • Forge app on Confluence and Jira: a Confluence global page (UI Kit, native render) with a Forge resolver.
  • Product APIs as the user: Confluence v2 (/wiki/api/v2/pages, /spaces) and Jira (/rest/api/3/search/jql) via requestConfluence / requestJira. One scan covers Confluence first, then Jira, under one cursor.
  • Checkpointed scan: one batch per call; the cursor only advances after the batch is stored, so rate limits, a truncated response or an interrupted scan never skip or duplicate data.
  • Forge storage, per user: results are stored under each user's account, so one person's scan (made with their permissions) is never shown to anyone else.
  • Privacy built in: a weekly scheduledTrigger reports stored account IDs to Atlassian's personal-data reporting API (privacy.reportPersonalData) and erases the results of closed or changed accounts.
  • Rovo: the app also ships a rovo:agent with an ask-atlas action that answers "where is everything about X" only from the atlas, with citations.
  • Runs entirely on Atlassian: no outside calls, no external storage.
  • All logic is in one pure module with 6 tests in Node's test runner, including a fault-injecting fake API (429s, a half-delivered payload, a restart mid-scan). Each test was checked by deliberately breaking the code and confirming it fails.

Challenges we ran into

  • Space home pages are identical boilerplate in every space and formed a fake initiative on the first live run; they are now skipped by each space's homepage id.
  • Jira's search API rejects unbounded queries; the first Jira scan failed with 400 until the query was bounded.
  • Different Jira issues legitimately have different due dates, so only dates written in the text count as claims; otherwise every epic "conflicts" with its own tasks.
  • The first version stored results site-wide. Because pages are read as the user, that could have shown one person's restricted pages to a coworker. Results are now stored per user, verified live.

What's next

Configurable topics and date formats, a Jira issue panel ("this epic disagrees with 2 Confluence pages"), and a Rovo skill that drafts a "which page is current" note for page owners to confirm.

Testing instructions for judges

  1. Open the installation link and install on your test site for Confluence (and Jira to see the cross-product join).
  2. If your site is empty, create three pages (any spaces; two spaces shows the cross-space grouping):
    • "Q3 Launch Plan": Launch is planned for 2026-09-15. Owner: platform team.
    • "Q3 launch plan (copy)": Copied from Engineering. Launch is planned for 2026-10-01.
    • "Holiday calendar": Office closed on public holidays.
    • Optional Jira issue "Q3 launch: mobile checkout" with description Launch target 2026-10-01.
  3. In Confluence open Apps → Space Atlas and click Scan site.
  4. Expected: one initiative "q3 launch plan" marked needs review, with a Conflicting launch dates box quoting each page (and the Jira issue) with links; "Holiday calendar" is not grouped.
  5. Rescan starts over and picks up edits; Reset deletes your stored results. No configuration, keys or external services needed.

Privacy policy: https://billywhitemusic.com/space-atlas/privacy.html · Support: [email protected]

Share this project:

Updates

Submission history