Technical documentation for building and contributing to None.
- Kotlin Multiplatform - Shared business logic across platforms
- Android SDK 34 (min API 21 - Android 5.0+)
- SwiftUI (iOS)
- Google Drive API (optional cloud sync)
- Material Design 3 (Android)
- Local JSON storage with cloud sync
shared/
├── commonMain/ # Shared code (constants, models)
├── androidMain/ # Android-specific implementations
└── iosMain/ # iOS-specific implementations
- Shared Constants: ButtonConstants, PreferencesKeys, ValidationConstants
- Storage Pattern: Automatic fallback from Drive to local storage
- MVP Pattern: Clean separation of concerns
- Services: AudioRecorderService, AudioPlayerService, StorageService
The app uses a delegator pattern:
StorageService- Routes to local or cloud storageLocalStorageService- JSON files in app's private storageDriveStorageService- Optional Google Drive sync
All operations attempt Drive sync first (if enabled), then fall back to local storage automatically.
- Android Studio (Arctic Fox or newer)
- JDK 11 or higher
- Xcode (for iOS development)
- Git
- Clone the repository
git clone https://github.com/gmoqa/none.git
cd none- Open in Android Studio
- Sync Gradle dependencies
- Build and run
./gradlew assembleDebug
./gradlew installDebug- Open
iosApp/TeaBoard.xcodeprojin Xcode - Select target device or simulator
- Build and run (Cmd+R)
Build the shared Kotlin Multiplatform module:
./gradlew :shared:buildGoogle Drive sync is optional. The app works in offline mode by default.
To enable Drive sync during development:
- Create a project in Google Cloud Console
- Enable Google Drive API
- Configure OAuth 2.0 credentials
- Get SHA-1 fingerprint:
keytool -list -v -keystore ~/.android/debug.keystore \
-alias androiddebugkey -storepass android -keypass androidSee GOOGLE_DRIVE_SETUP.md for detailed instructions.
none/
├── app/ # Android app
│ ├── src/main/java/ # Kotlin source code
│ └── src/main/res/ # Android resources
├── shared/ # Kotlin Multiplatform shared code
│ ├── src/commonMain/ # Shared constants and models
│ ├── src/androidMain/ # Android implementations
│ └── src/iosMain/ # iOS implementations
├── iosApp/ # iOS app (SwiftUI)
│ └── TeaBoard/
├── docs/ # Landing page (GitHub Pages)
└── documentation/ # Project documentation
# Clean build
./gradlew clean
# Build debug APK
./gradlew assembleDebug
# Build release APK
./gradlew assembleRelease
# Run tests
./gradlew test
# Check for dependency updates
./gradlew dependencyUpdates
# Lint checks
./gradlew lint
# Generate signing report (SHA-1)
./gradlew signingReportContributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly on both platforms
- Submit a pull request
- Follow Kotlin coding conventions
- Use meaningful variable and function names
- Add comments for complex logic
- Keep functions small and focused
- Test on real Android devices (not just emulators)
- Test on iOS simulators and physical devices
- Test offline mode
- Test with and without Google Drive sync
See DEPLOYMENT_CHECKLIST.md (Android) and IOS_DEPLOYMENT_CHECKLIST.md (iOS) for deployment guides.
GNU GPL v3 - See LICENSE file for details.
- Email: gu.quinteros@gmail.com
- GitHub: @gmoqa