Add AI hero image generation and AI Collaborator for article editing#2
Merged
Merged
Conversation
- 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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.