AI Study Notes is an iPad-first study notebook prototype that combines a page-based handwriting experience with an AI study sidebar. The product direction is closer to GoodNotes than to a chat app: students write directly on pages, select a region with an AI selection tool, and ask questions while keeping the handwritten context visible.
- SwiftUI iPad app scaffold
- PencilKit handwriting canvas
- Custom compact writing toolbar
- Multiple pen types, colors, widths, highlighter, lasso, and eraser tools
- Page templates and configurable page sizes
- PDF import as page backgrounds
- Page thumbnails, page selection, duplication, deletion, and batch actions
- Notebook-level AI chat sidebar
- Local persistence for notebooks, pages, drawings, selections, and chat history
- Cloudflare Workers backend scaffold for a multimodal AI proxy
- XcodeGen project specification
Handwrite notes -> select a page region -> ask AI in the sidebar -> copy useful output -> continue studying
The app can run with a local mock AI client when no backend URL is configured. A real backend can be supplied through the AIBackendURL value in project.yml.
- macOS with Xcode
- iOS 17 SDK or newer
- XcodeGen
- An iPad simulator or physical iPad for testing
- Node.js and npm if you want to run or deploy the Worker backend
brew install xcodegen
xcodegen generate
open AIStudyNotes.xcodeprojThen choose an iPad simulator or a connected iPad and run the AIStudyNotes scheme.
The worker/ directory contains a Cloudflare Worker that exposes:
GET /health
POST /ai/chatThe Worker expects the provider API key to be stored as a Cloudflare secret rather than committed to the repository.
cd worker
npm install
npx wrangler secret put DASHSCOPE_API_KEY
npm run deployOptional model overrides can be configured as non-secret Worker variables:
QWEN_FLASH_MODELQWEN_PLUS_MODEL
After deployment, set your Worker URL in project.yml:
AIBackendURL: "https://your-worker.example.com"Run xcodegen generate again after changing project.yml.
- Do not commit real API keys, tokens, Cloudflare secrets, signing credentials, or private deployment URLs.
- The iPad app falls back to
MockAIClientwhenAIBackendURLis empty. - Production AI calls should go through a backend proxy so provider keys never ship in the app bundle.
- Before making a fork or mirror public, scan both the current tree and Git history for secrets.
Generated build products and local Xcode user state should stay out of version control. The tracked Xcode project files are intended to make the project easy to open, while personal files such as xcuserdata/, .DS_Store, and build/ are ignored.