IndexNote is an iPad-first handwritten note-taking app built with SwiftUI,
PencilKit, and Vision OCR. The core feature is automatic outline generation:
students can write headings such as # Chapter 1, ## Lecture 2, or
### Example, scan the page, and turn handwritten headings into a navigable
table of contents.
- Apple Pencil writing experience built with PencilKit
- Folder-based note library with recent notes, favorites, templates, and multi-page notes
- Handwritten heading detection using Vision OCR
- Automatic table-of-contents generation from
#,##, and###headings - Section inheritance: a heading written on one page applies to following pages until the next heading
- Reusable Swift package for heading parsing with unit tests
- iPad simulator and physical iPad build support through Xcode
This project solves a real student workflow problem: when taking handwritten lecture notes on an iPad, creating a clean table of contents usually requires manual typing or page-by-page organization. IndexNote keeps the workflow handwritten while still making notes navigable.
The project demonstrates iOS development, OCR integration, local persistence, product design, and testable parsing logic.
- Swift
- SwiftUI
- PencilKit
- Vision OCR
- Swift Package Manager
- XCTest
- Xcode iOS app target
- Create and organize notes inside folders
- Add, duplicate, delete, and navigate pages within a note
- Write directly on the canvas with Apple Pencil
- Choose drawing tools, colors, stroke width, page templates, and note elements
- Detect handwritten outline headings beginning with
# - Generate a navigable outline linked to stable page IDs
- Preserve document titles separately from page-level outline sections
- Persist notes locally between app launches
- Create a note for a class lecture.
- Write
# Chapter 1on page 1. - Add pages and continue writing notes.
- Write
# Chapter 2on a later page. - Tap Detect Outline to scan handwritten headings.
- Use the outline sidebar to jump between chapters.
Pages after # Chapter 1 inherit that section title until the next # heading
appears.
- Built an iPad-first note-taking app with Apple Pencil support, persistent handwritten pages, multi-page navigation, and folder-based organization.
- Integrated Vision OCR to detect handwritten headings marked with
#, automatically converting recognized titles into navigable table-of-contents entries. - Implemented section inheritance logic so a heading written on one page applies to following pages until the next heading, matching a real student note-taking workflow.
- Designed reusable heading parser logic supporting multi-level outline tags, OCR normalization, and unit tests for edge cases.
The repository includes SmartNotes.xcodeproj, which contains:
SmartNotes: the iOS app targetSmartNotesCore: the reusable heading parser framework
To test on a real iPad:
- Open
SmartNotes.xcodeprojin Xcode. - Select the
SmartNotesscheme. - Connect an iPad with USB or use Xcode wireless debugging.
- In project signing settings, choose an Apple ID team.
- Select the iPad as the run destination.
- Press Run.
Apple Pencil testing works best on a real iPad. The simulator can compile and exercise the interface, but it cannot fully validate handwriting ergonomics.
Run parser tests:
swift testBuild the iOS app target without code signing:
xcodebuild -project SmartNotes.xcodeproj -scheme SmartNotes -configuration Debug -sdk iphonesimulator -destination 'generic/platform=iOS Simulator' CODE_SIGNING_ALLOWED=NO build- Why page-level outline anchors should not overwrite the document title
- How OCR output is normalized before parsing
- How stable page IDs make outline navigation safer than using page indices
- Why Apple Pencil workflows need real-device testing
- How the parser is separated into a reusable Swift package for unit testing
- Add searchable recognized text across all notes
- Add PDF export and import polish
- Add iCloud sync
- Add OCR confidence review and manual correction flow
- Add onboarding for the
# Headinggesture