A premium iPad note-taking app built with SwiftUI and PencilKit — designed for handwriting, ink effects, multi-page notebooks, and study workflows.
| Feature | Description |
|---|---|
| PencilKit Canvas | Full Apple Pencil support: pressure, tilt, barrel-roll (Pencil Pro), hover preview (M2+ iPad Pro) |
| Ink Effects | Fire 🔥, sparkle ✨, glitch 🌀, ripple 💧 — real-time particle overlays with per-device performance budgets |
| Multi-Page Notes | Book-like experience: add/remove/navigate pages within a single note |
| Notebooks & Sections | Organise notes into notebooks with collapsible sections, reorder/rename/delete |
| Study System | SM-2 spaced repetition flashcards with mastery tracking, bulk import, and study stats |
| PDF Annotation | Import PDFs, annotate pages with PencilKit, save per-page drawings |
| Cloud Sync | Google Drive backup with offline queue and conflict resolution |
| Themes | System, Light, Dark, Sepia, Midnight, Ocean — per-note or per-notebook overrides |
| Paper Materials | 7 paper textures (Standard, Premium, Craft, Recycled, Matte, Glossy, Textured) with ink-response hooks |
| Page Templates | Blank, Lined, Grid, Dotted, Cornell, Music Staff — extensible via template packs |
| Search | Full-text search across note titles, typed text, and handwriting OCR |
| Accessibility | Reduced motion, high contrast, VoiceOver labels, autosave controls |
Y2NotesApp (@main)
│
├─ ContentView (NavigationSplitView — 3 columns on iPad)
│ ├─ Sidebar: ShelfView (notebooks + sections)
│ ├─ Content: NoteGridView / NoteListView (note cards)
│ └─ Detail: NoteEditorView (PencilKit canvas + toolbar)
│
├─ Environment Objects
│ ├─ NoteStore — notes, notebooks, sections persistence (JSON files)
│ ├─ ThemeStore — global theme selection
│ ├─ DrawingToolStore — active pen/pencil/eraser/lasso state
│ ├─ InkEffectStore — premium ink presets + FX toggle
│ ├─ PDFStore — imported PDFs and per-page annotations
│ ├─ AppSettingsStore — user preferences
│ └─ GoogleDriveSyncEngine — cloud backup
│
├─ Ink Effect Pipeline
│ ├─ InkModels — DeviceCapabilityTier, InkFamily, InkPreset, WritingFXType
│ ├─ InkFamilyRegistry — 20 built-in presets across 7 families
│ ├─ InkEffectStore — preset selection, user presets, persistence
│ └─ InkEffectEngine — CAEmitterLayer / CAShapeLayer overlay rendering
│
└─ Persistence
├─ y2notes_notes.json (Note array — multi-page drawing data)
├─ y2notes_notebooks.json (Notebook array)
├─ y2notes_sections.json (NotebookSection array)
└─ y2notes_study.json (StudyPayload — sets, cards, review history)
See docs/ARCHITECTURE.md for the full system design.
Requirements: Xcode 15+ on macOS, targeting iPad (iOS 17.0+)
# Open in Xcode
open Y2Notes.xcodeproj
# Or build from command line
xcodebuild -project Y2Notes.xcodeproj \
-scheme Y2Notes \
-destination 'platform=iOS Simulator,name=iPad Pro 13-inch (M4)'CI/CD: Codemagic pushes to TestFlight automatically on merge to main.
See codemagic.yaml for the full pipeline.
Y2Notes/
├── Models/ Note, Notebook, NotebookSection, PageTemplate, StudySet
├── Views/ All SwiftUI views (editor, shelf, toolbar, study, etc.)
├── Ink/ Ink effect engine, models, presets, store
├── PencilKit/ Apple Pencil coordinator, hover overlay, contextual palette
├── PDF/ PDF viewer, annotation, store
├── Persistence/ NoteStore (JSON-backed persistence)
├── GoogleDrive/ Auth, client, sync engine, offline queue
├── Search/ SearchService (title + typed text + OCR)
├── Theme/ AppTheme definitions + ThemeStore
├── Tools/ DrawingToolStore + ToolModels
├── Settings/ AppSettingsStore, SettingsView, DiagnosticsView
├── Accessibility/ AccessibilityHelpers
└── en.lproj/ Localizable.strings (335 keys)
Study sets now support importing versioned multiple-choice test files (.json).
Schema (v1):
{
"version": 1,
"set": {
"title": "Biology Chapter 3",
"description": "Cell structure and transport"
},
"questions": [
{
"prompt": "Which organelle is responsible for ATP production?",
"options": ["Nucleus", "Mitochondrion", "Golgi apparatus", "Lysosome"],
"correctOptionIndex": 1,
"explanation": "Mitochondria generate ATP via cellular respiration.",
"tags": ["biology", "cells"],
"source": "chapter-3-notes"
}
]
}Validation requirements:
versionmust be1- each
promptmust be non-empty - each question must have at least 2 non-empty
options correctOptionIndexmust be a valid index inoptions
In-app path:
- Open a study set
- Tap
…menu - Choose Import Test File
- Preview and import
| Document | Description |
|---|---|
docs/ARCHITECTURE.md |
Full system architecture: modules, data flow, coordinate spaces |
docs/INK_EFFECTS_DEEP_DIVE.md |
Ink effects engine: particles, device tiers, coordinate conversion |
docs/MULTI_PAGE_DESIGN.md |
Multi-page note model, backward compatibility, page navigation |
docs/DATA_MODEL_REFERENCE.md |
Complete data model reference for all entities |
docs/ROADMAP.md |
Improvement roadmap, known issues, future plans |
docs/agents/Y2NOTES_EXECUTION_LEDGER.md |
Agent coordination log |
Private / proprietary. All rights reserved.