vibes-plug 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/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- package/BLUEPRINT.md +125 -0
- package/CHANGELOG.md +195 -0
- package/CONTRIBUTING.md +199 -0
- package/LICENSE +21 -0
- package/README.md +263 -0
- package/SECURITY.md +21 -0
- package/banner.png +0 -0
- package/package.json +25 -0
- package/plugin.json +8 -0
- package/scripts/update_skills.js +75 -0
- package/skills/ai-llm-integration-expert/SKILL.md +162 -0
- package/skills/api-design-expert/SKILL.md +310 -0
- package/skills/app-analyzer-optimizer/SKILL.md +189 -0
- package/skills/asisten_ramah/SKILL.md +41 -0
- package/skills/authentication-identity-expert/SKILL.md +45 -0
- package/skills/auto-doc-updater/SKILL.md +204 -0
- package/skills/bootstrap-to-modern/SKILL.md +87 -0
- package/skills/brainstorming/SKILL.md +353 -0
- package/skills/bun-runtime-expert/SKILL.md +211 -0
- package/skills/ci-cd-devops-architect/SKILL.md +45 -0
- package/skills/cloud-hosting-expert/SKILL.md +244 -0
- package/skills/coderabbit/SKILL.md +192 -0
- package/skills/data-telemetry-expert/SKILL.md +213 -0
- package/skills/database-orm-expert/SKILL.md +294 -0
- package/skills/design-system-architect/SKILL.md +243 -0
- package/skills/e2e-testing-expert/SKILL.md +315 -0
- package/skills/event-driven-architect/SKILL.md +81 -0
- package/skills/firebase-security-expert/SKILL.md +195 -0
- package/skills/fullstack-expert/SKILL.md +202 -0
- package/skills/fullstack-expert/references/api_design_guide.md +466 -0
- package/skills/fullstack-expert/references/devops_infrastructure.md +477 -0
- package/skills/fullstack-expert/references/multi_language_backend.md +528 -0
- package/skills/fullstack-expert/references/system_design_patterns.md +358 -0
- package/skills/fullstack-expert/scripts/api_contract_validator.py +253 -0
- package/skills/fullstack-expert/scripts/architecture_analyzer.py +326 -0
- package/skills/gemini-agent-booster/SKILL.md +135 -0
- package/skills/global-a11y-i18n-expert/SKILL.md +81 -0
- package/skills/go-programming-expert/SKILL.md +295 -0
- package/skills/hig/SKILL.md +188 -0
- package/skills/js-backend-expert/SKILL.md +192 -0
- package/skills/mcp-server-architect/SKILL.md +194 -0
- package/skills/mobile-expo-expert/SKILL.md +186 -0
- package/skills/monday-design-aesthetic/SKILL.md +67 -0
- package/skills/monorepo-architect/SKILL.md +227 -0
- package/skills/mpa-orchestrator/SKILL.md +101 -0
- package/skills/multi-agent-orchestration/SKILL.md +234 -0
- package/skills/multiple-entry-points/SKILL.md +55 -0
- package/skills/mvc-expert/SKILL.md +231 -0
- package/skills/payment-gateway-expert/SKILL.md +45 -0
- package/skills/performance-web-vitals/SKILL.md +332 -0
- package/skills/prd-architect/SKILL.md +191 -0
- package/skills/production-ready-hardener/SKILL.md +469 -0
- package/skills/production-ready-hardener/references/performance_optimization.md +441 -0
- package/skills/production-ready-hardener/references/production_checklist.md +161 -0
- package/skills/production-ready-hardener/references/security_hardening_guide.md +379 -0
- package/skills/production-ready-hardener/scripts/production_readiness_scanner.py +875 -0
- package/skills/python-programming-expert/SKILL.md +271 -0
- package/skills/realtime-collaboration-expert/SKILL.md +45 -0
- package/skills/rust-programming-expert/SKILL.md +235 -0
- package/skills/saas-billing/SKILL.md +377 -0
- package/skills/saas-multi-tenant/SKILL.md +237 -0
- package/skills/saas-mvp-launcher/SKILL.md +231 -0
- package/skills/saas-transformer/SKILL.md +446 -0
- package/skills/saas-transformer/references/billing_integration_guide.md +401 -0
- package/skills/saas-transformer/references/feature_gating_patterns.md +137 -0
- package/skills/saas-transformer/references/saas_transformation_checklist.md +121 -0
- package/skills/saas-transformer/scripts/saas_transformation_scanner.py +254 -0
- package/skills/scalability-clean-code/SKILL.md +229 -0
- package/skills/secure-fuzz-testing/SKILL.md +201 -0
- package/skills/senior-frontend/SKILL.md +161 -0
- package/skills/senior-frontend/references/frontend_best_practices.md +806 -0
- package/skills/senior-frontend/references/nextjs_optimization_guide.md +724 -0
- package/skills/senior-frontend/references/react_patterns.md +746 -0
- package/skills/senior-frontend/scripts/bundle_analyzer.py +407 -0
- package/skills/senior-frontend/scripts/component_generator.py +329 -0
- package/skills/senior-frontend/scripts/frontend_scaffolder.py +1005 -0
- package/skills/senior-fullstack/SKILL.md +167 -0
- package/skills/senior-fullstack/references/architecture_patterns.md +160 -0
- package/skills/senior-fullstack/references/development_workflows.md +222 -0
- package/skills/senior-fullstack/references/tech_stack_guide.md +190 -0
- package/skills/senior-fullstack/scripts/code_quality_analyzer.py +114 -0
- package/skills/senior-fullstack/scripts/fullstack_scaffolder.py +114 -0
- package/skills/senior-fullstack/scripts/project_scaffolder.py +114 -0
- package/skills/seo/SKILL.md +225 -0
- package/skills/seo/references/cwv-thresholds.md +108 -0
- package/skills/seo/references/eeat-framework.md +214 -0
- package/skills/seo/references/quality-gates.md +155 -0
- package/skills/seo/references/schema-types.md +118 -0
- package/skills/seo-aeo-landing-page-writer/SKILL.md +97 -0
- package/skills/seo-geo/SKILL.md +188 -0
- package/skills/session-handoff-resume/SKILL.md +158 -0
- package/skills/skill_baru/SKILL.md +147 -0
- package/skills/spa-orchestrator/SKILL.md +288 -0
- package/skills/state-management-expert/SKILL.md +272 -0
- package/skills/supabase-migration/SKILL.md +45 -0
- package/skills/supabase-security-expert/SKILL.md +243 -0
- package/skills/tailwind-expert/SKILL.md +188 -0
- package/skills/tanstack-query-expert/SKILL.md +199 -0
- package/skills/tauri-expert/SKILL.md +97 -0
- package/skills/token-saver/SKILL.md +111 -0
- package/skills/typescript-expert/SKILL.md +279 -0
- package/skills/ui-components-expert/SKILL.md +63 -0
- package/skills/ui-ux-pro-max/SKILL.md +201 -0
- package/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/skills/ui-ux-pro-max/data/prompts.csv +24 -0
- package/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/ui-ux-pro-max/data/styles.csv +59 -0
- package/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-310.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-310.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/core.py +257 -0
- package/skills/ui-ux-pro-max/scripts/design_system.py +493 -0
- package/skills/ui-ux-pro-max/scripts/search.py +81 -0
- package/skills/ui_ux_expert/SKILL.md +114 -0
- package/skills/vibe-code-gardener/SKILL.md +173 -0
- package/skills/web-scraper/SKILL.md +205 -0
- package/skills/web-scraper/references/data-transforms.md +397 -0
- package/skills/web-scraper/references/extraction-patterns.md +475 -0
- package/skills/web-scraper/references/output-templates.md +481 -0
- package/skills/zero-to-prod-orchestrator/SKILL.md +180 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# Tech Stack Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
This reference guide details production-grade tech stack patterns, concrete typescript implementations, and scaling strategies for React 19, Next.js 15, PostgreSQL, and connection pooling.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Production Patterns & Practices
|
|
9
|
+
|
|
10
|
+
### 1. Server-First Next.js 15 Architecture
|
|
11
|
+
|
|
12
|
+
Next.js 15 standardizes on React Server Components (RSC) by default. Data fetching is co-located with rendering, preventing waterfalls and saving significant client bandwidth.
|
|
13
|
+
|
|
14
|
+
#### Pattern: Modular Layout & Data Fetching
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
// app/dashboard/layout.tsx
|
|
18
|
+
import { ReactNode } from 'react';
|
|
19
|
+
import { Sidebar } from '@/components/dashboard/sidebar';
|
|
20
|
+
import { Header } from '@/components/dashboard/header';
|
|
21
|
+
|
|
22
|
+
export default async function DashboardLayout({ children }: { children: ReactNode }) {
|
|
23
|
+
return (
|
|
24
|
+
<div className="flex h-screen overflow-hidden bg-slate-50">
|
|
25
|
+
<Sidebar />
|
|
26
|
+
<div className="flex flex-1 flex-col overflow-y-auto">
|
|
27
|
+
<Header />
|
|
28
|
+
<main className="p-6">{children}</main>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```tsx
|
|
36
|
+
// app/dashboard/page.tsx
|
|
37
|
+
import { Suspense } from 'react';
|
|
38
|
+
import { db } from '@/lib/db';
|
|
39
|
+
import { workspaces } from '@/lib/db/schema';
|
|
40
|
+
import { auth } from '@clerk/nextjs/server';
|
|
41
|
+
import { eq } from 'drizzle-orm';
|
|
42
|
+
import { Skeleton } from '@/components/ui/skeleton';
|
|
43
|
+
import { WorkspaceCard } from '@/components/dashboard/workspace-card';
|
|
44
|
+
|
|
45
|
+
// Server-side dynamic fetching component
|
|
46
|
+
async function WorkspaceList() {
|
|
47
|
+
const { userId } = await auth();
|
|
48
|
+
if (!userId) throw new Error('Unauthorized');
|
|
49
|
+
|
|
50
|
+
const userWorkspaces = await db
|
|
51
|
+
.select()
|
|
52
|
+
.from(workspaces)
|
|
53
|
+
.where(eq(workspaces.ownerId, userId));
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<div className="grid gap-4 md:grid-cols-3">
|
|
57
|
+
{userWorkspaces.map((ws) => (
|
|
58
|
+
<WorkspaceCard key={ws.id} workspace={ws} />
|
|
59
|
+
))}
|
|
60
|
+
</div>
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export default function DashboardPage() {
|
|
65
|
+
return (
|
|
66
|
+
<div className="space-y-6">
|
|
67
|
+
<h1 className="text-3xl font-bold">Your Workspaces</h1>
|
|
68
|
+
<Suspense fallback={<div className="grid gap-4 md:grid-cols-3"><Skeleton className="h-32 w-full" /></div>}>
|
|
69
|
+
<WorkspaceList />
|
|
70
|
+
</Suspense>
|
|
71
|
+
</div>
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### 2. High-Performance PostgreSQL & Connection Pooling
|
|
79
|
+
|
|
80
|
+
In a serverless runtime (e.g., Vercel / Netlify Functions), direct database connections spike exponentially during peak request loads. Employ transaction connection pooling (via Supabase Supavisor, PgBouncer, or Neon Serverless Driver) to recycle handles.
|
|
81
|
+
|
|
82
|
+
#### Pattern: Multi-Client Connection Configuration (`lib/db/index.ts`)
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
import { drizzle } from 'drizzle-orm/postgres-js';
|
|
86
|
+
import postgres from 'postgres';
|
|
87
|
+
import * as schema from './schema';
|
|
88
|
+
|
|
89
|
+
// Enforce single database client in development to prevent hot-reload socket exhaustion
|
|
90
|
+
const globalForDb = globalThis as unknown as {
|
|
91
|
+
conn: postgres.Sql | undefined;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// Use transaction pooling for high concurrent workloads
|
|
95
|
+
const connectionString = process.env.DATABASE_URL!;
|
|
96
|
+
|
|
97
|
+
const client = globalForDb.conn ?? postgres(connectionString, {
|
|
98
|
+
max: process.env.DB_MAX_CONNECTIONS ? parseInt(process.env.DB_MAX_CONNECTIONS) : 10,
|
|
99
|
+
prepare: false, // Set to false when utilizing Transaction poolers like pgBouncer/Supavisor
|
|
100
|
+
idle_timeout: 20,
|
|
101
|
+
connect_timeout: 10,
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
105
|
+
globalForDb.conn = client;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export const db = drizzle(client, { schema });
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Technical Guidelines & Guidelines
|
|
114
|
+
|
|
115
|
+
### Type-Safe REST Contracts
|
|
116
|
+
|
|
117
|
+
Utilize Zod structures on both the client form schemas and the server-side Next.js route handlers to achieve full type safety across HTTP borders.
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
// lib/validators/auth.ts
|
|
121
|
+
import { z } from 'zod';
|
|
122
|
+
|
|
123
|
+
export const SignupSchema = z.object({
|
|
124
|
+
email: z.string().email('Please supply a valid email address'),
|
|
125
|
+
password: z.string().min(8, 'Password must contain at least 8 characters'),
|
|
126
|
+
name: z.string().min(2, 'Name must contain at least 2 characters').optional(),
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
export type SignupInput = z.infer<typeof SignupSchema>;
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
// app/api/auth/signup/route.ts
|
|
134
|
+
import { NextResponse } from 'next/server';
|
|
135
|
+
import { SignupSchema } from '@/lib/validators/auth';
|
|
136
|
+
import { db } from '@/lib/db';
|
|
137
|
+
import { users } from '@/lib/db/schema';
|
|
138
|
+
import { hash } from 'bcrypt';
|
|
139
|
+
|
|
140
|
+
export async function POST(req: Request) {
|
|
141
|
+
try {
|
|
142
|
+
const body = await req.json();
|
|
143
|
+
const result = SignupSchema.safeParse(body);
|
|
144
|
+
|
|
145
|
+
if (!result.success) {
|
|
146
|
+
return NextResponse.json({ error: result.error.format() }, { status: 400 });
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const { email, password, name } = result.data;
|
|
150
|
+
|
|
151
|
+
// Check if user already exists
|
|
152
|
+
const existing = await db.query.users.findFirst({
|
|
153
|
+
where: (u, { eq }) => eq(u.email, email),
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
if (existing) {
|
|
157
|
+
return NextResponse.json({ error: 'User already exists' }, { status: 409 });
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const hashedPassword = await hash(password, 12);
|
|
161
|
+
|
|
162
|
+
const [newUser] = await db.insert(users).values({
|
|
163
|
+
email,
|
|
164
|
+
name,
|
|
165
|
+
password: hashedPassword,
|
|
166
|
+
}).returning();
|
|
167
|
+
|
|
168
|
+
return NextResponse.json({ id: newUser.id, email: newUser.email, name: newUser.name }, { status: 201 });
|
|
169
|
+
} catch (err) {
|
|
170
|
+
return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Anti-Patterns to Avoid
|
|
178
|
+
|
|
179
|
+
### 🚫 Client-Side Waterfall Loading
|
|
180
|
+
*Do not* chain individual API requests inside standard client-side `useEffect` declarations (e.g. Fetch user -> then fetch workspaces -> then fetch analytics).
|
|
181
|
+
*Instead:* Prefetch parallel states via Next.js server components or leverage dynamic `Promise.all` scopes before returning client modules.
|
|
182
|
+
|
|
183
|
+
### 🚫 Global Database Client Hot Exhaustion
|
|
184
|
+
*Do not* initialize fresh database connections inline inside database-consuming server functions.
|
|
185
|
+
*Instead:* Maintain a shared, global db handle scoped correctly to check development hot-reloads.
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Conclusion
|
|
190
|
+
Adhering to server-first Next.js models paired with secure pooled database connections will guarantee your fullstack applications execute fast, scale securely, and retain complete end-to-end type safety.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Code Quality Analyzer
|
|
4
|
+
Automated tool for senior fullstack 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 CodeQualityAnalyzer:
|
|
15
|
+
"""Main class for code quality analyzer 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="Code Quality Analyzer"
|
|
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 = CodeQualityAnalyzer(
|
|
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
|
+
Fullstack Scaffolder
|
|
4
|
+
Automated tool for senior fullstack 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 FullstackScaffolder:
|
|
15
|
+
"""Main class for fullstack 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="Fullstack 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 = FullstackScaffolder(
|
|
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
|
+
Project Scaffolder
|
|
4
|
+
Automated tool for senior fullstack 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 ProjectScaffolder:
|
|
15
|
+
"""Main class for project 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="Project 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 = ProjectScaffolder(
|
|
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()
|