Fujimod
브라우저에서 카메라 펌웨어를 시험하고 Fujimod SD 부팅 파일을 만든다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Colloidal silver electrolysis timer calculator
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A Flutter app for calculating and timing colloidal silver electrolysis sessions. Enter your water volume, electrode current, and target PPM concentration — the app computes the required electrolysis time using Faraday's Law and guides you through the session with a live countdown, electrode cleaning reminders, and push notifications.
Supports Android, iOS, and Web.README 전문 보기 ↗A Flutter app for calculating and timing colloidal silver electrolysis sessions. Enter your water volume, electrode current, and target PPM concentration — the app computes the required electrolysis time using Faraday's Law and guides you through the session with a live countdown, electrode cleaning reminders, and push notifications.
Supports Android, iOS, and Web.
minSdk 24 (Android 7.0); toolchain is AGP 9.1 / Gradle 9.3 / Kotlin 2.4flutter pub get
# List connected devices/emulators
flutter devices
# Run on a specific device
flutter run -d <device-id>
# Run on the first available device
flutter run
# Android APK
flutter build apk
# Android App Bundle (for Play Store)
flutter build appbundle
# iOS (requires macOS + Xcode)
flutter build ios
# Web
flutter build web
The required electrolysis time is derived from Faraday's Law of Electrolysis:
time (s) = (PPM × Volume (L) × F) / (M_Ag × I (A) × 1000)
| Symbol | Value | Description |
|---|---|---|
| F | 96,485 C/mol | Faraday constant |
| M_Ag | 107.87 g/mol | Molar mass of silver |
| I | user input | Electrode current in amperes |
| PPM | user input | Target concentration in mg/L |
Several packages require generated code. After modifying any file annotated with @freezed, @riverpod, @JsonSerializable, or a Drift table class, regenerate:
dart run build_runner build --delete-conflicting-outputs
Never manually edit *.g.dart or *.freezed.dart files.
# Run all tests
flutter test
# Run a single file
flutter test test/core/silver_calculator_test.dart
flutter analyze
lib/
├── main.dart # App entry point; initialises SharedPreferences & NotificationService
├── app.dart # MaterialApp.router with theme + go_router wiring
├── core/
│ ├── constants/ # AppConstants (SharedPreferences keys, notification IDs), PhysicsConstants
│ ├── routing/ # go_router setup; /timer route has a guard requiring a calculation result
│ ├── theme/ # AppTheme (light/dark), AppColors
│ ├── extensions/ # DurationExtensions
│ └── utils/
│ └── silver_calculator.dart # Pure calculation service (Faraday's Law)
├── features/
│ ├── calculator/ # Input form, device picker, PPM presets, result card
│ ├── devices/ # Device library — model, repository, manage/pick UI
│ ├── timer/ # Countdown controller, circular timer widget, notification service
│ ├── history/ # Drift/SQLite session log (also hosts the Devices table)
│ └── settings/ # SharedPreferences-backed settings with freezed model
└── shared/
└── widgets/
└── app_scaffold.dart # Bottom navigation shell (Calculator / Timer / History)
| Concern | Package |
|---|---|
| State management | flutter_riverpod + riverpod_annotation |
| Navigation | go_router |
| Immutable models | freezed |
| Persistence (history, devices) | drift (SQLite) |
| Persistence (settings) | shared_preferences |
| Notifications | flutter_local_notifications + timezone |
| Animations | flutter_animate, percent_indicator |
| Permission | Reason |
|---|---|
POST_NOTIFICATIONS | Timer completion and cleaning alarm notifications (Android 13+) |
SCHEDULE_EXACT_ALARM / USE_EXACT_ALARM | Precise notification scheduling |
RECEIVE_BOOT_COMPLETED | Reschedule exact alarms after device reboot |
WAKE_LOCK | Wake screen when the completion alarm fires |
USE_FULL_SCREEN_INTENT | Show alarm on the lock screen (Android 14+) |
The version is defined in one place: version: X.Y.Z+N in pubspec.yaml. Bump it with tool/bump_version.sh, merge the
release PR into main, then push a vX.Y.Z tag: .github/workflows/release.yml builds and publishes web, Android and iOS and
creates the GitHub release. The full process, dry runs and required secrets are in docs/release.md.
See docs/README.md: release process and the architecture decision records (ADRs).
Issues and pull requests are welcome. See CONTRIBUTING.md for the workflow (feature branch, squash-merged PR), the checks CI runs and how to add translations, and the Code of Conduct. Security problems go through SECURITY.md.