@adriankulik/create-fullstack-app 1.1.0 → 1.2.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.
Files changed (27) hide show
  1. package/README.md +5 -1
  2. package/package.json +1 -1
  3. package/templates/base/.agents/skills/accessibility-general/SKILL.md +231 -0
  4. package/templates/base/.agents/skills/senior-frontend/SKILL.md +209 -0
  5. package/templates/base/.agents/skills/senior-frontend/references/frontend_best_practices.md +103 -0
  6. package/templates/base/.agents/skills/senior-frontend/references/nextjs_optimization_guide.md +103 -0
  7. package/templates/base/.agents/skills/senior-frontend/references/react_patterns.md +103 -0
  8. package/templates/base/.agents/skills/senior-frontend/scripts/bundle_analyzer.py +114 -0
  9. package/templates/base/.agents/skills/senior-frontend/scripts/component_generator.py +114 -0
  10. package/templates/base/.agents/skills/senior-frontend/scripts/frontend_scaffolder.py +114 -0
  11. package/templates/base/.agents/skills/senior-fullstack/SKILL.md +209 -0
  12. package/templates/base/.agents/skills/senior-fullstack/references/architecture_patterns.md +103 -0
  13. package/templates/base/.agents/skills/senior-fullstack/references/development_workflows.md +103 -0
  14. package/templates/base/.agents/skills/senior-fullstack/references/tech_stack_guide.md +103 -0
  15. package/templates/base/.agents/skills/senior-fullstack/scripts/code_quality_analyzer.py +114 -0
  16. package/templates/base/.agents/skills/senior-fullstack/scripts/fullstack_scaffolder.py +114 -0
  17. package/templates/base/.agents/skills/senior-fullstack/scripts/project_scaffolder.py +114 -0
  18. package/templates/base/.agents/skills/senior-qa/SKILL.md +209 -0
  19. package/templates/base/.agents/skills/senior-qa/references/qa_best_practices.md +103 -0
  20. package/templates/base/.agents/skills/senior-qa/references/test_automation_patterns.md +103 -0
  21. package/templates/base/.agents/skills/senior-qa/references/testing_strategies.md +103 -0
  22. package/templates/base/.agents/skills/senior-qa/scripts/coverage_analyzer.py +114 -0
  23. package/templates/base/.agents/skills/senior-qa/scripts/e2e_test_scaffolder.py +114 -0
  24. package/templates/base/.agents/skills/senior-qa/scripts/test_suite_generator.py +114 -0
  25. package/templates/base/ACCESSIBILITY.md +117 -0
  26. package/templates/base/{GEMINI.md → AGENTS.md} +1 -1
  27. package/templates/base/README.md +12 -0
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ E2E Test Scaffolder
4
+ Automated tool for senior qa tasks
5
+ """
6
+
7
+ import os
8
+ import sys
9
+ import json
10
+ import argparse
11
+ from pathlib import Path
12
+ from typing import Dict, List, Optional
13
+
14
+ class E2ETestScaffolder:
15
+ """Main class for e2e test scaffolder functionality"""
16
+
17
+ def __init__(self, target_path: str, verbose: bool = False):
18
+ self.target_path = Path(target_path)
19
+ self.verbose = verbose
20
+ self.results = {}
21
+
22
+ def run(self) -> Dict:
23
+ """Execute the main functionality"""
24
+ print(f"🚀 Running {self.__class__.__name__}...")
25
+ print(f"📁 Target: {self.target_path}")
26
+
27
+ try:
28
+ self.validate_target()
29
+ self.analyze()
30
+ self.generate_report()
31
+
32
+ print("✅ Completed successfully!")
33
+ return self.results
34
+
35
+ except Exception as e:
36
+ print(f"❌ Error: {e}")
37
+ sys.exit(1)
38
+
39
+ def validate_target(self):
40
+ """Validate the target path exists and is accessible"""
41
+ if not self.target_path.exists():
42
+ raise ValueError(f"Target path does not exist: {self.target_path}")
43
+
44
+ if self.verbose:
45
+ print(f"✓ Target validated: {self.target_path}")
46
+
47
+ def analyze(self):
48
+ """Perform the main analysis or operation"""
49
+ if self.verbose:
50
+ print("📊 Analyzing...")
51
+
52
+ # Main logic here
53
+ self.results['status'] = 'success'
54
+ self.results['target'] = str(self.target_path)
55
+ self.results['findings'] = []
56
+
57
+ # Add analysis results
58
+ if self.verbose:
59
+ print(f"✓ Analysis complete: {len(self.results.get('findings', []))} findings")
60
+
61
+ def generate_report(self):
62
+ """Generate and display the report"""
63
+ print("\n" + "="*50)
64
+ print("REPORT")
65
+ print("="*50)
66
+ print(f"Target: {self.results.get('target')}")
67
+ print(f"Status: {self.results.get('status')}")
68
+ print(f"Findings: {len(self.results.get('findings', []))}")
69
+ print("="*50 + "\n")
70
+
71
+ def main():
72
+ """Main entry point"""
73
+ parser = argparse.ArgumentParser(
74
+ description="E2E Test Scaffolder"
75
+ )
76
+ parser.add_argument(
77
+ 'target',
78
+ help='Target path to analyze or process'
79
+ )
80
+ parser.add_argument(
81
+ '--verbose', '-v',
82
+ action='store_true',
83
+ help='Enable verbose output'
84
+ )
85
+ parser.add_argument(
86
+ '--json',
87
+ action='store_true',
88
+ help='Output results as JSON'
89
+ )
90
+ parser.add_argument(
91
+ '--output', '-o',
92
+ help='Output file path'
93
+ )
94
+
95
+ args = parser.parse_args()
96
+
97
+ tool = E2ETestScaffolder(
98
+ args.target,
99
+ verbose=args.verbose
100
+ )
101
+
102
+ results = tool.run()
103
+
104
+ if args.json:
105
+ output = json.dumps(results, indent=2)
106
+ if args.output:
107
+ with open(args.output, 'w') as f:
108
+ f.write(output)
109
+ print(f"Results written to {args.output}")
110
+ else:
111
+ print(output)
112
+
113
+ if __name__ == '__main__':
114
+ main()
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Test Suite Generator
4
+ Automated tool for senior qa tasks
5
+ """
6
+
7
+ import os
8
+ import sys
9
+ import json
10
+ import argparse
11
+ from pathlib import Path
12
+ from typing import Dict, List, Optional
13
+
14
+ class TestSuiteGenerator:
15
+ """Main class for test suite generator functionality"""
16
+
17
+ def __init__(self, target_path: str, verbose: bool = False):
18
+ self.target_path = Path(target_path)
19
+ self.verbose = verbose
20
+ self.results = {}
21
+
22
+ def run(self) -> Dict:
23
+ """Execute the main functionality"""
24
+ print(f"🚀 Running {self.__class__.__name__}...")
25
+ print(f"📁 Target: {self.target_path}")
26
+
27
+ try:
28
+ self.validate_target()
29
+ self.analyze()
30
+ self.generate_report()
31
+
32
+ print("✅ Completed successfully!")
33
+ return self.results
34
+
35
+ except Exception as e:
36
+ print(f"❌ Error: {e}")
37
+ sys.exit(1)
38
+
39
+ def validate_target(self):
40
+ """Validate the target path exists and is accessible"""
41
+ if not self.target_path.exists():
42
+ raise ValueError(f"Target path does not exist: {self.target_path}")
43
+
44
+ if self.verbose:
45
+ print(f"✓ Target validated: {self.target_path}")
46
+
47
+ def analyze(self):
48
+ """Perform the main analysis or operation"""
49
+ if self.verbose:
50
+ print("📊 Analyzing...")
51
+
52
+ # Main logic here
53
+ self.results['status'] = 'success'
54
+ self.results['target'] = str(self.target_path)
55
+ self.results['findings'] = []
56
+
57
+ # Add analysis results
58
+ if self.verbose:
59
+ print(f"✓ Analysis complete: {len(self.results.get('findings', []))} findings")
60
+
61
+ def generate_report(self):
62
+ """Generate and display the report"""
63
+ print("\n" + "="*50)
64
+ print("REPORT")
65
+ print("="*50)
66
+ print(f"Target: {self.results.get('target')}")
67
+ print(f"Status: {self.results.get('status')}")
68
+ print(f"Findings: {len(self.results.get('findings', []))}")
69
+ print("="*50 + "\n")
70
+
71
+ def main():
72
+ """Main entry point"""
73
+ parser = argparse.ArgumentParser(
74
+ description="Test Suite Generator"
75
+ )
76
+ parser.add_argument(
77
+ 'target',
78
+ help='Target path to analyze or process'
79
+ )
80
+ parser.add_argument(
81
+ '--verbose', '-v',
82
+ action='store_true',
83
+ help='Enable verbose output'
84
+ )
85
+ parser.add_argument(
86
+ '--json',
87
+ action='store_true',
88
+ help='Output results as JSON'
89
+ )
90
+ parser.add_argument(
91
+ '--output', '-o',
92
+ help='Output file path'
93
+ )
94
+
95
+ args = parser.parse_args()
96
+
97
+ tool = TestSuiteGenerator(
98
+ args.target,
99
+ verbose=args.verbose
100
+ )
101
+
102
+ results = tool.run()
103
+
104
+ if args.json:
105
+ output = json.dumps(results, indent=2)
106
+ if args.output:
107
+ with open(args.output, 'w') as f:
108
+ f.write(output)
109
+ print(f"Results written to {args.output}")
110
+ else:
111
+ print(output)
112
+
113
+ if __name__ == '__main__':
114
+ main()
@@ -0,0 +1,117 @@
1
+ # Accessibility Commitment (ACCESSIBILITY.md)
2
+
3
+ ## 1. Our commitment
4
+
5
+ We believe accessibility is a subset of quality. This project commits to **WCAG 2.2 AA** standards for all documentation and example code. We track our progress publicly to remain accountable to our users.
6
+
7
+ ## 2. Real-time health metrics
8
+
9
+ | Metric | Status / Value |
10
+ | :--------------------------- | :-------------------------------------------------------------------------------------------------- |
11
+ | **Open A11y Issues** | [View open accessibility issues](https://github.com/mgifford/ACCESSIBILITY.md/labels/accessibility) |
12
+ | **Automated Test Pass Rate** | Monitored via link checking and documentation validation |
13
+ | **A11y PRs Merged (MTD)** | Tracked in [project insights](https://github.com/mgifford/ACCESSIBILITY.md/pulse) |
14
+ | **Browser Support** | Last 2 major versions of Chrome, Firefox, Safari - [View Policy](./BROWSER_SUPPORT.md) |
15
+
16
+ ## 3. Contributor requirements (the guardrails)
17
+
18
+ To contribute to this repo, you must follow these guidelines:
19
+
20
+ - **Documentation Testing:** All documentation examples must follow accessibility best practices
21
+ - **Code Examples:** Follow our component-specific best practices:
22
+ - [SVG Accessibility Best Practices](./examples/SVG_ACCESSIBILITY_BEST_PRACTICES.md)
23
+ - [Mermaid Diagram Best Practices](./examples/MERMAID_ACCESSIBILITY_BEST_PRACTICES.md)
24
+ - [Forms Accessibility Best Practices](./examples/FORMS_ACCESSIBILITY_BEST_PRACTICES.md)
25
+ - [Keyboard Accessibility Best Practices](./examples/KEYBOARD_ACCESSIBILITY_BEST_PRACTICES.md)
26
+ - [Light/Dark Mode Accessibility Best Practices](./examples/LIGHT_DARK_MODE_ACCESSIBILITY_BEST_PRACTICES.md)
27
+ - **Link Validation:** All documentation links must pass our automated link checker
28
+ - **Inclusive Language:** Use person-centered, respectful language throughout
29
+
30
+ ## 4. Reporting and severity taxonomy
31
+
32
+ Please use our [issue templates](https://github.com/mgifford/ACCESSIBILITY.md/issues/new) when reporting issues. We prioritize based on:
33
+
34
+ - **Critical:** Documentation error that could lead to implementing inaccessible features that prevent users from completing core tasks
35
+ - **High:** Significant guidance gap or misleading information that could create accessibility barriers
36
+ - **Medium:** Documentation clarity issues or incomplete examples
37
+ - **Low:** Minor improvements, typos, or enhancements
38
+
39
+ ## 5. Automated check coverage
40
+
41
+ We track our automated testing rules against the [Axe Rules Reference](./examples/AXE_RULES_REFERENCE.md).
42
+
43
+ Our documentation includes:
44
+
45
+ - Comprehensive axe-core rule mappings ([AXE_RULES_COVERAGE.md](./examples/AXE_RULES_COVERAGE.md))
46
+ - Shift-left automation guidance ([SHIFT_LEFT_ACCESSIBILITY_AUTOMATION.md](./examples/SHIFT_LEFT_ACCESSIBILITY_AUTOMATION.md))
47
+ - Pre-commit hook samples ([PRE_COMMIT_ACCESSIBILITY_SAMPLE.yaml](./examples/PRE_COMMIT_ACCESSIBILITY_SAMPLE.yaml))
48
+ - CI/CD workflow examples ([A11Y_SHIFT_LEFT_WORKFLOW.yml](./examples/A11Y_SHIFT_LEFT_WORKFLOW.yml))
49
+
50
+ ## 6. Browser and assistive technology testing
51
+
52
+ ### Browser support guarantees
53
+
54
+ This project supports the **last 2 major versions** of all major browser engines:
55
+
56
+ - **Chrome/Chromium** (including Edge, Brave, Opera)
57
+ - **Firefox**
58
+ - **Safari/WebKit** (macOS and iOS)
59
+
60
+ See our comprehensive [Browser Support Policy](./BROWSER_SUPPORT.md) for version details, testing requirements, and implementation guidance.
61
+
62
+ ### Assistive technology testing
63
+
64
+ Contributors are encouraged to test documentation and examples with:
65
+
66
+ - **Screen readers:** JAWS, NVDA, VoiceOver, TalkBack
67
+ - **Keyboard navigation:** Tab, arrow keys, standard shortcuts
68
+ - **Magnification tools:** Browser zoom, screen magnifiers
69
+ - **Voice control:** Dragon, Voice Control
70
+
71
+ See [CONTRIBUTING.md](./CONTRIBUTING.md) for details on reporting assistive technology test results.
72
+
73
+ ## 7. Machine-readable standards
74
+
75
+ This project leverages [wai-yaml-ld](https://github.com/mgifford/wai-yaml-ld) for machine-readable accessibility standards, enabling AI agents to provide standards-grounded guidance. All vetted sources are documented in [TRUSTED_SOURCES.yaml](./examples/TRUSTED_SOURCES.yaml).
76
+
77
+ ### Respecting content creator preferences
78
+
79
+ While we maintain a list of trusted accessibility sources, we recognize and respect that not all content creators want their work scraped or used for AI training. Our [TRUSTED_SOURCES.yaml](./examples/TRUSTED_SOURCES.yaml) includes an `ai_scraping` field to indicate each source's preferences:
80
+
81
+ - **`allowed`** (default): Content may be used for AI training and reference
82
+ - **`prohibited`**: Do not scrape, crawl, or use content for AI training. Reference and cite only
83
+ - **`restricted`**: Use only for reference and citation purposes, not for training data
84
+
85
+ **For AI agents and automated tools:** Always check the `ai_scraping` field before accessing content from listed sources. Even trusted accessibility experts may prohibit AI scraping of their content. Respect these preferences by:
86
+
87
+ - Not crawling or scraping sites marked as `prohibited`
88
+ - Citing and linking to content instead of reproducing it
89
+ - Using alternative sources when training data is needed
90
+
91
+ **For human contributors:** When adding new sources to TRUSTED_SOURCES.yaml, check the website's robots.txt, terms of service, or public statements about AI scraping, and set the `ai_scraping` field accordingly.
92
+
93
+ ## 8. Known limitations
94
+
95
+ As a documentation repository:
96
+
97
+ - We provide guidance and templates but cannot test actual implementations
98
+ - Examples are illustrative and may need adaptation for specific contexts
99
+ - We rely on community feedback to identify gaps and outdated patterns
100
+
101
+ ## 9. Getting help
102
+
103
+ - **Questions:** Open a [discussion](https://github.com/mgifford/ACCESSIBILITY.md/discussions)
104
+ - **Bugs or gaps:** Open an [issue](https://github.com/mgifford/ACCESSIBILITY.md/issues)
105
+ - **Contributions:** See [CONTRIBUTING.md](./CONTRIBUTING.md)
106
+ - **Accommodations:** Request via `accessibility-accommodation` label
107
+
108
+ ## 10. Continuous improvement
109
+
110
+ We regularly review and update:
111
+
112
+ - WCAG conformance as standards evolve
113
+ - Best practices based on community feedback
114
+ - Tool recommendations and automation examples
115
+ - Inclusive language and terminology
116
+
117
+ Last updated: 2026-02-23
@@ -1,4 +1,4 @@
1
- # GEMINI.md
1
+ # AGENTS.md
2
2
 
3
3
  Behavioral guidelines to reduce common LLM coding mistakes. Merge with project-specific instructions as needed.
4
4
 
@@ -35,3 +35,15 @@ To start both the frontend and backend development servers, simply run:
35
35
  ```bash
36
36
  ./lint.sh
37
37
  ```
38
+
39
+ ## AI Development Friendly
40
+
41
+ This repository is optimized for development with AI agents:
42
+ - **`AGENTS.md`**: Provides behavioral guidelines and critical instructions to constrain and guide the AI.
43
+ - **`ACCESSIBILITY.md`**: Provides accessibility guidelines and constraints to guide the AI's implementations.
44
+ - **`.agents/skills/`**: Includes an extensive set of agent skills sourced from [claude-skills](https://github.com/alirezarezvani/claude-skills).
45
+
46
+ <details>
47
+ <summary>Included Agent Skills</summary>
48
+ <p>senior-frontend, senior-qa, senior-fullstack, accessibility-general</p>
49
+ </details>