prprompts-flutter-generator
Version:
AI-powered Flutter development with full automation + official extension support - Generate 32 security-audited guides & auto-implement in 2-3 hours. NEW v5.1: Official Claude Code plugin with hooks, Gemini TOML commands, Qwen MCP settings. Features: Comp
660 lines (516 loc) • 16.7 kB
Markdown
# Single File Generator Skill - Execution Prompt
## Context
You are executing the **single-file-generator** skill. This skill generates or regenerates a single PRPROMPTS file by number (1-32), useful for updating specific files after PRD changes or fixing individual guides.
## Inputs
- **prd_path**: {{inputs.prd_path || "docs/PRD.md"}}
- **file_number**: {{inputs.file_number}} (1-32)
- **output_dir**: {{inputs.output_dir || "PRPROMPTS"}}
- **overwrite**: {{inputs.overwrite || true}}
## File Number Reference (1-32)
### Phase 1: Core (1-10)
1. `01-project_overview.md` - Project summary and goals
2. `02-architecture_overview.md` - Clean Architecture structure
3. `03-folder_structure.md` - Project organization
4. `04-state_management.md` - State management (BLoC/Riverpod/Provider)
5. `05-navigation_and_routing.md` - Navigation setup
6. `06-api_integration.md` - REST API integration
7. `07-data_models.md` - Data classes and entities
8. `08-dependency_injection.md` - GetIt/Injectable setup
9. `09-error_handling.md` - Error handling patterns
10. `10-features_implementation.md` - Feature development guide
### Phase 2: Quality (11-22)
11. `11-testing_strategy.md` - Test architecture
12. `12-unit_testing.md` - Unit test patterns
13. `13-widget_testing.md` - Widget test guide
14. `14-integration_testing.md` - E2E testing
15. `15-code_quality.md` - Linting and static analysis
16. `16-security_and_compliance.md` - Security patterns & compliance
17. `17-performance_optimization.md` - Performance guide
18. `18-accessibility.md` - Accessibility (a11y) implementation
19. `19-localization.md` - Internationalization (i18n)
20. `20-logging_and_monitoring.md` - Observability
21. `21-offline_support.md` - Offline-first patterns
22. `22-data_persistence.md` - Local storage (SQLite, Hive)
### Phase 3: Demo (23-32)
23. `23-demo_preparation.md` - Demo setup
24. `24-user_flows.md` - User journey demos
25. `25-presentation_mode.md` - Presentation features
26. `26-build_configuration.md` - Build variants (dev, staging, prod)
27. `27-deployment_pipeline.md` - CI/CD setup
28. `28-app_store_preparation.md` - Store listings (App Store, Play Store)
29. `29-beta_testing.md` - TestFlight/Play Console beta
30. `30-analytics_and_tracking.md` - Analytics integration
31. `31-documentation.md` - User documentation
32. `32-maintenance_and_updates.md` - Post-launch maintenance
## Task: Generate Single PRPROMPTS File
### Step 1: Validate File Number
Check {{inputs.file_number}}:
- Must be integer between 1 and 32
- If < 1 or > 32 → Return error
```json
{
"error": "Invalid file number",
"received": {{inputs.file_number}},
"valid_range": "1-32",
"suggestion": "Choose a number from 1 (project_overview) to 32 (maintenance)"
}
```
### Step 2: Load and Parse PRD
**Actions:**
1. Read PRD from {{inputs.prd_path}}
2. Parse YAML frontmatter
3. Extract all metadata for customization
**Required Metadata:**
- `project_name`: string
- `project_type`: healthcare|fintech|ecommerce|productivity|social|education
- `platforms`: array of ios|android|web
- `compliance`: array of hipaa|pci-dss|gdpr|coppa|ferpa|soc2
- `auth_method`: jwt|oauth2|firebase|custom
- `state_management`: bloc|riverpod|provider|getx
- `architecture`: clean_architecture|mvvm|mvc
**Error Handling:**
- PRD not found → Return error
- Invalid YAML → Return error
- Missing required metadata → Add warnings, use defaults
### Step 3: Determine File Details
Based on {{inputs.file_number}}, set:
```json
{
"file_number": {{inputs.file_number}},
"file_name": "{number}-{slug}.md",
"title": "Human Readable Title",
"category": "Architecture" | "Testing" | "Security" | "Deployment" | etc.,
"phase": 1 | 2 | 3,
"prerequisites": ["Files that should exist before this one"],
"related_files": ["Files that work with this one"]
}
```
**Examples:**
**File 16 (Security):**
```json
{
"file_number": 16,
"file_name": "16-security_and_compliance.md",
"title": "Security & Compliance",
"category": "Security",
"phase": 2,
"prerequisites": ["02-architecture_overview.md", "07-data_models.md"],
"related_files": ["11-testing_strategy.md", "20-logging_and_monitoring.md"]
}
```
**File 4 (State Management):**
```json
{
"file_number": 4,
"file_name": "04-state_management.md",
"title": "State Management",
"category": "Architecture",
"phase": 1,
"prerequisites": ["02-architecture_overview.md"],
"related_files": ["05-navigation_and_routing.md", "10-features_implementation.md"]
}
```
### Step 4: Generate File Content (PRP Pattern)
Every file follows **PRP Pattern** (6 sections):
```markdown
# {File Number}: {Title}
> **Phase {phase}**: {Phase Name}
> **Category**: {category}
> **Prerequisites**: {prerequisites}
## FEATURE
### What This Guide Accomplishes
{150-200 words explaining what this file teaches}
**Key Objectives:**
- Objective 1 (customized to PRD project_type)
- Objective 2
- Objective 3
**Why This Matters:**
{Explain importance in context of PRD project_type}
### Integration Points
- **Depends on**: {prerequisites}
- **Used by**: {related_files}
- **Integrates with**: {related systems}
## EXAMPLES
### Example 1: {Feature} - {Project Type} Context
{Provide real Flutter code examples}
**File: `lib/features/{feature}/.../{file}.dart`**
```dart
// Code customized to PRD metadata:
// - Uses state_management from PRD
// - Includes auth_method patterns
// - Applies compliance requirements
// - Platform-specific implementations
```
### Example 2: {Scenario}
{Another example showing different use case}
## CONSTRAINTS
### ✅ DO
- Follow {architecture} pattern from PRD
- Use {state_management} for state
- Apply {compliance} security patterns
- Test with minimum 70% coverage
- {File-specific DOs}
### ❌ DON'T
- Mix presentation and business logic
- Store sensitive data without encryption
- Skip error handling
- {File-specific DON'Ts}
- {Compliance-specific DON'Ts}
## VALIDATION GATES
### Pre-Commit Checklist
- [ ] All tests passing (`flutter test`)
- [ ] No linting errors (`flutter analyze`)
- [ ] Code coverage > 70%
- [ ] {File-specific checks}
- [ ] {Compliance-specific checks}
### CI/CD Automation
```yaml
# GitHub Actions / GitLab CI
name: Validate {Feature}
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: subosito/flutter-action@v2
- run: flutter test test/{feature}_test.dart
- run: flutter analyze
```
## BEST PRACTICES
### For Junior Developers
**Why {Pattern from this file}?**
{Plain English explanation of why this pattern matters}
**Common Mistakes:**
- ❌ Mistake 1: {What juniors often do wrong}
- ✅ Solution: {How to do it right}
**Quick Wins:**
- Start with {simple approach}
- Then add {advanced feature}
### For Senior Developers
**Architecture Decisions:**
- {File-specific ADRs}
- {Trade-offs and alternatives}
**Performance Considerations:**
- {Optimization tips specific to this file}
## REFERENCES
- [Flutter Official Docs]({relevant_flutter_docs})
- [{State Management} Documentation]({link_based_on_prd})
- [{Compliance} Compliance Guide]({link_if_applicable})
- **ADR-{N}**: {Architectural Decision Record}
- **Related Files**: {links_to_related_prprompts}
```
### Step 5: Apply PRD-Specific Customizations
#### A. Project Type Customizations
**If project_type == "healthcare":**
- Add HIPAA compliance examples
- Include PHI encryption patterns
- Add audit logging requirements
- Mention BAA requirements
**If project_type == "fintech":**
- Add PCI-DSS compliance examples
- Include payment tokenization (NEVER store cards!)
- Add fraud detection patterns
- Mention SOC2 requirements
**If project_type == "ecommerce":**
- Add payment provider integration (Stripe, PayPal)
- Include cart persistence
- Add inventory management examples
#### B. Compliance Customizations (Especially File 16)
**If compliance includes "hipaa":**
```markdown
## HIPAA Compliance Patterns
### PHI Encryption (Required)
```dart
import 'package:encrypt/encrypt.dart';
class PHIEncryptionService {
static final _key = Key.fromSecureRandom(32);
static final _encrypter = Encrypter(AES(_key, mode: AESMode.gcm));
static String encryptPHI(String phi) {
final encrypted = _encrypter.encrypt(phi, iv: IV.fromLength(16));
return encrypted.base64;
}
static String decryptPHI(String encryptedPHI) {
final encrypted = Encrypted.fromBase64(encryptedPHI);
return _encrypter.decrypt(encrypted, iv: IV.fromLength(16));
}
}
```
### Audit Logging (Required)
```dart
class AuditLogger {
static void logPHIAccess({
required String userId,
required String action,
required String patientId,
}) {
auditLog.record({
'timestamp': DateTime.now().toIso8601String(),
'user_id': userId,
'action': action,
'patient_id': patientId,
'ip_address': getClientIP(),
});
}
}
```
### Session Timeout (Required - 15 minutes)
```dart
class SessionManager {
static const timeout = Duration(minutes: 15);
static void startSession() {
_lastActivity = DateTime.now();
_timer = Timer.periodic(Duration(minutes: 1), checkTimeout);
}
static void checkTimeout(Timer timer) {
if (DateTime.now().difference(_lastActivity) > timeout) {
logout();
}
}
}
```
```
**If compliance includes "pci-dss":**
```markdown
## PCI-DSS Compliance Patterns
### ❌ NEVER Store Payment Cards
```dart
// ❌ WRONG - Security violation!
class Payment {
final String cardNumber; // NEVER!
final String cvv; // NEVER!
final String expiry; // NEVER!
}
// ✅ CORRECT - Use tokenization
class Payment {
final String paymentToken; // From Stripe/PayPal
final String last4; // Only last 4 digits
final String cardBrand; // "Visa", "Mastercard"
final PaymentProvider provider; // Stripe, PayPal, etc.
}
```
### Use Payment Provider Tokenization
```dart
// Stripe example
import 'package:stripe_sdk/stripe_sdk.dart';
class PaymentService {
static Future<String> createPaymentToken(CardDetails card) async {
final paymentMethod = await Stripe.instance.createPaymentMethod(
params: PaymentMethodParams.card(
paymentMethodData: PaymentMethodData(
billingDetails: billingDetails,
),
),
);
// Store only the token, NEVER the card
return paymentMethod.id;
}
}
```
```
#### C. State Management Customizations
**If state_management == "bloc":**
```dart
import 'package:flutter_bloc/flutter_bloc.dart';
// BLoC implementation
class FeatureBloc extends Bloc<FeatureEvent, FeatureState> {
FeatureBloc() : super(FeatureInitial()) {
on<LoadData>(_onLoadData);
}
Future<void> _onLoadData(LoadData event, Emitter<FeatureState> emit) async {
emit(FeatureLoading());
try {
final data = await repository.fetchData();
emit(FeatureLoaded(data));
} catch (e) {
emit(FeatureError(e.toString()));
}
}
}
```
**If state_management == "riverpod":**
```dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
// Riverpod implementation
final featureProvider = StateNotifierProvider<FeatureNotifier, FeatureState>(
(ref) => FeatureNotifier(ref.read(repositoryProvider)),
);
class FeatureNotifier extends StateNotifier<FeatureState> {
FeatureNotifier(this._repository) : super(const FeatureState.initial());
final Repository _repository;
Future<void> loadData() async {
state = const FeatureState.loading();
try {
final data = await _repository.fetchData();
state = FeatureState.loaded(data);
} catch (e) {
state = FeatureState.error(e.toString());
}
}
}
```
#### D. Authentication Customizations
**If auth_method == "jwt":**
```dart
// JWT Verification (NEVER signing in Flutter!)
class JWTService {
static bool verifyToken(String token, String publicKey) {
try {
final jwt = JWT.verify(token, RSAPublicKey(publicKey));
return jwt.payload['exp'] > DateTime.now().millisecondsSinceEpoch / 1000;
} catch (e) {
return false;
}
}
// ❌ NEVER do this in Flutter!
// static String signToken(Map<String, dynamic> payload) { ... }
}
```
**If auth_method == "oauth2":**
```dart
import 'package:flutter_appauth/flutter_appauth.dart';
class OAuth2Service {
static final _appAuth = FlutterAppAuth();
static Future<TokenResponse> authorize() async {
return await _appAuth.authorizeAndExchangeCode(
AuthorizationTokenRequest(
'client-id',
'redirect-url',
serviceConfiguration: AuthorizationServiceConfiguration(
authorizationEndpoint: 'https://auth.example.com/authorize',
tokenEndpoint: 'https://auth.example.com/token',
),
scopes: ['openid', 'profile', 'email'],
),
);
}
}
```
### Step 6: File-Specific Content
Generate content specific to {{inputs.file_number}}:
#### Special File: 16 (Security & Compliance)
- **MOST IMPORTANT FILE** - Heavily customized by PRD
- Include ALL compliance patterns from PRD
- Add security checklists
- Include penetration testing guidelines
#### Special File: 4 (State Management)
- Must match PRD's state_management choice
- Provide complete BLoC/Riverpod/Provider examples
- Include testing patterns for chosen state management
#### Special File: 11-14 (Testing)
- Target 70%+ code coverage
- Provide mock/stub examples
- Include CI/CD integration
#### Special File: 27 (Deployment Pipeline)
- Platform-specific CI/CD (GitHub Actions, GitLab CI, Bitrise)
- Automated testing in pipeline
- Environment management (dev/staging/prod)
### Step 7: Write File
**Output Path:**
```
{{inputs.output_dir}}/{file_number}-{file_slug}.md
```
**Check Overwrite:**
- If file exists and overwrite == true → Overwrite with message
- If file exists and overwrite == false → Skip with warning
- If file doesn't exist → Create new
### Step 8: Return Results
```json
{
"file_generated": "PRPROMPTS/16-security_and_compliance.md",
"file_name": "16-security_and_compliance.md",
"file_number": 16,
"action": "regenerated" | "created" | "skipped",
"customizations_applied": {
"project_type": "healthcare",
"compliance": ["hipaa", "gdpr"],
"state_management": "bloc",
"auth_method": "jwt",
"platforms": ["ios", "android"]
},
"warnings": [],
"next_steps": [
"Review generated file",
"Update related files if needed",
"Run tests to verify"
]
}
```
## Common Use Cases
### Use Case 1: Updated PRD Compliance
**Scenario:** Added HIPAA compliance to PRD after generating files
**Command:**
```
@claude use skill single-file-generator --file_number 16
```
**Result:** File 16 regenerated with HIPAA patterns
### Use Case 2: Fix Specific File
**Scenario:** File 4 (state management) has errors
**Command:**
```
@claude use skill single-file-generator --file_number 4
```
**Result:** Fresh file 4 generated
### Use Case 3: Generate Missing File
**Scenario:** Deleted file 23 by accident
**Command:**
```
@claude use skill single-file-generator --file_number 23
```
**Result:** File 23 recreated
## Error Handling
### Error: Invalid File Number
```json
{
"error": "File number out of range",
"received": 35,
"valid_range": "1-32",
"suggestion": "Valid numbers: 1-32. See file list above."
}
```
### Error: PRD Not Found
```json
{
"error": "PRD file not found",
"path": "{{inputs.prd_path}}",
"suggestion": "Run prd-creator skill first"
}
```
## Performance
**Target Time:** < 10 seconds per file
**Max Time:** 15 seconds
Factors affecting speed:
- File complexity (File 16 is most complex)
- PRD metadata parsing
- Compliance pattern application
## Next Steps Recommendation
After regenerating a file:
```
✅ File {{inputs.file_number}} regenerated!
Next steps:
1. Review: cat PRPROMPTS/{file_name}
2. Update code following new patterns
3. Run tests: flutter test
4. Commit: git add PRPROMPTS/{file_name}
```