Hash Generator
v1.3.2MD5, SHA and HMAC digests for text and multi-gigabyte files, with a history you can undo. It's the most-installed app in the catalogue.
Flutter · Android · iOS · Based in the UAE
I'm Muhammad Taha, a Flutter developer based in the UAE. Twenty-eight of my apps are live on Google Play under the Tahatec name. They include developer tools, PDF and email viewers, calculators and fuel-price trackers. Four of them are on their way to the App Store.
Each app is single-purpose, and none of them is simple inside. A JWT decoder has to agree with OpenSSL. A chmod calculator has to agree with chmod. A JSON formatter must not quietly rewrite your numbers. So I test each one against the real tool it replaces, then run it on a device.
Installs are the sum of Google Play's install bands. Tests are the passing unit, widget and differential tests across the 28 published apps. Both checked October 2026.
Selected work
Each card shows the live version, the test count, and the decision that mattered more than the feature list. They're all Flutter and Android-first, and they work offline wherever the job allows.
MD5, SHA and HMAC digests for text and multi-gigabyte files, with a history you can undo. It's the most-installed app in the catalogue.
Decode, inspect and verify JSON Web Tokens without the token ever leaving the phone.
Format, validate and explore JSON without silently rewriting the document you pasted in.
json.decode, which turns
1e5 into 100000.0, drops digits from big integers and loses
duplicate keys. Instead it ships a hand-written parser. That parser keeps every number as
literal text, reports duplicate keys, and returns error codes with line and column.
Octal, symbolic and ls -l permissions as views of one 12-bit value.
chmod, with zero mismatches. Probing the real tools first
turned up five commands where the two disagree. One is chmod 755 dir, which
does not clear setgid.
Permissions, signing, components, DEX, native libraries and 16 KB readiness for any APK or AAB.
resources.arsc, protobuf manifests, DEX and ELF. The parsers are gated by a
differential against Google's aapt2 and the NDK's llvm-readelf. That gate
passed on its first run.
Merge, split, reorder, rotate, stamp, lock and unlock PDFs on the device.
Open winmail.dat, Outlook MSG, EML and MHT files, parsed entirely on the device.
Today's fuel prices, price history, a fill-up log, trip costs and a home-screen widget.
Adult BMI, plus CDC BMI-for-age percentiles for children from 2 to 20.
Qibla direction, prayer times, manual location and a map, accurate without a network.
Test, explain and debug regular expressions, with group positions and error carets.
RegExp exposes no group names, no error offsets
and no group positions. Those facts were measured, not assumed. So the app parses patterns
itself. A pattern with runaway backtracking runs in an isolate that can be killed, so it
can't freeze the app.
Spot the one tile with a different shade, against the clock, with a daily challenge.
Everything on Google Play
Every live listing on the Tahatec developer page, with its current version, install band and language count. Search by name or by what you need.
28 apps
No app matches that search. Try a broader word, like "calculator" or "text".
In progress
These iOS builds are uploaded to App Store Connect and waiting on listing and review. They aren't live yet.
This app is built and tested but not released yet.
How these get built
The apps are unrelated, but they're all built the same way. They share services, release checks and the same project structure. A bug found in one app gets looked for in all the others.
When an app reimplements a real tool, the real tool becomes the answer key. Expected results come from measuring the reference, never from the code under test.
Release builds run on an emulator or phone before upload. Device passes have caught bugs that thousands of green tests missed, including prayer times in UTC, Morse code rendered backwards in Arabic, a keyboard hiding the field you were typing in, and a home-screen widget that would not load.
Several apps replace a popular package with their own code because the convenient option was quietly wrong. Examples include a JSON parser, a UUID generator, a compass plugin, a ZIP reader and intent bridges.
Apps ship in up to 15 languages, and the catalogue covers 22. Arabic, Urdu and Persian mean right-to-left layout and bidi are design constraints from day one, not bug reports after launch.
Release builds go through check.sh and a 16 KB page-size check before upload. Newer apps also inspect the release build to confirm R8 kept the constructors they need, and fail their tests if a service-account key is left in the tree. Store screenshots are generated by scripts and checked against the store's size rules.
Hashing, JWT verification, PDF edits and email parsing all happen on the device, and the files you open are never uploaded. Each app's privacy policy is published here.
| App | Answer key | Scale |
|---|---|---|
| Chmod Calculator | GNU coreutils and macOS chmod | 45,824 cases, zero mismatches |
| PDF Toolkit | qpdf, poppler and mutool | 1,107 checks on a 14-file corpus |
| APK Analyzer | aapt2 and llvm-readelf | 1,000+ resource ids resolved identically |
| JWT Decoder | OpenSSL-generated test vectors | 13 signature algorithms |
| Cron Job Calculator | Python's croniter, in both directions | Including daylight-saving edges |
| Winmail Viewer | tnefparse, extract_msg and compressed_rtf | 4 formats, fixtures from own writers |
| BMI Calculator | CDC's published percentile columns | All 438 rows reproduced |
Toolchain
Every app shares this baseline. Apps started this year use the newer Kotlin-DSL Android config and target SDK 37.
# framework flutter 3.47 # dart 3.13 languages Dart, Kotlin, Swift # python for tooling and gates # android gradle 9.x / agp 9.x # kotlin dsl on new apps sdk target 36–37, min 24 release r8 full mode, 16 KB aligned, symbol upload # ios deployment iOS 15+, universal iPhone + iPad native own Swift channels where plugins fall short # platform services firebase analytics, crashlytics, messaging, firestore, hosting ads google_mobile_ads + UMP consent, Meta mediation automation GitHub Actions price publisher, hourly # quality tests unit, widget, integration, differential gates check.sh, check_16kb.sh, check_r8_keeps.sh, store-asset checks lints flutter_lints 6
Contact
I take on Flutter and Android work, whether that's a new app or rescuing one that has drifted a few toolchain versions behind. Email is the fastest way to reach me, about work or about any of the apps.