A Progressive Web App (PWA) notetaking application with a built-in Korean keyboard that supports archaic Korean letters (옛한글). The app features a Dubeolsik (두벌식; 2-set) keyboard layout with long-press functionality to access modern & archaic letter variants.
- Dubeolsik Layout: Standard Korean keyboard layout with long-press variants
- Complete Korean Support: Syllable composition, complex medials & finals, archaic jamos
- 16+ Archaic Letters: ㅸ, ㅿ, ㆆ, ᅎ, ᅏ, ᅐ, ᅑ, ᄔ, ᅇ, ᄙ, and more
- Future: Hanja conversion and Middle Korean tonal mark input
- Rich Text Editor: Full-featured editor with Korean input support
- Note Management: Create, edit, save, and delete notes with auto-save
- Local Storage: All notes stored locally in browser
- Responsive Design: Works on desktop, tablet, and mobile devices
- Offline Support: Works without internet connection
- Installable: Can be installed as a native app on any device
- Cross-platform: Works on Windows, macOS, Linux, iOS, and Android
- Auto-deployment: GitHub Pages with GitHub Actions CI/CD
The keyboard follows the standard Dubeolsik layout:
Row 1: ㅿ ㅂ ㅈ ㄷ ㄱ ㅅ ㅛ ㅕ ㅑ ㅐ ㅔ
Row 2: ㆆ ㅁ ㄴ ㅇ ㄹ ㅎ ㅗ ㅓ ㅏ ㅣ ㆍ
Row 3: ⇧ ㆁ ㅋ ㅌ ㅊ ㅍ ㅠ ㅜ ㅡ ⌫
Row 4: 123 漢 스페이스 ← → ↵
Hold down any key for 500ms to see available variants:
- ㅂ: ㅂ ㅃ ㅸ ㅹ
- ㅈ: ㅈ ㅉ ᅎ ᅏ ᅐ ᅑ
- ㄷ: ㄷ ㄸ | ㄱ: ㄱ ㄲ | ㅅ: ㅅ ㅆ | ㅊ: ㅊ ᄼ ᄾ
-
Clone the repository
git clone [email protected]:escowin/archaic-korean-keyboard.git cd archaic-korean-keyboard
-
Install dependencies
npm install
-
Start development server
npm run dev
-
Open in browser
- Navigate to
http://localhost:3000 - The app will automatically reload when you make changes
- Navigate to
-
Build the application
npm run build
-
Preview the build
npm run preview
-
Deploy
- Copy the
dist/folder to your web server - Ensure HTTPS is enabled for PWA functionality
- Copy the
-
On Desktop:
- Open the app in Chrome, Edge, or Firefox
- Click the install button in the address bar
- Or use the browser menu: "Install Korean Keyboard PWA"
-
On Mobile:
- Open the app in Safari (iOS) or Chrome (Android)
- Tap "Add to Home Screen" when prompted
- Or use the browser menu: "Add to Home Screen"
- Create a new note: Click the "New Note" button
- Edit title: Click on the title field and type
- Write content: Use the text area to write your notes
- Save: Notes are automatically saved, or click "Save" manually
- Delete: Click "Delete" to remove a note
- Standard Korean: Type normally using the keyboard
- Variant Letters: Hold down any key for 500ms to see variants, then tap the desired letter
- Syllable Composition: The app automatically combines jamo into proper Korean syllables
- ⇧: Shift key for accessing shifted letters
- ⌫: Backspace | 스페이스: Space | ↵: Newline
- 123: Numbers/symbols (planned) | 😊: Hanja conversion (planned)
- Hide/Show Keyboard: Toggle keyboard visibility
- Frontend: React 19.2.0 with TypeScript 5.9.3
- Build Tool: Vite 5.0.0 with PWA support
- Storage: LocalStorage for note persistence
- Deployment: GitHub Pages with GitHub Actions CI/CD
The app implements a sophisticated Korean input system using a simplified Hangul Jamo approach:
- Jamo Recognition: Identifies consonants and vowels in both Compatibility and Hangul Jamo ranges
- Unified Processing: All characters (modern and archaic) are converted to Hangul Jamo Area (U+1100-U+11FF)
- Syllable Composition: Uses simplified concatenation approach - browser renders Hangul Jamo sequences as syllable blocks
- Complex Medials: Supports diphthongs (ㅘ, ㅙ, ㅚ, ㅝ, ㅞ, ㅟ, ㅢ) with proper Hangul Jamo conversion
- Complex Finals: Supports consonant clusters (ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, etc.) with decomposition
- Archaic Support: Seamlessly handles archaic letters through unified Hangul Jamo conversion
- Korean Orthography: Properly handles final-to-initial transitions and complex final decomposition
- Chrome: 88+ (recommended) | Firefox: 85+ | Safari: 14+ | Edge: 88+
- Mobile: iOS 14+ Safari | Android 8+ Chrome
korean-keyboard/
├── .github/
│ └── workflows/
│ └── deploy.yml # GitHub Actions deployment
├── public/
│ ├── manifest.json # PWA manifest
│ ├── sw.js # Service worker
│ └── favicon.svg # App icon
├── src/
│ ├── components/
│ │ └── KoreanKeyboard.tsx # Keyboard component
│ ├── utils/
│ │ ├── koreanKeyboard.ts # Main Korean input utilities
│ │ ├── unicode.ts # Unicode mappings and conversions
│ │ ├── keyboardLayout.ts # Keyboard layout and variants
│ │ ├── composition.ts # Syllable composition logic
│ │ └── inputProcessor.ts # Input processing pipeline
│ ├── types/
│ │ └── korean.ts # TypeScript type definitions
│ ├── styles/
│ │ ├── main.css # Base styles
│ │ ├── keyboard.css # Keyboard styles
│ │ └── noteapp.css # App styles
│ ├── App.tsx # Main app component
│ └── main.tsx # Entry point
├── docs/
│ ├── development-plan.md # Development roadmap
│ └── bugs-issues.md # Issue tracking
├── package.json
├── vite.config.ts
├── tsconfig.json
└── README.md
- New Archaic Letters: Add to
VARIANT_MAPPINGSinkeyboardLayout.ts, update Unicode mappings inunicode.ts - Keyboard Layout Changes: Modify
KEYBOARD_LAYOUTinkeyboardLayout.ts, update CSS styles - New App Features: Add components in
src/components/, update styles insrc/styles/ - Unified Processing: All new Korean characters automatically work through the Hangul Jamo conversion system
- Future Features: Arrow key navigation, text selection/copy, number shift mode, Hanja conversion
- TypeScript: Strict type checking with comprehensive interfaces
- React: Functional components with hooks
- CSS: Utility-first approach with custom properties
- Comments: Comprehensive documentation for Korean input logic
- Fork the repository
- Create a feature branch:
git checkout -b feature/new-feature - Make your changes and commit:
git commit -m 'Add new feature' - Push and submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
- Korean linguistics community for letter mappings and standards
- Unicode Consortium for Korean letter specifications
- Wikipedia for comprehensive Hangul documentation
- Contributors who help improve this project
- Issues: Use GitHub Issues for bug reports and feature requests
- Community: Join discussions in GitHub Discussions
- Help: Include browser info and steps to reproduce for bug reports
Korean Keyboard PWA - Bringing the beauty of 옛한글 to modern web applications.
Last updated: October 2025