Skip to content

Add AI hero image generation and AI Collaborator for article editing#2

Merged
digitalnelson merged 26 commits into
mainfrom
claude/article-ideas-react-native-puYVn
Mar 18, 2026
Merged

Add AI hero image generation and AI Collaborator for article editing#2
digitalnelson merged 26 commits into
mainfrom
claude/article-ideas-react-native-puYVn

Conversation

@digitalnelson

Copy link
Copy Markdown
Owner

No description provided.

claude added 26 commits March 17, 2026 16:09
- Home: gradient hero banner with ✦ Nova branding, tagline, and live
  stats (total ideas / AI-enhanced count / published)
- IdeaCard: top accent bar replaces side bar, AI content strip shows
  what has been generated (Outline · Intro · 5 titles), read time
  estimate in footer, bolder title typography
- New Idea: AI panel is always visible below the notes input — four
  compact action chips (Outline / Titles / Tags / Intro) run inline,
  results expand in-place, tags auto-apply on generation, all AI
  content is saved with the idea on Save

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
Adds eas.json with development/preview/production build profiles and
expo-updates for EAS Update support (Expo Go distribution).

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
Auto-publishes to EAS Update (preview channel) on every push.
Expo Go users can load the latest build via expo.dev dashboard QR.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
We use RN's built-in Animated API, not Reanimated worklets, so the
plugin isn't needed and breaks the Metro bundler in CI.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
Was referenced in babel.config.js but not listed in package.json,
causing the Metro bundler to fail during EAS export in CI.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
newArchEnabled requires a custom dev build — Expo Go only supports
the classic architecture. expo-symbols was unused and not bundled
in Expo Go.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
appVersion policy produced "1.0.0" which doesn't match Expo Go's
expected "exposdk:55.0.0". sdkVersion policy produces the correct
format. Also marks updates.url as needing the real EAS project UUID.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
SDK 55 dropped the Old Architecture entirely and requires a special
TestFlight Expo Go build. SDK 54 is the last SDK supported by the
standard App Store Expo Go app (runtimeVersion: exposdk:54.0.0).

Also sets EXPO_OFFLINE=1 in CI to skip flaky version network check,
and limits EAS Update to iOS platform only for now.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
expo-router switched to SDK-matched versioning in SDK 55.
The correct version is ~55.0.5, not ~5.0.7. Also restores all
other SDK 55 compatible package versions.

runtimeVersion resolves to exposdk:55.0.0 which matches the
SDK 55 Expo Go TestFlight build at testflight.apple.com/join/GZJxxfUU

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
expo-router 55.x pulls in radix-ui components that require react-dom
as a peer dep. Setting legacy-peer-deps=true in .npmrc resolves this
for both local installs and CI without adding unused dependencies.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
The 'Value is true, expected a String at RNSModalScreen' crash was caused
by a mismatch between the JS react-native-screens (4.11.1) and Expo Go
SDK 55's pre-built native runtime (4.23.0). Updated all native packages
to match Expo SDK 55's bundledNativeModules.json:

- react-native-screens: ~4.11.1 → ~4.23.0 (fixes modal screen crash)
- react-native-gesture-handler: ~2.24.0 → ~2.30.0
- react-native-safe-area-context: 5.4.0 → ~5.6.2
- @react-native-async-storage/async-storage: 2.1.2 → 2.2.0

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
CI uses 'npm ci' which reads package-lock.json, not package.json.
Without this update, CI was still installing react-native-screens 4.11.1
(old lockfile) causing 'featureFlags.experiment is undefined' crash at
app startup — expo-router 55.x requires featureFlags.experiment from
react-native-screens 4.23+.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
- Add expo-linking ~55.0.7 (peer dep of expo-router, was missing entirely)
- Add @expo/metro-runtime ~55.0.6 (peer dep of expo-router, was missing)
- Fix expo-blur 14.x → 55.0.9 (SDK 54 → SDK 55 version)
- Fix expo-haptics 14.x → 55.0.8 (SDK 54 → SDK 55 version)
- Fix expo-linear-gradient 14.x → 55.0.8 (SDK 54 → SDK 55 version)

expo-linking was the direct cause of the broken CI builds — Metro
couldn't bundle expo-router/views/Unmatched without it. The 14.x expo
packages are SDK 54 era; Expo SDK 55 switched to 55.x versioning.

Verified: EXPO_OFFLINE=1 expo export completes successfully.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
Replaces direct Anthropic API calls with Azure AI Foundry's
OpenAI-compatible endpoint. Users now configure an Azure endpoint URL,
API key, and deployment name in Settings instead of an Anthropic key.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
The Azure endpoint uses the Anthropic API format directly
(/anthropic/v1/messages), so switch from OpenAI-compatible parsing
(choices[0].message.content) back to Anthropic format (content[0].text),
and use the 'api-key' header Azure expects instead of 'x-api-key'.
The full endpoint URL is now stored and used as-is.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
Azure AI Services sits behind API Management which requires
Ocp-Apim-Subscription-Key for authentication, not api-key.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
Log endpoint URL, deployment, key length, HTTP status, and full
response body so we can determine if it's a URL or auth issue.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
Shows endpoint URL, deployment name, key length, HTTP status, and full
response body in a scrollable modal with selectable text and a Share
button — making it easy to diagnose 401/config issues without having
to screenshot and squint at an unselectable Alert.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
Lets you test the Azure AI Foundry credentials directly from Settings
without having to go into an article. On failure, the full debug modal
shows the exact endpoint, key length, HTTP status, and response body.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
AnthropicFoundry SDK passes apiVersion as a constructor arg which becomes
?api-version=2023-06-01 on the URL — Azure's convention for API versioning.
Our fetch was sending anthropic-version as a header only, which Azure ignores,
causing the 401. Now normalises the endpoint to base URL + /v1/messages?api-version=2023-06-01.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
Replaces raw fetch with the official @anthropic-ai/sdk Anthropic client
configured for Azure AI Foundry:
- defaultHeaders: { api-key } for Azure auth
- defaultQuery: { api-version: 2023-06-01 } for Azure's required query param
- baseURL pointing to the Azure Anthropic endpoint
SDK handles URL construction, request format, and structured error objects.

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
Replaces the plain notes TextInput with a full WYSIWYG rich text editor
built on @10play/tentap-editor (TipTap/ProseMirror for React Native).

- Install @10play/tentap-editor + react-native-webview for the editor
- Add `content` field to ArticleIdea type for storing HTML article body
- Editor uses Nova's dark theme (custom CSS injected into the WebView)
- Built-in Toolbar appears above keyboard with bold, italic, underline,
  strike, headings, lists, blockquote, code, links, task lists
- AI Panel gains an "Insert" button on Outline/Intro results that appends
  AI-generated markdown (auto-converted to HTML) directly into the editor
- Detail screen reorganised: title → article editor → collapsible Details
  (status, notes/brief, tags) → collapsible AI Tools
- IdeaCard now shows real word count + "✍ Written" chip when content exists
- new.tsx initialises content: '' on idea creation

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
Hero Image Generation:
- New Settings section for Azure OpenAI DALL-E 3 (separate from Claude config)
- Claude first writes an optimised editorial prompt for aipsychmd.com style
  (abstract, clinical+tech aesthetic, deep blue/purple palette, no faces/text)
- DALL-E 3 generates a 1792x1024 HD image
- Downloaded immediately as a base64 data URI for persistent offline storage
- HeroImagePanel shows at the top of the editor with Regenerate overlay button

AI Collaborator (revise article as a collaborator, not just append):
- 6 targeted operations: Improve Writing, Strengthen Intro, Medical Review,
  SEO Optimize, Add Section (with custom topic input), Custom Instruction
- All operations are tuned for aipsychmd.com — clinical accuracy, psychiatry
  + AI audience, responsible framing, professional tone
- AI receives full article HTML + title + notes, returns revised HTML (4k tokens)
- Preview modal shows plain-text rendering of the revision before applying
- Apply patches editor content directly via editor.setContent()
- Discard dismisses without touching the article

Settings: add imageEndpoint, imageApiKey, imageDeployment fields with defaults

https://claude.ai/code/session_01SU1fLh8tjBV4ceTm2kKgNR
@digitalnelson digitalnelson merged commit d204de6 into main Mar 18, 2026
1 check passed
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.

2 participants