Contributing to jev-notion
September 20, 2026 · View on GitHub
Thank you for your interest in contributing to jev-notion! Whether you are reporting an issue, proposing an improvement, fixing a bug, or contributing translations, your help is welcome.
Table of Contents
- Code of Conduct
- Development Setup
- Project Architecture
- Building & Testing
- Translations (Localization)
- Pull Request Guidelines
- Security & Credentials
Code of Conduct
All contributors and participants are expected to uphold our Code of Conduct. Please report unacceptable behavior following the instructions in that document.
Development Setup
Prerequisites
- Node.js:
v20.0.0or higher - npm:
v10.0.0or higher - macOS (for the native desktop app): macOS 13.0 (Ventura) or newer
- Xcode / Swift: Swift 5.0+ / Swift 6.0 compatible toolchain (
xcode-select --installor Xcode from App Store)
Clone & Install
git clone https://github.com/jeffloo886/jev-notion.git
cd jev-notion
npm install
Project Architecture
jev-notion consists of two deeply coordinated layers:
jev-notion/
├── src/ # TypeScript Core & Engine
│ ├── cli.ts # Command-line interface (scan, apply, watch, login, etc.)
│ ├── engine.ts # Central poll & synchronization orchestrator
│ ├── decide.ts # Jev inference & confidence decision model
│ ├── scan.ts # Read-only database scanning & suggestion engine
│ ├── apply.ts # Approved changes writer with schema safety
│ ├── calibration.ts # Property rubric calibration
│ ├── oauth.ts # Local HTTP server OAuth PKCE login flow
│ └── notion/ # Notion API schema, evidence gathering, and writes
├── app/ # Native macOS Desktop Client (SwiftUI)
│ ├── Sources/JevNotion/
│ │ ├── main.swift # Entry point & CLI launcher
│ │ ├── AppDelegate.swift # Menu bar status item & window manager
│ │ ├── NotionTheme.swift # Notion 9-color palette & custom UI components
│ │ ├── Localization.swift # 8-language dynamic localization manager (L10n)
│ │ ├── ScanView.swift # Main inspection & review split-view
│ │ ├── SettingsView.swift # Keychain credentials & settings modal
│ │ └── ScanSession.swift # Subprocess bridge to engine.mjs
│ └── build.sh # Self-contained zero-churn release bundle assembler
└── tests/ # Vitest automated test suites (260+ tests)
Building & Testing
Node.js / TypeScript Core
- Type Checking:
npm run typecheck - Run Unit Tests:
Or run tests in watch mode:npm testnpm run test:watch - Compile Library:
npm run build - Bundle Standalone Node Engine (for the macOS app):
npm run bundle
Native macOS App (SwiftUI)
The macOS app is compiled and packaged directly using Swift Package Manager and app/build.sh (avoiding Xcode project file churn):
# Compile and build JevNotion.app in dist/
./app/build.sh
# Open the app
open dist/JevNotion.app
Translations (Localization)
We support 8 languages:
- 🇨🇳 简体中文 (
zh-Hans) - 🇺🇸 English (
en) - 🇭🇰 繁體中文 (
zh-Hant) - 🇯🇵 日本語 (
ja) - 🇰🇷 한국어 (
ko) - 🇫🇷 Français (
fr) - 🇩🇪 Deutsch (
de) - 🇪🇸 Español (
es)
To add or improve translations:
- Open
app/Sources/JevNotion/Localization.swift. - Add or refine keys in the
L10nKeyenum and thestringsdictionary. - Test the language in the app by selecting it from the top toolbar
🌐menu or the Settings grid.
Pull Request Guidelines
- Keep Changes Focused: One PR should address one bug, feature, or translation improvement.
- Ensure Tests Pass:
npm run typecheckmust pass without errors.npm testmust be 100% green../app/build.shmust build cleanly.
- Add Tests: When fixing a bug or adding an engine feature, include test cases under
tests/. - Documentation: Update
README.mdandREADME.zh-CN.mdif user-facing behavior changes.
Security & Credentials
- NEVER commit real API keys, tokens,
.envfiles, or production database IDs. - Secrets must be loaded through environment variables or the macOS Keychain.
- See SECURITY.md for vulnerability reporting.