Skip to content

About

Flutter diary app on Google Play: offline-first sync, Firebase, in-app purchases. Screenshots, architecture and code samples.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

The Men's Diary: Feel it. Name it. Write it down.

The Men's Diary

A diary app that helps men learn to recognize and put words to their emotions. I designed, built and released it on my own, from the first idea to Google Play.

▸ Get it on Google Play (Android)

This is a public showcase. The app's source code is private; this repository holds screenshots, architecture notes and a few selected code samples.


Screenshots

Profile: streaks and daily tasks Word of the day Store screenshot Store screenshot

Why it exists

The idea came from Gary Chapman's The Five Love Languages: many people, men especially, have learned to deny their feelings and struggle to name them. Chapman suggests a simple exercise: a few times a day, stop and ask yourself what you felt over the last hours. The Men's Diary turns that exercise into a daily habit.

What it does

  • Diary with moods: entries with a 7-level mood scale, a mood-colored calendar and a searchable history
  • Emotion vocabulary: emotion words are highlighted as you write; new ones are "discovered" and unlock content and features over time
  • Word and quote of the day, with community suggestions that go through moderation
  • Stats: streaks, mood spectrum and trends, writing consistency, emotional range across Plutchik's 8 emotion families
  • Habits: daily and weekly tasks, configurable reminder notifications
  • Personalization: original avatars and banners, a guided interactive onboarding with a mascot character
  • Privacy: biometric/PIN app lock, in-app account deletion
  • In-app purchases: one-time "unlock everything" and a tip jar through Google Play Billing

Engineering highlights

  • Offline-first. All writes go to a local SQLite database (Drift) and succeed instantly; a background sync service replicates to Cloud Firestore when online, with last-write-wins conflict resolution and per-row sync state. Details: docs/offline-first-architecture.md
  • Race-free unique nicknames using an atomic Firestore transaction, with local rollback when the server rejects a claim.
  • Reliable purchases. A purchase delivered before the user is signed in isn't acknowledged, so Google Play re-delivers it instead of losing it.
  • Stats cache in the local DB so streaks and counts don't need a full recompute on every screen.
  • Tracking down a Play-only sign-in bug: Google Sign-In failed only for Play Store installs; I traced it to the certificate Play actually signs the APK with (verified with apksigner) and registered the correct fingerprint.
  • Content admin tool in Python/Streamlit with the Firebase Admin SDK, to review community suggestions and schedule daily content.
flowchart LR
    UI["Flutter UI<br/>(Riverpod)"] -- "write (instant)" --> DB[("Drift / SQLite")]
    DB -- "streams" --> UI
    DB <-- "SyncService<br/>push / pull" --> FS[("Cloud Firestore")]
    Auth["Firebase Auth<br/>+ App Check"] --- FS
    Admin["Admin tool<br/>(Python / Streamlit)"] --> FS
Loading

Tech stack

Area Technologies
App Flutter, Dart, Riverpod
Local data Drift, SQLite
Backend Cloud Firestore, Firebase Auth (Google, Apple), Firebase App Check
Payments Google Play Billing (in_app_purchase)
Device Local notifications, biometric auth (local_auth), connectivity monitoring
Tooling Python, Streamlit, Firebase Admin SDK

Release process

  • Solo development, iterated from v1.0 to the current v1.4.0.
  • Several Google Play closed-testing rounds; tester feedback was logged and fixed release by release.
  • Manual QA on real devices, including OEM-specific issues (e.g. navigation bar insets on Xiaomi HyperOS, aggressive battery optimization breaking reminders).
  • Publicly released on Google Play (Android). The iOS project is scaffolded but not released.

Code samples

Selected files from the private repository (code-samples/). They're shown for reading and won't build on their own.

File What it shows
sync_service_excerpt.dart Sync lifecycle, the sync cycle, push/pull, atomic nickname claim
entries_dao.dart Drift DAO: live queries, soft delete, conflict-aware upsert, orphan cleanup
entries_table.dart Table schema with per-row sync state
iap_service.dart Google Play purchase stream and safe delivery

© Aidar Nizamov. All rights reserved. The code samples are shared for portfolio purposes only.

GitHub · LinkedIn

About

Flutter diary app on Google Play: offline-first sync, Firebase, in-app purchases. Screenshots, architecture and code samples.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages