qualia-framework 2.1.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/README.md +50 -0
- package/bin/cli.js +519 -0
- package/framework/agents/architecture-strategist.md +53 -0
- package/framework/agents/backend-agent.md +150 -0
- package/framework/agents/code-simplicity-reviewer.md +86 -0
- package/framework/agents/frontend-agent.md +111 -0
- package/framework/agents/kieran-typescript-reviewer.md +96 -0
- package/framework/agents/performance-oracle.md +111 -0
- package/framework/agents/qualia-codebase-mapper.md +760 -0
- package/framework/agents/qualia-debugger.md +1203 -0
- package/framework/agents/qualia-executor.md +881 -0
- package/framework/agents/qualia-integration-checker.md +423 -0
- package/framework/agents/qualia-phase-researcher.md +453 -0
- package/framework/agents/qualia-plan-checker.md +699 -0
- package/framework/agents/qualia-planner.md +1241 -0
- package/framework/agents/qualia-project-researcher.md +602 -0
- package/framework/agents/qualia-research-synthesizer.md +236 -0
- package/framework/agents/qualia-roadmapper.md +605 -0
- package/framework/agents/qualia-verifier.md +685 -0
- package/framework/agents/team-orchestrator.md +228 -0
- package/framework/agents/teams/full-stack-team.md +48 -0
- package/framework/agents/teams/optimize-team.md +53 -0
- package/framework/agents/teams/review-team.md +62 -0
- package/framework/agents/teams/ship-team.md +86 -0
- package/framework/agents/test-agent.md +182 -0
- package/framework/askpass.sh +2 -0
- package/framework/commands/design.md +53 -0
- package/framework/commands/quick-db.md +22 -0
- package/framework/config/retention.json +35 -0
- package/framework/core/PRINCIPLES.md +77 -0
- package/framework/hooks/auto-format.sh +45 -0
- package/framework/hooks/block-env-edit.sh +42 -0
- package/framework/hooks/branch-guard.sh +46 -0
- package/framework/hooks/confirm-delete.sh +56 -0
- package/framework/hooks/migration-validate.sh +68 -0
- package/framework/hooks/notification-speak.sh +15 -0
- package/framework/hooks/pre-commit.sh +80 -0
- package/framework/hooks/pre-compact.sh +55 -0
- package/framework/hooks/pre-deploy-gate.sh +151 -0
- package/framework/hooks/qualia-colors.sh +32 -0
- package/framework/hooks/retention-cleanup.sh +43 -0
- package/framework/hooks/save-session-state.sh +153 -0
- package/framework/hooks/session-context-loader.sh +28 -0
- package/framework/hooks/session-learn.sh +30 -0
- package/framework/knowledge/claudecode-bible.md +1384 -0
- package/framework/knowledge/client-prefs.md +22 -0
- package/framework/knowledge/common-fixes.md +25 -0
- package/framework/knowledge/deployment-map.md +35 -0
- package/framework/knowledge/email-signature.html +1 -0
- package/framework/knowledge/employees.md +8 -0
- package/framework/knowledge/learned-patterns.md +51 -0
- package/framework/knowledge/optimization-research-2026.md +137 -0
- package/framework/knowledge/qualia-context.md +67 -0
- package/framework/knowledge/supabase-patterns.md +50 -0
- package/framework/knowledge/voice-agent-patterns.md +46 -0
- package/framework/qualia-engine/VERSION +1 -0
- package/framework/qualia-engine/bin/qualia-tools.js +2160 -0
- package/framework/qualia-engine/bin/qualia-tools.test.js +1054 -0
- package/framework/qualia-engine/references/checkpoints.md +775 -0
- package/framework/qualia-engine/references/continuation-format.md +249 -0
- package/framework/qualia-engine/references/decimal-phase-calculation.md +65 -0
- package/framework/qualia-engine/references/design-quality.md +56 -0
- package/framework/qualia-engine/references/git-integration.md +254 -0
- package/framework/qualia-engine/references/git-planning-commit.md +50 -0
- package/framework/qualia-engine/references/model-profile-resolution.md +32 -0
- package/framework/qualia-engine/references/model-profiles.md +73 -0
- package/framework/qualia-engine/references/phase-argument-parsing.md +61 -0
- package/framework/qualia-engine/references/planning-config.md +195 -0
- package/framework/qualia-engine/references/questioning.md +141 -0
- package/framework/qualia-engine/references/tdd.md +263 -0
- package/framework/qualia-engine/references/ui-brand.md +160 -0
- package/framework/qualia-engine/references/verification-patterns.md +612 -0
- package/framework/qualia-engine/templates/DEBUG.md +159 -0
- package/framework/qualia-engine/templates/DESIGN.md +81 -0
- package/framework/qualia-engine/templates/UAT.md +247 -0
- package/framework/qualia-engine/templates/codebase/architecture.md +255 -0
- package/framework/qualia-engine/templates/codebase/concerns.md +310 -0
- package/framework/qualia-engine/templates/codebase/conventions.md +307 -0
- package/framework/qualia-engine/templates/codebase/integrations.md +280 -0
- package/framework/qualia-engine/templates/codebase/stack.md +186 -0
- package/framework/qualia-engine/templates/codebase/structure.md +285 -0
- package/framework/qualia-engine/templates/codebase/testing.md +480 -0
- package/framework/qualia-engine/templates/config.json +35 -0
- package/framework/qualia-engine/templates/context.md +283 -0
- package/framework/qualia-engine/templates/continue-here.md +78 -0
- package/framework/qualia-engine/templates/debug-subagent-prompt.md +91 -0
- package/framework/qualia-engine/templates/discovery.md +146 -0
- package/framework/qualia-engine/templates/milestone-archive.md +123 -0
- package/framework/qualia-engine/templates/milestone.md +115 -0
- package/framework/qualia-engine/templates/phase-prompt.md +567 -0
- package/framework/qualia-engine/templates/planner-subagent-prompt.md +117 -0
- package/framework/qualia-engine/templates/project.md +184 -0
- package/framework/qualia-engine/templates/projects/ai-agent.md +156 -0
- package/framework/qualia-engine/templates/projects/mobile-app.md +181 -0
- package/framework/qualia-engine/templates/projects/voice-agent.md +134 -0
- package/framework/qualia-engine/templates/projects/website.md +137 -0
- package/framework/qualia-engine/templates/requirements.md +231 -0
- package/framework/qualia-engine/templates/research-project/ARCHITECTURE.md +204 -0
- package/framework/qualia-engine/templates/research-project/FEATURES.md +147 -0
- package/framework/qualia-engine/templates/research-project/PITFALLS.md +200 -0
- package/framework/qualia-engine/templates/research-project/STACK.md +120 -0
- package/framework/qualia-engine/templates/research-project/SUMMARY.md +170 -0
- package/framework/qualia-engine/templates/research.md +552 -0
- package/framework/qualia-engine/templates/roadmap.md +202 -0
- package/framework/qualia-engine/templates/state.md +176 -0
- package/framework/qualia-engine/templates/summary-complex.md +59 -0
- package/framework/qualia-engine/templates/summary-minimal.md +41 -0
- package/framework/qualia-engine/templates/summary-standard.md +48 -0
- package/framework/qualia-engine/templates/summary.md +246 -0
- package/framework/qualia-engine/templates/user-setup.md +311 -0
- package/framework/qualia-engine/templates/verification-report.md +322 -0
- package/framework/qualia-engine/workflows/add-phase.md +179 -0
- package/framework/qualia-engine/workflows/add-todo.md +157 -0
- package/framework/qualia-engine/workflows/audit-milestone.md +241 -0
- package/framework/qualia-engine/workflows/check-todos.md +176 -0
- package/framework/qualia-engine/workflows/complete-milestone.md +858 -0
- package/framework/qualia-engine/workflows/diagnose-issues.md +219 -0
- package/framework/qualia-engine/workflows/discovery-phase.md +289 -0
- package/framework/qualia-engine/workflows/discuss-phase.md +534 -0
- package/framework/qualia-engine/workflows/execute-phase.md +559 -0
- package/framework/qualia-engine/workflows/execute-plan.md +438 -0
- package/framework/qualia-engine/workflows/help.md +470 -0
- package/framework/qualia-engine/workflows/insert-phase.md +220 -0
- package/framework/qualia-engine/workflows/list-phase-assumptions.md +178 -0
- package/framework/qualia-engine/workflows/map-codebase.md +327 -0
- package/framework/qualia-engine/workflows/new-milestone.md +363 -0
- package/framework/qualia-engine/workflows/new-project.md +1037 -0
- package/framework/qualia-engine/workflows/pause-work.md +122 -0
- package/framework/qualia-engine/workflows/plan-milestone-gaps.md +256 -0
- package/framework/qualia-engine/workflows/plan-phase.md +422 -0
- package/framework/qualia-engine/workflows/progress.md +354 -0
- package/framework/qualia-engine/workflows/quick.md +252 -0
- package/framework/qualia-engine/workflows/remove-phase.md +326 -0
- package/framework/qualia-engine/workflows/research-phase.md +74 -0
- package/framework/qualia-engine/workflows/resume-project.md +306 -0
- package/framework/qualia-engine/workflows/set-profile.md +80 -0
- package/framework/qualia-engine/workflows/settings.md +145 -0
- package/framework/qualia-engine/workflows/transition.md +556 -0
- package/framework/qualia-engine/workflows/update.md +197 -0
- package/framework/qualia-engine/workflows/verify-phase.md +195 -0
- package/framework/qualia-engine/workflows/verify-work.md +625 -0
- package/framework/rules/context7.md +11 -0
- package/framework/rules/deployment.md +29 -0
- package/framework/rules/frontend.md +33 -0
- package/framework/rules/security.md +12 -0
- package/framework/rules/speed.md +20 -0
- package/framework/scripts/__pycache__/say.cpython-314.pyc +0 -0
- package/framework/scripts/apply-retention.sh +120 -0
- package/framework/scripts/bootstrap-pop-os.sh +354 -0
- package/framework/scripts/claude-voice +13 -0
- package/framework/scripts/cleanup.sh +131 -0
- package/framework/scripts/cowork-mode.sh +141 -0
- package/framework/scripts/generate-project-claude-md.sh +153 -0
- package/framework/scripts/load-test-webhook.js +172 -0
- package/framework/scripts/say.py +236 -0
- package/framework/scripts/showcase-video-recorder/ffmpeg-builder.js +167 -0
- package/framework/scripts/showcase-video-recorder/playwright-helpers.js +216 -0
- package/framework/scripts/speak.py +55 -0
- package/framework/scripts/speak.sh +18 -0
- package/framework/scripts/status.sh +138 -0
- package/framework/scripts/sync-to-framework.sh +65 -0
- package/framework/scripts/voice-hotkey.py +227 -0
- package/framework/scripts/voice-input.sh +51 -0
- package/framework/skills/animate/SKILL.md +202 -0
- package/framework/skills/bolder/SKILL.md +144 -0
- package/framework/skills/browser-qa/SKILL.md +536 -0
- package/framework/skills/clarify/SKILL.md +179 -0
- package/framework/skills/colorize/SKILL.md +170 -0
- package/framework/skills/critique/SKILL.md +126 -0
- package/framework/skills/deep-research/SKILL.md +271 -0
- package/framework/skills/delight/SKILL.md +329 -0
- package/framework/skills/deploy/SKILL.md +261 -0
- package/framework/skills/deploy-verify/SKILL.md +377 -0
- package/framework/skills/deploy-verify/scripts/canary-check.sh +206 -0
- package/framework/skills/deploy-verify/scripts/check-console-errors.js +147 -0
- package/framework/skills/deploy-verify/scripts/check-cwv.js +139 -0
- package/framework/skills/deploy-verify/scripts/project-detect.sh +84 -0
- package/framework/skills/deploy-verify/scripts/verify.sh +548 -0
- package/framework/skills/design-quieter/SKILL.md +130 -0
- package/framework/skills/distill/SKILL.md +149 -0
- package/framework/skills/docs-lookup/SKILL.md +78 -0
- package/framework/skills/fcm-notifications/SKILL.md +125 -0
- package/framework/skills/financial-ledger/SKILL.md +1039 -0
- package/framework/skills/frontend-master/NOTICE.md +4 -0
- package/framework/skills/frontend-master/SKILL.md +127 -0
- package/framework/skills/frontend-master/reference/color-and-contrast.md +132 -0
- package/framework/skills/frontend-master/reference/interaction-design.md +123 -0
- package/framework/skills/frontend-master/reference/motion-design.md +99 -0
- package/framework/skills/frontend-master/reference/responsive-design.md +114 -0
- package/framework/skills/frontend-master/reference/spatial-design.md +100 -0
- package/framework/skills/frontend-master/reference/typography.md +131 -0
- package/framework/skills/frontend-master/reference/ux-writing.md +107 -0
- package/framework/skills/harden/SKILL.md +357 -0
- package/framework/skills/i18n-rtl/SKILL.md +752 -0
- package/framework/skills/learn/SKILL.md +71 -0
- package/framework/skills/memory/SKILL.md +50 -0
- package/framework/skills/mobile-expo/SKILL.md +864 -0
- package/framework/skills/mobile-expo/references/store-checklist.md +550 -0
- package/framework/skills/nestjs-backend/README.md +73 -0
- package/framework/skills/nestjs-backend/SKILL.md +446 -0
- package/framework/skills/nestjs-backend/references/templates.md +1173 -0
- package/framework/skills/normalize/SKILL.md +79 -0
- package/framework/skills/onboard/SKILL.md +242 -0
- package/framework/skills/polish/SKILL.md +209 -0
- package/framework/skills/pr/SKILL.md +66 -0
- package/framework/skills/qualia/SKILL.md +153 -0
- package/framework/skills/qualia-add-todo/SKILL.md +68 -0
- package/framework/skills/qualia-audit-milestone/SKILL.md +92 -0
- package/framework/skills/qualia-check-todos/SKILL.md +55 -0
- package/framework/skills/qualia-complete-milestone/SKILL.md +108 -0
- package/framework/skills/qualia-debug/SKILL.md +149 -0
- package/framework/skills/qualia-design/SKILL.md +203 -0
- package/framework/skills/qualia-discuss-phase/SKILL.md +72 -0
- package/framework/skills/qualia-execute-phase/SKILL.md +86 -0
- package/framework/skills/qualia-help/SKILL.md +67 -0
- package/framework/skills/qualia-idk/SKILL.md +352 -0
- package/framework/skills/qualia-list-phase-assumptions/SKILL.md +67 -0
- package/framework/skills/qualia-new-milestone/SKILL.md +72 -0
- package/framework/skills/qualia-new-project/SKILL.md +92 -0
- package/framework/skills/qualia-optimize/SKILL.md +417 -0
- package/framework/skills/qualia-pause-work/SKILL.md +96 -0
- package/framework/skills/qualia-plan-milestone-gaps/SKILL.md +57 -0
- package/framework/skills/qualia-plan-phase/SKILL.md +101 -0
- package/framework/skills/qualia-progress/SKILL.md +53 -0
- package/framework/skills/qualia-quick/SKILL.md +89 -0
- package/framework/skills/qualia-research-phase/SKILL.md +88 -0
- package/framework/skills/qualia-resume-work/SKILL.md +62 -0
- package/framework/skills/qualia-review/SKILL.md +263 -0
- package/framework/skills/qualia-start/SKILL.md +182 -0
- package/framework/skills/qualia-verify-work/SKILL.md +105 -0
- package/framework/skills/qualia-workflow/SKILL.md +130 -0
- package/framework/skills/rag/SKILL.md +750 -0
- package/framework/skills/responsive/SKILL.md +231 -0
- package/framework/skills/retro/SKILL.md +284 -0
- package/framework/skills/sakani-conventions/SKILL.md +136 -0
- package/framework/skills/sakani-conventions/evals/evals.json +23 -0
- package/framework/skills/sakani-conventions/references/entities.md +365 -0
- package/framework/skills/sakani-conventions/references/error-codes.md +95 -0
- package/framework/skills/seo-master/SKILL.md +490 -0
- package/framework/skills/seo-master/references/checklist.md +199 -0
- package/framework/skills/seo-master/references/structured-data.md +609 -0
- package/framework/skills/ship/SKILL.md +202 -0
- package/framework/skills/stack-researcher/SKILL.md +215 -0
- package/framework/skills/status/SKILL.md +154 -0
- package/framework/skills/status/scripts/health-check.sh +562 -0
- package/framework/skills/subscription-payments/SKILL.md +250 -0
- package/framework/skills/supabase/SKILL.md +973 -0
- package/framework/skills/supabase/references/templates.md +159 -0
- package/framework/skills/team/SKILL.md +67 -0
- package/framework/skills/test-runner/SKILL.md +202 -0
- package/framework/skills/voice-agent/SKILL.md +407 -0
- package/framework/skills/zoho-workflow/SKILL.md +51 -0
- package/framework/statusline-command.sh +117 -0
- package/package.json +24 -0
- package/profiles/fawzi.json +16 -0
- package/profiles/hasan.json +16 -0
- package/profiles/moayad.json +16 -0
- package/templates/CLAUDE-owner.md +52 -0
- package/templates/CLAUDE.md.hbs +58 -0
- package/templates/env.claude.template +12 -0
- package/templates/settings.json +141 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: distill
|
|
3
|
+
description: Strip designs to their essence by removing unnecessary complexity. Great design is simple, powerful, and clean.
|
|
4
|
+
user-invokable: true
|
|
5
|
+
args:
|
|
6
|
+
- name: target
|
|
7
|
+
description: The feature or component to distill (optional)
|
|
8
|
+
required: false
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Remove unnecessary complexity from designs, revealing the essential elements and creating clarity through ruthless simplification.
|
|
12
|
+
|
|
13
|
+
## MANDATORY PREPARATION
|
|
14
|
+
|
|
15
|
+
### Read DESIGN.md (Authoritative Source)
|
|
16
|
+
|
|
17
|
+
Before any context gathering, check for the project's design decisions file:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
cat .planning/DESIGN.md 2>/dev/null
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**If DESIGN.md exists:** This is the authoritative source for all design decisions in this project. Use its palette, typography, spacing, component, and motion decisions as your foundation. Do NOT override these decisions unless the user explicitly asks. Reference specific DESIGN.md decisions in your output (e.g., "Per DESIGN.md, the primary color is...").
|
|
24
|
+
|
|
25
|
+
**If DESIGN.md does not exist:** Proceed with normal context gathering below. Consider suggesting the user run `/qualia:discuss-phase` to establish design decisions.
|
|
26
|
+
|
|
27
|
+
### Context Gathering (Do This First)
|
|
28
|
+
|
|
29
|
+
You cannot do a great job without having necessary context, such as target audience (critical), desired use-cases (critical), and understanding what's truly essential vs nice-to-have for this product.
|
|
30
|
+
|
|
31
|
+
Attempt to gather these from the current thread or codebase.
|
|
32
|
+
|
|
33
|
+
1. If you don't find *exact* information and have to infer from existing design and functionality, you MUST STOP and STOP and call the AskUserQuestionTool to clarify. whether you got it right.
|
|
34
|
+
2. Otherwise, if you can't fully infer or your level of confidence is medium or lower, you MUST STOP and call the AskUserQuestionTool to clarify. clarifying questions first to complete your context.
|
|
35
|
+
|
|
36
|
+
Do NOT proceed until you have answers. Simplifying the wrong things destroys usability.
|
|
37
|
+
|
|
38
|
+
### Use frontend-master skill
|
|
39
|
+
|
|
40
|
+
Use the frontend-master skill for design principles and anti-patterns. Do NOT proceed until it has executed and you know all DO's and DON'Ts.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Assess Current State
|
|
45
|
+
|
|
46
|
+
Analyze what makes the design feel complex or cluttered:
|
|
47
|
+
|
|
48
|
+
1. **Identify complexity sources**:
|
|
49
|
+
- **Too many elements**: Competing buttons, redundant information, visual clutter
|
|
50
|
+
- **Excessive variation**: Too many colors, fonts, sizes, styles without purpose
|
|
51
|
+
- **Information overload**: Everything visible at once, no progressive disclosure
|
|
52
|
+
- **Visual noise**: Unnecessary borders, shadows, backgrounds, decorations
|
|
53
|
+
- **Confusing hierarchy**: Unclear what matters most
|
|
54
|
+
- **Feature creep**: Too many options, actions, or paths forward
|
|
55
|
+
|
|
56
|
+
2. **Find the essence**:
|
|
57
|
+
- What's the primary user goal? (There should be ONE)
|
|
58
|
+
- What's actually necessary vs nice-to-have?
|
|
59
|
+
- What can be removed, hidden, or combined?
|
|
60
|
+
- What's the 20% that delivers 80% of value?
|
|
61
|
+
|
|
62
|
+
If any of these are unclear from the codebase, STOP and call the AskUserQuestionTool to clarify.
|
|
63
|
+
|
|
64
|
+
**CRITICAL**: Simplicity is not about removing features - it's about removing obstacles between users and their goals. Every element should justify its existence.
|
|
65
|
+
|
|
66
|
+
## Plan Simplification
|
|
67
|
+
|
|
68
|
+
Create a ruthless editing strategy:
|
|
69
|
+
|
|
70
|
+
- **Core purpose**: What's the ONE thing this should accomplish?
|
|
71
|
+
- **Essential elements**: What's truly necessary to achieve that purpose?
|
|
72
|
+
- **Progressive disclosure**: What can be hidden until needed?
|
|
73
|
+
- **Consolidation opportunities**: What can be combined or integrated?
|
|
74
|
+
|
|
75
|
+
**IMPORTANT**: Simplification is hard. It requires saying no to good ideas to make room for great execution. Be ruthless.
|
|
76
|
+
|
|
77
|
+
## Simplify the Design
|
|
78
|
+
|
|
79
|
+
Systematically remove complexity across these dimensions:
|
|
80
|
+
|
|
81
|
+
### Information Architecture
|
|
82
|
+
- **Reduce scope**: Remove secondary actions, optional features, redundant information
|
|
83
|
+
- **Progressive disclosure**: Hide complexity behind clear entry points (accordions, modals, step-through flows)
|
|
84
|
+
- **Combine related actions**: Merge similar buttons, consolidate forms, group related content
|
|
85
|
+
- **Clear hierarchy**: ONE primary action, few secondary actions, everything else tertiary or hidden
|
|
86
|
+
- **Remove redundancy**: If it's said elsewhere, don't repeat it here
|
|
87
|
+
|
|
88
|
+
### Visual Simplification
|
|
89
|
+
- **Reduce color palette**: Use 1-2 colors plus neutrals, not 5-7 colors
|
|
90
|
+
- **Limit typography**: One font family, 3-4 sizes maximum, 2-3 weights
|
|
91
|
+
- **Remove decorations**: Eliminate borders, shadows, backgrounds that don't serve hierarchy or function
|
|
92
|
+
- **Flatten structure**: Reduce nesting, remove unnecessary containers—never nest cards inside cards
|
|
93
|
+
- **Remove unnecessary cards**: Cards aren't needed for basic layout; use spacing and alignment instead
|
|
94
|
+
- **Consistent spacing**: Use one spacing scale, remove arbitrary gaps
|
|
95
|
+
|
|
96
|
+
### Layout Simplification
|
|
97
|
+
- **Linear flow**: Replace complex grids with simple vertical flow where possible
|
|
98
|
+
- **Remove sidebars**: Move secondary content inline or hide it
|
|
99
|
+
- **Full-width**: Use available space generously instead of complex multi-column layouts
|
|
100
|
+
- **Consistent alignment**: Pick left or center, stick with it
|
|
101
|
+
- **Generous white space**: Let content breathe, don't pack everything tight
|
|
102
|
+
|
|
103
|
+
### Interaction Simplification
|
|
104
|
+
- **Reduce choices**: Fewer buttons, fewer options, clearer path forward (paradox of choice is real)
|
|
105
|
+
- **Smart defaults**: Make common choices automatic, only ask when necessary
|
|
106
|
+
- **Inline actions**: Replace modal flows with inline editing where possible
|
|
107
|
+
- **Remove steps**: Can signup be one step instead of three? Can checkout be simplified?
|
|
108
|
+
- **Clear CTAs**: ONE obvious next step, not five competing actions
|
|
109
|
+
|
|
110
|
+
### Content Simplification
|
|
111
|
+
- **Shorter copy**: Cut every sentence in half, then do it again
|
|
112
|
+
- **Active voice**: "Save changes" not "Changes will be saved"
|
|
113
|
+
- **Remove jargon**: Plain language always wins
|
|
114
|
+
- **Scannable structure**: Short paragraphs, bullet points, clear headings
|
|
115
|
+
- **Essential information only**: Remove marketing fluff, legalese, hedging
|
|
116
|
+
- **Remove redundant copy**: No headers restating intros, no repeated explanations, say it once
|
|
117
|
+
|
|
118
|
+
### Code Simplification
|
|
119
|
+
- **Remove unused code**: Dead CSS, unused components, orphaned files
|
|
120
|
+
- **Flatten component trees**: Reduce nesting depth
|
|
121
|
+
- **Consolidate styles**: Merge similar styles, use utilities consistently
|
|
122
|
+
- **Reduce variants**: Does that component need 12 variations, or can 3 cover 90% of cases?
|
|
123
|
+
|
|
124
|
+
**NEVER**:
|
|
125
|
+
- Remove necessary functionality (simplicity ≠ feature-less)
|
|
126
|
+
- Sacrifice accessibility for simplicity (clear labels and ARIA still required)
|
|
127
|
+
- Make things so simple they're unclear (mystery ≠ minimalism)
|
|
128
|
+
- Remove information users need to make decisions
|
|
129
|
+
- Eliminate hierarchy completely (some things should stand out)
|
|
130
|
+
- Oversimplify complex domains (match complexity to actual task complexity)
|
|
131
|
+
|
|
132
|
+
## Verify Simplification
|
|
133
|
+
|
|
134
|
+
Ensure simplification improves usability:
|
|
135
|
+
|
|
136
|
+
- **Faster task completion**: Can users accomplish goals more quickly?
|
|
137
|
+
- **Reduced cognitive load**: Is it easier to understand what to do?
|
|
138
|
+
- **Still complete**: Are all necessary features still accessible?
|
|
139
|
+
- **Clearer hierarchy**: Is it obvious what matters most?
|
|
140
|
+
- **Better performance**: Does simpler design load faster?
|
|
141
|
+
|
|
142
|
+
## Document Removed Complexity
|
|
143
|
+
|
|
144
|
+
If you removed features or options:
|
|
145
|
+
- Document why they were removed
|
|
146
|
+
- Consider if they need alternative access points
|
|
147
|
+
- Note any user feedback to monitor
|
|
148
|
+
|
|
149
|
+
Remember: You have great taste and judgment. Simplification is an act of confidence - knowing what to keep and courage to remove the rest. As Antoine de Saint-Exupéry said: "Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away."
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: docs-lookup
|
|
3
|
+
description: Fetch up-to-date library and framework documentation on demand. Supplements Context7 MCP with zero context overhead. Activates automatically when working with external libraries.
|
|
4
|
+
tags: [documentation, libraries, frameworks, reference]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Docs Lookup (Supplements Context7 MCP)
|
|
8
|
+
|
|
9
|
+
When you need library/framework documentation, fetch it on demand instead of loading MCP tools every session.
|
|
10
|
+
|
|
11
|
+
## How to Fetch Docs
|
|
12
|
+
|
|
13
|
+
Use these methods in order of preference:
|
|
14
|
+
|
|
15
|
+
### 1. LLMs.txt (Best for major frameworks)
|
|
16
|
+
|
|
17
|
+
Many frameworks publish LLM-optimized docs. Fetch directly:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
WebFetch: https://supabase.com/llms/cli.txt — Supabase CLI
|
|
21
|
+
WebFetch: https://nextjs.org/llms.txt — Next.js
|
|
22
|
+
WebFetch: https://ui.shadcn.com/llms.txt — shadcn/ui
|
|
23
|
+
WebFetch: https://tailwindcss.com/llms.txt — Tailwind CSS
|
|
24
|
+
WebFetch: https://vercel.com/llms.txt — Vercel
|
|
25
|
+
WebFetch: https://docs.stripe.com/llms.txt — Stripe
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### 2. WebSearch (Best for specific questions)
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
WebSearch: "Next.js 16 server actions authentication 2026"
|
|
32
|
+
WebSearch: "supabase realtime subscription React hook"
|
|
33
|
+
WebSearch: "VAPI assistant webhook configuration"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 3. Official Docs via WebFetch
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
WebFetch: https://react.dev/reference/react/use
|
|
40
|
+
WebFetch: https://supabase.com/docs/guides/auth
|
|
41
|
+
WebFetch: https://docs.vapi.ai/assistants
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 4. Package README (npm)
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
WebFetch: https://www.npmjs.com/package/[package-name]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## When to Activate
|
|
51
|
+
|
|
52
|
+
This skill triggers when you:
|
|
53
|
+
- Write code using external libraries or frameworks
|
|
54
|
+
- Need to check API signatures or method parameters
|
|
55
|
+
- See unfamiliar library patterns in existing code
|
|
56
|
+
- Need version-specific behavior (breaking changes, new APIs)
|
|
57
|
+
- Are about to suggest an API call and aren't 100% sure of the signature
|
|
58
|
+
|
|
59
|
+
## IMPORTANT
|
|
60
|
+
|
|
61
|
+
- DO NOT hallucinate API signatures. If unsure, look it up first.
|
|
62
|
+
- Prefer llms.txt endpoints — they're concise and LLM-optimized
|
|
63
|
+
- Use WebSearch for the latest (training data may be stale)
|
|
64
|
+
- Fetch BEFORE writing code, not after getting errors
|
|
65
|
+
|
|
66
|
+
## Fawzi's Stack Quick Reference
|
|
67
|
+
|
|
68
|
+
| Tech | Docs |
|
|
69
|
+
|------|------|
|
|
70
|
+
| Next.js | `nextjs.org/llms.txt` |
|
|
71
|
+
| React | `react.dev/reference` |
|
|
72
|
+
| Supabase | `supabase.com/llms/cli.txt` |
|
|
73
|
+
| Tailwind | `tailwindcss.com/llms.txt` |
|
|
74
|
+
| shadcn/ui | `ui.shadcn.com/llms.txt` |
|
|
75
|
+
| Vercel | `vercel.com/llms.txt` |
|
|
76
|
+
| VAPI | `docs.vapi.ai` |
|
|
77
|
+
| ElevenLabs | `elevenlabs.io/docs` |
|
|
78
|
+
| Telnyx | `developers.telnyx.com` |
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: fcm-notifications
|
|
3
|
+
description: "Firebase Cloud Messaging (FCM) push notifications — device token management, topic subscriptions, notification payloads, background handlers, in-app notification system, and notification preferences. Use whenever implementing push notifications, device registration, notification sending from backend, in-app notification feeds, or notification preferences. Triggers on: push notification, FCM, Firebase Cloud Messaging, notification, device token, notification feed, alert, in-app notification, notification preferences."
|
|
4
|
+
tags: [notifications, fcm, firebase, push]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Architecture
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
Mobile App Backend (NestJS) Firebase
|
|
11
|
+
───────── ──────────────── ────────
|
|
12
|
+
1. Request permission
|
|
13
|
+
2. Get device token ──→ 3. Store token in DB
|
|
14
|
+
4. On event (dues, ticket)
|
|
15
|
+
5. Build notification ──→ 6. FCM sends push
|
|
16
|
+
7. Receive push
|
|
17
|
+
8. Show/handle
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Device Token Management (Backend)
|
|
21
|
+
|
|
22
|
+
- Store device tokens per user (user can have multiple devices)
|
|
23
|
+
- Table: `device_token` (user_id, token, platform, created_at, last_used_at)
|
|
24
|
+
- Update token on every app launch (tokens can change)
|
|
25
|
+
- Clean up stale tokens (FCM returns errors for invalid tokens)
|
|
26
|
+
- Delete tokens on logout
|
|
27
|
+
|
|
28
|
+
## Sending Notifications (Backend - NestJS)
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
@Injectable()
|
|
32
|
+
export class NotificationService {
|
|
33
|
+
async send(userId: string, notification: NotificationPayload) {
|
|
34
|
+
const tokens = await this.getActiveTokens(userId);
|
|
35
|
+
if (tokens.length === 0) return;
|
|
36
|
+
|
|
37
|
+
// Store in-app notification regardless of push
|
|
38
|
+
await this.createInAppNotification(userId, notification);
|
|
39
|
+
|
|
40
|
+
// Send push via FCM
|
|
41
|
+
const message = {
|
|
42
|
+
tokens: tokens.map(t => t.token),
|
|
43
|
+
notification: {
|
|
44
|
+
title: this.i18n.resolve(notification.titleKey, userId),
|
|
45
|
+
body: this.i18n.resolve(notification.bodyKey, userId),
|
|
46
|
+
},
|
|
47
|
+
data: notification.data, // Custom payload for app handling
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const response = await this.fcm.sendEachForMulticast(message);
|
|
51
|
+
await this.handleFailedTokens(response, tokens);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Notification Payload Structure
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
interface NotificationPayload {
|
|
60
|
+
titleKey: string; // i18n message key
|
|
61
|
+
bodyKey: string; // i18n message key
|
|
62
|
+
type: NotificationType; // For routing in-app
|
|
63
|
+
data: {
|
|
64
|
+
entityType: string; // 'ticket', 'dues', 'guard_task', etc.
|
|
65
|
+
entityId: string;
|
|
66
|
+
buildingId?: string;
|
|
67
|
+
unitId?: string;
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
- Use message_keys for title/body (resolved to user's locale before sending)
|
|
73
|
+
- Include routing data so app can navigate to relevant screen on tap
|
|
74
|
+
|
|
75
|
+
## Topic Subscriptions
|
|
76
|
+
|
|
77
|
+
- Subscribe users to building-level topics: `building_{buildingId}`
|
|
78
|
+
- Use for building-wide announcements
|
|
79
|
+
- Subscribe on building join, unsubscribe on leave
|
|
80
|
+
- Alternative to fetching all member tokens for broadcast
|
|
81
|
+
|
|
82
|
+
## In-App Notification System
|
|
83
|
+
|
|
84
|
+
- `notification` table: user_id, type, title_key, body_key, data, read_at, created_at
|
|
85
|
+
- Separate from push — push is delivery mechanism, in-app is persistence
|
|
86
|
+
- Unread count badge
|
|
87
|
+
- Mark as read (individual or bulk)
|
|
88
|
+
- Notification feed screen with infinite scroll
|
|
89
|
+
|
|
90
|
+
## Notification Types (by domain)
|
|
91
|
+
|
|
92
|
+
- DUES_GENERATED — new dues cycle obligation
|
|
93
|
+
- DUES_LATE — obligation transitioned to late
|
|
94
|
+
- CREDIT_TOPUP_APPROVED/REJECTED — BM reviewed top-up
|
|
95
|
+
- TICKET_CREATED/UPDATED/ASSIGNED — ticket state changes
|
|
96
|
+
- GUARD_TASK_REMINDER — T-15m before scheduled task
|
|
97
|
+
- GUARD_TASK_ASSIGNED — new task assigned
|
|
98
|
+
- GUARD_INVITE — invitation to be building guard
|
|
99
|
+
- SUBSCRIPTION_EXPIRING — trial/subscription about to expire
|
|
100
|
+
- DOCUMENT_APPROVED/REJECTED — document review outcome
|
|
101
|
+
- CLAIM_APPROVED/REJECTED — unit claim review outcome
|
|
102
|
+
|
|
103
|
+
## Mobile Integration (React Native Expo)
|
|
104
|
+
|
|
105
|
+
- `expo-notifications` for handling both push and local
|
|
106
|
+
- Request permission on first relevant action (not on app launch)
|
|
107
|
+
- Register device token with backend after permission granted
|
|
108
|
+
- Handle notification tap: navigate to relevant screen using data payload
|
|
109
|
+
- Background notification handler for silent updates
|
|
110
|
+
- Notification categories for actionable notifications (approve/reject)
|
|
111
|
+
|
|
112
|
+
## Preferences
|
|
113
|
+
|
|
114
|
+
- User can toggle notification types on/off
|
|
115
|
+
- Store in user_notification_preferences table
|
|
116
|
+
- Backend checks preferences before sending
|
|
117
|
+
- Some notifications are mandatory (security alerts, subscription changes)
|
|
118
|
+
|
|
119
|
+
## Testing
|
|
120
|
+
|
|
121
|
+
- Use FCM test mode for development
|
|
122
|
+
- Mock NotificationService in unit tests
|
|
123
|
+
- Test token cleanup on invalid responses
|
|
124
|
+
- Test preference filtering
|
|
125
|
+
- Test i18n resolution for different locales
|