flutter-project scored 87/100 (Good). Found 1 critical issue requiring immediate attention. 3 quick wins available that can be fixed today. Stability is in good shape (100/100).
Top Issues (5)
CRITICALSensitive file detected: .env
The file ".env" appears to contain sensitive data (matched name: ".env").
Category: hygieneConfidence: likelyImpact: Potential exposure of secrets or credentials.
Evidence (1 location)
.env — Sensitive file name: .env
MEDIUMArchive file in repository: data.zip
The archive file "data.zip" (21 B) is checked into the repository.
Category: hygieneConfidence: confirmedImpact: Archive occupies 21 B in the repository.
Evidence (1 location)
data.zip — Archive (.zip)
MEDIUM1 dependency override(s) in pubspec.yaml
The pubspec "pubspec.yaml" contains 1 dependency_overrides, which force specific versions and bypass normal resolution.
Category: flutterConfidence: confirmedImpact: Review 1 dependency overrides for necessity.
Evidence (1 location)
pubspec.yaml — 1 dependency_overrides entries
MEDIUM1 declared asset path(s) missing on disk in pubspec.yaml
1 asset(s) declared in pubspec.yaml under flutter.assets could not be found in the repository file index.
MEDIUM1 declared font asset(s) missing on disk in pubspec.yaml
1 font asset(s) declared in pubspec.yaml under flutter.fonts could not be found in the repository file index.
Category: flutterConfidence: confirmedImpact: 1 missing font asset(s)
Evidence (1 location)
pubspec.yaml — Family "Roboto": missing fonts/Roboto-Regular.ttf
Quick Wins (3)
CRITICALSensitive file detected: .envPotential exposure of secrets or credentials.Remove ".env" from version control, rotate any exposed credentials, and add the file to .gitignore.
MEDIUM1 declared asset path(s) missing on disk in pubspec.yaml1 missing asset path(s)Remove stale entries from flutter.assets in pubspec.yaml, or add the missing files to the expected paths.
MEDIUM1 declared font asset(s) missing on disk in pubspec.yaml1 missing font asset(s)Add the missing font files to the declared paths, or remove stale font entries from pubspec.yaml.
Category Breakdown
Size
79/100
MEDIUMPotentially unused asset: unused_logo.png
MEDIUMPotentially unused asset: heavy.svg
MEDIUMPotentially unused asset: missing_image.png
INFOTop 11 largest files in the repository
Speed
95/100
INFOFound 1 heavy dependency
Stability
100/100
MEDIUM1 dependency override(s) in pubspec.yaml
MEDIUM1 heavy SVG(s) for runtime rendering (medium)
MEDIUM1 declared asset path(s) missing on disk in pubspec.yaml
MEDIUM1 declared font asset(s) missing on disk in pubspec.yaml
LOWRoot pubspec.yaml has no committed pubspec.lock
INFO1 generated .g.dart file(s) (expected for Flutter)
INFOModule inventory: 1 module(s) detected
Detailed Findings
17 findings
CRITICALSensitive file detected: .env
The file ".env" appears to contain sensitive data (matched name: ".env").
Why it matters: Secrets, API keys, and credentials checked into a repository can be extracted by anyone with access and remain in git history even after deletion.
Impact: Potential exposure of secrets or credentials.Confidence: likely
Evidence (1 location)
.env — Sensitive file name: .env
Remove ".env" from version control, rotate any exposed credentials, and add the file to .gitignore.
The archive file "data.zip" (21 B) is checked into the repository.
Why it matters: Archive files are opaque binaries that cannot be diffed. They bloat the repository permanently (even after deletion, they remain in git history).
Impact: Archive occupies 21 B in the repository.Confidence: confirmed
Evidence (1 location)
data.zip — Archive (.zip)
Remove `data.zip` from the repository. Alternatives: (1) extract the needed files from the archive, commit them individually, then delete the archive; (2) publish the contents as a package on a registry (npm, Maven, CocoaPods); (3) move the archive to cloud storage (S3, GCS) and download it at build time; (4) track it with Git LFS (`git lfs track "data.zip"`) to keep it out of the main object store.
The pubspec "pubspec.yaml" contains 1 dependency_overrides, which force specific versions and bypass normal resolution.
Why it matters: Dependency overrides mask version conflicts and can hide incompatibilities that surface only in production or when the overrides are removed.
Impact: Review 1 dependency overrides for necessity.Confidence: confirmed
Evidence (1 location)
pubspec.yaml — 1 dependency_overrides entries
Resolve the underlying version conflicts so that dependency_overrides are no longer needed, or document why each override is required.
MEDIUM1 heavy SVG(s) for runtime rendering (medium)
1 SVG file(s) contain constructs that are expensive to render at runtime via flutter_svg.
Why it matters: Complex SVG constructs (filters, masks, embedded images) are re-evaluated on every frame by flutter_svg, causing jank and increased GPU/CPU usage.
Impact: Total rendering weight score: 8 (threshold per file: 3).Confidence: likely
Consider converting these SVGs to PNG or WebP for better rendering performance. If an SVG is used at multiple sizes, keeping it as vector may be preferable — in that case, try simplifying the heavy constructs.
MEDIUM1 declared asset path(s) missing on disk in pubspec.yaml
1 asset(s) declared in pubspec.yaml under flutter.assets could not be found in the repository file index.
Why it matters: Declared but missing assets cause runtime errors or build failures. Flutter will fail to bundle assets it cannot locate, leading to broken images or crashes.
The file "android/app/google-services.json" is a common mobile config file (matched name: "google-services.json"). Usually not a secret, but verify it doesn't contain sensitive overrides.
Why it matters: While typically safe to commit, these files can occasionally contain API keys or environment-specific overrides that should remain private.
Impact: Low risk — review to confirm no sensitive overrides.Confidence: review_needed
Verify "google-services.json" does not contain production secrets. Consider adding to .gitignore if it holds environment-specific values.
hygiene-sensitive-fileHorizon: Category: hygiene
LOW1 deeply nested directory (low, max depth 11)
Found 1 directory with nesting depth exceeding 10. Maximum depth: 11.
Why it matters: Excessively deep directory structures make navigation difficult, suggest overly complex module hierarchies, and can cause path-length issues on some operating systems.
Impact: 1 directories with excessive nesting (max depth 11).Confidence: confirmed
Evidence (1 location)
a/b/c/d/e/f/g/h/i/j/k — Nesting depth: 11
Aim for a maximum depth of 9 levels. Strategies: (1) flatten feature folders by co-locating related files instead of nesting by type, (2) use barrel exports (index.ts) to allow shorter import paths. Run `find . -mindepth 10 -type d` to list all offending directories.
LOWRoot pubspec.yaml has no committed pubspec.lock
The repository contains a root pubspec.yaml but no pubspec.lock. Without a lock file, every developer and CI run may resolve different dependency versions.
Why it matters: A missing lock file causes non-reproducible builds and can introduce subtle bugs when transitive dependency versions drift between machines.
Impact: Non-reproducible dependency resolution across environments.Confidence: review_needed
Evidence (1 location)
pubspec.yaml — pubspec.lock not found
Run `flutter pub get` and commit the generated pubspec.lock.
INFO1 generated .g.dart file(s) (expected for Flutter)
Found 1 generated .g.dart files (134 B). These are expected in Flutter projects and excluded from scoring.
Why it matters: Flutter projects conventionally commit codegen output (build_runner, freezed, etc.) so developers can work without running code generation.
Found 1 module definition(s) across 1 type(s): Flutter/Dart: 1.
Why it matters: Understanding the module structure of the repository helps identify build dependencies, potential code sharing opportunities, and structural complexity.
Impact: 1 modules across 1 technology types.Confidence: confirmed
Evidence (1 location)
pubspec.yaml — Flutter/Dart
No action required. This is an informational finding for visibility into the repository structure.
Remove ".env" from version control, rotate any exposed credentials, and add the file to .gitignore.
Potential exposure of secrets or credentials.
MEDIUM 1 declared asset path(s) missing on disk in pubspec.yaml
Remove stale entries from flutter.assets in pubspec.yaml, or add the missing files to the expected paths.
1 missing asset path(s)
MEDIUM 1 declared font asset(s) missing on disk in pubspec.yaml
Add the missing font files to the declared paths, or remove stale font entries from pubspec.yaml.
1 missing font asset(s)
Next Sprint
MEDIUM Archive file in repository: data.zip
Remove `data.zip` from the repository. Alternatives: (1) extract the needed files from the archive, commit them individually, then delete the archive; (2) publish the contents as a package on a registry (npm, Maven, CocoaPods); (3) move the archive to cloud storage (S3, GCS) and download it at build time; (4) track it with Git LFS (`git lfs track "data.zip"`) to keep it out of the main object store.
Archive occupies 21 B in the repository.
MEDIUM Potentially unused asset: unused_logo.png
Search for references with: grep -r "unused_logo.png" lib/ — if no results, remove "assets/unused_logo.png" from pubspec.yaml and delete the file.
Reduced bundle size if removed
MEDIUM Potentially unused asset: heavy.svg
Search for references with: grep -r "heavy.svg" lib/ — if no results, remove "assets/heavy.svg" from pubspec.yaml and delete the file.
Reduced bundle size if removed
MEDIUM Potentially unused asset: missing_image.png
Search for references with: grep -r "missing_image.png" lib/ — if no results, remove "assets/missing_image.png" from pubspec.yaml and delete the file.
Reduced bundle size if removed
MEDIUM 1 dependency override(s) in pubspec.yaml
Resolve the underlying version conflicts so that dependency_overrides are no longer needed, or document why each override is required.
Review 1 dependency overrides for necessity.
MEDIUM 1 heavy SVG(s) for runtime rendering (medium)
Consider converting these SVGs to PNG or WebP for better rendering performance. If an SVG is used at multiple sizes, keeping it as vector may be preferable — in that case, try simplifying the heavy constructs.
Total rendering weight score: 8 (threshold per file: 3).
LOW Root pubspec.yaml has no committed pubspec.lock
Run `flutter pub get` and commit the generated pubspec.lock.
Non-reproducible dependency resolution across environments.
Structural (Later)
LOW 1 deeply nested directory (low, max depth 11)
Aim for a maximum depth of 9 levels. Strategies: (1) flatten feature folders by co-locating related files instead of nesting by type, (2) use barrel exports (index.ts) to allow shorter import paths. Run `find . -mindepth 10 -type d` to list all offending directories.
1 directories with excessive nesting (max depth 11).
INFO Top 11 largest files in the repository
Review each large file to determine if it can be compressed, optimized, moved to a CDN, or removed if unused.
These 11 files total 3.6 KB.
INFO 1 generated .g.dart file(s) (expected for Flutter)
No action needed — these files are expected in Flutter projects.
1 generated files occupy 134 B.
INFO Module inventory: 1 module(s) detected
No action required. This is an informational finding for visibility into the repository structure.
1 modules across 1 technology types.
INFO 1 Flutter package(s) detected
Review dependency count and asset declarations for optimization opportunities.
1 packages, 3 total dependencies.
INFO Found 1 heavy dependency
Evaluate whether each heavy dependency is essential. Consider lighter alternatives or lazy-loading where possible.