DEV Community

Zykrave
Zykrave

Posted on

I built a 47-tool offline Android app with Kotlin and Jetpack Compose

What is ToolixHub?

  • ToolixHub is an everyday utility Swiss Knife for Android
  • 47 tools in one app, across 9 categories
  • 100% offline: no accounts, no ads, no network calls
  • Open source: github.com/Zykrave/ToolixHub

[SCREENSHOT 1:
 ]

What's inside

  • Calculators: standard calculator with history
  • Text: word & character counter, find & replace, duplicate remover
  • Image: resizer, Base64 converter
  • Random: name generator, decision maker, number generator
  • Finance: loan EMI calculator
  • Color, Measurement, Timers (stopwatch with laps) and QR & Utility (QR generator, hash & checksum generator, system info dashboard)
  • Favorites and a Recently Used row for quick access

[SCREENSHOT 2:
 ]

How I built it

  • I used AI only to get the base and the concept
  • Everything after that, I built myself with help of ai in Android Studio:
    • Renamed and rebranded the app
    • Designed a custom adaptive icon and splash screen
    • Built a shared design system: category accent colors, reusable components, consistent cards
    • Cleaned up the repo (.gitignore, structure, signing config)
    • Tested every change on a real device

[SCREENSHOT 3:
 ]

The tech stack

  • Kotlin + Jetpack Compose + Material 3
  • Navigation Compose for screens
  • DataStore for local preferences (favorites, recents)
  • ZXing for QR and barcode handling
  • Coroutines for async work
  • minSdk 24, targetSdk 36

Rules I set for myself

  • No network dependencies, ever. It must work in airplane mode.
  • No local database. DataStore is enough for this app.
  • No Modifier.blur() or RenderEffect. They need API 31+, and I support API 24.
    • For depth, I used gradients and layered shadows instead.
  • One small change at a time, tested on a real device before moving on.

Lessons learned

  • AI gets you a base fast, but polish is still on you. The design system, consistency and constraints came from me.
  • A starting base is not a finished product. The design system, consistency and constraints all came from hands-on work in Android Studio.
  • Modifier.shadow() on a Card can get clipped by the card's own shape. Wrapping the Card in a Box that carries the shadow fixed it.
  • Test shared components on several screens. A change to one card affects 90+ call sites.
  • When something doesn't render, try an extreme test value first. It tells you whether the effect is "too subtle" or "not working at all."

What's next

  • A scientific mode for the calculator
  • Save/download options for tools that generate content
  • Smoother screen transitions
  • A more distinctive UI redesign

Try it

Built by Zykrave

Top comments (0)