Skip to content

feat(welcome): blog feed on welcome screen + friendlier analytics copy#1010

Merged
stephanj merged 2 commits intomasterfrom
feature/welcome-blog-feed
Apr 14, 2026
Merged

feat(welcome): blog feed on welcome screen + friendlier analytics copy#1010
stephanj merged 2 commits intomasterfrom
feature/welcome-blog-feed

Conversation

@stephanj
Copy link
Copy Markdown
Collaborator

Summary

  • Welcome screen blog feed — surfaces the most recent posts from genie.devoxx.com on the DevoxxGenie tool-window welcome screen using a hybrid bundled + remote strategy. A new generateBlogIndex Gradle task parses YAML frontmatter from docusaurus/blog/*.md into build/generated-resources/blog/devoxxgenie/blog-posts.json (no source-tree pollution). At runtime, BlogFeedService loads the bundled JSON synchronously for instant render, then asynchronously fetches the live RSS feed off the EDT via HttpClientProvider (with a hardened DocumentBuilder), caching for 6h in PropertiesComponent. Falls back silently to bundled data on any failure.
  • Compose UI — new "Latest from the Blog" section between Quick Commands and the footer, rendered from a new Welcome.blogPosts state field. Each entry opens the post in the browser via BrowserUtil.
  • Analytics consent copy rewrite — the first-run balloon and the Settings → DevoxxGenie → Analytics page both previously read like a legal disclosure. Rewritten to lead with the open-source framing, put reassurance ("no prompts, no code, no file paths, no API keys") before any data list, and add an inline link to AnalyticsEventBuilder.java on GitHub so technical users can verify the payload directly. Affirmative action label changed from "OK, Keep Enabled" to "Sure, help out".

Test plan

  • ./gradlew generateBlogIndex — verify it parses docusaurus/blog/*.md and writes build/generated-resources/blog/devoxxgenie/blog-posts.json
  • ./gradlew clean processResources — verify generated file ends up at build/resources/main/devoxxgenie/blog-posts.json
  • ./gradlew runIde — open the DevoxxGenie tool window on a fresh project, confirm the "Latest from the Blog" section renders with bundled posts, and that clicking a post opens the correct URL
  • With network available, confirm the section refreshes with the live RSS feed (check IDE logs for BlogFeedService debug output if needed)
  • Disconnect network, reopen the tool window — confirm bundled posts still display and no errors are logged
  • Reset analytics consent state and reopen the IDE — verify the new "Help shape DevoxxGenie" balloon appears, the GitHub link is clickable, and both action buttons set the expected state
  • Settings → DevoxxGenie → Analytics — verify the new intro paragraph, the friendlier checkbox label, the clickable "AnalyticsEventBuilder.java" link, and that "What is never sent" appears before "What is sent"

🤖 Generated with Claude Code

stephanj and others added 2 commits April 14, 2026 12:56
Surfaces the most recent posts from genie.devoxx.com on the DevoxxGenie
tool-window welcome screen using a hybrid bundled + remote strategy:

- Build: new generateBlogIndex Gradle task parses YAML frontmatter from
  docusaurus/blog/*.md and writes blog-posts.json under
  build/generated-resources/blog/, registered as a main resources srcDir
  so it lands on the classpath via processResources without polluting
  the source tree.
- Runtime: BlogFeedService loads the bundled JSON synchronously for
  instant render, then asynchronously fetches the live RSS feed off the
  EDT via the existing HttpClientProvider (with a hardened
  DocumentBuilder), caching results in PropertiesComponent for 6h.
  Falls back silently to bundled data on any failure, and pushes
  updates to the UI whenever the prior cache was bundled/stale or the
  feed content actually changed.
- UI: new BlogPostUi model + Welcome.blogPosts state, rendered in a
  "Latest from the Blog" Compose section between Quick Commands and
  the footer. Each entry opens the post in the browser via BrowserUtil.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The previous first-run analytics balloon read like a legal disclosure
("To guide which features and LLM providers we invest engineering
effort in...") which makes developers reach for Disable. Replaced with
copy that leads with the open-source framing, puts reassurance ("no
prompts, no code, no file paths, no API keys") before any data list,
and makes the escape hatch visible inline.

- Notifier title: "DevoxxGenie usage analytics" → "Help shape DevoxxGenie".
- Notifier body: shorter, friendlier, with an inline link to
  AnalyticsEventBuilder.java on GitHub so technical users can verify
  the payload directly.
- Affirmative action: "OK, Keep Enabled" → "Sure, help out".
- Settings page: matching intro paragraph, friendlier checkbox label
  ("Help improve DevoxxGenie by sending anonymous usage data"), the
  same GitHub source link via HyperlinkLabel, and reordered so "What
  is never sent" appears before "What is sent" — same instinct as the
  popup. Detailed lists retained since the settings page is where
  users go for the full disclosure.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@stephanj stephanj merged commit 1645f60 into master Apr 14, 2026
5 of 6 checks passed
@stephanj stephanj deleted the feature/welcome-blog-feed branch April 14, 2026 11:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant