Bygga
제품명을 박스에 입력하면 Bygga가 3D로 모든 조립 단계와 부품·스크류·도구를 보여주고 음성으로 안내합니다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Simple fuel logging app with fuel refill prediction
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Website · Download latest APK · Add to Obtainium · GitHub · Codeberg
A fuel tracking app for Android. Log fill-ups, track mileage across multiple vehicles, and get predictions for your next refuel.
Built with Jetpack Compose, Room, and manual dependency injection. Ships at ~1.2MB.
Landing page source: website/ (Astro, black-and-white neubrutalism). Obtainium URL: obtainium://app/https://github.com/ChandanShakya/FuelLog. Mirrors: GitHub · Codeberg
Vehicle and fuel management
Predictions and analysis
Practical tools
| Layer | Technology |
|---|---|
| UI | Jetpack Compose + Material 3 |
| Database | Room (5 tables, version 11) |
| DI | Manual (AppContainer pattern) |
| Navigation | Sealed class + AnimatedContent (no Navigation Compose) |
| Architecture | MVVM with Kotlin Flows |
| Build | Kotlin, KSP, R8 full mode |
Requires Android Studio and minSdk 26.
git clone <repo-url>
cd FuelLog
./gradlew assembleDebug
Install the debug APK on a device or emulator.
./gradlew assembleDebug # debug build
./gradlew test # unit tests
Passwords live in app/build.gradle.kts (alias fuellog). The keystore file itself is gitignored.
Place release.keystore in the project root, then:
./gradlew assembleRelease
CI: only RELEASE_KEYSTORE_BASE64 is required (base64 of release.keystore). Workflows decode it to release.keystore before assembleRelease. Codeberg also needs CODEBERG_TOKEN to publish the release.
Release builds use R8 minification, resource shrinking, and locale stripping (English only).
./gradlew test # all unit tests
./gradlew testDebugUnitTest # debug unit tests only
./gradlew connectedDebugAndroidTest # instrumentation tests (device required)
Test coverage:
app/src/main/java/com/chandanshakya/fuellog/
data/
backup/ JSON export/import (validated, transactional)
db/ Room database, DAOs, type converters
model/ Entity classes and enums
ui/
chart/ Canvas-based line charts
components/ Reusable composables (dialogs, text fields, badges, cards)
navigation/ Screen sealed class, manual nav host with AnimatedContent
screens/ Screen composables
viewmodel/ ViewModels with factory-based instantiation
util/ Unit converter, currency/money helpers, mileage calculator,
tank capacity learner, fill-up predictor
di/ AppContainer (manual dependency injection)
Five tables with foreign key constraints:
| Table | Purpose |
|---|---|
vehicles | Vehicle profiles: name, type, distance/volume units, tank capacity |
fuel_entries | Fill records: odometer, volume, cost, date, full-tank flag, FK to vehicle and pump |
fuel_pumps | Named fuel pumps/stations |
odometer_readings | Standalone odometer check-ins between fill-ups |
user_settings | Global defaults: currency, distance unit, volume unit |
Schema version is 11. Do not bump the version without adding a real Migration. The app uses fallbackToDestructiveMigrationOnDowngrade() only — upgrades with a missing migration fail loudly instead of silently wiping user data. Export Room schemas when adding migrations (exportSchema is currently false; enable it and commit schemas before the next version bump).
When you mark a fill-up as "full tank", the app records the fuel volume added. Between two consecutive full-tank fill-ups, the volume added approximates the actual tank capacity. The algorithm computes a median-based suggestion with confidence levels (low/medium/high) based on how many full-tank pairs are available. Suggestions appear on the Insights screen and are applied manually — the app never overwrites your value.
Logging a new odometer reading without buying fuel immediately shortens remaining range and moves the predicted date earlier.
Costs are stored as Double for Room/JSON compatibility but are always rounded to 2 decimal places on save and when summing (Money.roundToCents / Money.sumCents). Display uses a per-thread DecimalFormat (thread-safe under concurrent Flow collection).
Export writes versioned JSON. Import validates the entire payload first, then clears and inserts inside a single Room transaction — a parse/validation error leaves existing data untouched. Android Auto Backup is disabled; use in-app export for backups.
MIT — see LICENSE.