@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,705 @@
|
|
|
1
|
+
# Notification Patterns — Design Expertise Module
|
|
2
|
+
|
|
3
|
+
> **Module type:** Pattern
|
|
4
|
+
> **Last updated:** 2026-03-07
|
|
5
|
+
> **Sources:** Apple HIG, Material Design 3, Nielsen Norman Group, WCAG 2.2, Carbon Design System
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Quick Reference Checklist
|
|
10
|
+
|
|
11
|
+
- [ ] Every notification has a clear source (app/feature/sender)
|
|
12
|
+
- [ ] Urgency levels classified (critical, important, informational)
|
|
13
|
+
- [ ] Users control preferences per channel and type
|
|
14
|
+
- [ ] Push permission requested only after demonstrated value
|
|
15
|
+
- [ ] Toasts auto-dismiss for informational; persist for actionable
|
|
16
|
+
- [ ] All notifications deep-link to relevant content
|
|
17
|
+
- [ ] Badge counts are accurate and update in real time
|
|
18
|
+
- [ ] Grouped notifications expand to show individual items
|
|
19
|
+
- [ ] Notification center includes mark-all-read and bulk actions
|
|
20
|
+
- [ ] Screen readers announce status messages via aria-live regions
|
|
21
|
+
- [ ] Notification sounds have visual/haptic alternatives
|
|
22
|
+
- [ ] Cross-platform behavior is consistent but platform-adapted
|
|
23
|
+
- [ ] Batching strategy prevents notification fatigue
|
|
24
|
+
- [ ] Expired notifications are pruned automatically
|
|
25
|
+
- [ ] Offline notifications queued and delivered on reconnection
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 1. Pattern Anatomy
|
|
30
|
+
|
|
31
|
+
### 1.1 Delivery Channels
|
|
32
|
+
|
|
33
|
+
#### Push Notifications (Mobile)
|
|
34
|
+
|
|
35
|
+
Remote messages delivered via APNs (Apple Push Notification service) or FCM
|
|
36
|
+
(Firebase Cloud Messaging) to the device's system notification tray.
|
|
37
|
+
|
|
38
|
+
**Anatomy:**
|
|
39
|
+
- App icon — identifies the source application
|
|
40
|
+
- Title — bold, concise headline (40-50 characters max)
|
|
41
|
+
- Body text — supporting detail (90-120 characters visible before truncation)
|
|
42
|
+
- Timestamp — relative ("2m ago") or absolute ("3:42 PM")
|
|
43
|
+
- Media attachment — optional image, video thumbnail, or map preview
|
|
44
|
+
- Action buttons — up to 4 quick actions (iOS) or 3 (Android)
|
|
45
|
+
- Collapse key / thread ID — groups related notifications
|
|
46
|
+
|
|
47
|
+
**Key constraints:** Users must explicitly opt in. Delivery is best-effort, not
|
|
48
|
+
guaranteed. Background processing limits affect timing on iOS. Android notification
|
|
49
|
+
channels (API 26+) give users per-channel control over behavior.
|
|
50
|
+
|
|
51
|
+
#### In-App Notifications (Bell Icon / Notification Center)
|
|
52
|
+
|
|
53
|
+
Persistent in-app inbox accessed via a bell icon in the top navigation bar.
|
|
54
|
+
|
|
55
|
+
**Anatomy:**
|
|
56
|
+
- Bell icon — entry point; displays badge indicator (dot or count)
|
|
57
|
+
- Notification list — reverse-chronological feed
|
|
58
|
+
- Read/unread state — visual differentiation (bold text, background color)
|
|
59
|
+
- Notification item — avatar/icon + title + description + timestamp + action
|
|
60
|
+
- Filter tabs — segment by type (mentions, updates, assignments)
|
|
61
|
+
- Bulk actions — mark all read, clear all, settings link
|
|
62
|
+
- Empty state — friendly message when no notifications exist
|
|
63
|
+
|
|
64
|
+
**Interaction model:** Click bell to open dropdown/panel/drawer. Click individual
|
|
65
|
+
notification to deep-link to source. Hover to reveal secondary actions (dismiss,
|
|
66
|
+
snooze, mute). Scroll to load older notifications.
|
|
67
|
+
|
|
68
|
+
#### Toast / Snackbar
|
|
69
|
+
|
|
70
|
+
Transient, non-modal messages that appear briefly to confirm an action or
|
|
71
|
+
relay status information.
|
|
72
|
+
|
|
73
|
+
**Anatomy:**
|
|
74
|
+
- Container — compact bar, typically 48-64px height
|
|
75
|
+
- Status icon — success/checkmark, error/X, warning/triangle, info/i
|
|
76
|
+
- Message text — single line, concise (under 60 characters)
|
|
77
|
+
- Action button — optional single action ("Undo", "View", "Retry")
|
|
78
|
+
- Dismiss control — close button or auto-dismiss timer
|
|
79
|
+
|
|
80
|
+
**Placement conventions:**
|
|
81
|
+
- Material Design 3: bottom-center, above FAB if present
|
|
82
|
+
- Apple HIG: top-center (macOS) or system banner position (iOS)
|
|
83
|
+
- Web convention: top-right corner is most common
|
|
84
|
+
- Stacking: multiple toasts stack vertically with 8px spacing
|
|
85
|
+
|
|
86
|
+
**Timing guidelines (per MD3 and accessibility research):**
|
|
87
|
+
- Minimum display: 4-5 seconds (WCAG accessibility minimum)
|
|
88
|
+
- Default display: 5-8 seconds for informational
|
|
89
|
+
- Extended display: 10+ seconds or persistent for actionable toasts
|
|
90
|
+
- Auto-pause timer on hover/focus (accessibility requirement)
|
|
91
|
+
|
|
92
|
+
#### Email Notifications
|
|
93
|
+
|
|
94
|
+
Updates delivered to the user's email inbox, extending the notification system
|
|
95
|
+
beyond the app boundary.
|
|
96
|
+
|
|
97
|
+
**Best practices:**
|
|
98
|
+
- One-click unsubscribe (CAN-SPAM / GDPR requirement)
|
|
99
|
+
- Clear sender identification (app name, not "noreply")
|
|
100
|
+
- Deep-link back to the specific content in the app
|
|
101
|
+
- Batch digest emails (daily/weekly) for non-urgent updates
|
|
102
|
+
- Respect user email frequency preferences
|
|
103
|
+
- Subject lines under 50 characters for mobile preview
|
|
104
|
+
|
|
105
|
+
#### Badges (Dot and Count)
|
|
106
|
+
|
|
107
|
+
Small visual indicators overlaid on icons, tabs, or list items to signal
|
|
108
|
+
unread content or pending actions.
|
|
109
|
+
|
|
110
|
+
**Variants:**
|
|
111
|
+
- Dot badge — binary indicator (has/has-not unread); 6-10px diameter
|
|
112
|
+
- Count badge — numeric with "99+" max; 16dp minimum height (MD3)
|
|
113
|
+
- Icon badge — small icon overlay (e.g., alert triangle on settings icon)
|
|
114
|
+
|
|
115
|
+
**Placement:** Top-right corner of parent element, offset by ~25-50% of badge
|
|
116
|
+
diameter. Error color (red) for urgent, primary color for standard. Never
|
|
117
|
+
obscure the parent icon's core meaning.
|
|
118
|
+
|
|
119
|
+
#### Banners
|
|
120
|
+
|
|
121
|
+
Persistent, full-width messages at the top of a screen for system-wide
|
|
122
|
+
announcements or required actions. Remain visible until the user acts or
|
|
123
|
+
dismisses. Not appropriate for transient feedback (use toasts instead).
|
|
124
|
+
|
|
125
|
+
**Urgency mapping:**
|
|
126
|
+
- Critical (error): red/destructive color, blocking action required
|
|
127
|
+
- Warning: yellow/amber, attention needed but not blocking
|
|
128
|
+
- Informational: blue/neutral, contextual awareness
|
|
129
|
+
- Success: green, confirms completion of a significant action
|
|
130
|
+
|
|
131
|
+
#### Notification Preferences / Settings
|
|
132
|
+
|
|
133
|
+
Granular user controls that determine what, how, and when notifications arrive.
|
|
134
|
+
|
|
135
|
+
**Essential preference categories:**
|
|
136
|
+
- By channel: push, email, in-app, SMS (toggle each independently)
|
|
137
|
+
- By type: mentions, replies, assignments, updates, marketing
|
|
138
|
+
- By urgency: critical only, important + critical, all
|
|
139
|
+
- By schedule: quiet hours, notification summary times
|
|
140
|
+
- By source: per-project, per-channel, per-person muting
|
|
141
|
+
- By frequency: immediate, batched (hourly/daily), digest only
|
|
142
|
+
|
|
143
|
+
### 1.2 Urgency Levels
|
|
144
|
+
|
|
145
|
+
| Level | Delivery | Visual | Sound | DND | Examples |
|
|
146
|
+
|-------|----------|--------|-------|-----|----------|
|
|
147
|
+
| **Critical** | Push + in-app + email | Red/destructive, persistent | Alert + haptic | Bypasses | Security breach, payment failure |
|
|
148
|
+
| **Important** | Push + in-app | Accent color, badge count | Standard | Respects | DMs, @mentions, assignments |
|
|
149
|
+
| **Informational** | In-app only | Neutral, dot badge | None | Respects | Status updates, activity feed |
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 2. Best-in-Class Examples
|
|
154
|
+
|
|
155
|
+
### 2.1 Slack
|
|
156
|
+
- **Granular preferences:** Per-channel overrides (all messages, mentions only, nothing), keyword-based alerts
|
|
157
|
+
- **Badge differentiation:** Red dot for general unread; numeric badge for DMs/mentions — two-tier hierarchy reducing anxiety while maintaining awareness
|
|
158
|
+
- **DND/snooze:** Bell icon snooze with preset durations, clearly communicated to teammates
|
|
159
|
+
- **Cross-platform sync:** Read state syncs across desktop, mobile, web; reading on one device clears others
|
|
160
|
+
|
|
161
|
+
### 2.2 Linear
|
|
162
|
+
- **Inbox-first approach:** Dedicated inbox view with clean design emphasizing teammate avatars and action descriptions
|
|
163
|
+
- **Subscription model:** Only subscribed issues/projects/teams generate notifications
|
|
164
|
+
- **Keyboard triage:** `e` to archive, `Enter` to open, shift for bulk select — power-user efficiency
|
|
165
|
+
- **Contextual grouping:** Same-issue notifications grouped with latest update + related count
|
|
166
|
+
|
|
167
|
+
### 2.3 GitHub
|
|
168
|
+
- **Filter queries:** Custom filters (e.g., `repo:org/repo reason:review-requested`) for precise triage
|
|
169
|
+
- **Reason metadata:** Each notification tagged with why you received it (assigned, review-requested, mentioned, subscribed) — reduces "why am I seeing this?" friction
|
|
170
|
+
- **Triage actions:** Mark as done, save for later, unsubscribe from thread
|
|
171
|
+
- **Watching granularity:** Per-repo watch levels (participating, all activity, ignore, custom)
|
|
172
|
+
|
|
173
|
+
### 2.4 Discord
|
|
174
|
+
- **Cascading hierarchy:** Server > category > channel notification settings, each overridable — most granular consumer notification system
|
|
175
|
+
- **Mention controls:** Separate toggles for @everyone, @here, @role, and @user mentions
|
|
176
|
+
- **Visual badge tiers:** White dot for unread, red badge with count for mentions; muted channels show nothing
|
|
177
|
+
|
|
178
|
+
### 2.5 Notion
|
|
179
|
+
- **Cross-device escalation:** Desktop notification fires after 10s; mobile push fires only if desktop unacknowledged for 5 minutes — prevents duplicate interruptions
|
|
180
|
+
- **Follow model:** Users "follow" pages to receive updates; unfollowing stops notifications without affecting visibility
|
|
181
|
+
- **Inline context:** Notification shows the specific changed block, not just "page updated"
|
|
182
|
+
|
|
183
|
+
### 2.6 iOS System Notifications
|
|
184
|
+
- **Notification Summary:** On-device ML sorts batched notifications by relevance at user-scheduled times
|
|
185
|
+
- **Focus modes:** Activity-based filtering (Work, Personal, Sleep, custom) with per-mode allowed apps/people
|
|
186
|
+
- **Four interruption levels:** passive, active, timeSensitive, critical — gold standard for urgency classification
|
|
187
|
+
- **Live Activities:** Real-time glanceable updates on lock screen for ongoing events
|
|
188
|
+
|
|
189
|
+
### 2.7 Gmail
|
|
190
|
+
- **Priority inbox:** ML separates important from unimportant; only important emails trigger push
|
|
191
|
+
- **Category bundling:** Marketing, social, promotional emails auto-categorized, suppressing notifications
|
|
192
|
+
- **Snooze:** Snooze to reappear at a chosen time — well-understood deferred-action pattern
|
|
193
|
+
|
|
194
|
+
### 2.8 Figma
|
|
195
|
+
- **Contextual in-app notifications:** Bell icon notifications for comments, file shares, and project updates with direct navigation to the exact comment location on canvas
|
|
196
|
+
- **Email digest control:** Separate toggles for immediate email vs. daily digest for different notification types
|
|
197
|
+
- **@-mention precision:** Notifications trigger only for direct @-mentions in comments, reducing noise from general file activity
|
|
198
|
+
- **Resolved state:** Comment thread resolution clears related notifications, keeping the inbox relevant
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## 3. User Flow Mapping
|
|
203
|
+
|
|
204
|
+
### 3.1 Core Delivery Flow
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
Event occurs (server-side)
|
|
208
|
+
|
|
|
209
|
+
v
|
|
210
|
+
Classify urgency (critical / important / informational)
|
|
211
|
+
|
|
|
212
|
+
v
|
|
213
|
+
Check user preferences
|
|
214
|
+
|--- Channel allowed? (push / email / in-app / SMS)
|
|
215
|
+
|--- Type enabled? (mentions / updates / marketing)
|
|
216
|
+
|--- Schedule permits? (outside quiet hours?)
|
|
217
|
+
|--- Frequency cap reached? (max N per hour?)
|
|
218
|
+
|
|
|
219
|
+
v
|
|
220
|
+
Route to delivery channels
|
|
221
|
+
|--- Push: APNs/FCM --> device notification tray
|
|
222
|
+
|--- Email: SMTP --> user inbox (immediate or digest queue)
|
|
223
|
+
|--- In-app: WebSocket/SSE --> notification center + badge update
|
|
224
|
+
|--- SMS: Twilio/etc --> phone (critical only)
|
|
225
|
+
|
|
|
226
|
+
v
|
|
227
|
+
Track delivery status
|
|
228
|
+
|--- Delivered / Failed / Pending
|
|
229
|
+
|--- Opened / Dismissed / Expired
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### 3.2 User Interaction Flow
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
Notification arrives
|
|
236
|
+
|
|
|
237
|
+
+-- User sees it (lock screen / banner / badge / toast)
|
|
238
|
+
|
|
|
239
|
+
+-- User Action:
|
|
240
|
+
| |
|
|
241
|
+
| +-- Open ---------> Deep-link to source content
|
|
242
|
+
| | Mark as read, remove from tray
|
|
243
|
+
| |
|
|
244
|
+
| +-- Quick Action --> Execute without opening app
|
|
245
|
+
| | (reply, approve, snooze, archive)
|
|
246
|
+
| |
|
|
247
|
+
| +-- Dismiss ------> Remove from view
|
|
248
|
+
| | Remains unread in notification center
|
|
249
|
+
| |
|
|
250
|
+
| +-- Ignore -------> Remains until auto-dismiss or manual clear
|
|
251
|
+
|
|
|
252
|
+
+-- Post-Action:
|
|
253
|
+
|--- Update badge count
|
|
254
|
+
|--- Sync read state across devices
|
|
255
|
+
|--- Log engagement analytics
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### 3.3 Batch Notifications
|
|
259
|
+
|
|
260
|
+
- **Time-window:** Collect for fixed interval (e.g., 30 min), deliver as summary (LinkedIn, Google Workspace)
|
|
261
|
+
- **Activity-based:** Group by entity — "Patrick and 3 others commented" instead of 4 separate notifications
|
|
262
|
+
- **Scheduled digest:** Daily/weekly email summaries (GitHub, Notion)
|
|
263
|
+
- **Batch anatomy:** Summary line + 2-3 top items + "View all" expand + category breakdown
|
|
264
|
+
|
|
265
|
+
### 3.4 Notification Grouping
|
|
266
|
+
|
|
267
|
+
Grouping collapses related notifications in the notification center or system tray.
|
|
268
|
+
|
|
269
|
+
**Grouping strategies:**
|
|
270
|
+
- By source — all notifications from the same app grouped together
|
|
271
|
+
- By thread/conversation — messages in the same thread collapsed
|
|
272
|
+
- By entity — all activity on the same issue/document/task grouped
|
|
273
|
+
- By type — all mentions together, all assignments together
|
|
274
|
+
- By time — "Earlier today," "Yesterday," "This week" sections
|
|
275
|
+
|
|
276
|
+
**Grouped notification interaction:**
|
|
277
|
+
- Collapsed view shows count + most recent item
|
|
278
|
+
- Tap/click to expand and see all items in group
|
|
279
|
+
- Bulk actions available on the group level (mark all read, dismiss group)
|
|
280
|
+
- Individual items remain actionable within expanded group
|
|
281
|
+
|
|
282
|
+
### 3.5 Notification History
|
|
283
|
+
|
|
284
|
+
The notification center serves as the persistent record of all notifications.
|
|
285
|
+
|
|
286
|
+
**Design requirements:**
|
|
287
|
+
- Retention period: define how long notifications persist (30-90 days typical)
|
|
288
|
+
- Search: allow users to search history by keyword or filter
|
|
289
|
+
- Pagination: infinite scroll or "Load more" for large histories
|
|
290
|
+
- State preservation: read/unread state persists across sessions
|
|
291
|
+
- Archive vs. delete: "Mark as done" removes from active view but keeps in
|
|
292
|
+
history; "Delete" permanently removes
|
|
293
|
+
- Filtered views: ability to view only unread, only mentions, only a specific
|
|
294
|
+
project or source
|
|
295
|
+
|
|
296
|
+
### 3.6 Edge Cases
|
|
297
|
+
|
|
298
|
+
#### Offline Delivery
|
|
299
|
+
- Queue notifications on the server when user is offline
|
|
300
|
+
- Deliver queued notifications on reconnection, ordered chronologically
|
|
301
|
+
- Collapse duplicate/superseded notifications before delivery (e.g., if user
|
|
302
|
+
was mentioned 5 times in the same thread while offline, deliver one grouped
|
|
303
|
+
notification, not five)
|
|
304
|
+
- Show "offline" indicator in notification center when connection is lost
|
|
305
|
+
- Avoid overwhelming users with a burst of notifications on reconnection
|
|
306
|
+
|
|
307
|
+
#### Expired Notifications
|
|
308
|
+
- Notifications with time-bound relevance (e.g., "Meeting starts in 5 min")
|
|
309
|
+
should not be delivered after expiry
|
|
310
|
+
- Set TTL (time-to-live) on push notifications via APNs/FCM
|
|
311
|
+
- Show "Event has passed" for time-bound items rather than original CTA
|
|
312
|
+
- Auto-archive stale notifications in notification center
|
|
313
|
+
|
|
314
|
+
#### Notification Overflow
|
|
315
|
+
- Cap display at "99+" (universal convention)
|
|
316
|
+
- Prioritize newer and higher-urgency in visible list
|
|
317
|
+
- Rate-limit notification generation server-side
|
|
318
|
+
- After N notifications per hour from a single source, batch remainder
|
|
319
|
+
into a summary notification
|
|
320
|
+
- Provide "Clear all" but require confirmation for large batches
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 4. Micro-Interactions
|
|
325
|
+
|
|
326
|
+
### 4.1 Badge Animation
|
|
327
|
+
- **Appear:** Scale-in from 0 to 1.0 with overshoot (1.15) and settle. 280ms, ease-out-back.
|
|
328
|
+
- **Count update:** Pulse to 1.1 scale and back. 150-200ms.
|
|
329
|
+
- **Disappear:** Scale-out to 0 with fade. 180ms, ease-in.
|
|
330
|
+
|
|
331
|
+
```css
|
|
332
|
+
@keyframes badge-appear {
|
|
333
|
+
0% { transform: scale(0); opacity: 0; }
|
|
334
|
+
60% { transform: scale(1.15); opacity: 1; }
|
|
335
|
+
80% { transform: scale(0.95); }
|
|
336
|
+
100% { transform: scale(1); }
|
|
337
|
+
}
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
### 4.2 Toast Slide-In
|
|
341
|
+
- **Entry:** Slide from edge (bottom-up or top-down) with fade. 250-350ms, ease-out.
|
|
342
|
+
- **Exit:** Reverse slide + fade. 200ms, ease-in.
|
|
343
|
+
- **Stacking:** New toast pushes existing with smooth translateY. 200ms. Max 3-4 visible.
|
|
344
|
+
- **Progress bar:** Thin indicator showing remaining auto-dismiss time; pauses on hover/focus.
|
|
345
|
+
|
|
346
|
+
### 4.3 Bell Shake
|
|
347
|
+
- Rotational wiggle: 15deg to -12deg to 8deg to -5deg to 0deg. 3-4 oscillations over 500ms.
|
|
348
|
+
- Triggered once on new notification arrival, not continuously.
|
|
349
|
+
|
|
350
|
+
```css
|
|
351
|
+
@keyframes bell-shake {
|
|
352
|
+
0% { transform: rotate(0deg); }
|
|
353
|
+
15% { transform: rotate(15deg); }
|
|
354
|
+
30% { transform: rotate(-12deg); }
|
|
355
|
+
45% { transform: rotate(8deg); }
|
|
356
|
+
60% { transform: rotate(-5deg); }
|
|
357
|
+
100% { transform: rotate(0deg); }
|
|
358
|
+
}
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### 4.4 Swipe Interactions (Mobile)
|
|
362
|
+
|
|
363
|
+
**Swipe-to-dismiss:**
|
|
364
|
+
- Horizontal swipe (left or right) to dismiss notification
|
|
365
|
+
- Threshold: 30-40% of notification width triggers dismiss
|
|
366
|
+
- Below threshold: spring back to original position (300ms, spring easing)
|
|
367
|
+
- Above threshold: accelerate off-screen + fade out
|
|
368
|
+
- Background color reveals underneath during swipe (red for delete)
|
|
369
|
+
|
|
370
|
+
**Swipe actions (asymmetric):**
|
|
371
|
+
- Swipe right: primary action (mark read) — blue/green background
|
|
372
|
+
- Swipe left: secondary action (snooze/archive) — orange/gray background
|
|
373
|
+
- Partial swipe reveals action icon and label
|
|
374
|
+
- Full swipe executes the action immediately
|
|
375
|
+
- Haptic feedback at the action threshold point
|
|
376
|
+
|
|
377
|
+
### 4.5 Grouped Expand/Collapse
|
|
378
|
+
|
|
379
|
+
**Expand animation:**
|
|
380
|
+
- Collapsed state shows summary card with count
|
|
381
|
+
- Tap to expand: child notifications fan out below with staggered slide-in
|
|
382
|
+
- Each child slides down with 30-50ms stagger delay
|
|
383
|
+
- Total expand duration: 200-400ms depending on count
|
|
384
|
+
- Parent card remains as header with collapse affordance
|
|
385
|
+
|
|
386
|
+
**Collapse animation:**
|
|
387
|
+
- Reverse of expand with slight acceleration
|
|
388
|
+
- Duration: 250ms total
|
|
389
|
+
- Final child disappearing triggers summary count update
|
|
390
|
+
|
|
391
|
+
### 4.6 Mark-as-Read Transition
|
|
392
|
+
- Background color transitions from unread highlight to read state (300ms, ease-in-out)
|
|
393
|
+
- Bold text weight transitions to regular weight simultaneously
|
|
394
|
+
- Badge dot fades out over 200ms
|
|
395
|
+
- If last unread item, trigger badge disappear animation on bell icon
|
|
396
|
+
|
|
397
|
+
### 4.7 Pull-to-Refresh (Notification Center)
|
|
398
|
+
- Standard pull-to-refresh with custom icon animation
|
|
399
|
+
- Notification bell rotates during refresh (180-degree loop)
|
|
400
|
+
- New notifications slide in from top with staggered animation
|
|
401
|
+
- "Up to date" state shows subtle checkmark confirmation
|
|
402
|
+
|
|
403
|
+
### 4.8 Reduced Motion
|
|
404
|
+
|
|
405
|
+
Respect `prefers-reduced-motion` by disabling all notification animations.
|
|
406
|
+
Replace with instant state changes (opacity swap, no transform).
|
|
407
|
+
|
|
408
|
+
```css
|
|
409
|
+
@media (prefers-reduced-motion: reduce) {
|
|
410
|
+
.toast-enter, .badge-appear, .bell-shake,
|
|
411
|
+
.notification-expand, .swipe-action { animation: none; }
|
|
412
|
+
.toast { opacity: 1; transform: none; }
|
|
413
|
+
.badge { transform: scale(1); opacity: 1; }
|
|
414
|
+
}
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
### 4.9 Animation Timing Reference
|
|
418
|
+
|
|
419
|
+
| Interaction | Duration | Easing |
|
|
420
|
+
|-------------|----------|--------|
|
|
421
|
+
| Badge appear | 280ms | ease-out-back (cubic-bezier 0.34, 1.56, 0.64, 1) |
|
|
422
|
+
| Badge count pulse | 150-200ms | ease-in-out |
|
|
423
|
+
| Badge disappear | 180ms | ease-in |
|
|
424
|
+
| Toast enter | 250-350ms | ease-out |
|
|
425
|
+
| Toast exit | 200ms | ease-in |
|
|
426
|
+
| Bell shake | 500ms | linear (keyframed) |
|
|
427
|
+
| Swipe spring-back | 300ms | spring (underdamped) |
|
|
428
|
+
| Group expand | 200-400ms | ease-out (staggered) |
|
|
429
|
+
| Group collapse | 250ms | ease-in |
|
|
430
|
+
| Mark-as-read bg | 300ms | ease-in-out |
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
## 5. Anti-Patterns
|
|
435
|
+
|
|
436
|
+
**1. Notification overload** — Too many pushes cause opt-out. Research: 1 push/week leads to 10% disabling, 6% uninstalling. Fix: notification budgets, urgency throttling, intelligent batching.
|
|
437
|
+
|
|
438
|
+
**2. No notification preferences** — Binary on/off forces all-or-nothing choice. Fix: granular per-type, per-channel, per-source preferences. Discord's cascading hierarchy is the gold standard.
|
|
439
|
+
|
|
440
|
+
**3. Permission request on first launch** — Requesting push permission before users understand value yields low opt-in. Fix: delay to 4th-6th session (Localytics). Use pre-permission screen explaining value.
|
|
441
|
+
|
|
442
|
+
**4. Notifications without actions** — Informing without providing a way to act forces unnecessary app launches. Fix: every notification should deep-link to relevant content and support quick actions.
|
|
443
|
+
|
|
444
|
+
**5. Unclear notification source** — Users cannot determine which app/feature/person generated it. Fix: always display source. GitHub's "reason" metadata is exemplary.
|
|
445
|
+
|
|
446
|
+
**6. No mark-all-read** — Hundreds of unread items with no bulk action creates anxiety-inducing badge counts. Fix: "Mark all as read" at top, per-category bulk actions, "Clear all" with confirmation.
|
|
447
|
+
|
|
448
|
+
**7. Breaking deep links** — Tapping notification opens home screen instead of referenced content. Fix: robust deep-linking with fallback. Handle deleted/inaccessible content with explanatory message.
|
|
449
|
+
|
|
450
|
+
**8. Notification spam causing opt-out** — Aggressive re-engagement ("You haven't visited in 3 days!") or marketing disguised as transactional erodes trust. Fix: separate transactional from marketing. Respect engagement patterns.
|
|
451
|
+
|
|
452
|
+
**9. No snooze/remind-later** — Can only act now or dismiss permanently. Fix: snooze with preset times (1h, 3h, tomorrow). Gmail's pattern is well-understood.
|
|
453
|
+
|
|
454
|
+
**10. Stale notifications** — Expired/irrelevant/already-actioned items cluttering history. Fix: implement TTL, auto-archive completed events, show "Event has passed" for time-bound items.
|
|
455
|
+
|
|
456
|
+
**11. Toasts blocking content** — Overlaying navigation, submit buttons, or critical content. Fix: position where they don't overlap interactive elements. Ensure always dismissible.
|
|
457
|
+
|
|
458
|
+
**12. Identical cross-channel delivery** — Same notification via push + email + in-app simultaneously. Fix: channel escalation (Notion pattern: desktop first, mobile after 5min inactivity).
|
|
459
|
+
|
|
460
|
+
**13. Ignoring platform conventions** — Custom notification UIs that violate OS patterns. Fix: follow Apple HIG and Material Design 3 for structure and interaction. Customize content, not mechanics.
|
|
461
|
+
|
|
462
|
+
---
|
|
463
|
+
|
|
464
|
+
## 6. Accessibility
|
|
465
|
+
|
|
466
|
+
### 6.1 Screen Reader Announcements (WCAG 4.1.3)
|
|
467
|
+
|
|
468
|
+
Status messages must be programmatically determinable via ARIA roles/properties without requiring focus change.
|
|
469
|
+
|
|
470
|
+
```html
|
|
471
|
+
<!-- Non-urgent status (toast confirmations, updates) -->
|
|
472
|
+
<div role="status" aria-live="polite" aria-atomic="true">
|
|
473
|
+
<!-- Inject notification text dynamically -->
|
|
474
|
+
</div>
|
|
475
|
+
|
|
476
|
+
<!-- Urgent alerts (errors, critical warnings) -->
|
|
477
|
+
<div role="alert" aria-live="assertive" aria-atomic="true">
|
|
478
|
+
<!-- Inject alert text dynamically -->
|
|
479
|
+
</div>
|
|
480
|
+
|
|
481
|
+
<!-- Notification log (activity feed) -->
|
|
482
|
+
<div role="log" aria-live="polite" aria-relevant="additions">
|
|
483
|
+
<!-- Append new notifications -->
|
|
484
|
+
</div>
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
**Rules:** Live region container must exist in DOM before content injection. Use `aria-atomic="true"` so full text is read. `role="status"` (polite) for non-urgent; `role="alert"` (assertive) for urgent — use sparingly. Never set `aria-live` on the notification itself; set it on the container.
|
|
488
|
+
|
|
489
|
+
### 6.2 Focus Management
|
|
490
|
+
- Toasts must NOT steal focus. Use `aria-live` for announcement, not `focus()`.
|
|
491
|
+
- Opening notification center moves focus to list/heading.
|
|
492
|
+
- Each notification is focusable (link/button/listitem).
|
|
493
|
+
- Arrow keys for list navigation. Escape closes panel, returns focus to bell icon.
|
|
494
|
+
- Announce count on open: "Notifications, 5 unread."
|
|
495
|
+
|
|
496
|
+
### 6.3 Sound Alternatives
|
|
497
|
+
- **Visual:** Screen flash, persistent badge, animated icon (bell shake), LED indicator
|
|
498
|
+
- **Haptic:** Distinct vibration patterns per type (long for critical, double-tap for important, single for informational)
|
|
499
|
+
- **System integration:** Respect iOS "LED Flash for Alerts", hearing aid protocols
|
|
500
|
+
|
|
501
|
+
### 6.4 Visual Design
|
|
502
|
+
- Never use color alone for urgency (WCAG 1.4.1) — pair with icon + text label
|
|
503
|
+
- Badge colors: 3:1 minimum contrast against background (WCAG 1.4.11)
|
|
504
|
+
- Notification text: 4.5:1 contrast (WCAG 1.4.3)
|
|
505
|
+
- Unread state: use font-weight differentiation, not just color
|
|
506
|
+
- Touch targets: 44x44px (iOS) or 48x48dp (Android) minimum
|
|
507
|
+
|
|
508
|
+
### 6.5 Cognitive Accessibility
|
|
509
|
+
- Allow disabling non-essential notification categories
|
|
510
|
+
- Provide "notification quiet mode" for batching all non-critical
|
|
511
|
+
- Use plain language, no jargon or anxiety-inducing phrasing ("URGENT," "ACT NOW")
|
|
512
|
+
- Include enough context to understand without opening app (who, what, where)
|
|
513
|
+
- Avoid ever-growing badge counts for non-actionable items
|
|
514
|
+
- Show "You're all caught up" when notification center is empty
|
|
515
|
+
|
|
516
|
+
### 6.6 Motion Accessibility
|
|
517
|
+
Respect `prefers-reduced-motion`: disable bell shake, badge bounce, toast slide-in, expand/collapse animations. Replace with instant state changes (opacity swap, no transform). Ensure auto-dismiss timing is not the only interaction path.
|
|
518
|
+
|
|
519
|
+
---
|
|
520
|
+
|
|
521
|
+
## 7. Cross-Platform Adaptation
|
|
522
|
+
|
|
523
|
+
### 7.1 iOS
|
|
524
|
+
- **Notification groups:** Custom grouping via `threadIdentifier`. Users expand/collapse.
|
|
525
|
+
- **Notification Summary:** Scheduled delivery of non-urgent notifications. On-device ML ranks by relevance.
|
|
526
|
+
- **Focus modes:** Per-activity filters. Apps declare interruption levels to participate.
|
|
527
|
+
- **Interruption levels:** `.passive` (silent), `.active` (default), `.timeSensitive` (breaks Focus), `.critical` (breaks everything, entitlement required).
|
|
528
|
+
- **Live Activities:** Real-time lock screen updates for ongoing events.
|
|
529
|
+
- **Rich notifications:** Custom UI via Notification Content Extensions.
|
|
530
|
+
|
|
531
|
+
### 7.2 Android
|
|
532
|
+
- **Notification channels:** Required on API 26+. Per-channel name, importance, sound, vibration. Users customize/disable individually. Importance cannot be changed programmatically after first notification.
|
|
533
|
+
- **Importance levels:** MAX (heads-up + peek), HIGH (heads-up), DEFAULT (sound), LOW (silent), MIN (no status bar), NONE (disabled).
|
|
534
|
+
- **Styles:** BigTextStyle, BigPictureStyle, InboxStyle, MediaStyle, MessagingStyle (enables bubbles + smart replies).
|
|
535
|
+
- **Direct reply:** Inline text input in notification shade.
|
|
536
|
+
- **Bubbles:** Chat-head floating notifications for ongoing conversations.
|
|
537
|
+
|
|
538
|
+
### 7.3 Web
|
|
539
|
+
- **Notification API:** Browser-native notifications requiring explicit permission. States: `default`, `granted`, `denied`. Once denied, user must change in browser settings.
|
|
540
|
+
- **Permission UX:** Never request on page load. Two-step pattern: custom in-app prompt explaining value, then browser dialog on user click. HTTPS required.
|
|
541
|
+
- **Push API:** Server-initiated via Service Worker, works when browser/tab closed.
|
|
542
|
+
- **Tab indicators:** `document.title` manipulation for unread count ("(3) App Name"). Badge API for favicon (limited support).
|
|
543
|
+
|
|
544
|
+
### 7.4 In-App Notification Center Layouts
|
|
545
|
+
|
|
546
|
+
**Dropdown panel:** 350-450px wide, max 60vh height. Opens below bell icon.
|
|
547
|
+
Best for web apps with moderate notification volume. Closes on outside click.
|
|
548
|
+
|
|
549
|
+
**Slide-in drawer:** Full-height panel from right edge, 320-400px wide.
|
|
550
|
+
Best for apps with rich notification content and filter/search capabilities.
|
|
551
|
+
|
|
552
|
+
**Full-page view:** Dedicated notification page or screen. Best for mobile
|
|
553
|
+
apps and high-volume systems (GitHub, Linear). Allows deep filtering and search.
|
|
554
|
+
|
|
555
|
+
**Split view:** Notification list on left, detail on right. Best for desktop
|
|
556
|
+
apps with complex notification content requiring preview without navigation.
|
|
557
|
+
|
|
558
|
+
**Responsive adaptation:**
|
|
559
|
+
- Desktop: dropdown panel or side drawer
|
|
560
|
+
- Tablet: full-width drawer or half-sheet modal
|
|
561
|
+
- Mobile: full-screen view with back navigation
|
|
562
|
+
|
|
563
|
+
**Essential features for all layouts:**
|
|
564
|
+
- Unread count in header
|
|
565
|
+
- Filter/segment tabs (All, Unread, Mentions, etc.)
|
|
566
|
+
- Mark all as read button
|
|
567
|
+
- Individual notification actions (archive, mute, snooze)
|
|
568
|
+
- Settings shortcut (gear icon linking to notification preferences)
|
|
569
|
+
- Empty state with clear messaging ("You're all caught up")
|
|
570
|
+
- Loading state for async notification fetch
|
|
571
|
+
- Error state with retry action
|
|
572
|
+
|
|
573
|
+
---
|
|
574
|
+
|
|
575
|
+
## 8. Decision Tree
|
|
576
|
+
|
|
577
|
+
### 8.1 Push vs. In-App vs. Email
|
|
578
|
+
|
|
579
|
+
```
|
|
580
|
+
User active in app? --> YES --> In-app (toast for feedback, badge for awareness)
|
|
581
|
+
--> NO --> Time-sensitive?
|
|
582
|
+
--> YES --> Critical? --> Push + email + SMS
|
|
583
|
+
--> Push only (respect DND)
|
|
584
|
+
--> NO --> Digest? --> Email summary
|
|
585
|
+
--> Queue for next session (in-app only)
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
### 8.2 Urgency Classification
|
|
589
|
+
|
|
590
|
+
```
|
|
591
|
+
Data loss / security / financial risk? --> CRITICAL (bypass DND, persistent, action required)
|
|
592
|
+
Personally addressed + direct mention? --> IMPORTANT (push + in-app, badge count)
|
|
593
|
+
Subscribed thread activity? --> INFORMATIONAL (in-app only, dot badge)
|
|
594
|
+
General system/product update? --> INFORMATIONAL (banner or digest)
|
|
595
|
+
None of the above? --> Do not notify (use activity log instead)
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
### 8.3 When to Batch
|
|
599
|
+
|
|
600
|
+
| Type | Batch Strategy |
|
|
601
|
+
|------|---------------|
|
|
602
|
+
| Transactional (orders, security) | Never batch. Deliver immediately. |
|
|
603
|
+
| Direct communication (DMs, mentions) | Batch only during quiet hours. |
|
|
604
|
+
| Activity updates (likes, follows) | Batch aggressively. "5 people liked your post." |
|
|
605
|
+
| System updates (changelog) | Periodic digests. Weekly email or in-app banner. |
|
|
606
|
+
| Marketing (promotions) | Batch and cap. Max 1-2 per week. |
|
|
607
|
+
|
|
608
|
+
### 8.4 Toast vs. Banner vs. Modal
|
|
609
|
+
|
|
610
|
+
```
|
|
611
|
+
Response to user action?
|
|
612
|
+
--> Simple confirmation? --> TOAST ("File saved", auto-dismiss 5-8s)
|
|
613
|
+
--> Requires decision? --> MODAL DIALOG ("Delete? Cannot be undone.")
|
|
614
|
+
--> Undoable action? --> TOAST + action ("Deleted. [Undo]", 8-10s)
|
|
615
|
+
System-wide announcement? --> BANNER (persistent, dismissible, top of viewport)
|
|
616
|
+
Real-time update? --> IN-APP NOTIFICATION (badge + notification center)
|
|
617
|
+
None of the above? --> Do not notify. Update passive indicators.
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
---
|
|
621
|
+
|
|
622
|
+
## Platform Quick Reference
|
|
623
|
+
|
|
624
|
+
### iOS Interruption Levels
|
|
625
|
+
|
|
626
|
+
| Level | Sound | Banner | Focus | Use For |
|
|
627
|
+
|-------|-------|--------|-------|---------|
|
|
628
|
+
| `.passive` | No | No | Respects | FYI, activity feed |
|
|
629
|
+
| `.active` | Yes | Yes | Respects | DMs, mentions |
|
|
630
|
+
| `.timeSensitive` | Yes | Yes | Breaks through | Expiring invites, reminders |
|
|
631
|
+
| `.critical` | Yes | Yes | Breaks through | Health/security (entitlement required) |
|
|
632
|
+
|
|
633
|
+
### Android Importance Levels
|
|
634
|
+
|
|
635
|
+
| Level | Sound | Heads-up | Status Bar | Use For |
|
|
636
|
+
|-------|-------|----------|------------|---------|
|
|
637
|
+
| MAX (5) | Yes | Yes (peek) | Yes | Calls, alarms |
|
|
638
|
+
| HIGH (4) | Yes | Yes | Yes | Messages, mentions |
|
|
639
|
+
| DEFAULT (3) | Yes | No | Yes | Updates, reminders |
|
|
640
|
+
| LOW (2) | No | No | No | Recommendations |
|
|
641
|
+
| MIN (1) | No | No | No | Background info |
|
|
642
|
+
|
|
643
|
+
---
|
|
644
|
+
|
|
645
|
+
## Implementation Checklist
|
|
646
|
+
|
|
647
|
+
### Server-Side
|
|
648
|
+
|
|
649
|
+
- [ ] Event-driven notification generation (pub/sub or message queue)
|
|
650
|
+
- [ ] User preference service with per-channel, per-type granularity
|
|
651
|
+
- [ ] Notification template engine with localization support
|
|
652
|
+
- [ ] Rate limiting and notification budget enforcement
|
|
653
|
+
- [ ] Delivery tracking (sent, delivered, opened, dismissed)
|
|
654
|
+
- [ ] Batch/digest aggregation engine with configurable windows
|
|
655
|
+
- [ ] TTL management for time-bound notifications
|
|
656
|
+
- [ ] Offline queue with deduplication on delivery
|
|
657
|
+
- [ ] Channel escalation logic (e.g., in-app first, push after delay)
|
|
658
|
+
|
|
659
|
+
### Client-Side
|
|
660
|
+
|
|
661
|
+
- [ ] Real-time notification transport (WebSocket / SSE / long polling)
|
|
662
|
+
- [ ] Local notification state management (read/unread, dismissed)
|
|
663
|
+
- [ ] Badge count synchronization across tabs and devices
|
|
664
|
+
- [ ] Deep-link routing for every notification type
|
|
665
|
+
- [ ] Notification permission state management and pre-prompt UX
|
|
666
|
+
- [ ] Offline notification queue with reconnection handling
|
|
667
|
+
- [ ] Accessibility: aria-live regions for all dynamic notifications
|
|
668
|
+
- [ ] Animation system with `prefers-reduced-motion` support
|
|
669
|
+
- [ ] Notification center with filter, search, and bulk actions
|
|
670
|
+
|
|
671
|
+
### Testing
|
|
672
|
+
|
|
673
|
+
- [ ] Push delivery verified on iOS, Android, and web
|
|
674
|
+
- [ ] Deep-link navigation tested for every notification type
|
|
675
|
+
- [ ] Preferences correctly suppress and allow notifications
|
|
676
|
+
- [ ] Badge counts update accurately across all state changes
|
|
677
|
+
- [ ] Toast auto-dismiss meets 5-second accessibility minimum
|
|
678
|
+
- [ ] Screen reader announces toast/snackbar/banner content
|
|
679
|
+
- [ ] Keyboard navigation works throughout notification center
|
|
680
|
+
- [ ] Focus management correct on open/close of notification panel
|
|
681
|
+
- [ ] Notification behavior correct during DND / Focus modes
|
|
682
|
+
- [ ] Offline-to-online delivery and deduplication verified
|
|
683
|
+
- [ ] Expired notification handling (TTL) tested
|
|
684
|
+
- [ ] Notification overflow behavior at 99+ items
|
|
685
|
+
- [ ] `prefers-reduced-motion` disables all notification animations
|
|
686
|
+
- [ ] Cross-device read-state synchronization
|
|
687
|
+
- [ ] Email unsubscribe link functions correctly
|
|
688
|
+
|
|
689
|
+
---
|
|
690
|
+
|
|
691
|
+
## Key Sources
|
|
692
|
+
|
|
693
|
+
- Apple HIG — Notifications (developer.apple.com/design/human-interface-guidelines/notifications)
|
|
694
|
+
- Apple HIG — Managing Notifications (developer.apple.com/design/human-interface-guidelines/managing-notifications)
|
|
695
|
+
- Material Design 3 — Notifications (m3.material.io/foundations/content-design/notifications)
|
|
696
|
+
- Material Design 3 — Badges (m3.material.io/components/badges/guidelines)
|
|
697
|
+
- NNG — Five Mistakes in Push Notifications (nngroup.com/articles/push-notification/)
|
|
698
|
+
- NNG — Indicators, Validations, Notifications (nngroup.com/articles/indicators-validations-notifications/)
|
|
699
|
+
- WCAG 2.2 SC 4.1.3 — Status Messages (w3.org/WAI/WCAG22/Understanding/status-messages.html)
|
|
700
|
+
- W3C — Cognitive Accessibility (w3.org/TR/coga-usable/)
|
|
701
|
+
- Sara Soueidan — Accessible Notifications with ARIA Live Regions (sarasoueidan.com/blog/accessible-notifications-with-aria-live-regions-part-1/)
|
|
702
|
+
- Smashing Magazine — Design Guidelines for Better Notifications UX (smashingmagazine.com/2025/07/design-guidelines-better-notifications-ux/)
|
|
703
|
+
- Carbon Design System — Notification Pattern (carbondesignsystem.com/patterns/notification-pattern/)
|
|
704
|
+
- Android Developers — Notification Channels (developer.android.com/develop/ui/views/notifications/channels)
|
|
705
|
+
- web.dev — Permission UX (web.dev/articles/push-notifications-permissions-ux)
|