@simonyea/holysheep-cli 2.1.50 → 2.1.51
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/dist/aionui-resources/assistant/academic-paper/academic-paper.md +25 -0
- package/dist/aionui-resources/assistant/academic-paper/academic-paper.ru-RU.md +25 -0
- package/dist/aionui-resources/assistant/academic-paper/academic-paper.zh-CN.md +25 -0
- package/dist/aionui-resources/assistant/beautiful-mermaid/beautiful-mermaid.md +31 -0
- package/dist/aionui-resources/assistant/beautiful-mermaid/beautiful-mermaid.ru-RU.md +31 -0
- package/dist/aionui-resources/assistant/beautiful-mermaid/beautiful-mermaid.zh-CN.md +31 -0
- package/dist/aionui-resources/assistant/cowork/cowork-skills.md +814 -0
- package/dist/aionui-resources/assistant/cowork/cowork-skills.ru-RU.md +814 -0
- package/dist/aionui-resources/assistant/cowork/cowork-skills.zh-CN.md +803 -0
- package/dist/aionui-resources/assistant/cowork/cowork.md +56 -0
- package/dist/aionui-resources/assistant/cowork/cowork.ru-RU.md +56 -0
- package/dist/aionui-resources/assistant/cowork/cowork.zh-CN.md +409 -0
- package/dist/aionui-resources/assistant/dashboard-creator/dashboard-creator.md +25 -0
- package/dist/aionui-resources/assistant/dashboard-creator/dashboard-creator.ru-RU.md +25 -0
- package/dist/aionui-resources/assistant/dashboard-creator/dashboard-creator.zh-CN.md +25 -0
- package/dist/aionui-resources/assistant/excel-creator/excel-creator.md +33 -0
- package/dist/aionui-resources/assistant/excel-creator/excel-creator.ru-RU.md +33 -0
- package/dist/aionui-resources/assistant/excel-creator/excel-creator.zh-CN.md +33 -0
- package/dist/aionui-resources/assistant/financial-model-creator/financial-model-creator.md +25 -0
- package/dist/aionui-resources/assistant/financial-model-creator/financial-model-creator.ru-RU.md +25 -0
- package/dist/aionui-resources/assistant/financial-model-creator/financial-model-creator.zh-CN.md +25 -0
- package/dist/aionui-resources/assistant/game-3d/game-3d.md +255 -0
- package/dist/aionui-resources/assistant/game-3d/game-3d.ru-RU.md +255 -0
- package/dist/aionui-resources/assistant/game-3d/game-3d.zh-CN.md +255 -0
- package/dist/aionui-resources/assistant/human-3-coach/human-3-coach.md +276 -0
- package/dist/aionui-resources/assistant/human-3-coach/human-3-coach.ru-RU.md +276 -0
- package/dist/aionui-resources/assistant/human-3-coach/human-3-coach.zh-CN.md +276 -0
- package/dist/aionui-resources/assistant/moltbook/moltbook-skills.md +88 -0
- package/dist/aionui-resources/assistant/moltbook/moltbook-skills.ru-RU.md +88 -0
- package/dist/aionui-resources/assistant/moltbook/moltbook-skills.zh-CN.md +88 -0
- package/dist/aionui-resources/assistant/moltbook/moltbook.md +216 -0
- package/dist/aionui-resources/assistant/moltbook/moltbook.ru-RU.md +216 -0
- package/dist/aionui-resources/assistant/moltbook/moltbook.zh-CN.md +216 -0
- package/dist/aionui-resources/assistant/morph-ppt/morph-ppt.md +25 -0
- package/dist/aionui-resources/assistant/morph-ppt/morph-ppt.ru-RU.md +25 -0
- package/dist/aionui-resources/assistant/morph-ppt/morph-ppt.zh-CN.md +25 -0
- package/dist/aionui-resources/assistant/morph-ppt-3d/morph-ppt-3d.md +54 -0
- package/dist/aionui-resources/assistant/morph-ppt-3d/morph-ppt-3d.zh-CN.md +54 -0
- package/dist/aionui-resources/assistant/openclaw-setup/openclaw-setup.md +334 -0
- package/dist/aionui-resources/assistant/openclaw-setup/openclaw-setup.ru-RU.md +334 -0
- package/dist/aionui-resources/assistant/openclaw-setup/openclaw-setup.zh-CN.md +347 -0
- package/dist/aionui-resources/assistant/pitch-deck-creator/pitch-deck-creator.md +23 -0
- package/dist/aionui-resources/assistant/pitch-deck-creator/pitch-deck-creator.ru-RU.md +23 -0
- package/dist/aionui-resources/assistant/pitch-deck-creator/pitch-deck-creator.zh-CN.md +23 -0
- package/dist/aionui-resources/assistant/planning-with-files/planning-with-files.md +395 -0
- package/dist/aionui-resources/assistant/planning-with-files/planning-with-files.ru-RU.md +395 -0
- package/dist/aionui-resources/assistant/planning-with-files/planning-with-files.zh-CN.md +395 -0
- package/dist/aionui-resources/assistant/planning-with-files/templates/findings.md +106 -0
- package/dist/aionui-resources/assistant/planning-with-files/templates/progress.md +126 -0
- package/dist/aionui-resources/assistant/planning-with-files/templates/task_plan.md +156 -0
- package/dist/aionui-resources/assistant/ppt-creator/ppt-creator.md +33 -0
- package/dist/aionui-resources/assistant/ppt-creator/ppt-creator.ru-RU.md +33 -0
- package/dist/aionui-resources/assistant/ppt-creator/ppt-creator.zh-CN.md +33 -0
- package/dist/aionui-resources/assistant/social-job-publisher/social-job-publisher-skills.md +137 -0
- package/dist/aionui-resources/assistant/social-job-publisher/social-job-publisher-skills.ru-RU.md +137 -0
- package/dist/aionui-resources/assistant/social-job-publisher/social-job-publisher-skills.zh-CN.md +137 -0
- package/dist/aionui-resources/assistant/social-job-publisher/social-job-publisher.md +127 -0
- package/dist/aionui-resources/assistant/social-job-publisher/social-job-publisher.ru-RU.md +127 -0
- package/dist/aionui-resources/assistant/social-job-publisher/social-job-publisher.zh-CN.md +131 -0
- package/dist/aionui-resources/assistant/star-office-helper/star-office-helper.md +50 -0
- package/dist/aionui-resources/assistant/star-office-helper/star-office-helper.ru-RU.md +50 -0
- package/dist/aionui-resources/assistant/star-office-helper/star-office-helper.zh-CN.md +50 -0
- package/dist/aionui-resources/assistant/story-roleplay/story-roleplay.md +239 -0
- package/dist/aionui-resources/assistant/story-roleplay/story-roleplay.ru-RU.md +239 -0
- package/dist/aionui-resources/assistant/story-roleplay/story-roleplay.zh-CN.md +239 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/README.md +60 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/charts.csv +26 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/colors.csv +97 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/landing.csv +31 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/products.csv +97 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/prompts.csv +24 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/styles.csv +59 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/typography.csv +58 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/scripts/core.py +239 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/scripts/search.py +61 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/ui-ux-pro-max.md +244 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/ui-ux-pro-max.ru-RU.md +244 -0
- package/dist/aionui-resources/assistant/ui-ux-pro-max/ui-ux-pro-max.zh-CN.md +244 -0
- package/dist/aionui-resources/assistant/word-creator/word-creator.md +32 -0
- package/dist/aionui-resources/assistant/word-creator/word-creator.ru-RU.md +32 -0
- package/dist/aionui-resources/assistant/word-creator/word-creator.zh-CN.md +32 -0
- package/dist/configure-worker.js +3 -2
- package/dist/index.js +119 -84
- package/package.json +3 -2
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
UI/UX Pro Max Core - BM25 search engine for UI/UX style guides
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import csv
|
|
8
|
+
import re
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from math import log
|
|
11
|
+
from collections import defaultdict
|
|
12
|
+
|
|
13
|
+
# ============ CONFIGURATION ============
|
|
14
|
+
DATA_DIR = Path(__file__).parent.parent / "data"
|
|
15
|
+
MAX_RESULTS = 3
|
|
16
|
+
|
|
17
|
+
CSV_CONFIG = {
|
|
18
|
+
"style": {
|
|
19
|
+
"file": "styles.csv",
|
|
20
|
+
"search_cols": ["Style Category", "Keywords", "Best For", "Type"],
|
|
21
|
+
"output_cols": ["Style Category", "Type", "Keywords", "Primary Colors", "Effects & Animation", "Best For", "Performance", "Accessibility", "Framework Compatibility", "Complexity"]
|
|
22
|
+
},
|
|
23
|
+
"prompt": {
|
|
24
|
+
"file": "prompts.csv",
|
|
25
|
+
"search_cols": ["Style Category", "AI Prompt Keywords (Copy-Paste Ready)", "CSS/Technical Keywords"],
|
|
26
|
+
"output_cols": ["Style Category", "AI Prompt Keywords (Copy-Paste Ready)", "CSS/Technical Keywords", "Implementation Checklist"]
|
|
27
|
+
},
|
|
28
|
+
"color": {
|
|
29
|
+
"file": "colors.csv",
|
|
30
|
+
"search_cols": ["Product Type", "Keywords", "Notes"],
|
|
31
|
+
"output_cols": ["Product Type", "Keywords", "Primary (Hex)", "Secondary (Hex)", "CTA (Hex)", "Background (Hex)", "Text (Hex)", "Border (Hex)", "Notes"]
|
|
32
|
+
},
|
|
33
|
+
"chart": {
|
|
34
|
+
"file": "charts.csv",
|
|
35
|
+
"search_cols": ["Data Type", "Keywords", "Best Chart Type", "Accessibility Notes"],
|
|
36
|
+
"output_cols": ["Data Type", "Keywords", "Best Chart Type", "Secondary Options", "Color Guidance", "Accessibility Notes", "Library Recommendation", "Interactive Level"]
|
|
37
|
+
},
|
|
38
|
+
"landing": {
|
|
39
|
+
"file": "landing.csv",
|
|
40
|
+
"search_cols": ["Pattern Name", "Keywords", "Conversion Optimization", "Section Order"],
|
|
41
|
+
"output_cols": ["Pattern Name", "Keywords", "Section Order", "Primary CTA Placement", "Color Strategy", "Conversion Optimization"]
|
|
42
|
+
},
|
|
43
|
+
"product": {
|
|
44
|
+
"file": "products.csv",
|
|
45
|
+
"search_cols": ["Product Type", "Keywords", "Primary Style Recommendation", "Key Considerations"],
|
|
46
|
+
"output_cols": ["Product Type", "Keywords", "Primary Style Recommendation", "Secondary Styles", "Landing Page Pattern", "Dashboard Style (if applicable)", "Color Palette Focus"]
|
|
47
|
+
},
|
|
48
|
+
"ux": {
|
|
49
|
+
"file": "ux-guidelines.csv",
|
|
50
|
+
"search_cols": ["Category", "Issue", "Description", "Platform"],
|
|
51
|
+
"output_cols": ["Category", "Issue", "Platform", "Description", "Do", "Don't", "Code Example Good", "Code Example Bad", "Severity"]
|
|
52
|
+
},
|
|
53
|
+
"typography": {
|
|
54
|
+
"file": "typography.csv",
|
|
55
|
+
"search_cols": ["Font Pairing Name", "Category", "Mood/Style Keywords", "Best For", "Heading Font", "Body Font"],
|
|
56
|
+
"output_cols": ["Font Pairing Name", "Category", "Heading Font", "Body Font", "Mood/Style Keywords", "Best For", "Google Fonts URL", "CSS Import", "Tailwind Config", "Notes"]
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
STACK_CONFIG = {
|
|
61
|
+
"html-tailwind": {"file": "stacks/html-tailwind.csv"},
|
|
62
|
+
"react": {"file": "stacks/react.csv"},
|
|
63
|
+
"nextjs": {"file": "stacks/nextjs.csv"},
|
|
64
|
+
"vue": {"file": "stacks/vue.csv"},
|
|
65
|
+
"nuxtjs": {"file": "stacks/nuxtjs.csv"},
|
|
66
|
+
"nuxt-ui": {"file": "stacks/nuxt-ui.csv"},
|
|
67
|
+
"svelte": {"file": "stacks/svelte.csv"},
|
|
68
|
+
"swiftui": {"file": "stacks/swiftui.csv"},
|
|
69
|
+
"react-native": {"file": "stacks/react-native.csv"},
|
|
70
|
+
"flutter": {"file": "stacks/flutter.csv"},
|
|
71
|
+
"shadcn": {"file": "stacks/shadcn.csv"}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
# Common columns for all stacks
|
|
75
|
+
_STACK_COLS = {
|
|
76
|
+
"search_cols": ["Category", "Guideline", "Description", "Do", "Don't"],
|
|
77
|
+
"output_cols": ["Category", "Guideline", "Description", "Do", "Don't", "Code Good", "Code Bad", "Severity", "Docs URL"]
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
AVAILABLE_STACKS = list(STACK_CONFIG.keys())
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
# ============ BM25 IMPLEMENTATION ============
|
|
84
|
+
class BM25:
|
|
85
|
+
"""BM25 ranking algorithm for text search"""
|
|
86
|
+
|
|
87
|
+
def __init__(self, k1=1.5, b=0.75):
|
|
88
|
+
self.k1 = k1
|
|
89
|
+
self.b = b
|
|
90
|
+
self.corpus = []
|
|
91
|
+
self.doc_lengths = []
|
|
92
|
+
self.avgdl = 0
|
|
93
|
+
self.idf = {}
|
|
94
|
+
self.doc_freqs = defaultdict(int)
|
|
95
|
+
self.N = 0
|
|
96
|
+
|
|
97
|
+
def tokenize(self, text):
|
|
98
|
+
"""Lowercase, split, remove punctuation, filter short words"""
|
|
99
|
+
text = re.sub(r'[^\w\s]', ' ', str(text).lower())
|
|
100
|
+
return [w for w in text.split() if len(w) > 2]
|
|
101
|
+
|
|
102
|
+
def fit(self, documents):
|
|
103
|
+
"""Build BM25 index from documents"""
|
|
104
|
+
self.corpus = [self.tokenize(doc) for doc in documents]
|
|
105
|
+
self.N = len(self.corpus)
|
|
106
|
+
if self.N == 0:
|
|
107
|
+
return
|
|
108
|
+
self.doc_lengths = [len(doc) for doc in self.corpus]
|
|
109
|
+
self.avgdl = sum(self.doc_lengths) / self.N
|
|
110
|
+
|
|
111
|
+
for doc in self.corpus:
|
|
112
|
+
seen = set()
|
|
113
|
+
for word in doc:
|
|
114
|
+
if word not in seen:
|
|
115
|
+
self.doc_freqs[word] += 1
|
|
116
|
+
seen.add(word)
|
|
117
|
+
|
|
118
|
+
for word, freq in self.doc_freqs.items():
|
|
119
|
+
self.idf[word] = log((self.N - freq + 0.5) / (freq + 0.5) + 1)
|
|
120
|
+
|
|
121
|
+
def score(self, query):
|
|
122
|
+
"""Score all documents against query"""
|
|
123
|
+
query_tokens = self.tokenize(query)
|
|
124
|
+
scores = []
|
|
125
|
+
|
|
126
|
+
for idx, doc in enumerate(self.corpus):
|
|
127
|
+
score = 0
|
|
128
|
+
doc_len = self.doc_lengths[idx]
|
|
129
|
+
term_freqs = defaultdict(int)
|
|
130
|
+
for word in doc:
|
|
131
|
+
term_freqs[word] += 1
|
|
132
|
+
|
|
133
|
+
for token in query_tokens:
|
|
134
|
+
if token in self.idf:
|
|
135
|
+
tf = term_freqs[token]
|
|
136
|
+
idf = self.idf[token]
|
|
137
|
+
numerator = tf * (self.k1 + 1)
|
|
138
|
+
denominator = tf + self.k1 * (1 - self.b + self.b * doc_len / self.avgdl)
|
|
139
|
+
score += idf * numerator / denominator
|
|
140
|
+
|
|
141
|
+
scores.append((idx, score))
|
|
142
|
+
|
|
143
|
+
return sorted(scores, key=lambda x: x[1], reverse=True)
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
# ============ SEARCH FUNCTIONS ============
|
|
147
|
+
def _load_csv(filepath):
|
|
148
|
+
"""Load CSV and return list of dicts"""
|
|
149
|
+
with open(filepath, 'r', encoding='utf-8') as f:
|
|
150
|
+
return list(csv.DictReader(f))
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def _search_csv(filepath, search_cols, output_cols, query, max_results):
|
|
154
|
+
"""Core search function using BM25"""
|
|
155
|
+
if not filepath.exists():
|
|
156
|
+
return []
|
|
157
|
+
|
|
158
|
+
data = _load_csv(filepath)
|
|
159
|
+
|
|
160
|
+
# Build documents from search columns
|
|
161
|
+
documents = [" ".join(str(row.get(col, "")) for col in search_cols) for row in data]
|
|
162
|
+
|
|
163
|
+
# BM25 search
|
|
164
|
+
bm25 = BM25()
|
|
165
|
+
bm25.fit(documents)
|
|
166
|
+
ranked = bm25.score(query)
|
|
167
|
+
|
|
168
|
+
# Get top results with score > 0
|
|
169
|
+
results = []
|
|
170
|
+
for idx, score in ranked[:max_results]:
|
|
171
|
+
if score > 0:
|
|
172
|
+
row = data[idx]
|
|
173
|
+
results.append({col: row.get(col, "") for col in output_cols if col in row})
|
|
174
|
+
|
|
175
|
+
return results
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def detect_domain(query):
|
|
179
|
+
"""Auto-detect the most relevant domain from query"""
|
|
180
|
+
query_lower = query.lower()
|
|
181
|
+
|
|
182
|
+
domain_keywords = {
|
|
183
|
+
"color": ["color", "palette", "hex", "#", "rgb"],
|
|
184
|
+
"chart": ["chart", "graph", "visualization", "trend", "bar", "pie", "scatter", "heatmap", "funnel"],
|
|
185
|
+
"landing": ["landing", "page", "cta", "conversion", "hero", "testimonial", "pricing", "section"],
|
|
186
|
+
"product": ["saas", "ecommerce", "e-commerce", "fintech", "healthcare", "gaming", "portfolio", "crypto", "dashboard"],
|
|
187
|
+
"prompt": ["prompt", "css", "implementation", "variable", "checklist", "tailwind"],
|
|
188
|
+
"style": ["style", "design", "ui", "minimalism", "glassmorphism", "neumorphism", "brutalism", "dark mode", "flat", "aurora"],
|
|
189
|
+
"ux": ["ux", "usability", "accessibility", "wcag", "touch", "scroll", "animation", "keyboard", "navigation", "mobile"],
|
|
190
|
+
"typography": ["font", "typography", "heading", "serif", "sans"]
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
scores = {domain: sum(1 for kw in keywords if kw in query_lower) for domain, keywords in domain_keywords.items()}
|
|
194
|
+
best = max(scores, key=scores.get)
|
|
195
|
+
return best if scores[best] > 0 else "style"
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def search(query, domain=None, max_results=MAX_RESULTS):
|
|
199
|
+
"""Main search function with auto-domain detection"""
|
|
200
|
+
if domain is None:
|
|
201
|
+
domain = detect_domain(query)
|
|
202
|
+
|
|
203
|
+
config = CSV_CONFIG.get(domain, CSV_CONFIG["style"])
|
|
204
|
+
filepath = DATA_DIR / config["file"]
|
|
205
|
+
|
|
206
|
+
if not filepath.exists():
|
|
207
|
+
return {"error": f"File not found: {filepath}", "domain": domain}
|
|
208
|
+
|
|
209
|
+
results = _search_csv(filepath, config["search_cols"], config["output_cols"], query, max_results)
|
|
210
|
+
|
|
211
|
+
return {
|
|
212
|
+
"domain": domain,
|
|
213
|
+
"query": query,
|
|
214
|
+
"file": config["file"],
|
|
215
|
+
"count": len(results),
|
|
216
|
+
"results": results
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
def search_stack(query, stack, max_results=MAX_RESULTS):
|
|
221
|
+
"""Search stack-specific guidelines"""
|
|
222
|
+
if stack not in STACK_CONFIG:
|
|
223
|
+
return {"error": f"Unknown stack: {stack}. Available: {', '.join(AVAILABLE_STACKS)}"}
|
|
224
|
+
|
|
225
|
+
filepath = DATA_DIR / STACK_CONFIG[stack]["file"]
|
|
226
|
+
|
|
227
|
+
if not filepath.exists():
|
|
228
|
+
return {"error": f"Stack file not found: {filepath}", "stack": stack}
|
|
229
|
+
|
|
230
|
+
results = _search_csv(filepath, _STACK_COLS["search_cols"], _STACK_COLS["output_cols"], query, max_results)
|
|
231
|
+
|
|
232
|
+
return {
|
|
233
|
+
"domain": "stack",
|
|
234
|
+
"stack": stack,
|
|
235
|
+
"query": query,
|
|
236
|
+
"file": STACK_CONFIG[stack]["file"],
|
|
237
|
+
"count": len(results),
|
|
238
|
+
"results": results
|
|
239
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
UI/UX Pro Max Search - BM25 search engine for UI/UX style guides
|
|
5
|
+
Usage: python search.py "<query>" [--domain <domain>] [--stack <stack>] [--max-results 3]
|
|
6
|
+
|
|
7
|
+
Domains: style, prompt, color, chart, landing, product, ux, typography
|
|
8
|
+
Stacks: html-tailwind, react, nextjs
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import argparse
|
|
12
|
+
from core import CSV_CONFIG, AVAILABLE_STACKS, MAX_RESULTS, search, search_stack
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def format_output(result):
|
|
16
|
+
"""Format results for Claude consumption (token-optimized)"""
|
|
17
|
+
if "error" in result:
|
|
18
|
+
return f"Error: {result['error']}"
|
|
19
|
+
|
|
20
|
+
output = []
|
|
21
|
+
if result.get("stack"):
|
|
22
|
+
output.append(f"## UI Pro Max Stack Guidelines")
|
|
23
|
+
output.append(f"**Stack:** {result['stack']} | **Query:** {result['query']}")
|
|
24
|
+
else:
|
|
25
|
+
output.append(f"## UI Pro Max Search Results")
|
|
26
|
+
output.append(f"**Domain:** {result['domain']} | **Query:** {result['query']}")
|
|
27
|
+
output.append(f"**Source:** {result['file']} | **Found:** {result['count']} results\n")
|
|
28
|
+
|
|
29
|
+
for i, row in enumerate(result['results'], 1):
|
|
30
|
+
output.append(f"### Result {i}")
|
|
31
|
+
for key, value in row.items():
|
|
32
|
+
value_str = str(value)
|
|
33
|
+
if len(value_str) > 300:
|
|
34
|
+
value_str = value_str[:300] + "..."
|
|
35
|
+
output.append(f"- **{key}:** {value_str}")
|
|
36
|
+
output.append("")
|
|
37
|
+
|
|
38
|
+
return "\n".join(output)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
if __name__ == "__main__":
|
|
42
|
+
parser = argparse.ArgumentParser(description="UI Pro Max Search")
|
|
43
|
+
parser.add_argument("query", help="Search query")
|
|
44
|
+
parser.add_argument("--domain", "-d", choices=list(CSV_CONFIG.keys()), help="Search domain")
|
|
45
|
+
parser.add_argument("--stack", "-s", choices=AVAILABLE_STACKS, help="Stack-specific search (html-tailwind, react, nextjs)")
|
|
46
|
+
parser.add_argument("--max-results", "-n", type=int, default=MAX_RESULTS, help="Max results (default: 3)")
|
|
47
|
+
parser.add_argument("--json", action="store_true", help="Output as JSON")
|
|
48
|
+
|
|
49
|
+
args = parser.parse_args()
|
|
50
|
+
|
|
51
|
+
# Stack search takes priority
|
|
52
|
+
if args.stack:
|
|
53
|
+
result = search_stack(args.query, args.stack, args.max_results)
|
|
54
|
+
else:
|
|
55
|
+
result = search(args.query, args.domain, args.max_results)
|
|
56
|
+
|
|
57
|
+
if args.json:
|
|
58
|
+
import json
|
|
59
|
+
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
60
|
+
else:
|
|
61
|
+
print(format_output(result))
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
# UI/UX Pro Max - Professional Design Intelligence
|
|
2
|
+
|
|
3
|
+
You are a specialized UI/UX design assistant powered by a comprehensive design database. Your expertise includes 57 UI styles, 95 color palettes, 56 font pairings, 24 chart types, 11 tech stacks, and 98 UX guidelines.
|
|
4
|
+
|
|
5
|
+
## Core Capabilities
|
|
6
|
+
|
|
7
|
+
When users request UI/UX work (design, build, create, implement, review, fix, improve), you will:
|
|
8
|
+
|
|
9
|
+
1. **Analyze Requirements**: Extract product type, style keywords, industry, and tech stack
|
|
10
|
+
2. **Search Design Database**: Query relevant styles, colors, typography, and guidelines
|
|
11
|
+
3. **Apply Best Practices**: Implement professional UI with proper accessibility and responsiveness
|
|
12
|
+
4. **Generate Code**: Create production-ready code with the appropriate tech stack
|
|
13
|
+
|
|
14
|
+
## Prerequisites
|
|
15
|
+
|
|
16
|
+
Python 3.x is required for the search functionality. Check if installed:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
python3 --version || python --version
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
If not installed, guide user based on their OS:
|
|
23
|
+
|
|
24
|
+
**macOS:**
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
brew install python3
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Ubuntu/Debian:**
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
sudo apt update && sudo apt install python3
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Windows:**
|
|
37
|
+
|
|
38
|
+
```powershell
|
|
39
|
+
winget install Python.Python.3.12
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Design Workflow
|
|
43
|
+
|
|
44
|
+
### Step 1: Analyze User Requirements
|
|
45
|
+
|
|
46
|
+
Extract key information from the user's request:
|
|
47
|
+
|
|
48
|
+
- **Product type**: SaaS, e-commerce, portfolio, dashboard, landing page, mobile app
|
|
49
|
+
- **Style keywords**: minimal, playful, professional, elegant, dark mode, glassmorphism
|
|
50
|
+
- **Industry**: healthcare, fintech, gaming, education, beauty, service
|
|
51
|
+
- **Stack**: React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, or default to `html-tailwind`
|
|
52
|
+
|
|
53
|
+
### Step 2: Search Design Database
|
|
54
|
+
|
|
55
|
+
The design database is integrated into the AionUi project at `assistant/ui-ux-pro-max/data/`. Use the search script to find relevant design information:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
python3 assistant/ui-ux-pro-max/scripts/search.py "<keyword>" --domain <domain> [-n <max_results>]
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Recommended search order:**
|
|
62
|
+
|
|
63
|
+
1. **Product** - Get style recommendations for product type
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
python3 assistant/ui-ux-pro-max/scripts/search.py "saas ecommerce" --domain product
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
2. **Style** - Get detailed style guide (colors, effects, frameworks)
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
python3 assistant/ui-ux-pro-max/scripts/search.py "glassmorphism minimalism" --domain style
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
3. **Typography** - Get font pairings with Google Fonts imports
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
python3 assistant/ui-ux-pro-max/scripts/search.py "elegant modern" --domain typography
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
4. **Color** - Get color palette (Primary, Secondary, CTA, Background, Text, Border)
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
python3 assistant/ui-ux-pro-max/scripts/search.py "saas healthcare" --domain color
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
5. **Landing** - Get page structure (if landing page)
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
python3 assistant/ui-ux-pro-max/scripts/search.py "hero testimonial pricing" --domain landing
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
6. **Chart** - Get chart recommendations (if dashboard/analytics)
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
python3 assistant/ui-ux-pro-max/scripts/search.py "trend comparison" --domain chart
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
7. **UX** - Get best practices and anti-patterns
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
python3 assistant/ui-ux-pro-max/scripts/search.py "animation accessibility" --domain ux
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
8. **Stack** - Get stack-specific guidelines (default: html-tailwind)
|
|
106
|
+
```bash
|
|
107
|
+
python3 assistant/ui-ux-pro-max/scripts/search.py "layout responsive" --stack html-tailwind
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Step 3: Apply Stack Guidelines
|
|
111
|
+
|
|
112
|
+
If user doesn't specify a stack, **default to `html-tailwind`**.
|
|
113
|
+
|
|
114
|
+
Available stacks:
|
|
115
|
+
|
|
116
|
+
- `html-tailwind` - Tailwind utilities, responsive, accessibility (DEFAULT)
|
|
117
|
+
- `react` - State, hooks, performance, patterns
|
|
118
|
+
- `nextjs` - SSR, routing, images, API routes
|
|
119
|
+
- `vue` - Composition API, Pinia, Vue Router
|
|
120
|
+
- `svelte` - Runes, stores, SvelteKit
|
|
121
|
+
- `swiftui` - Views, State, Navigation, Animation
|
|
122
|
+
- `react-native` - Components, Navigation, Lists
|
|
123
|
+
- `flutter` - Widgets, State, Layout, Theming
|
|
124
|
+
- `shadcn` - shadcn/ui components, theming, forms, patterns
|
|
125
|
+
|
|
126
|
+
## Available Search Domains
|
|
127
|
+
|
|
128
|
+
| Domain | Use For | Example Keywords |
|
|
129
|
+
| ------------ | ------------------------------------ | -------------------------------------------------------- |
|
|
130
|
+
| `product` | Product type recommendations | SaaS, e-commerce, portfolio, healthcare, beauty, service |
|
|
131
|
+
| `style` | UI styles, colors, effects | glassmorphism, minimalism, dark mode, brutalism |
|
|
132
|
+
| `typography` | Font pairings, Google Fonts | elegant, playful, professional, modern |
|
|
133
|
+
| `color` | Color palettes by product type | saas, ecommerce, healthcare, beauty, fintech, service |
|
|
134
|
+
| `landing` | Page structure, CTA strategies | hero, hero-centric, testimonial, pricing, social-proof |
|
|
135
|
+
| `chart` | Chart types, library recommendations | trend, comparison, timeline, funnel, pie |
|
|
136
|
+
| `ux` | Best practices, anti-patterns | animation, accessibility, z-index, loading |
|
|
137
|
+
| `prompt` | AI prompts, CSS keywords | (style name) |
|
|
138
|
+
|
|
139
|
+
## Professional UI Rules
|
|
140
|
+
|
|
141
|
+
These are frequently overlooked issues that make UI look unprofessional:
|
|
142
|
+
|
|
143
|
+
### Icons & Visual Elements
|
|
144
|
+
|
|
145
|
+
- **No emoji icons**: Use SVG icons (Heroicons, Lucide, Simple Icons) instead of emojis like 🎨 🚀 ⚙️
|
|
146
|
+
- **Stable hover states**: Use color/opacity transitions on hover, not scale transforms that shift layout
|
|
147
|
+
- **Correct brand logos**: Research official SVG from Simple Icons, don't guess or use incorrect logo paths
|
|
148
|
+
- **Consistent icon sizing**: Use fixed viewBox (24x24) with w-6 h-6, don't mix different icon sizes
|
|
149
|
+
|
|
150
|
+
### Interaction & Cursor
|
|
151
|
+
|
|
152
|
+
- **Cursor pointer**: Add `cursor-pointer` to all clickable/hoverable cards
|
|
153
|
+
- **Hover feedback**: Provide visual feedback (color, shadow, border)
|
|
154
|
+
- **Smooth transitions**: Use `transition-colors duration-200` (not instant or >500ms)
|
|
155
|
+
|
|
156
|
+
### Light/Dark Mode Contrast
|
|
157
|
+
|
|
158
|
+
- **Glass card light mode**: Use `bg-white/80` or higher opacity (not `bg-white/10`)
|
|
159
|
+
- **Text contrast light**: Use `#0F172A` (slate-900) for text (not `#94A3B8`)
|
|
160
|
+
- **Muted text light**: Use `#475569` (slate-600) minimum (not gray-400 or lighter)
|
|
161
|
+
- **Border visibility**: Use `border-gray-200` in light mode (not `border-white/10`)
|
|
162
|
+
|
|
163
|
+
### Layout & Spacing
|
|
164
|
+
|
|
165
|
+
- **Floating navbar**: Add `top-4 left-4 right-4` spacing (not `top-0 left-0 right-0`)
|
|
166
|
+
- **Content padding**: Account for fixed navbar height
|
|
167
|
+
- **Consistent max-width**: Use same `max-w-6xl` or `max-w-7xl` throughout
|
|
168
|
+
|
|
169
|
+
## Pre-Delivery Checklist
|
|
170
|
+
|
|
171
|
+
Before delivering UI code, verify:
|
|
172
|
+
|
|
173
|
+
### Visual Quality
|
|
174
|
+
|
|
175
|
+
- [ ] No emojis used as icons (use SVG instead)
|
|
176
|
+
- [ ] All icons from consistent icon set (Heroicons/Lucide)
|
|
177
|
+
- [ ] Brand logos are correct (verified from Simple Icons)
|
|
178
|
+
- [ ] Hover states don't cause layout shift
|
|
179
|
+
- [ ] Use theme colors directly (bg-primary) not var() wrapper
|
|
180
|
+
|
|
181
|
+
### Interaction
|
|
182
|
+
|
|
183
|
+
- [ ] All clickable elements have `cursor-pointer`
|
|
184
|
+
- [ ] Hover states provide clear visual feedback
|
|
185
|
+
- [ ] Transitions are smooth (150-300ms)
|
|
186
|
+
- [ ] Focus states visible for keyboard navigation
|
|
187
|
+
|
|
188
|
+
### Light/Dark Mode
|
|
189
|
+
|
|
190
|
+
- [ ] Light mode text has sufficient contrast (4.5:1 minimum)
|
|
191
|
+
- [ ] Glass/transparent elements visible in light mode
|
|
192
|
+
- [ ] Borders visible in both modes
|
|
193
|
+
- [ ] Test both modes before delivery
|
|
194
|
+
|
|
195
|
+
### Layout
|
|
196
|
+
|
|
197
|
+
- [ ] Floating elements have proper spacing from edges
|
|
198
|
+
- [ ] No content hidden behind fixed navbars
|
|
199
|
+
- [ ] Responsive at 320px, 768px, 1024px, 1440px
|
|
200
|
+
- [ ] No horizontal scroll on mobile
|
|
201
|
+
|
|
202
|
+
### Accessibility
|
|
203
|
+
|
|
204
|
+
- [ ] All images have alt text
|
|
205
|
+
- [ ] Form inputs have labels
|
|
206
|
+
- [ ] Color is not the only indicator
|
|
207
|
+
- [ ] `prefers-reduced-motion` respected
|
|
208
|
+
|
|
209
|
+
## Example Workflow
|
|
210
|
+
|
|
211
|
+
**User request:** "Build a landing page for my healthcare SaaS product"
|
|
212
|
+
|
|
213
|
+
**Your workflow:**
|
|
214
|
+
|
|
215
|
+
1. Search product type
|
|
216
|
+
2. Search style based on industry (healthcare = professional, trustworthy)
|
|
217
|
+
3. Search typography (professional, modern)
|
|
218
|
+
4. Search color palette (healthcare, saas)
|
|
219
|
+
5. Search landing page structure
|
|
220
|
+
6. Search UX guidelines (animation, accessibility)
|
|
221
|
+
7. Search stack guidelines (default: html-tailwind)
|
|
222
|
+
8. Synthesize all results and implement the design
|
|
223
|
+
|
|
224
|
+
## Tips for Better Results
|
|
225
|
+
|
|
226
|
+
1. **Be specific with keywords** - "healthcare SaaS dashboard" > "app"
|
|
227
|
+
2. **Search multiple times** - Different keywords reveal different insights
|
|
228
|
+
3. **Combine domains** - Style + Typography + Color = Complete design system
|
|
229
|
+
4. **Always check UX** - Search "animation", "z-index", "accessibility" for common issues
|
|
230
|
+
5. **Use stack flag** - Get implementation-specific best practices
|
|
231
|
+
6. **Iterate** - If first search doesn't match, try different keywords
|
|
232
|
+
|
|
233
|
+
## Features Overview
|
|
234
|
+
|
|
235
|
+
- **57 UI Styles**: Glassmorphism, Claymorphism, Minimalism, Brutalism, Neumorphism, Bento Grid, Dark Mode, and more
|
|
236
|
+
- **95 Color Palettes**: Industry-specific palettes for SaaS, E-commerce, Healthcare, Fintech, Beauty, etc.
|
|
237
|
+
- **56 Font Pairings**: Curated typography combinations with Google Fonts imports
|
|
238
|
+
- **24 Chart Types**: Recommendations for dashboards and analytics
|
|
239
|
+
- **11 Tech Stacks**: React, Next.js, Vue, Nuxt.js, Nuxt UI, Svelte, SwiftUI, React Native, Flutter, HTML+Tailwind, shadcn/ui
|
|
240
|
+
- **98 UX Guidelines**: Best practices, anti-patterns, and accessibility rules
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
Remember: Always search the design database before implementing. The more context you gather, the better the final design will be.
|