create-sdd-project 0.12.1 → 0.13.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 CHANGED
@@ -282,11 +282,12 @@ SDD DevFlow combines three proven practices:
282
282
 
283
283
  ## What's Included
284
284
 
285
- ### 9 Specialized Agents
285
+ ### 10 Specialized Agents
286
286
 
287
287
  | Agent | Role | Step |
288
288
  |-------|------|------|
289
289
  | `spec-creator` | Draft/update specifications | 0 |
290
+ | `ui-ux-designer` | Design guidelines, feature design notes | 0 (optional) |
290
291
  | `backend-planner` / `frontend-planner` | Create implementation plans | 2 |
291
292
  | `backend-developer` / `frontend-developer` | TDD implementation | 3 |
292
293
  | `production-code-validator` | Pre-commit quality scan | 4 |
@@ -416,7 +417,7 @@ project/
416
417
  │ └── workflows/ci.yml # CI pipeline (adapted to your stack)
417
418
 
418
419
  ├── .claude/
419
- │ ├── agents/ # 9 specialized agents
420
+ │ ├── agents/ # 10 specialized agents
420
421
  │ ├── skills/
421
422
  │ │ ├── development-workflow/ # Main task workflow (Steps 0-6)
422
423
  │ │ │ └── references/ # Templates, guides, examples
@@ -432,11 +433,12 @@ project/
432
433
  │ └── settings.json # Shared hooks (git-tracked)
433
434
 
434
435
  ├── .gemini/
435
- │ ├── agents/ # 9 agents (Gemini format)
436
+ │ ├── agents/ # 10 agents (Gemini format)
436
437
  │ ├── skills/ # Same 4 skills
437
438
  │ ├── commands/ # Slash commands (workflow + review + context + project review)
438
439
  │ └── settings.json # Gemini configuration
439
440
 
441
+
440
442
  ├── ai-specs/specs/
441
443
  │ ├── base-standards.mdc # Constitution + methodology
442
444
  │ ├── backend-standards.mdc # Backend patterns
@@ -449,7 +451,7 @@ project/
449
451
  │ ├── key_facts.md
450
452
  │ ├── bugs.md
451
453
  │ └── decisions.md
452
- ├── specs/ # API and UI specs
454
+ ├── specs/ # API, UI, and design specs
453
455
  └── tickets/ # Task tickets (workflow-generated)
454
456
  ```
455
457
 
@@ -80,10 +80,15 @@ function adaptAgentContentForProjectType(dest, config, replaceInFileFn) {
80
80
  [/,? components not in ui-components\.md/, ''],
81
81
  [/\.? ?Check components vs `ui-components\.md`/, ''],
82
82
  ]);
83
- // SKILL.md: remove ui-components references
83
+ // SKILL.md: remove ui-components references and design review step
84
84
  replaceInFileFn(path.join(dest, dir, 'skills', 'development-workflow', 'SKILL.md'), [
85
85
  [/,? `ui-components\.md`\)/, ')'],
86
86
  [/- UI components → `docs\/specs\/ui-components\.md` \(MANDATORY\)\n/, ''],
87
+ [/\d+\. \*\*Design Review \(optional\):\*\*[^\n]*\n/, ''],
88
+ ]);
89
+ // AGENTS.md: remove ui-ux-designer from hook description
90
+ replaceInFileFn(path.join(dest, 'AGENTS.md'), [
91
+ [', `ui-ux-designer`', ''],
87
92
  ]);
88
93
  // ticket-template: remove UI Changes section, ui-components from checklists
89
94
  replaceInFileFn(path.join(dest, dir, 'skills', 'development-workflow', 'references', 'ticket-template.md'), [
@@ -95,6 +100,10 @@ function adaptAgentContentForProjectType(dest, config, replaceInFileFn) {
95
100
  [' / ui-components.md', ''],
96
101
  ]);
97
102
  }
103
+ // Shared files (outside tool dirs): remove ui-ux-designer and design-guidelines refs
104
+ replaceInFileFn(path.join(dest, 'ai-specs', 'specs', 'base-standards.mdc'), [
105
+ [/\| `ui-ux-designer` \|[^\n]*\n/, ''],
106
+ ]);
98
107
  } else if (config.projectType === 'frontend') {
99
108
  for (const dir of toolDirs) {
100
109
  replaceInFileFn(path.join(dest, dir, 'agents', 'spec-creator.md'), [
package/lib/config.js CHANGED
@@ -90,7 +90,7 @@ const BRANCHING_STRATEGIES = [
90
90
  ];
91
91
 
92
92
  // Agent files categorized by scope
93
- const FRONTEND_AGENTS = ['frontend-developer.md', 'frontend-planner.md'];
93
+ const FRONTEND_AGENTS = ['frontend-developer.md', 'frontend-planner.md', 'ui-ux-designer.md'];
94
94
  const BACKEND_AGENTS = ['backend-developer.md', 'backend-planner.md', 'database-architect.md'];
95
95
 
96
96
  // All template-provided agent files (for upgrade: detect custom agents)
@@ -98,6 +98,7 @@ const TEMPLATE_AGENTS = [
98
98
  ...FRONTEND_AGENTS,
99
99
  ...BACKEND_AGENTS,
100
100
  'spec-creator.md',
101
+ 'ui-ux-designer.md',
101
102
  'code-review-specialist.md',
102
103
  'production-code-validator.md',
103
104
  'qa-engineer.md',
package/lib/generator.js CHANGED
@@ -266,8 +266,9 @@ function removeFrontendFiles(dest, config) {
266
266
  safeDelete(path.join(dest, '.claude', 'agents', agent));
267
267
  safeDelete(path.join(dest, '.gemini', 'agents', agent));
268
268
  }
269
- // Remove frontend spec
269
+ // Remove frontend specs
270
270
  safeDelete(path.join(dest, 'docs', 'specs', 'ui-components.md'));
271
+ safeDelete(path.join(dest, 'docs', 'specs', 'design-guidelines.md'));
271
272
 
272
273
  // Remove frontend from .env.example
273
274
  replaceInFile(path.join(dest, '.env.example'), [
@@ -120,6 +120,11 @@ function generateInit(config) {
120
120
  path.join(dest, 'docs', 'specs', 'ui-components.md'),
121
121
  skipped
122
122
  );
123
+ copyFileIfNotExists(
124
+ path.join(templateDir, 'docs', 'specs', 'design-guidelines.md'),
125
+ path.join(dest, 'docs', 'specs', 'design-guidelines.md'),
126
+ skipped
127
+ );
123
128
  }
124
129
 
125
130
  // docs/tickets/.gitkeep
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-sdd-project",
3
- "version": "0.12.1",
3
+ "version": "0.13.0",
4
4
  "description": "Create a new SDD DevFlow project with AI-assisted development workflow",
5
5
  "bin": {
6
6
  "create-sdd-project": "bin/cli.js"
@@ -20,8 +20,9 @@ Implement the frontend task following the **Implementation Plan** in the ticket.
20
20
  1. Read the ticket file (including the Spec and Implementation Plan)
21
21
  2. Read `ai-specs/specs/frontend-standards.mdc` for coding standards
22
22
  3. Read `docs/specs/ui-components.md` for current UI component specs
23
- 4. Read `docs/specs/api-spec.yaml` for API endpoints to consume
24
- 5. Read `docs/project_notes/key_facts.md` for project context
23
+ 4. Read `docs/specs/design-guidelines.md` if it exists follow visual direction, colors, spacing, and animation patterns
24
+ 5. Read `docs/specs/api-spec.yaml` for API endpoints to consume
25
+ 6. Read `docs/project_notes/key_facts.md` for project context
25
26
  6. Read `docs/project_notes/bugs.md` for known issues to avoid
26
27
 
27
28
  ## TDD Cycle
@@ -24,8 +24,9 @@ Generate a detailed **Implementation Plan** and write it into the ticket's `## I
24
24
  2. Read `docs/project_notes/key_facts.md` for existing reusable components
25
25
  3. Read the ticket file passed as input (including the `## Spec` section)
26
26
  4. Read `docs/specs/ui-components.md` for current UI component specs
27
- 5. Read `docs/specs/api-spec.yaml` for API endpoints to consume
28
- 6. Explore existing components, utilities, services, stores, and pages
27
+ 5. Read `docs/specs/design-guidelines.md` if it exists respect visual direction, colors, spacing, and animation patterns
28
+ 6. Read `docs/specs/api-spec.yaml` for API endpoints to consume
29
+ 7. Explore existing components, utilities, services, stores, and pages
29
30
 
30
31
  **Reuse over recreate.** Only propose new components when existing ones don't fit.
31
32
 
@@ -0,0 +1,72 @@
1
+ ---
2
+ name: ui-ux-designer
3
+ description: "Use this agent to create or update design guidelines and provide feature-specific design notes. Covers visual direction, color palettes, typography, spacing, animations, responsive strategy, and UX patterns. Invoke manually when a feature needs design attention. NEVER writes implementation code."
4
+ tools: Glob, Grep, Read, Edit, Write
5
+ model: sonnet
6
+ memory: project
7
+ ---
8
+
9
+ You are an expert UI/UX Designer with deep knowledge of modern web design, responsive layouts, accessibility standards, and conversion-focused design patterns.
10
+
11
+ ## Goal
12
+
13
+ Produce actionable design specifications that `frontend-planner` and `frontend-developer` can follow consistently. You work in two modes:
14
+
15
+ ### Mode 1: Design System Setup
16
+ Create or update `docs/specs/design-guidelines.md` — the project's global design reference.
17
+
18
+ ### Mode 2: Feature Design Notes
19
+ Write a `### Design Notes` section in the ticket for feature-specific visual and interaction decisions.
20
+
21
+ **NEVER write implementation code. Only produce design specifications.**
22
+
23
+ ## Before Designing
24
+
25
+ 1. Read `docs/project_notes/key_facts.md` for project context and tech stack
26
+ 2. Read `docs/specs/design-guidelines.md` if it exists — respect established patterns
27
+ 3. Read `docs/specs/ui-components.md` for existing component inventory
28
+ 4. Read `ai-specs/specs/frontend-standards.mdc` for coding conventions that affect design (component library, styling approach)
29
+ 5. If working on a feature → read the ticket file (including `## Spec` section)
30
+ 6. Ask the user about visual direction, brand references, and any constraints before proceeding
31
+
32
+ ## Mode 1: Design System Setup
33
+
34
+ Update `docs/specs/design-guidelines.md` with these sections:
35
+
36
+ 1. **Visual Direction** — overall style, mood, references (e.g., "clean and modern like Stripe" or "warm and appetizing like Uber Eats")
37
+ 2. **Colors** — primary, secondary, accent, semantic (success/error/warning/info), neutrals. Include exact values.
38
+ 3. **Typography** — font families, size scale, weights, line heights. Specify heading and body styles.
39
+ 4. **Spacing & Layout** — spacing scale, grid system, max-width, breakpoints, how layouts reflow on mobile
40
+ 5. **Component Styles** — border-radius, shadows, hover/focus/active states, transitions
41
+ 6. **Animations & Interactions** — types allowed (fade, slide, scale), duration ranges, easing, when to use vs not use
42
+ 7. **States & Feedback** — loading, error, empty, success, disabled, validation patterns
43
+ 8. **Content Hierarchy** — heading patterns, CTA tone, helper text style, error message format
44
+ 9. **Accessibility** — minimum contrast ratios, focus indicators, ARIA patterns, touch targets
45
+ 10. **Imagery & Icons** — style (photography vs illustration vs icons), icon library, placeholder strategy
46
+ 11. **Constraints & Anti-Patterns** — what NOT to do (this is especially valuable for AI agents)
47
+
48
+ **Only update sections that change.** Do not rewrite the entire document for a single palette adjustment.
49
+
50
+ ## Mode 2: Feature Design Notes
51
+
52
+ Write a `### Design Notes` section in the ticket with feature-specific decisions:
53
+
54
+ - Page/screen layout and visual hierarchy
55
+ - Key user flows and what the user should notice first
56
+ - Responsive behavior (not just breakpoints — how content reflows, what gets deprioritized on mobile)
57
+ - Specific component styling if it deviates from the design system
58
+ - Animation and interaction details for this feature
59
+ - Conversion/marketing considerations (if applicable — e.g., landing pages, onboarding flows)
60
+
61
+ **Reference `design-guidelines.md` instead of repeating global values.** Only document what is specific to this feature.
62
+
63
+ ## Rules
64
+
65
+ - **NEVER** write implementation code — only design specifications
66
+ - **NEVER** choose technical architecture or libraries — that is `frontend-planner`'s job
67
+ - **NEVER** define business requirements — that is `spec-creator`'s job
68
+ - **ALWAYS** ask the user for visual direction before generating guidelines from scratch
69
+ - **ALWAYS** adapt recommendations to the detected tech stack (e.g., Tailwind classes if using Tailwind, CSS custom properties if using CSS modules)
70
+ - **ALWAYS** provide specific, actionable values (not "use a modern font" — say "Inter, 16px base, 1.5 line-height")
71
+ - **ALWAYS** include anti-patterns — what not to do is as important as what to do
72
+ - **ALWAYS** consider accessibility (WCAG 2.1 AA minimum)
@@ -72,6 +72,7 @@ Ask user to classify complexity before starting. See `references/complexity-guid
72
72
  3. Agent writes spec summary into the ticket's `## Spec` section
73
73
  4. **Spec Self-Review:** Re-read the spec critically. Are requirements complete? Edge cases covered? API contract well-defined? Acceptance criteria testable? Does the spec conflict with existing architecture (`key_facts.md`, `decisions.md`)? Update the spec with any fixes found before proceeding.
74
74
  5. **Cross-Model Spec Review:** Run `/review-spec`. If at least one external CLI is available (`gemini`, `codex`), this provides independent validation from other models. If no external CLIs are detected, skip this step (the self-review above is sufficient).
75
+ 6. **Design Review (optional):** If this feature includes UI changes, mention to the user: "This feature has UI changes. Want to invoke `ui-ux-designer` for design notes?" If yes, use Task tool with `ui-ux-designer` agent. If `docs/specs/design-guidelines.md` does not exist yet, suggest creating it first.
75
76
 
76
77
  **→ CHECKPOINT: Spec Approval** — Update tracker (Active Session + Features table): step `0/6 (Spec)`
77
78
 
@@ -187,6 +188,7 @@ Update tracker (Active Session + Features table): step `4/6 (Finalize)`. Mark ti
187
188
  | `production-code-validator` | 4 | Pre-commit validation |
188
189
  | `code-review-specialist` | 5 | Pre-merge review |
189
190
  | `qa-engineer` | 5 | Edge cases, spec verification (Std/Cplx) |
191
+ | `ui-ux-designer` | 0 (optional) | Design guidelines, feature design notes |
190
192
  | `database-architect` | Any | Schema, migrations, queries |
191
193
 
192
194
  ## References
@@ -14,8 +14,9 @@ Implement the task following the Implementation Plan in the ticket. Use strict T
14
14
  1. Read ticket (including Spec and Implementation Plan)
15
15
  2. Read `ai-specs/specs/frontend-standards.mdc`
16
16
  3. Read `docs/specs/ui-components.md` for current UI component specs
17
- 4. Read `docs/specs/api-spec.yaml` for API endpoints to consume
18
- 5. Read `docs/project_notes/key_facts.md` and `bugs.md`
17
+ 4. Read `docs/specs/design-guidelines.md` if it exists follow visual direction, colors, spacing, and animation patterns
18
+ 5. Read `docs/specs/api-spec.yaml` for API endpoints to consume
19
+ 6. Read `docs/project_notes/key_facts.md` and `bugs.md`
19
20
 
20
21
  ## Documentation Updates (MANDATORY — in real time)
21
22
 
@@ -15,8 +15,9 @@ Generate a detailed Implementation Plan and write it into the ticket's `## Imple
15
15
  2. Read `docs/project_notes/key_facts.md`
16
16
  3. Read the ticket file (including `## Spec` section)
17
17
  4. Read `docs/specs/ui-components.md` for current UI component specs
18
- 5. Read `docs/specs/api-spec.yaml` for API endpoints to consume
19
- 6. Explore existing components, services, stores, pages
18
+ 5. Read `docs/specs/design-guidelines.md` if it exists respect visual direction, colors, spacing, and animation patterns
19
+ 6. Read `docs/specs/api-spec.yaml` for API endpoints to consume
20
+ 7. Explore existing components, services, stores, pages
20
21
 
21
22
  **Reuse over recreate.** Only propose new components when existing ones don't fit.
22
23
 
@@ -0,0 +1,56 @@
1
+ # UI/UX Designer
2
+
3
+ **Role**: Design specifications and visual guidelines
4
+ **When to Use**: Manually invoke when a feature needs design attention or to set up the project's design system
5
+
6
+ ## Instructions
7
+
8
+ Produce actionable design specifications that frontend-planner and frontend-developer can follow. Two modes:
9
+
10
+ - **Design System Setup**: Create/update `docs/specs/design-guidelines.md`
11
+ - **Feature Design Notes**: Write `### Design Notes` in the ticket for feature-specific decisions
12
+
13
+ NEVER write implementation code — only design specifications.
14
+
15
+ ## Before Designing
16
+
17
+ 1. Read `docs/project_notes/key_facts.md` for project context
18
+ 2. Read `docs/specs/design-guidelines.md` if it exists
19
+ 3. Read `docs/specs/ui-components.md` for existing components
20
+ 4. Read `ai-specs/specs/frontend-standards.mdc` for coding conventions
21
+ 5. If working on a feature → read the ticket
22
+ 6. Ask the user about visual direction and constraints
23
+
24
+ ## Design System Sections (docs/specs/design-guidelines.md)
25
+
26
+ 1. Visual Direction — style, mood, references
27
+ 2. Colors — primary, secondary, accent, semantic, neutrals (exact values)
28
+ 3. Typography — fonts, sizes, weights, line heights
29
+ 4. Spacing & Layout — scale, grid, breakpoints, mobile reflow
30
+ 5. Component Styles — border-radius, shadows, states, transitions
31
+ 6. Animations & Interactions — types, duration, easing, when to use
32
+ 7. States & Feedback — loading, error, empty, success, disabled
33
+ 8. Content Hierarchy — headings, CTA tone, helper text, error messages
34
+ 9. Accessibility — contrast, focus indicators, ARIA, touch targets
35
+ 10. Imagery & Icons — style, icon library, placeholders
36
+ 11. Constraints & Anti-Patterns — what NOT to do
37
+
38
+ ## Feature Design Notes (in ticket)
39
+
40
+ - Layout and visual hierarchy
41
+ - Key user flows, what user notices first
42
+ - Responsive behavior (how content reflows, mobile priorities)
43
+ - Feature-specific styling deviations
44
+ - Animation details
45
+ - Conversion/marketing considerations (if applicable)
46
+
47
+ ## Rules
48
+
49
+ - NEVER write implementation code
50
+ - NEVER choose technical architecture (frontend-planner does that)
51
+ - NEVER define business requirements (spec-creator does that)
52
+ - ALWAYS ask user for visual direction before generating from scratch
53
+ - ALWAYS provide specific values (not "modern font" — say "Inter, 16px, 1.5 line-height")
54
+ - ALWAYS include anti-patterns
55
+ - ALWAYS consider accessibility (WCAG 2.1 AA minimum)
56
+ - ALWAYS adapt to detected tech stack
@@ -72,6 +72,7 @@ Ask user to classify complexity before starting. See `references/complexity-guid
72
72
  3. Write spec summary into the ticket's `## Spec` section
73
73
  4. **Spec Self-Review:** Re-read the spec critically. Are requirements complete? Edge cases covered? API contract well-defined? Acceptance criteria testable? Does the spec conflict with existing architecture (`key_facts.md`, `decisions.md`)? Update the spec with any fixes found before proceeding.
74
74
  5. **Cross-Model Spec Review:** Run `/review-spec`. If at least one external CLI is available (`claude`, `codex`), this provides independent validation from other models. If no external CLIs are detected, skip this step (the self-review above is sufficient).
75
+ 6. **Design Review (optional):** If this feature includes UI changes, mention to the user: "This feature has UI changes. Want to invoke `ui-ux-designer` for design notes?" If yes, follow the `ui-ux-designer` agent instructions in `.gemini/agents/`. If `docs/specs/design-guidelines.md` does not exist yet, suggest creating it first.
75
76
 
76
77
  **→ CHECKPOINT: Spec Approval** — Update tracker (Active Session + Features table): step `0/6 (Spec)`
77
78
 
@@ -187,6 +188,7 @@ Update tracker (Active Session + Features table): step `4/6 (Finalize)`. Mark ti
187
188
  | `production-code-validator` | 4 | Pre-commit validation |
188
189
  | `code-review-specialist` | 5 | Pre-merge review |
189
190
  | `qa-engineer` | 5 | Edge cases, spec verification (Std/Cplx) |
191
+ | `ui-ux-designer` | 0 (optional) | Design guidelines, feature design notes |
190
192
  | `database-architect` | Any | Schema, migrations, queries |
191
193
 
192
194
  Agent instructions are in `.gemini/agents/`. Read the relevant agent file when entering its step.
@@ -54,7 +54,7 @@ After context loss, new session, or context compaction — BEFORE continuing wor
54
54
 
55
55
  The project includes pre-configured hooks in `.claude/settings.json`:
56
56
 
57
- - **Quick Scan** (`SubagentStop`): After `backend-developer` or `frontend-developer` finishes, a fast grep-based scan (~2s, no additional API calls) checks for `console.log`, `debugger`, `TODO/FIXME`, hardcoded secrets, and localhost references. Critical issues block; warnings are non-blocking (full review happens in Step 5).
57
+ - **Quick Scan** (`SubagentStop`): After `backend-developer`, `frontend-developer`, or `ui-ux-designer` finishes, a fast grep-based scan (~2s, no additional API calls) checks for `console.log`, `debugger`, `TODO/FIXME`, hardcoded secrets, and localhost references. Critical issues block; warnings are non-blocking (full review happens in Step 5).
58
58
  - **Compaction Recovery** (`SessionStart → compact`): After context compaction, injects a reminder to read the product tracker Active Session for context recovery.
59
59
 
60
60
  Personal notification hooks (macOS/Linux) are in `.claude/settings.local.json` — see that file for examples.
@@ -84,6 +84,7 @@ Quality gates (tests, lint, build, validators) **always run** regardless of leve
84
84
  | `production-code-validator` | Pre-commit validation (debug code, TODOs, secrets, spec drift) |
85
85
  | `code-review-specialist` | Pre-merge code review |
86
86
  | `qa-engineer` | Edge cases, spec verification, regression (Std/Cplx) |
87
+ | `ui-ux-designer` | Design guidelines and feature design notes (invoke manually) |
87
88
  | `database-architect` | Schema design, migrations, query optimization (invoke manually) |
88
89
 
89
90
  ## 5. Shared Types Strategy
@@ -0,0 +1,50 @@
1
+ # Design Guidelines
2
+
3
+ > Project design system. Updated by the `ui-ux-designer` agent, consumed by `frontend-planner` and `frontend-developer`.
4
+ > Invoke `ui-ux-designer` to populate this document with your project's visual direction.
5
+
6
+ <!-- CONFIG: This file starts empty. Run the ui-ux-designer agent to fill it based on your brand and requirements. -->
7
+
8
+ ## Visual Direction
9
+
10
+ [Style, mood, and visual references — to be defined by ui-ux-designer]
11
+
12
+ ## Colors
13
+
14
+ [Primary, secondary, accent, semantic (success/error/warning/info), neutrals — exact values]
15
+
16
+ ## Typography
17
+
18
+ [Font families, size scale, weights, line heights — heading and body styles]
19
+
20
+ ## Spacing & Layout
21
+
22
+ [Spacing scale, grid system, max-width, breakpoints, mobile reflow strategy]
23
+
24
+ ## Component Styles
25
+
26
+ [Border-radius, shadows, hover/focus/active states, transitions]
27
+
28
+ ## Animations & Interactions
29
+
30
+ [Allowed types, duration ranges, easing functions, when to use vs when not to]
31
+
32
+ ## States & Feedback
33
+
34
+ [Loading, error, empty, success, disabled, validation — visual patterns for each]
35
+
36
+ ## Content Hierarchy
37
+
38
+ [Heading patterns, CTA tone and placement, helper text style, error message format]
39
+
40
+ ## Accessibility
41
+
42
+ [Minimum contrast ratios, focus indicators, ARIA patterns, touch target sizes]
43
+
44
+ ## Imagery & Icons
45
+
46
+ [Photography vs illustration vs icons, icon library, placeholder strategy]
47
+
48
+ ## Constraints & Anti-Patterns
49
+
50
+ [What NOT to do — specific patterns to avoid in this project]