itmc-business-os

Full Project Guide — ITMC Bussines OS

This is the single comprehensive reference for this project: what it is, how it’s built, how to run/test/publish it, and — since this repo is meant to be reused as a starting point for future projects — exactly what to change to adapt it into a brand-new app. Shorter, task-focused docs also exist (see docs/README.md for the full index — GETTING_STARTED.md, RUNNING.md, PUBLISHING.md, FASTLANE.md, play-console-manual-steps.md, store-listing-answers.md); this doc ties everything together in one place and adds the “reuse this as a template” and “lessons learned” material that doesn’t belong in a quick-start.

Table of contents

  1. What this is
  2. Architecture
  3. Folder structure / file manifest
  4. Environment setup
  5. Running & testing
  6. Branching & CI
  7. Publishing to Google Play
  8. Reusing this repo as a template for a new project
  9. Lessons learned / troubleshooting

1. What this is

A local-first Flutter app (ITMC Bussines OS, Dart package name itmc_estimator) for a software/development service business: manage clients, a reusable service-price catalog, cost estimates, and invoices, with PDF export. No login, no backend — everything lives on-device.

Beyond the app itself, this repo is a working example of a fully automated Google Play release pipeline: tag a version, and CI builds, signs, and uploads the binary plus the entire store listing (text, icon, feature graphic, screenshots) with zero manual Play Console form-filling for anything recurring.

2. Architecture

Architecture diagram

3. Folder structure / file manifest

lib/                          The app itself (see architecture above)
android/                      Flutter's generated Android project
  app/build.gradle.kts        Signing config reads android/key.properties (git-ignored)
  key.properties.example      Template — copy to key.properties, fill in real values
fastlane/
  Appfile                     package_name + json_key_file path
  Fastfile                    Lanes: build_release, screenshots, deploy_internal, deploy_production
  metadata/android/en-US/     Store listing text, changelog, icon/feature graphic, screenshots
                              — this whole folder is what gets pushed to Play Console automatically
  play-service-account.json   Google Cloud service account key (git-ignored, not in repo)
scripts/
  capture_screenshots.sh      Auto-captures Play Store screenshots via adb (no manual screenshotting)
  generate_placeholder_graphics.ps1   Generates a placeholder icon/feature graphic
.github/workflows/
  ci.yml                      Lint/test/build gate — runs on push to dev, PRs into main
  release.yml                 Build+sign+upload — runs on version tags (any branch), or manual dispatch
Dockerfile                    Reproducible release-build image (not needed for day-to-day dev)
docs/
  README.md                   Index of all docs, ordered by when you'd reach for them
  FULL_GUIDE.md               This file
  GETTING_STARTED.md          Quick-start checklist, phase by phase
  RUNNING.md                  Local dev/test setup, golden-path test script
  PUBLISHING.md               One-time Play Console/Cloud setup, in detail
  FASTLANE.md                 What Fastlane is, the lanes in this repo, how to run one locally
  play-console-manual-steps.md  Click-by-click Play Console UI walkthrough (testers,
                              countries, content rating, release, submit for review)
  store-listing-answers.md    Exact answers for the content-rating + data-safety forms
  privacy-policy.md           Hosted live via GitHub Pages, linked from the Play listing
  images/                     Diagrams and reference screenshots for these guides
legacy-appcreator24/          The original AppCreator24-built .aab, kept for reference only

4. Environment setup

See GETTING_STARTED.md, Phase 1 for the from-scratch checklist (Flutter SDK, Android SDK, one emulator). Once flutter doctor reports clean, you’re ready for everything else in this doc.

5. Running & testing

flutter pub get
flutter run

Requires an Android emulator or physical device — this app can’t run correctly on Windows desktop or web targets, because sqflite (local storage) has no real implementation there. Full golden-path manual test script → RUNNING.md.

Real screenshot from this app running on the emulator during development:

Clients screen

6. Branching & CI

CI/CD pipeline diagram

Normal flow: work on dev → PR into main → CI passes → merge → tag a release from main.

7. Publishing to Google Play

Full one-time setup and the ongoing release command are in PUBLISHING.md. Short version: after the one-time setup (Play Console app creation, signing key, Google Cloud service account, GitHub secrets), every release is:

git tag v1.0.1 && git push origin v1.0.1

Content rating questionnaire and data safety form answers (both one-time, manual — no API exists for either) → store-listing-answers.md. Exact click path through every Play Console screen involved (testers, countries/regions, content rating, target audience, data safety, ads, health apps, creating the production release, submitting for review) → play-console-manual-steps.md.

8. Reusing this repo as a template for a new project

Everything below is what to change when starting a genuinely new app from this boilerplate — not just renaming this one, but adapting the whole pipeline for a different app entirely.

8.1 Code identity

8.2 App icon & branding

8.3 Store listing content

8.4 Signing & credentials (never share these across apps)

8.5 Repo setup

9. Lessons learned / troubleshooting

Real issues hit while building this pipeline, so a future project built from this template doesn’t have to rediscover them: