@wazir-dev/cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +111 -0
- package/CHANGELOG.md +14 -0
- package/CONTRIBUTING.md +101 -0
- package/LICENSE +21 -0
- package/README.md +314 -0
- package/assets/composition-engine.mmd +34 -0
- package/assets/demo-script.sh +17 -0
- package/assets/logo-dark.svg +14 -0
- package/assets/logo.svg +14 -0
- package/assets/pipeline.mmd +39 -0
- package/assets/record-demo.sh +51 -0
- package/docs/README.md +51 -0
- package/docs/adapters/context-mode.md +60 -0
- package/docs/concepts/architecture.md +87 -0
- package/docs/concepts/artifact-model.md +60 -0
- package/docs/concepts/composition-engine.md +36 -0
- package/docs/concepts/indexing-and-recall.md +160 -0
- package/docs/concepts/observability.md +41 -0
- package/docs/concepts/roles-and-workflows.md +59 -0
- package/docs/concepts/terminology-policy.md +27 -0
- package/docs/getting-started/01-installation.md +78 -0
- package/docs/getting-started/02-first-run.md +102 -0
- package/docs/getting-started/03-adding-to-project.md +15 -0
- package/docs/getting-started/04-host-setup.md +15 -0
- package/docs/guides/ci-integration.md +15 -0
- package/docs/guides/creating-skills.md +15 -0
- package/docs/guides/expertise-module-authoring.md +15 -0
- package/docs/guides/hook-development.md +15 -0
- package/docs/guides/memory-and-learnings.md +34 -0
- package/docs/guides/multi-host-export.md +15 -0
- package/docs/guides/troubleshooting.md +101 -0
- package/docs/guides/writing-custom-roles.md +15 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
- package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
- package/docs/readmes/INDEX.md +99 -0
- package/docs/readmes/features/expertise/README.md +171 -0
- package/docs/readmes/features/exports/README.md +222 -0
- package/docs/readmes/features/hooks/README.md +103 -0
- package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
- package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
- package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
- package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
- package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
- package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
- package/docs/readmes/features/hooks/session-start.md +119 -0
- package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
- package/docs/readmes/features/roles/README.md +157 -0
- package/docs/readmes/features/roles/clarifier.md +152 -0
- package/docs/readmes/features/roles/content-author.md +190 -0
- package/docs/readmes/features/roles/designer.md +193 -0
- package/docs/readmes/features/roles/executor.md +184 -0
- package/docs/readmes/features/roles/learner.md +210 -0
- package/docs/readmes/features/roles/planner.md +182 -0
- package/docs/readmes/features/roles/researcher.md +164 -0
- package/docs/readmes/features/roles/reviewer.md +184 -0
- package/docs/readmes/features/roles/specifier.md +162 -0
- package/docs/readmes/features/roles/verifier.md +215 -0
- package/docs/readmes/features/schemas/README.md +178 -0
- package/docs/readmes/features/skills/README.md +63 -0
- package/docs/readmes/features/skills/brainstorming.md +96 -0
- package/docs/readmes/features/skills/debugging.md +148 -0
- package/docs/readmes/features/skills/design.md +120 -0
- package/docs/readmes/features/skills/prepare-next.md +109 -0
- package/docs/readmes/features/skills/run-audit.md +159 -0
- package/docs/readmes/features/skills/scan-project.md +109 -0
- package/docs/readmes/features/skills/self-audit.md +176 -0
- package/docs/readmes/features/skills/tdd.md +137 -0
- package/docs/readmes/features/skills/using-skills.md +92 -0
- package/docs/readmes/features/skills/verification.md +120 -0
- package/docs/readmes/features/skills/writing-plans.md +104 -0
- package/docs/readmes/features/tooling/README.md +320 -0
- package/docs/readmes/features/workflows/README.md +186 -0
- package/docs/readmes/features/workflows/author.md +181 -0
- package/docs/readmes/features/workflows/clarify.md +154 -0
- package/docs/readmes/features/workflows/design-review.md +171 -0
- package/docs/readmes/features/workflows/design.md +169 -0
- package/docs/readmes/features/workflows/discover.md +162 -0
- package/docs/readmes/features/workflows/execute.md +173 -0
- package/docs/readmes/features/workflows/learn.md +167 -0
- package/docs/readmes/features/workflows/plan-review.md +165 -0
- package/docs/readmes/features/workflows/plan.md +170 -0
- package/docs/readmes/features/workflows/prepare-next.md +167 -0
- package/docs/readmes/features/workflows/review.md +169 -0
- package/docs/readmes/features/workflows/run-audit.md +191 -0
- package/docs/readmes/features/workflows/spec-challenge.md +159 -0
- package/docs/readmes/features/workflows/specify.md +160 -0
- package/docs/readmes/features/workflows/verify.md +177 -0
- package/docs/readmes/packages/README.md +50 -0
- package/docs/readmes/packages/ajv.md +117 -0
- package/docs/readmes/packages/context-mode.md +118 -0
- package/docs/readmes/packages/gray-matter.md +116 -0
- package/docs/readmes/packages/node-test.md +137 -0
- package/docs/readmes/packages/yaml.md +112 -0
- package/docs/reference/configuration-reference.md +159 -0
- package/docs/reference/expertise-index.md +52 -0
- package/docs/reference/git-flow.md +43 -0
- package/docs/reference/hooks.md +87 -0
- package/docs/reference/host-exports.md +50 -0
- package/docs/reference/launch-checklist.md +172 -0
- package/docs/reference/marketplace-listings.md +76 -0
- package/docs/reference/release-process.md +34 -0
- package/docs/reference/roles-reference.md +77 -0
- package/docs/reference/skills.md +33 -0
- package/docs/reference/templates.md +29 -0
- package/docs/reference/tooling-cli.md +94 -0
- package/docs/truth-claims.yaml +222 -0
- package/expertise/PROGRESS.md +63 -0
- package/expertise/README.md +18 -0
- package/expertise/antipatterns/PROGRESS.md +56 -0
- package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
- package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
- package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
- package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
- package/expertise/antipatterns/backend/index.md +24 -0
- package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
- package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
- package/expertise/antipatterns/code/async-antipatterns.md +622 -0
- package/expertise/antipatterns/code/code-smells.md +1186 -0
- package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
- package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
- package/expertise/antipatterns/code/index.md +27 -0
- package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
- package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
- package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
- package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
- package/expertise/antipatterns/design/dark-patterns.md +1121 -0
- package/expertise/antipatterns/design/index.md +22 -0
- package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
- package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
- package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
- package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
- package/expertise/antipatterns/frontend/index.md +23 -0
- package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
- package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
- package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
- package/expertise/antipatterns/index.md +31 -0
- package/expertise/antipatterns/performance/index.md +20 -0
- package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
- package/expertise/antipatterns/performance/premature-optimization.md +623 -0
- package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
- package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
- package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
- package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
- package/expertise/antipatterns/process/index.md +23 -0
- package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
- package/expertise/antipatterns/security/index.md +20 -0
- package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
- package/expertise/antipatterns/security/security-theater.md +843 -0
- package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
- package/expertise/architecture/PROGRESS.md +70 -0
- package/expertise/architecture/data/caching-architecture.md +671 -0
- package/expertise/architecture/data/data-consistency.md +574 -0
- package/expertise/architecture/data/data-modeling.md +536 -0
- package/expertise/architecture/data/event-streams-and-queues.md +634 -0
- package/expertise/architecture/data/index.md +25 -0
- package/expertise/architecture/data/search-architecture.md +663 -0
- package/expertise/architecture/data/sql-vs-nosql.md +708 -0
- package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
- package/expertise/architecture/decisions/build-vs-buy.md +616 -0
- package/expertise/architecture/decisions/index.md +23 -0
- package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
- package/expertise/architecture/decisions/technology-selection.md +616 -0
- package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
- package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
- package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
- package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
- package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
- package/expertise/architecture/distributed/index.md +25 -0
- package/expertise/architecture/distributed/saga-pattern.md +797 -0
- package/expertise/architecture/foundations/architectural-thinking.md +460 -0
- package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
- package/expertise/architecture/foundations/design-principles-solid.md +649 -0
- package/expertise/architecture/foundations/domain-driven-design.md +719 -0
- package/expertise/architecture/foundations/index.md +25 -0
- package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
- package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
- package/expertise/architecture/index.md +34 -0
- package/expertise/architecture/integration/api-design-graphql.md +638 -0
- package/expertise/architecture/integration/api-design-grpc.md +804 -0
- package/expertise/architecture/integration/api-design-rest.md +892 -0
- package/expertise/architecture/integration/index.md +25 -0
- package/expertise/architecture/integration/third-party-integration.md +795 -0
- package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
- package/expertise/architecture/integration/websockets-realtime.md +791 -0
- package/expertise/architecture/mobile-architecture/index.md +22 -0
- package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
- package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
- package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
- package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
- package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
- package/expertise/architecture/patterns/event-driven.md +797 -0
- package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
- package/expertise/architecture/patterns/index.md +27 -0
- package/expertise/architecture/patterns/layered-architecture.md +736 -0
- package/expertise/architecture/patterns/microservices.md +753 -0
- package/expertise/architecture/patterns/modular-monolith.md +692 -0
- package/expertise/architecture/patterns/monolith.md +626 -0
- package/expertise/architecture/patterns/plugin-architecture.md +735 -0
- package/expertise/architecture/patterns/serverless.md +780 -0
- package/expertise/architecture/scaling/database-scaling.md +615 -0
- package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
- package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
- package/expertise/architecture/scaling/index.md +24 -0
- package/expertise/architecture/scaling/multi-tenancy.md +800 -0
- package/expertise/architecture/scaling/stateless-design.md +787 -0
- package/expertise/backend/embedded-firmware.md +625 -0
- package/expertise/backend/go.md +853 -0
- package/expertise/backend/index.md +24 -0
- package/expertise/backend/java-spring.md +448 -0
- package/expertise/backend/node-typescript.md +625 -0
- package/expertise/backend/python-fastapi.md +724 -0
- package/expertise/backend/rust.md +458 -0
- package/expertise/backend/solidity.md +711 -0
- package/expertise/composition-map.yaml +443 -0
- package/expertise/content/foundations/content-modeling.md +395 -0
- package/expertise/content/foundations/editorial-standards.md +449 -0
- package/expertise/content/foundations/index.md +24 -0
- package/expertise/content/foundations/microcopy.md +455 -0
- package/expertise/content/foundations/terminology-governance.md +509 -0
- package/expertise/content/index.md +34 -0
- package/expertise/content/patterns/accessibility-copy.md +518 -0
- package/expertise/content/patterns/index.md +24 -0
- package/expertise/content/patterns/notification-content.md +433 -0
- package/expertise/content/patterns/sample-content.md +486 -0
- package/expertise/content/patterns/state-copy.md +439 -0
- package/expertise/design/PROGRESS.md +58 -0
- package/expertise/design/disciplines/dark-mode-theming.md +577 -0
- package/expertise/design/disciplines/design-systems.md +595 -0
- package/expertise/design/disciplines/index.md +25 -0
- package/expertise/design/disciplines/information-architecture.md +800 -0
- package/expertise/design/disciplines/interaction-design.md +788 -0
- package/expertise/design/disciplines/responsive-design.md +552 -0
- package/expertise/design/disciplines/usability-testing.md +516 -0
- package/expertise/design/disciplines/user-research.md +792 -0
- package/expertise/design/foundations/accessibility-design.md +796 -0
- package/expertise/design/foundations/color-theory.md +797 -0
- package/expertise/design/foundations/iconography.md +795 -0
- package/expertise/design/foundations/index.md +26 -0
- package/expertise/design/foundations/motion-and-animation.md +653 -0
- package/expertise/design/foundations/rtl-design.md +585 -0
- package/expertise/design/foundations/spacing-and-layout.md +607 -0
- package/expertise/design/foundations/typography.md +800 -0
- package/expertise/design/foundations/visual-hierarchy.md +761 -0
- package/expertise/design/index.md +32 -0
- package/expertise/design/patterns/authentication-flows.md +474 -0
- package/expertise/design/patterns/content-consumption.md +789 -0
- package/expertise/design/patterns/data-display.md +618 -0
- package/expertise/design/patterns/e-commerce.md +1494 -0
- package/expertise/design/patterns/feedback-and-states.md +642 -0
- package/expertise/design/patterns/forms-and-input.md +819 -0
- package/expertise/design/patterns/gamification.md +801 -0
- package/expertise/design/patterns/index.md +31 -0
- package/expertise/design/patterns/microinteractions.md +449 -0
- package/expertise/design/patterns/navigation.md +800 -0
- package/expertise/design/patterns/notifications.md +705 -0
- package/expertise/design/patterns/onboarding.md +700 -0
- package/expertise/design/patterns/search-and-filter.md +601 -0
- package/expertise/design/patterns/settings-and-preferences.md +768 -0
- package/expertise/design/patterns/social-and-community.md +748 -0
- package/expertise/design/platforms/desktop-native.md +612 -0
- package/expertise/design/platforms/index.md +25 -0
- package/expertise/design/platforms/mobile-android.md +825 -0
- package/expertise/design/platforms/mobile-cross-platform.md +983 -0
- package/expertise/design/platforms/mobile-ios.md +699 -0
- package/expertise/design/platforms/tablet.md +794 -0
- package/expertise/design/platforms/web-dashboard.md +790 -0
- package/expertise/design/platforms/web-responsive.md +550 -0
- package/expertise/design/psychology/behavioral-nudges.md +449 -0
- package/expertise/design/psychology/cognitive-load.md +1191 -0
- package/expertise/design/psychology/error-psychology.md +778 -0
- package/expertise/design/psychology/index.md +22 -0
- package/expertise/design/psychology/persuasive-design.md +736 -0
- package/expertise/design/psychology/user-mental-models.md +623 -0
- package/expertise/design/tooling/open-pencil.md +266 -0
- package/expertise/frontend/angular.md +1073 -0
- package/expertise/frontend/desktop-electron.md +546 -0
- package/expertise/frontend/flutter.md +782 -0
- package/expertise/frontend/index.md +27 -0
- package/expertise/frontend/native-android.md +409 -0
- package/expertise/frontend/native-ios.md +490 -0
- package/expertise/frontend/react-native.md +1160 -0
- package/expertise/frontend/react.md +808 -0
- package/expertise/frontend/vue.md +1089 -0
- package/expertise/humanize/domain-rules-code.md +79 -0
- package/expertise/humanize/domain-rules-content.md +67 -0
- package/expertise/humanize/domain-rules-technical-docs.md +56 -0
- package/expertise/humanize/index.md +35 -0
- package/expertise/humanize/self-audit-checklist.md +87 -0
- package/expertise/humanize/sentence-patterns.md +218 -0
- package/expertise/humanize/vocabulary-blacklist.md +105 -0
- package/expertise/i18n/PROGRESS.md +65 -0
- package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
- package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
- package/expertise/i18n/advanced/complex-scripts.md +30 -0
- package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
- package/expertise/i18n/advanced/testing-i18n.md +28 -0
- package/expertise/i18n/content/content-adaptation.md +23 -0
- package/expertise/i18n/content/locale-specific-formatting.md +23 -0
- package/expertise/i18n/content/machine-translation-integration.md +28 -0
- package/expertise/i18n/content/translation-management.md +29 -0
- package/expertise/i18n/foundations/date-time-calendars.md +67 -0
- package/expertise/i18n/foundations/i18n-architecture.md +272 -0
- package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
- package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
- package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
- package/expertise/i18n/foundations/string-externalization.md +236 -0
- package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
- package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
- package/expertise/i18n/index.md +38 -0
- package/expertise/i18n/platform/backend-i18n.md +31 -0
- package/expertise/i18n/platform/flutter-i18n.md +148 -0
- package/expertise/i18n/platform/native-android-i18n.md +36 -0
- package/expertise/i18n/platform/native-ios-i18n.md +36 -0
- package/expertise/i18n/platform/react-i18n.md +103 -0
- package/expertise/i18n/platform/web-css-i18n.md +81 -0
- package/expertise/i18n/rtl/arabic-specific.md +175 -0
- package/expertise/i18n/rtl/hebrew-specific.md +149 -0
- package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
- package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
- package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
- package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
- package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
- package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
- package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
- package/expertise/i18n/rtl/rtl-typography.md +160 -0
- package/expertise/index.md +113 -0
- package/expertise/index.yaml +216 -0
- package/expertise/infrastructure/cloud-aws.md +597 -0
- package/expertise/infrastructure/cloud-gcp.md +599 -0
- package/expertise/infrastructure/cybersecurity.md +816 -0
- package/expertise/infrastructure/database-mongodb.md +447 -0
- package/expertise/infrastructure/database-postgres.md +400 -0
- package/expertise/infrastructure/devops-cicd.md +787 -0
- package/expertise/infrastructure/index.md +27 -0
- package/expertise/performance/PROGRESS.md +50 -0
- package/expertise/performance/backend/api-latency.md +1204 -0
- package/expertise/performance/backend/background-jobs.md +506 -0
- package/expertise/performance/backend/connection-pooling.md +1209 -0
- package/expertise/performance/backend/database-query-optimization.md +515 -0
- package/expertise/performance/backend/index.md +23 -0
- package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
- package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
- package/expertise/performance/foundations/caching-strategies.md +489 -0
- package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
- package/expertise/performance/foundations/index.md +24 -0
- package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
- package/expertise/performance/foundations/memory-management.md +964 -0
- package/expertise/performance/foundations/performance-budgets.md +1314 -0
- package/expertise/performance/index.md +31 -0
- package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
- package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
- package/expertise/performance/infrastructure/index.md +22 -0
- package/expertise/performance/infrastructure/load-balancing.md +1081 -0
- package/expertise/performance/infrastructure/observability.md +1079 -0
- package/expertise/performance/mobile/index.md +23 -0
- package/expertise/performance/mobile/mobile-animations.md +544 -0
- package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
- package/expertise/performance/mobile/mobile-network.md +452 -0
- package/expertise/performance/mobile/mobile-rendering.md +599 -0
- package/expertise/performance/mobile/mobile-startup-time.md +505 -0
- package/expertise/performance/platform-specific/flutter-performance.md +647 -0
- package/expertise/performance/platform-specific/index.md +22 -0
- package/expertise/performance/platform-specific/node-performance.md +1307 -0
- package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
- package/expertise/performance/platform-specific/react-performance.md +1403 -0
- package/expertise/performance/web/bundle-optimization.md +1239 -0
- package/expertise/performance/web/image-and-media.md +636 -0
- package/expertise/performance/web/index.md +24 -0
- package/expertise/performance/web/network-optimization.md +1133 -0
- package/expertise/performance/web/rendering-performance.md +1098 -0
- package/expertise/performance/web/ssr-and-hydration.md +918 -0
- package/expertise/performance/web/web-vitals.md +1374 -0
- package/expertise/quality/accessibility.md +985 -0
- package/expertise/quality/evidence-based-verification.md +499 -0
- package/expertise/quality/index.md +24 -0
- package/expertise/quality/ml-model-audit.md +614 -0
- package/expertise/quality/performance.md +600 -0
- package/expertise/quality/testing-api.md +891 -0
- package/expertise/quality/testing-mobile.md +496 -0
- package/expertise/quality/testing-web.md +849 -0
- package/expertise/security/PROGRESS.md +54 -0
- package/expertise/security/agentic-identity.md +540 -0
- package/expertise/security/compliance-frameworks.md +601 -0
- package/expertise/security/data/data-encryption.md +364 -0
- package/expertise/security/data/data-privacy-gdpr.md +692 -0
- package/expertise/security/data/database-security.md +1171 -0
- package/expertise/security/data/index.md +22 -0
- package/expertise/security/data/pii-handling.md +531 -0
- package/expertise/security/foundations/authentication.md +1041 -0
- package/expertise/security/foundations/authorization.md +603 -0
- package/expertise/security/foundations/cryptography.md +1001 -0
- package/expertise/security/foundations/index.md +25 -0
- package/expertise/security/foundations/owasp-top-10.md +1354 -0
- package/expertise/security/foundations/secrets-management.md +1217 -0
- package/expertise/security/foundations/secure-sdlc.md +700 -0
- package/expertise/security/foundations/supply-chain-security.md +698 -0
- package/expertise/security/index.md +31 -0
- package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
- package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
- package/expertise/security/infrastructure/container-security.md +721 -0
- package/expertise/security/infrastructure/incident-response.md +1295 -0
- package/expertise/security/infrastructure/index.md +24 -0
- package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
- package/expertise/security/infrastructure/network-security.md +1337 -0
- package/expertise/security/mobile/index.md +23 -0
- package/expertise/security/mobile/mobile-android-security.md +1218 -0
- package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
- package/expertise/security/mobile/mobile-data-storage.md +1265 -0
- package/expertise/security/mobile/mobile-ios-security.md +1401 -0
- package/expertise/security/mobile/mobile-network-security.md +1520 -0
- package/expertise/security/smart-contract-security.md +594 -0
- package/expertise/security/testing/index.md +22 -0
- package/expertise/security/testing/penetration-testing.md +1258 -0
- package/expertise/security/testing/security-code-review.md +1765 -0
- package/expertise/security/testing/threat-modeling.md +1074 -0
- package/expertise/security/testing/vulnerability-scanning.md +1062 -0
- package/expertise/security/web/api-security.md +586 -0
- package/expertise/security/web/cors-and-headers.md +433 -0
- package/expertise/security/web/csrf.md +562 -0
- package/expertise/security/web/file-upload.md +1477 -0
- package/expertise/security/web/index.md +25 -0
- package/expertise/security/web/injection.md +1375 -0
- package/expertise/security/web/session-management.md +1101 -0
- package/expertise/security/web/xss.md +1158 -0
- package/exports/README.md +17 -0
- package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
- package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
- package/exports/hosts/claude/.claude/agents/designer.md +55 -0
- package/exports/hosts/claude/.claude/agents/executor.md +55 -0
- package/exports/hosts/claude/.claude/agents/learner.md +51 -0
- package/exports/hosts/claude/.claude/agents/planner.md +53 -0
- package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
- package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
- package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
- package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
- package/exports/hosts/claude/.claude/commands/author.md +42 -0
- package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
- package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
- package/exports/hosts/claude/.claude/commands/design.md +44 -0
- package/exports/hosts/claude/.claude/commands/discover.md +37 -0
- package/exports/hosts/claude/.claude/commands/execute.md +48 -0
- package/exports/hosts/claude/.claude/commands/learn.md +38 -0
- package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
- package/exports/hosts/claude/.claude/commands/plan.md +39 -0
- package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
- package/exports/hosts/claude/.claude/commands/review.md +40 -0
- package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
- package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
- package/exports/hosts/claude/.claude/commands/specify.md +38 -0
- package/exports/hosts/claude/.claude/commands/verify.md +37 -0
- package/exports/hosts/claude/.claude/settings.json +34 -0
- package/exports/hosts/claude/CLAUDE.md +19 -0
- package/exports/hosts/claude/export.manifest.json +38 -0
- package/exports/hosts/claude/host-package.json +67 -0
- package/exports/hosts/codex/AGENTS.md +19 -0
- package/exports/hosts/codex/export.manifest.json +38 -0
- package/exports/hosts/codex/host-package.json +41 -0
- package/exports/hosts/cursor/.cursor/hooks.json +16 -0
- package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
- package/exports/hosts/cursor/export.manifest.json +38 -0
- package/exports/hosts/cursor/host-package.json +42 -0
- package/exports/hosts/gemini/GEMINI.md +19 -0
- package/exports/hosts/gemini/export.manifest.json +38 -0
- package/exports/hosts/gemini/host-package.json +41 -0
- package/hooks/README.md +18 -0
- package/hooks/definitions/loop_cap_guard.yaml +21 -0
- package/hooks/definitions/post_tool_capture.yaml +24 -0
- package/hooks/definitions/pre_compact_summary.yaml +19 -0
- package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
- package/hooks/definitions/protected_path_write_guard.yaml +19 -0
- package/hooks/definitions/session_start.yaml +19 -0
- package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
- package/hooks/loop-cap-guard +17 -0
- package/hooks/post-tool-lint +36 -0
- package/hooks/protected-path-write-guard +17 -0
- package/hooks/session-start +41 -0
- package/llms-full.txt +2355 -0
- package/llms.txt +43 -0
- package/package.json +79 -0
- package/roles/README.md +20 -0
- package/roles/clarifier.md +42 -0
- package/roles/content-author.md +63 -0
- package/roles/designer.md +55 -0
- package/roles/executor.md +55 -0
- package/roles/learner.md +51 -0
- package/roles/planner.md +53 -0
- package/roles/researcher.md +43 -0
- package/roles/reviewer.md +54 -0
- package/roles/specifier.md +47 -0
- package/roles/verifier.md +71 -0
- package/schemas/README.md +24 -0
- package/schemas/accepted-learning.schema.json +20 -0
- package/schemas/author-artifact.schema.json +156 -0
- package/schemas/clarification.schema.json +19 -0
- package/schemas/design-artifact.schema.json +80 -0
- package/schemas/docs-claim.schema.json +18 -0
- package/schemas/export-manifest.schema.json +20 -0
- package/schemas/hook.schema.json +67 -0
- package/schemas/host-export-package.schema.json +18 -0
- package/schemas/implementation-plan.schema.json +19 -0
- package/schemas/proposed-learning.schema.json +19 -0
- package/schemas/research.schema.json +18 -0
- package/schemas/review.schema.json +29 -0
- package/schemas/run-manifest.schema.json +18 -0
- package/schemas/spec-challenge.schema.json +18 -0
- package/schemas/spec.schema.json +20 -0
- package/schemas/usage.schema.json +102 -0
- package/schemas/verification-proof.schema.json +29 -0
- package/schemas/wazir-manifest.schema.json +173 -0
- package/skills/README.md +40 -0
- package/skills/brainstorming/SKILL.md +77 -0
- package/skills/debugging/SKILL.md +50 -0
- package/skills/design/SKILL.md +61 -0
- package/skills/dispatching-parallel-agents/SKILL.md +128 -0
- package/skills/executing-plans/SKILL.md +70 -0
- package/skills/finishing-a-development-branch/SKILL.md +169 -0
- package/skills/humanize/SKILL.md +123 -0
- package/skills/init-pipeline/SKILL.md +124 -0
- package/skills/prepare-next/SKILL.md +20 -0
- package/skills/receiving-code-review/SKILL.md +123 -0
- package/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/requesting-code-review/code-reviewer.md +108 -0
- package/skills/run-audit/SKILL.md +197 -0
- package/skills/scan-project/SKILL.md +41 -0
- package/skills/self-audit/SKILL.md +153 -0
- package/skills/subagent-driven-development/SKILL.md +154 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/skills/subagent-driven-development/implementer-prompt.md +102 -0
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/tdd/SKILL.md +23 -0
- package/skills/using-git-worktrees/SKILL.md +163 -0
- package/skills/using-skills/SKILL.md +95 -0
- package/skills/verification/SKILL.md +22 -0
- package/skills/wazir/SKILL.md +463 -0
- package/skills/writing-plans/SKILL.md +30 -0
- package/skills/writing-skills/SKILL.md +157 -0
- package/skills/writing-skills/anthropic-best-practices.md +122 -0
- package/skills/writing-skills/persuasion-principles.md +50 -0
- package/templates/README.md +20 -0
- package/templates/artifacts/README.md +10 -0
- package/templates/artifacts/accepted-learning.md +19 -0
- package/templates/artifacts/accepted-learning.template.json +12 -0
- package/templates/artifacts/author.md +74 -0
- package/templates/artifacts/author.template.json +19 -0
- package/templates/artifacts/clarification.md +21 -0
- package/templates/artifacts/clarification.template.json +12 -0
- package/templates/artifacts/execute-notes.md +19 -0
- package/templates/artifacts/implementation-plan.md +21 -0
- package/templates/artifacts/implementation-plan.template.json +11 -0
- package/templates/artifacts/learning-proposal.md +19 -0
- package/templates/artifacts/next-run-handoff.md +21 -0
- package/templates/artifacts/plan-review.md +19 -0
- package/templates/artifacts/proposed-learning.template.json +12 -0
- package/templates/artifacts/research.md +21 -0
- package/templates/artifacts/research.template.json +12 -0
- package/templates/artifacts/review-findings.md +19 -0
- package/templates/artifacts/review.template.json +11 -0
- package/templates/artifacts/run-manifest.template.json +8 -0
- package/templates/artifacts/spec-challenge.md +19 -0
- package/templates/artifacts/spec-challenge.template.json +11 -0
- package/templates/artifacts/spec.md +21 -0
- package/templates/artifacts/spec.template.json +12 -0
- package/templates/artifacts/verification-proof.md +19 -0
- package/templates/artifacts/verification-proof.template.json +11 -0
- package/templates/examples/accepted-learning.example.json +14 -0
- package/templates/examples/author.example.json +152 -0
- package/templates/examples/clarification.example.json +15 -0
- package/templates/examples/docs-claim.example.json +8 -0
- package/templates/examples/export-manifest.example.json +7 -0
- package/templates/examples/host-export-package.example.json +11 -0
- package/templates/examples/implementation-plan.example.json +17 -0
- package/templates/examples/proposed-learning.example.json +13 -0
- package/templates/examples/research.example.json +15 -0
- package/templates/examples/research.example.md +6 -0
- package/templates/examples/review.example.json +17 -0
- package/templates/examples/run-manifest.example.json +9 -0
- package/templates/examples/spec-challenge.example.json +14 -0
- package/templates/examples/spec.example.json +21 -0
- package/templates/examples/verification-proof.example.json +21 -0
- package/templates/examples/wazir-manifest.example.yaml +65 -0
- package/templates/task-definition-schema.md +99 -0
- package/tooling/README.md +20 -0
- package/tooling/src/adapters/context-mode.js +50 -0
- package/tooling/src/capture/command.js +376 -0
- package/tooling/src/capture/store.js +99 -0
- package/tooling/src/capture/usage.js +270 -0
- package/tooling/src/checks/branches.js +50 -0
- package/tooling/src/checks/brand-truth.js +110 -0
- package/tooling/src/checks/changelog.js +231 -0
- package/tooling/src/checks/command-registry.js +36 -0
- package/tooling/src/checks/commits.js +102 -0
- package/tooling/src/checks/docs-drift.js +103 -0
- package/tooling/src/checks/docs-truth.js +201 -0
- package/tooling/src/checks/runtime-surface.js +156 -0
- package/tooling/src/cli.js +116 -0
- package/tooling/src/command-options.js +56 -0
- package/tooling/src/commands/validate.js +320 -0
- package/tooling/src/doctor/command.js +91 -0
- package/tooling/src/export/command.js +77 -0
- package/tooling/src/export/compiler.js +498 -0
- package/tooling/src/guards/loop-cap-guard.js +52 -0
- package/tooling/src/guards/protected-path-write-guard.js +67 -0
- package/tooling/src/index/command.js +152 -0
- package/tooling/src/index/storage.js +1061 -0
- package/tooling/src/index/summarizers.js +261 -0
- package/tooling/src/loaders.js +18 -0
- package/tooling/src/project-root.js +22 -0
- package/tooling/src/recall/command.js +225 -0
- package/tooling/src/schema-validator.js +30 -0
- package/tooling/src/state-root.js +40 -0
- package/tooling/src/status/command.js +71 -0
- package/wazir.manifest.yaml +135 -0
- package/workflows/README.md +19 -0
- package/workflows/author.md +42 -0
- package/workflows/clarify.md +38 -0
- package/workflows/design-review.md +46 -0
- package/workflows/design.md +44 -0
- package/workflows/discover.md +37 -0
- package/workflows/execute.md +48 -0
- package/workflows/learn.md +38 -0
- package/workflows/plan-review.md +42 -0
- package/workflows/plan.md +39 -0
- package/workflows/prepare-next.md +37 -0
- package/workflows/review.md +40 -0
- package/workflows/run-audit.md +41 -0
- package/workflows/spec-challenge.md +41 -0
- package/workflows/specify.md +38 -0
- package/workflows/verify.md +37 -0
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
# Mobile Network -- Performance Expertise Module
|
|
2
|
+
|
|
3
|
+
> Mobile networks are unreliable, high-latency, and bandwidth-constrained compared to desktop. Median 4G latency is 30-70ms RTT; on 3G it is 100-500ms. Network transitions (WiFi to cellular) cause connection drops. Apps must be designed for variable network conditions, not just fast WiFi.
|
|
4
|
+
|
|
5
|
+
> **Impact:** High
|
|
6
|
+
> **Applies to:** Mobile (iOS, Android, Flutter, React Native)
|
|
7
|
+
> **Key metrics:** API response time on mobile networks, Data transferred (MB), Request count per session, Offline capability, Time to first meaningful data
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Why This Matters
|
|
12
|
+
|
|
13
|
+
### The Mobile Network Reality
|
|
14
|
+
|
|
15
|
+
Mobile networks are fundamentally different from wired connections. Engineers who optimize only on office WiFi ship apps that fail in the real world.
|
|
16
|
+
|
|
17
|
+
**Latency by network generation (typical RTT):**
|
|
18
|
+
|
|
19
|
+
| Network | Typical RTT | Theoretical Min | Peak Download |
|
|
20
|
+
|---------|-------------|-----------------|---------------|
|
|
21
|
+
| 2G EDGE | 300-1000ms | 100ms | 384 Kbps |
|
|
22
|
+
| 3G HSPA | 100-500ms | 88ms | 42 Mbps |
|
|
23
|
+
| 4G LTE | 30-70ms | 10-20ms | 300 Mbps |
|
|
24
|
+
| 5G low-band | 15-30ms | 5ms | 1 Gbps |
|
|
25
|
+
| 5G mid-band | 5-15ms | 1ms | 4 Gbps |
|
|
26
|
+
|
|
27
|
+
Source: mvno-index.com; Ericsson Mobility Report 2024; hpbn.co/mobile-networks/
|
|
28
|
+
|
|
29
|
+
A single API call on 3G with DNS + TLS handshake + request/response can take 800ms-2s. Packet loss on cellular is 1-5% (vs <0.1% wired), triggering TCP retransmission delays. Radio state transitions (idle to active) on LTE add 50-100ms; on 3G, 1-2 seconds. **53% of mobile users abandon apps taking >3 seconds to load** (Google/SOASTA). Every 1-second delay causes a 12% decrease in conversions.
|
|
30
|
+
|
|
31
|
+
Real-world median 4G speed in the US: ~30 Mbps (Opensignal 2024); India: ~15 Mbps. Users cycle through 5G/4G/3G/no-signal on trains. Indoor/congested environments reduce throughput by 10x.
|
|
32
|
+
|
|
33
|
+
### Data Costs in Emerging Markets
|
|
34
|
+
|
|
35
|
+
| Region | Avg cost/1GB | % monthly income for 1GB |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| India | $0.09 | <0.1% |
|
|
38
|
+
| Indonesia | $1.21 | ~0.5% |
|
|
39
|
+
| Sub-Saharan Africa | $2.40-$15.00 | 2.4%+ (above affordability) |
|
|
40
|
+
| Brazil | $1.50-$3.00 | ~0.5% |
|
|
41
|
+
|
|
42
|
+
Source: cable.co.uk 2024; GSMA Mobile Affordability Report 2024. A 5MB response that could be 500KB with compression is financially punishing in cost-sensitive markets.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Performance Budgets and Targets
|
|
47
|
+
|
|
48
|
+
| Condition | Target (P50) | Acceptable (P95) | Unacceptable |
|
|
49
|
+
|---|---|---|---|
|
|
50
|
+
| WiFi / 5G | <200ms | <500ms | >1s |
|
|
51
|
+
| 4G LTE | <500ms | <1.5s | >3s |
|
|
52
|
+
| 3G | <1.5s | <3s | >5s |
|
|
53
|
+
| 2G / Offline | Instant (cached) | <5s (sync) | No data shown |
|
|
54
|
+
|
|
55
|
+
**Data transfer budgets:** Initial load <200KB, per-screen payload <50KB, background sync <500KB/hr, images <100KB/screen, session total <5MB/10min.
|
|
56
|
+
|
|
57
|
+
**Request count limits:** <=3 per screen load, <=6 concurrent, <=2 background/min, polling >=30s interval (prefer push/SSE/WebSocket).
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Measurement and Profiling
|
|
62
|
+
|
|
63
|
+
**Charles Proxy** -- Intercepts HTTP/HTTPS traffic; built-in 3G/4G throttling presets; measures per-request latency and payload size; exports HAR files. **Network Link Conditioner (Apple)** -- System-level simulation with configurable bandwidth, latency, and packet loss. **Android Network Profiler** -- Real-time visualization of requests, sizes, response codes correlated with CPU/memory. **Chrome DevTools** -- Slow 3G (400ms RTT, 400 Kbps) / Fast 3G (150ms RTT, 1.5 Mbps) presets; waterfall charts. **Flipper (Meta)** -- Network plugin for iOS/Android/React Native with database inspector to verify caching. **Wireshark** -- Packet-level analysis for TCP/TLS issues, HTTP/2 multiplexing verification, retransmissions.
|
|
64
|
+
|
|
65
|
+
**Key measurements:** TTFB, total request duration, payload size (compressed vs uncompressed), request count per screen, waterfall dependencies (serial chains), error rate by network type, cache hit ratio.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Common Bottlenecks
|
|
70
|
+
|
|
71
|
+
1. **Too many serial requests** -- 5 serial requests on 3G (200ms RTT) = 1s of pure network wait
|
|
72
|
+
2. **Large JSON payloads** -- REST returning full objects wastes 40-60% bandwidth (Postman benchmarks)
|
|
73
|
+
3. **No response compression** -- Uncompressed JSON is 60-80% larger; gzip saves ~78%, Brotli ~82% (DebugBear)
|
|
74
|
+
4. **No HTTP caching headers** -- Without Cache-Control/ETag, identical data redownloaded every time; ETags reduce transfer by up to 70% for static resources (MDN)
|
|
75
|
+
5. **Chatty N+1 APIs** -- Feed screen: 1 request for IDs + N for details + N for avatars = 20+ requests
|
|
76
|
+
6. **Unoptimized images** -- 2000x2000 JPEG to 375px screen; WebP saves 25-34%, AVIF saves 50% (web.dev)
|
|
77
|
+
7. **No offline support** -- Blank screen in subway/elevator/rural areas
|
|
78
|
+
8. **DNS overhead** -- Each unique domain: 20-120ms lookup; 5 domains = 100-600ms
|
|
79
|
+
9. **TLS handshake cost** -- TLS 1.2: 2 RTTs; on 3G = 400ms. TLS 1.3: 1 RTT. HTTP/3 QUIC: 0-RTT on resume
|
|
80
|
+
10. **No connection pooling** -- New TCP per request adds 1-3 RTTs overhead
|
|
81
|
+
11. **Polling instead of push** -- 90%+ of polls return empty; wastes battery and bandwidth
|
|
82
|
+
12. **Ignoring network state** -- 10MB upload on 2G; HD downloads on metered connections
|
|
83
|
+
13. **Redundant requests on navigation** -- Back/forward reloads data fetched seconds ago
|
|
84
|
+
14. **Base64 blobs in JSON** -- 33% size inflation; cannot be streamed or cached independently
|
|
85
|
+
15. **Synchronous token refresh** -- Expired token blocks all requests, doubling latency
|
|
86
|
+
16. **Uncompressed request bodies** -- Large POST/PUT JSON sent without compression
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Optimization Patterns
|
|
91
|
+
|
|
92
|
+
**Request batching** -- Combine 5 calls into 1. Saves `(N-1) * RTT`: on 3G, 800ms for 5-to-1 batch.
|
|
93
|
+
|
|
94
|
+
**Prefetching** -- Fetch next-screen data during idle time. Reduces perceived latency 50-80% (Google research). Front-loads transfers into single burst at full radio capacity.
|
|
95
|
+
|
|
96
|
+
**Response compression** -- Brotli level 4-6 for dynamic content (~82% ratio). gzip as fallback (~78%). Reduces payloads 60-80%.
|
|
97
|
+
|
|
98
|
+
**HTTP caching** -- Immutable assets: `max-age=31536000, immutable`. Semi-static: `max-age=300` + ETag. Dynamic: `no-cache` + ETag (304 = ~200 bytes vs full payload).
|
|
99
|
+
|
|
100
|
+
**Offline-first** -- UI reads local DB (sub-ms). Background sync when online. App works everywhere. Requires conflict resolution (last-write-wins, CRDT, or server-authoritative).
|
|
101
|
+
|
|
102
|
+
**GraphQL / BFF** -- Client requests exact fields. Reduces payload 40-60% vs full REST objects. One request per screen instead of N generic endpoints.
|
|
103
|
+
|
|
104
|
+
**Protocol Buffers** -- 50-80% smaller than JSON, 2-10x faster parsing (Auth0: 45x serialization in Java). Best for real-time streams, chat, analytics.
|
|
105
|
+
|
|
106
|
+
**Image CDN** -- Device-aware sizing + WebP/AVIF. 95%+ browsers support WebP, 90%+ AVIF. Reduces image data 50-80%.
|
|
107
|
+
|
|
108
|
+
**HTTP/2 and HTTP/3** -- HTTP/2: multiplexing + HPACK header compression. HTTP/3 (QUIC): 0-RTT resume, connection migration (survives WiFi-to-cellular). Google: 14% faster for slowest 10%; Fastly/Wix: 18-33% TTFB improvement.
|
|
109
|
+
|
|
110
|
+
**Cursor pagination** -- Offset at page 1000 of 1M rows: ~500ms. Cursor at any position: ~2ms. Prevents gaps in dynamic feeds.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Anti-Patterns
|
|
115
|
+
|
|
116
|
+
1. **Polling every 5s** -- Keeps radio active, drains battery. Fix: WebSocket/SSE/push; if unavoidable, 30s+ intervals
|
|
117
|
+
2. **Full-size image downloads** -- 2MB photo for 150px thumbnail. Fix: CDN with `?w=300&format=webp`
|
|
118
|
+
3. **No HTTP/2+** -- HTTP/1.1: 6 connections, no header compression. Fix: HTTP/2 minimum; evaluate HTTP/3
|
|
119
|
+
4. **Ignoring network state** -- Fix: `ConnectivityManager` (Android) / `NWPathMonitor` (iOS); defer large uploads to WiFi
|
|
120
|
+
5. **No retry backoff** -- Immediate infinite retry hammers servers. Fix: exponential backoff with jitter (1s, 2s, 4s, 8s + random); max 3-5 retries
|
|
121
|
+
6. **Chatty micro-APIs without aggregation** -- 15 calls per screen. Fix: BFF layer aggregates server-side
|
|
122
|
+
7. **Individual analytics events** -- Every tap fires HTTP. Fix: batch 20 events or 30s, single compressed request
|
|
123
|
+
8. **No local cache layer** -- Every screen visit = full reload. Fix: stale-while-revalidate; show cached, refresh background
|
|
124
|
+
9. **Blocking UI on network** -- White screen/spinner 500ms-3s. Fix: skeleton screens, cached data, optimistic UI
|
|
125
|
+
10. **Base64 blobs in responses** -- 33% inflation. Fix: return URLs; client fetches/caches binary separately
|
|
126
|
+
11. **REST without field selection** -- 50 fields returned, 5 needed. Fix: `?fields=id,name,avatar` or GraphQL
|
|
127
|
+
12. **Many unique API domains** -- Each = DNS + TLS overhead. Fix: single API domain; connection prewarming
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Architecture-Level Decisions
|
|
132
|
+
|
|
133
|
+
### REST vs GraphQL for Mobile
|
|
134
|
+
|
|
135
|
+
| Factor | REST | GraphQL |
|
|
136
|
+
|---|---|---|
|
|
137
|
+
| Over-fetching | Common (full objects) | Eliminated (client selects) |
|
|
138
|
+
| Requests/screen | 3-15 typical | 1-2 typical |
|
|
139
|
+
| Caching | Easy (URL-based, CDN) | Complex (single endpoint) |
|
|
140
|
+
| Payload waste | 40-60% typical | Minimal |
|
|
141
|
+
| Recommendation | Use BFF to optimize | Strong fit for complex UIs |
|
|
142
|
+
|
|
143
|
+
### Offline-First Sync Strategies
|
|
144
|
+
|
|
145
|
+
| Strategy | Consistency | Complexity | Best For |
|
|
146
|
+
|---|---|---|---|
|
|
147
|
+
| Last-write-wins | Eventual | Low | Settings, preferences |
|
|
148
|
+
| Timestamp merge | Eventual | Medium | Notes, documents |
|
|
149
|
+
| CRDT | Strong eventual | High | Collaborative editing |
|
|
150
|
+
| Server-authoritative | Strong | Medium | Financial transactions |
|
|
151
|
+
|
|
152
|
+
Implementation: local DB (Room/CoreData/Isar) + sync engine + network monitor + retry queue with exponential backoff.
|
|
153
|
+
|
|
154
|
+
### Data Serialization
|
|
155
|
+
|
|
156
|
+
| Format | Size vs JSON | Parse Speed | Schema | Use Case |
|
|
157
|
+
|---|---|---|---|---|
|
|
158
|
+
| JSON | 1x | 1x | Optional | Most APIs (tooling, debugging) |
|
|
159
|
+
| Protobuf | 0.2-0.5x | 2-10x faster | Required | High-frequency endpoints |
|
|
160
|
+
| FlatBuffers | 0.3-0.6x | 10-100x faster | Required | Gaming, IoT (zero-copy) |
|
|
161
|
+
| MessagePack | 0.5-0.7x | 1.5-3x faster | Optional | Drop-in JSON replacement |
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Testing and Regression Prevention
|
|
166
|
+
|
|
167
|
+
**Network simulation in CI** -- Use `toxiproxy` or `comcast` to inject 3G conditions (200ms RTT, 1.5 Mbps, 1% loss). Fail builds exceeding latency budgets.
|
|
168
|
+
|
|
169
|
+
**Payload size monitoring:**
|
|
170
|
+
```bash
|
|
171
|
+
for endpoint in /api/feed /api/profile /api/settings; do
|
|
172
|
+
size=$(curl -s -o /dev/null -w '%{size_download}' \
|
|
173
|
+
-H "Accept-Encoding: gzip" "https://api.example.com$endpoint")
|
|
174
|
+
[ "$size" -gt 51200 ] && echo "FAIL: $endpoint = ${size}B (limit: 50KB)" && exit 1
|
|
175
|
+
done
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Request count assertions** -- In E2E tests, assert requests per flow. A 3-request screen must not silently become 12.
|
|
179
|
+
|
|
180
|
+
**Offline smoke tests** -- Run critical flows with network disabled. Verify cached data, queued mutations, no crashes.
|
|
181
|
+
|
|
182
|
+
| Regression Metric | Alert Threshold | Tool |
|
|
183
|
+
|---|---|---|
|
|
184
|
+
| P95 API latency (4G sim) | >1.5s | CI + toxiproxy |
|
|
185
|
+
| Compressed payload size | >50KB/response | CI curl check |
|
|
186
|
+
| Requests per screen | >5 | E2E assertion |
|
|
187
|
+
| Offline flow completion | <100% | E2E (airplane mode) |
|
|
188
|
+
| Cache hit ratio | <60% | Analytics dashboard |
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Decision Trees
|
|
193
|
+
|
|
194
|
+
### "My App is Slow on Mobile Networks"
|
|
195
|
+
|
|
196
|
+
```
|
|
197
|
+
START: Profile with Charles Proxy on simulated 3G
|
|
198
|
+
|
|
|
199
|
+
+-> >5 requests/screen? --> Batch requests, use BFF/GraphQL (target <=3)
|
|
200
|
+
+-> Payloads >50KB compressed? --> Enable Brotli/gzip, add field selection
|
|
201
|
+
+-> Serial request waterfall? --> Parallelize, prefetch, use HTTP/2 multiplexing
|
|
202
|
+
+-> Same data fetched repeatedly? --> Add Cache-Control + ETag, stale-while-revalidate
|
|
203
|
+
+-> Images large/unoptimized? --> Image CDN + device sizing + WebP/AVIF + lazy load
|
|
204
|
+
+-> High TTFB, not bandwidth? --> Check server time, add CDN/edge, HTTP/3, prewarm
|
|
205
|
+
+-> Fails on network transitions? --> Offline-first, retry queue, HTTP/3 connection migration
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### "My App Uses Too Much Data"
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
Images optimized? --> No: WebP/AVIF at device resolution (saves 50-80%)
|
|
212
|
+
Compression enabled? --> No: Brotli/gzip (saves 60-80% on text)
|
|
213
|
+
Over-fetching? --> Yes: Field selection / GraphQL (saves 40-60%)
|
|
214
|
+
Caching working? --> No: Cache-Control + ETag (304 saves 90%+)
|
|
215
|
+
Frequent polling? --> Yes: Push/WebSocket; min 60s interval
|
|
216
|
+
Analytics batched? --> No: Batch 20 events, compress, send every 30-60s
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Code Examples
|
|
222
|
+
|
|
223
|
+
### 1. Request Batching (Before/After)
|
|
224
|
+
|
|
225
|
+
```typescript
|
|
226
|
+
// BEFORE: 5 serial requests = 5 * RTT. On 3G: 1000ms network wait.
|
|
227
|
+
async function loadDashboard() {
|
|
228
|
+
const user = await fetch('/api/user/123');
|
|
229
|
+
const posts = await fetch('/api/user/123/posts');
|
|
230
|
+
const notifications = await fetch('/api/notifications');
|
|
231
|
+
const settings = await fetch('/api/settings');
|
|
232
|
+
const trending = await fetch('/api/trending');
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// AFTER: 1 batch request = 1 * RTT. On 3G: 200ms. 80% savings.
|
|
236
|
+
async function loadDashboard() {
|
|
237
|
+
const { user, posts, notifications, settings, trending } = await fetch('/api/batch', {
|
|
238
|
+
method: 'POST',
|
|
239
|
+
body: JSON.stringify({ requests: [
|
|
240
|
+
{ id: 'user', path: '/api/user/123', fields: ['name', 'avatar'] },
|
|
241
|
+
{ id: 'posts', path: '/api/user/123/posts', params: { limit: 10 } },
|
|
242
|
+
{ id: 'notifications', path: '/api/notifications', params: { unread: true } },
|
|
243
|
+
{ id: 'settings', path: '/api/settings' },
|
|
244
|
+
{ id: 'trending', path: '/api/trending', params: { limit: 5 } },
|
|
245
|
+
]})
|
|
246
|
+
}).then(r => r.json());
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### 2. ETag-Based Caching
|
|
251
|
+
|
|
252
|
+
```kotlin
|
|
253
|
+
// BEFORE: Always downloads full 15KB response
|
|
254
|
+
suspend fun getProfile(id: String) = httpClient.get("/users/$id").body<Profile>()
|
|
255
|
+
|
|
256
|
+
// AFTER: 304 Not Modified = ~200 bytes (98.7% savings when unchanged)
|
|
257
|
+
suspend fun getProfile(id: String): Profile {
|
|
258
|
+
val cached = cache.get("user_$id")
|
|
259
|
+
val response = httpClient.get("/users/$id") {
|
|
260
|
+
cached?.etag?.let { header("If-None-Match", it) }
|
|
261
|
+
}
|
|
262
|
+
return when (response.status) {
|
|
263
|
+
HttpStatusCode.NotModified -> cached!!.data
|
|
264
|
+
HttpStatusCode.OK -> response.body<Profile>().also {
|
|
265
|
+
cache.put("user_$id", CacheEntry(it, response.headers["ETag"]))
|
|
266
|
+
}
|
|
267
|
+
else -> throw ApiException(response.status)
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### 3. Offline-First Data Layer
|
|
273
|
+
|
|
274
|
+
```dart
|
|
275
|
+
// BEFORE: Blank screen offline. Fails in subway/elevator.
|
|
276
|
+
Future<List<Post>> getPosts() async {
|
|
277
|
+
final response = await api.get('/posts'); // Fails offline
|
|
278
|
+
return response.data.map((j) => Post.fromJson(j)).toList();
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// AFTER: Always shows data. Syncs when online.
|
|
282
|
+
Stream<List<Post>> watchPosts() async* {
|
|
283
|
+
yield await localDb.getAllPosts(); // Instant from cache
|
|
284
|
+
if (await connectivity.isConnected) {
|
|
285
|
+
try {
|
|
286
|
+
final fresh = await api.get('/posts');
|
|
287
|
+
await localDb.upsertAll(fresh.data.map(Post.fromJson).toList());
|
|
288
|
+
yield await localDb.getAllPosts(); // Updated data
|
|
289
|
+
} catch (e) { logError('Sync failed', e); } // Cached data still shown
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### 4. Server Compression (nginx)
|
|
295
|
+
|
|
296
|
+
```nginx
|
|
297
|
+
# BEFORE: 100KB JSON = 100KB transferred
|
|
298
|
+
# AFTER: 100KB JSON = ~20KB (Brotli) or ~25KB (gzip)
|
|
299
|
+
brotli on;
|
|
300
|
+
brotli_comp_level 5;
|
|
301
|
+
brotli_types application/json text/plain text/css application/javascript;
|
|
302
|
+
gzip on;
|
|
303
|
+
gzip_comp_level 6;
|
|
304
|
+
gzip_types application/json text/plain text/css application/javascript;
|
|
305
|
+
gzip_min_length 256;
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### 5. Adaptive Image Loading
|
|
309
|
+
|
|
310
|
+
```swift
|
|
311
|
+
// BEFORE: 2000x2000 JPEG = 2MB for 150pt avatar
|
|
312
|
+
AsyncImage(url: URL(string: url))
|
|
313
|
+
|
|
314
|
+
// AFTER: 450x450 WebP = ~15KB (99.3% savings)
|
|
315
|
+
let px = Int(150 * UIScreen.main.scale)
|
|
316
|
+
let optimized = "\(url)?w=\(px)&h=\(px)&format=webp&q=80"
|
|
317
|
+
AsyncImage(url: URL(string: optimized)) { $0.resizable().scaledToFill() }
|
|
318
|
+
placeholder: { Circle().fill(Color.gray.opacity(0.3)) }
|
|
319
|
+
.frame(width: 150, height: 150).clipShape(Circle())
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### 6. Network-Aware Behavior
|
|
323
|
+
|
|
324
|
+
```kotlin
|
|
325
|
+
// BEFORE: Uploads 10MB on 2G. Always requests HD images.
|
|
326
|
+
// AFTER: Adapts to connection type and quality.
|
|
327
|
+
fun uploadMedia(file: File) = when {
|
|
328
|
+
networkMonitor.isWifi -> api.upload("/media", file)
|
|
329
|
+
file.length() > 5_000_000 -> {
|
|
330
|
+
uploadQueue.enqueueForWifi(file)
|
|
331
|
+
showToast("Will upload on WiFi")
|
|
332
|
+
}
|
|
333
|
+
else -> api.upload("/media", compressVideo(file, quality = 0.6))
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
fun loadFeed() = api.getStream("/feed?image_quality=${when (networkMonitor.bandwidth) {
|
|
337
|
+
in 0..500 -> "low" // 2G: thumbnails only
|
|
338
|
+
in 500..5000 -> "medium" // 3G/4G
|
|
339
|
+
else -> "high" // WiFi/5G
|
|
340
|
+
}}")
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
### 7. GraphQL vs REST Over-Fetching
|
|
344
|
+
|
|
345
|
+
```graphql
|
|
346
|
+
# REST GET /api/users/123 returns 50 fields (2.1KB). Mobile card needs 2.
|
|
347
|
+
# GraphQL returns exact fields (120 bytes). 94% smaller.
|
|
348
|
+
query UserCard($id: ID!) {
|
|
349
|
+
user(id: $id) { name, avatarUrl }
|
|
350
|
+
}
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### 8. Exponential Backoff with Jitter
|
|
354
|
+
|
|
355
|
+
```javascript
|
|
356
|
+
// BEFORE: while(true) { try { return await fetch(url); } catch(e) {} } // infinite hammer
|
|
357
|
+
// AFTER: Backs off exponentially. Jitter prevents thundering herd.
|
|
358
|
+
async function fetchWithBackoff(url, { maxRetries = 4, baseDelay = 1000 } = {}) {
|
|
359
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
360
|
+
try {
|
|
361
|
+
const res = await fetch(url);
|
|
362
|
+
if (res.ok) return res;
|
|
363
|
+
if (res.status < 500) throw new Error(`Client error: ${res.status}`);
|
|
364
|
+
} catch (e) {
|
|
365
|
+
if (attempt === maxRetries) throw e;
|
|
366
|
+
}
|
|
367
|
+
// 1-2s, 2-4s, 4-8s, 8-16s
|
|
368
|
+
await new Promise(r => setTimeout(r,
|
|
369
|
+
Math.min(baseDelay * 2 ** attempt + Math.random() * baseDelay, 30000)));
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### 9. Connection Prewarming
|
|
375
|
+
|
|
376
|
+
```swift
|
|
377
|
+
// Prewarm during splash screen: saves ~180ms (DNS+TCP+TLS) on first real request
|
|
378
|
+
func onAppLaunch() {
|
|
379
|
+
showSplashScreen()
|
|
380
|
+
let task = URLSession.shared.dataTask(with: URL(string: "https://api.example.com/healthz")!)
|
|
381
|
+
task.priority = URLSessionTask.highPriority
|
|
382
|
+
task.resume() // By splash end (~500ms), connection is warm
|
|
383
|
+
}
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## Quick Reference
|
|
389
|
+
|
|
390
|
+
### Optimization Checklist
|
|
391
|
+
|
|
392
|
+
| Action | Impact | Effort |
|
|
393
|
+
|---|---|---|
|
|
394
|
+
| Enable Brotli/gzip on all responses | 60-80% less data | Low |
|
|
395
|
+
| Add Cache-Control + ETag | 70% fewer full downloads | Low |
|
|
396
|
+
| Batch multi-request screens into 1 call | 80% less latency | Medium |
|
|
397
|
+
| Return only needed fields | 40-60% smaller payloads | Medium |
|
|
398
|
+
| Image CDN + device sizing + WebP | 50-80% less image data | Medium |
|
|
399
|
+
| Enable HTTP/2; evaluate HTTP/3 | 15-33% faster TTFB | Low |
|
|
400
|
+
| Offline-first local DB + sync | 0ms perceived latency | High |
|
|
401
|
+
| Cursor pagination over offset | Consistent 2ms queries | Medium |
|
|
402
|
+
| Protobuf for high-frequency APIs | 50-80% smaller, 2-10x parse | High |
|
|
403
|
+
| Prefetch next-screen data | 50-80% less perceived wait | Medium |
|
|
404
|
+
| Exponential backoff + jitter | Prevents cascading failures | Low |
|
|
405
|
+
| Adapt behavior to network type | Better UX on slow networks | Medium |
|
|
406
|
+
|
|
407
|
+
### Latency Budget (4G P50, target 500ms)
|
|
408
|
+
|
|
409
|
+
```
|
|
410
|
+
DNS: 20ms (prewarmed: 0) | TCP: 30ms (reuse: 0) | TLS: 60ms (1.3/QUIC: 0 resume)
|
|
411
|
+
Request upload: 10ms | Server: 200ms | Response download: 80ms | Parse: 20ms | Render: 80ms
|
|
412
|
+
First request: ~500ms | Warm request: ~310ms
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
### Protocol Comparison
|
|
416
|
+
|
|
417
|
+
| Protocol | Handshake RTTs | HoL Blocking | Connection Migration | Header Compression |
|
|
418
|
+
|---|---|---|---|---|
|
|
419
|
+
| HTTP/1.1 | 3 | Yes | No | None |
|
|
420
|
+
| HTTP/2 | 3 | Partial | No | HPACK |
|
|
421
|
+
| HTTP/3 | 1-2 | No | Yes (CID) | QPACK |
|
|
422
|
+
|
|
423
|
+
### Compression Comparison
|
|
424
|
+
|
|
425
|
+
| Format | Ratio | Compress Speed | Decompress | Support |
|
|
426
|
+
|---|---|---|---|---|
|
|
427
|
+
| gzip | ~78% | Fast | Fast | 100% |
|
|
428
|
+
| Brotli | ~82% | Slow-Medium | Fast | 97%+ |
|
|
429
|
+
| zstd | ~80% | Fast | Very fast | Growing |
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
## Sources
|
|
434
|
+
|
|
435
|
+
- [Android Developers: Optimize Network Access](https://developer.android.com/develop/connectivity/network-ops/network-access-optimization)
|
|
436
|
+
- [High Performance Browser Networking: Mobile Networks](https://hpbn.co/mobile-networks/)
|
|
437
|
+
- [Ericsson Mobility Report](https://www.ericsson.com/en/reports-and-papers/mobility-report/articles/network-optimization-through-analytics)
|
|
438
|
+
- [MVNO Index: Mobile Network Latency](https://mvno-index.com/the-latency-of-the-different-mobile-networks/)
|
|
439
|
+
- [Auth0: Beating JSON with Protobuf](https://auth0.com/blog/beating-json-performance-with-protobuf/)
|
|
440
|
+
- [Protobuf vs JSON Sizes](https://nilsmagnus.github.io/post/proto-json-sizes/)
|
|
441
|
+
- [MDN: HTTP Caching](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Caching)
|
|
442
|
+
- [DebugBear: Brotli vs GZIP](https://www.debugbear.com/blog/http-compression-gzip-brotli)
|
|
443
|
+
- [DebugBear: HTTP/3 vs HTTP/2](https://www.debugbear.com/blog/http3-vs-http2-performance)
|
|
444
|
+
- [Cloudflare: HTTP/2 vs HTTP/1.1](https://www.cloudflare.com/learning/performance/http2-vs-http1.1/)
|
|
445
|
+
- [Postman: GraphQL vs REST](https://blog.postman.com/graphql-vs-rest/)
|
|
446
|
+
- [web.dev: Image Performance](https://web.dev/learn/performance/image-performance)
|
|
447
|
+
- [Google: 53% Abandon >3s](https://www.marketingdive.com/news/google-53-of-mobile-users-abandon-sites-that-take-over-3-seconds-to-load/426070/)
|
|
448
|
+
- [GSMA Mobile Affordability 2024](https://telecomlead.com/4g-lte/mobile-data-becomes-more-affordable-in-2024-but-gender-and-income-gaps-persist-gsma-report-123070)
|
|
449
|
+
- [droidcon: Offline-First Android](https://www.droidcon.com/2025/12/16/the-complete-guide-to-offline-first-architecture-in-android/)
|
|
450
|
+
- [Medium: QUIC + HTTP/3 Latency](https://medium.com/@ThinkingLoop/quic-http-3-the-latency-stack-your-api-deserves-7138bdb2fdd9)
|
|
451
|
+
- [Cursor vs Offset Pagination](https://www.milanjovanovic.tech/blog/understanding-cursor-pagination-and-why-its-so-fast-deep-dive)
|
|
452
|
+
- [Predictive API Prefetching](https://medium.com/@meherun.nesa/predictive-api-caching-and-prefetching-2f6e1d17bb96)
|