flutter-pro-max-cli 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/LICENSE +21 -0
- package/README.md +106 -0
- package/assets/.agent/workflows/flutter-pro-max.md +167 -0
- package/assets/.agent/workflows/scripts/core.py +341 -0
- package/assets/.agent/workflows/scripts/search.py +106 -0
- package/assets/.claude/skills/flutter-pro-max/SKILL.md +182 -0
- package/assets/.claude/skills/flutter-pro-max/scripts/core.py +341 -0
- package/assets/.claude/skills/flutter-pro-max/scripts/search.py +106 -0
- package/assets/.codebuddy/commands/flutter-pro-max.md +58 -0
- package/assets/.codebuddy/commands/scripts/core.py +341 -0
- package/assets/.codebuddy/commands/scripts/search.py +106 -0
- package/assets/.codex/skills/flutter-pro-max/SKILL.md +100 -0
- package/assets/.codex/skills/flutter-pro-max/scripts/core.py +341 -0
- package/assets/.codex/skills/flutter-pro-max/scripts/search.py +106 -0
- package/assets/.cursor/commands/flutter-pro-max.md +154 -0
- package/assets/.cursor/commands/scripts/core.py +341 -0
- package/assets/.cursor/commands/scripts/search.py +106 -0
- package/assets/.gemini/skills/flutter-pro-max/SKILL.md +100 -0
- package/assets/.gemini/skills/flutter-pro-max/scripts/core.py +341 -0
- package/assets/.gemini/skills/flutter-pro-max/scripts/search.py +106 -0
- package/assets/.github/prompts/flutter-pro-max.prompt.md +61 -0
- package/assets/.github/prompts/scripts/core.py +341 -0
- package/assets/.github/prompts/scripts/search.py +106 -0
- package/assets/.kiro/steering/flutter-pro-max.md +60 -0
- package/assets/.kiro/steering/scripts/core.py +341 -0
- package/assets/.kiro/steering/scripts/search.py +106 -0
- package/assets/.qoder/rules/flutter-pro-max.md +58 -0
- package/assets/.qoder/rules/scripts/core.py +341 -0
- package/assets/.qoder/rules/scripts/search.py +106 -0
- package/assets/.roo/commands/flutter-pro-max.md +58 -0
- package/assets/.roo/commands/scripts/core.py +341 -0
- package/assets/.roo/commands/scripts/search.py +106 -0
- package/assets/.shared/data/architect.csv +18 -0
- package/assets/.shared/data/charts.csv +26 -0
- package/assets/.shared/data/colors.csv +97 -0
- package/assets/.shared/data/icons.csv +101 -0
- package/assets/.shared/data/landing.csv +31 -0
- package/assets/.shared/data/name_convention.csv +16 -0
- package/assets/.shared/data/package.csv +101 -0
- package/assets/.shared/data/patterns.csv +109 -0
- package/assets/.shared/data/products.csv +97 -0
- package/assets/.shared/data/prompts.csv +24 -0
- package/assets/.shared/data/styles.csv +59 -0
- package/assets/.shared/data/typography.csv +58 -0
- package/assets/.shared/data/ux-guidelines.csv +100 -0
- package/assets/.shared/data/widget.csv +65 -0
- package/assets/.shared/flutter-pro-max/SKILL.md +165 -0
- package/assets/.shared/flutter-pro-max/scripts/core.py +341 -0
- package/assets/.shared/flutter-pro-max/scripts/search.py +106 -0
- package/assets/.trae/skills/flutter-pro-max/SKILL.md +61 -0
- package/assets/.trae/skills/flutter-pro-max/scripts/core.py +341 -0
- package/assets/.trae/skills/flutter-pro-max/scripts/search.py +106 -0
- package/assets/.windsurf/workflows/flutter-pro-max.md +154 -0
- package/assets/.windsurf/workflows/scripts/core.py +341 -0
- package/assets/.windsurf/workflows/scripts/search.py +106 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.js +67 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +31 -0
- package/dist/types/index.d.ts +20 -0
- package/dist/types/index.js +15 -0
- package/dist/utils/detect.d.ts +8 -0
- package/dist/utils/detect.js +80 -0
- package/dist/utils/extract.d.ts +4 -0
- package/dist/utils/extract.js +83 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.js +9 -0
- package/package.json +52 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
Flutter Pro Max Core - BM25 search engine for Flutter knowledge base
|
|
5
|
+
Zero dependencies - self-contained BM25 implementation
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import csv
|
|
9
|
+
import re
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from math import log
|
|
12
|
+
from collections import defaultdict
|
|
13
|
+
|
|
14
|
+
# ============ CONFIGURATION ============
|
|
15
|
+
def _get_data_dir():
|
|
16
|
+
"""Auto-detect data directory based on script location"""
|
|
17
|
+
script_dir = Path(__file__).parent
|
|
18
|
+
possible_paths = [
|
|
19
|
+
# When running from root/scripts/
|
|
20
|
+
script_dir.parent / ".shared" / "data",
|
|
21
|
+
# When running from .shared/flutter-pro-max/scripts/
|
|
22
|
+
script_dir.parent.parent / "data",
|
|
23
|
+
# Fallback: cwd
|
|
24
|
+
Path.cwd() / ".shared" / "data",
|
|
25
|
+
]
|
|
26
|
+
for p in possible_paths:
|
|
27
|
+
if p.exists():
|
|
28
|
+
return p.resolve()
|
|
29
|
+
return possible_paths[0] # Default to first option
|
|
30
|
+
|
|
31
|
+
DATA_DIR = _get_data_dir()
|
|
32
|
+
MAX_RESULTS = 5
|
|
33
|
+
|
|
34
|
+
# Domain configuration: file, search columns, output columns
|
|
35
|
+
CSV_CONFIG = {
|
|
36
|
+
"widget": {
|
|
37
|
+
"file": "widget.csv",
|
|
38
|
+
"search_cols": ["Widget Name", "Category", "Description", "Key Properties", "Usage Context & Pro-Tips"],
|
|
39
|
+
"output_cols": ["Widget Name", "Category", "Description", "Key Properties", "Usage Context & Pro-Tips"]
|
|
40
|
+
},
|
|
41
|
+
"package": {
|
|
42
|
+
"file": "package.csv",
|
|
43
|
+
"search_cols": ["pkg_name", "category", "description", "best_practice_snippet", "pro_tip", "alternatives"],
|
|
44
|
+
"output_cols": ["pkg_name", "category", "description", "best_practice_snippet", "pro_tip", "alternatives"]
|
|
45
|
+
},
|
|
46
|
+
"pattern": {
|
|
47
|
+
"file": "patterns.csv",
|
|
48
|
+
"search_cols": ["pattern_name", "category", "problem_tags", "description", "key_widgets", "code_snippet", "anti_pattern"],
|
|
49
|
+
"output_cols": ["pattern_name", "category", "problem_tags", "description", "key_widgets", "code_snippet", "anti_pattern"]
|
|
50
|
+
},
|
|
51
|
+
"architect": {
|
|
52
|
+
"file": "architect.csv",
|
|
53
|
+
"search_cols": ["path_pattern", "layer", "responsibility_description", "allowed_dependencies", "tech_stack_note"],
|
|
54
|
+
"output_cols": ["path_pattern", "layer", "responsibility_description", "allowed_dependencies", "tech_stack_note"]
|
|
55
|
+
},
|
|
56
|
+
"chart": {
|
|
57
|
+
"file": "charts.csv",
|
|
58
|
+
"search_cols": ["Data Type", "Keywords", "Best Chart Type", "Secondary Options", "Accessibility Notes"],
|
|
59
|
+
"output_cols": ["Data Type", "Keywords", "Best Chart Type", "Secondary Options", "Color Guidance", "Accessibility Notes", "Library Recommendation"]
|
|
60
|
+
},
|
|
61
|
+
"color": {
|
|
62
|
+
"file": "colors.csv",
|
|
63
|
+
"search_cols": ["Product Type", "Keywords", "Notes"],
|
|
64
|
+
"output_cols": ["Product Type", "Keywords", "Primary (Hex)", "Secondary (Hex)", "CTA (Hex)", "Notes"]
|
|
65
|
+
},
|
|
66
|
+
"typography": {
|
|
67
|
+
"file": "typography.csv",
|
|
68
|
+
"search_cols": ["Font Pairing Name", "Category", "Mood/Style Keywords", "Best For", "Heading Font", "Body Font"],
|
|
69
|
+
"output_cols": ["Font Pairing Name", "Category", "Heading Font", "Body Font", "Mood/Style Keywords", "Best For", "Google Fonts URL", "Notes"]
|
|
70
|
+
},
|
|
71
|
+
"style": {
|
|
72
|
+
"file": "styles.csv",
|
|
73
|
+
"search_cols": ["Style Category", "Type", "Keywords", "Best For"],
|
|
74
|
+
"output_cols": ["Style Category", "Type", "Keywords", "Primary Colors", "Effects & Animation", "Best For", "Do Not Use For"]
|
|
75
|
+
},
|
|
76
|
+
"ux": {
|
|
77
|
+
"file": "ux-guidelines.csv",
|
|
78
|
+
"search_cols": ["Category", "Issue", "Platform", "Description", "Do", "Don't"],
|
|
79
|
+
"output_cols": ["Category", "Issue", "Platform", "Description", "Do", "Don't"]
|
|
80
|
+
},
|
|
81
|
+
"icon": {
|
|
82
|
+
"file": "icons.csv",
|
|
83
|
+
"search_cols": ["Category", "Icon Name", "Keywords", "Best For"],
|
|
84
|
+
"output_cols": ["Category", "Icon Name", "Keywords", "Library", "Import Code", "Usage", "Best For"]
|
|
85
|
+
},
|
|
86
|
+
"landing": {
|
|
87
|
+
"file": "landing.csv",
|
|
88
|
+
"search_cols": ["Pattern Name", "Keywords", "Section Order", "Conversion Optimization"],
|
|
89
|
+
"output_cols": ["Pattern Name", "Keywords", "Section Order", "Primary CTA Placement", "Color Strategy", "Conversion Optimization"]
|
|
90
|
+
},
|
|
91
|
+
"naming": {
|
|
92
|
+
"file": "name_convention.csv",
|
|
93
|
+
"search_cols": ["Layer", "File Template", "Class Template", "Example File", "Example Class", "Notes"],
|
|
94
|
+
"output_cols": ["Layer", "File Template", "Class Template", "Example File", "Example Class", "Notes"]
|
|
95
|
+
},
|
|
96
|
+
"product": {
|
|
97
|
+
"file": "products.csv",
|
|
98
|
+
"search_cols": ["Product Type", "Keywords", "Primary Style Recommendation"],
|
|
99
|
+
"output_cols": ["Product Type", "Keywords", "Primary Style Recommendation", "Secondary Styles", "Color Palette Focus"]
|
|
100
|
+
},
|
|
101
|
+
"prompt": {
|
|
102
|
+
"file": "prompts.csv",
|
|
103
|
+
"search_cols": ["Style Category", "AI Prompt Keywords (Copy-Paste Ready)", "CSS/Technical Keywords"],
|
|
104
|
+
"output_cols": ["Style Category", "AI Prompt Keywords (Copy-Paste Ready)", "CSS/Technical Keywords", "Implementation Checklist"]
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
# Stack exclusion mapping for filtering conflicting packages
|
|
109
|
+
STACK_EXCLUSIONS = {
|
|
110
|
+
"riverpod": ["bloc", "flutter_bloc", "provider", "hydrated_bloc"],
|
|
111
|
+
"bloc": ["riverpod", "flutter_riverpod", "provider"],
|
|
112
|
+
"provider": ["riverpod", "flutter_riverpod", "bloc", "flutter_bloc"],
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
AVAILABLE_DOMAINS = list(CSV_CONFIG.keys())
|
|
116
|
+
AVAILABLE_STACKS = list(STACK_EXCLUSIONS.keys())
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
# ============ BM25 IMPLEMENTATION ============
|
|
120
|
+
class BM25:
|
|
121
|
+
"""BM25 ranking algorithm for text search - zero dependencies"""
|
|
122
|
+
|
|
123
|
+
def __init__(self, k1=1.5, b=0.75):
|
|
124
|
+
self.k1 = k1
|
|
125
|
+
self.b = b
|
|
126
|
+
self.corpus = []
|
|
127
|
+
self.doc_lengths = []
|
|
128
|
+
self.avgdl = 0
|
|
129
|
+
self.idf = {}
|
|
130
|
+
self.doc_freqs = defaultdict(int)
|
|
131
|
+
self.N = 0
|
|
132
|
+
|
|
133
|
+
def tokenize(self, text):
|
|
134
|
+
"""Lowercase, split, remove punctuation, filter short words"""
|
|
135
|
+
text = re.sub(r'[^\w\s]', ' ', str(text).lower())
|
|
136
|
+
return [w for w in text.split() if len(w) > 1]
|
|
137
|
+
|
|
138
|
+
def fit(self, documents):
|
|
139
|
+
"""Build BM25 index from documents"""
|
|
140
|
+
self.corpus = [self.tokenize(doc) for doc in documents]
|
|
141
|
+
self.N = len(self.corpus)
|
|
142
|
+
if self.N == 0:
|
|
143
|
+
return
|
|
144
|
+
self.doc_lengths = [len(doc) for doc in self.corpus]
|
|
145
|
+
self.avgdl = sum(self.doc_lengths) / self.N
|
|
146
|
+
|
|
147
|
+
for doc in self.corpus:
|
|
148
|
+
seen = set()
|
|
149
|
+
for word in doc:
|
|
150
|
+
if word not in seen:
|
|
151
|
+
self.doc_freqs[word] += 1
|
|
152
|
+
seen.add(word)
|
|
153
|
+
|
|
154
|
+
for word, freq in self.doc_freqs.items():
|
|
155
|
+
self.idf[word] = log((self.N - freq + 0.5) / (freq + 0.5) + 1)
|
|
156
|
+
|
|
157
|
+
def score(self, query):
|
|
158
|
+
"""Score all documents against query"""
|
|
159
|
+
query_tokens = self.tokenize(query)
|
|
160
|
+
scores = []
|
|
161
|
+
|
|
162
|
+
for idx, doc in enumerate(self.corpus):
|
|
163
|
+
score = 0
|
|
164
|
+
doc_len = self.doc_lengths[idx]
|
|
165
|
+
term_freqs = defaultdict(int)
|
|
166
|
+
for word in doc:
|
|
167
|
+
term_freqs[word] += 1
|
|
168
|
+
|
|
169
|
+
for token in query_tokens:
|
|
170
|
+
if token in self.idf:
|
|
171
|
+
tf = term_freqs[token]
|
|
172
|
+
idf = self.idf[token]
|
|
173
|
+
numerator = tf * (self.k1 + 1)
|
|
174
|
+
denominator = tf + self.k1 * (1 - self.b + self.b * doc_len / self.avgdl)
|
|
175
|
+
score += idf * numerator / denominator
|
|
176
|
+
|
|
177
|
+
scores.append((idx, score))
|
|
178
|
+
|
|
179
|
+
return sorted(scores, key=lambda x: x[1], reverse=True)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
# ============ HELPER FUNCTIONS ============
|
|
183
|
+
def _load_csv(filepath):
|
|
184
|
+
"""Load CSV and return list of dicts"""
|
|
185
|
+
with open(filepath, 'r', encoding='utf-8') as f:
|
|
186
|
+
return list(csv.DictReader(f))
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def _search_csv(filepath, search_cols, output_cols, query, max_results, boost_col=None, boost_query=None):
|
|
190
|
+
"""Core search function using BM25 with optional boosting"""
|
|
191
|
+
if not filepath.exists():
|
|
192
|
+
return []
|
|
193
|
+
|
|
194
|
+
data = _load_csv(filepath)
|
|
195
|
+
|
|
196
|
+
# Build documents from search columns
|
|
197
|
+
documents = [" ".join(str(row.get(col, "")) for col in search_cols) for row in data]
|
|
198
|
+
|
|
199
|
+
# BM25 search
|
|
200
|
+
bm25 = BM25()
|
|
201
|
+
bm25.fit(documents)
|
|
202
|
+
ranked = bm25.score(query)
|
|
203
|
+
|
|
204
|
+
# Apply boosting if specified (widget name match, etc.)
|
|
205
|
+
if boost_col and boost_query:
|
|
206
|
+
boost_query_lower = boost_query.lower()
|
|
207
|
+
boosted = []
|
|
208
|
+
for idx, score in ranked:
|
|
209
|
+
if score > 0:
|
|
210
|
+
boost_value = str(data[idx].get(boost_col, "")).lower()
|
|
211
|
+
if boost_value in boost_query_lower or boost_query_lower in boost_value:
|
|
212
|
+
score *= 2.0 # Double score for exact/partial match
|
|
213
|
+
boosted.append((idx, score))
|
|
214
|
+
ranked = sorted(boosted, key=lambda x: x[1], reverse=True)
|
|
215
|
+
|
|
216
|
+
# Get top results with score > 0
|
|
217
|
+
results = []
|
|
218
|
+
for idx, score in ranked[:max_results]:
|
|
219
|
+
if score > 0:
|
|
220
|
+
row = data[idx]
|
|
221
|
+
result = {col: row.get(col, "") for col in output_cols if col in row}
|
|
222
|
+
result["_score"] = round(score, 4)
|
|
223
|
+
results.append(result)
|
|
224
|
+
|
|
225
|
+
return results
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
def detect_domain(query):
|
|
229
|
+
"""Auto-detect the most relevant domain from query keywords"""
|
|
230
|
+
query_lower = query.lower()
|
|
231
|
+
|
|
232
|
+
domain_keywords = {
|
|
233
|
+
"widget": ["widget", "listview", "column", "row", "container", "text", "button", "scaffold", "appbar", "sliver"],
|
|
234
|
+
"package": ["package", "pub", "dependency", "library", "dio", "http", "riverpod", "bloc", "hive", "isar"],
|
|
235
|
+
"pattern": ["pattern", "architecture", "repository", "usecase", "state", "async", "error handling", "offline"],
|
|
236
|
+
"architect": ["layer", "folder", "structure", "clean", "feature", "domain", "data", "presentation"],
|
|
237
|
+
"chart": ["chart", "graph", "visualization", "bar", "pie", "line", "scatter", "heatmap"],
|
|
238
|
+
"color": ["color", "palette", "hex", "theme", "dark mode", "light mode"],
|
|
239
|
+
"typography": ["font", "typography", "heading", "text style", "google fonts"],
|
|
240
|
+
"style": ["style", "design", "ui", "glassmorphism", "neumorphism", "minimal", "modern"],
|
|
241
|
+
"ux": ["ux", "usability", "accessibility", "touch", "scroll", "animation", "gesture"],
|
|
242
|
+
"icon": ["icon", "lucide", "material icons", "cupertino"],
|
|
243
|
+
"landing": ["landing", "page", "hero", "cta", "section"],
|
|
244
|
+
"naming": ["naming", "convention", "file name", "class name", "snake_case", "PascalCase"],
|
|
245
|
+
"product": ["saas", "ecommerce", "fintech", "healthcare", "education", "food", "travel"],
|
|
246
|
+
"prompt": ["prompt", "ai", "css", "tailwind", "implementation"],
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
scores = {domain: sum(1 for kw in keywords if kw in query_lower) for domain, keywords in domain_keywords.items()}
|
|
250
|
+
best = max(scores, key=scores.get)
|
|
251
|
+
return best if scores[best] > 0 else "widget"
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
# ============ MAIN SEARCH FUNCTIONS ============
|
|
255
|
+
def search(query, domain=None, max_results=MAX_RESULTS):
|
|
256
|
+
"""
|
|
257
|
+
Main search function with auto-domain detection
|
|
258
|
+
|
|
259
|
+
Args:
|
|
260
|
+
query: Search query string
|
|
261
|
+
domain: Optional domain (widget, package, pattern, etc.)
|
|
262
|
+
max_results: Number of results to return
|
|
263
|
+
|
|
264
|
+
Returns:
|
|
265
|
+
Dict with domain, query, file, count, and results
|
|
266
|
+
"""
|
|
267
|
+
if domain is None:
|
|
268
|
+
domain = detect_domain(query)
|
|
269
|
+
|
|
270
|
+
if domain not in CSV_CONFIG:
|
|
271
|
+
return {"error": f"Unknown domain: {domain}. Available: {', '.join(AVAILABLE_DOMAINS)}"}
|
|
272
|
+
|
|
273
|
+
config = CSV_CONFIG[domain]
|
|
274
|
+
filepath = DATA_DIR / config["file"]
|
|
275
|
+
|
|
276
|
+
if not filepath.exists():
|
|
277
|
+
return {"error": f"File not found: {filepath}", "domain": domain}
|
|
278
|
+
|
|
279
|
+
# Apply widget boosting for widget domain
|
|
280
|
+
boost_col = "Widget Name" if domain == "widget" else None
|
|
281
|
+
boost_query = query if domain == "widget" else None
|
|
282
|
+
|
|
283
|
+
results = _search_csv(
|
|
284
|
+
filepath,
|
|
285
|
+
config["search_cols"],
|
|
286
|
+
config["output_cols"],
|
|
287
|
+
query,
|
|
288
|
+
max_results,
|
|
289
|
+
boost_col=boost_col,
|
|
290
|
+
boost_query=boost_query
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
return {
|
|
294
|
+
"domain": domain,
|
|
295
|
+
"query": query,
|
|
296
|
+
"file": config["file"],
|
|
297
|
+
"count": len(results),
|
|
298
|
+
"results": results
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
def search_with_stack(query, stack, domain=None, max_results=MAX_RESULTS):
|
|
303
|
+
"""
|
|
304
|
+
Search with stack-specific filtering (excludes conflicting packages)
|
|
305
|
+
|
|
306
|
+
Args:
|
|
307
|
+
query: Search query string
|
|
308
|
+
stack: Stack preference (riverpod, bloc, provider)
|
|
309
|
+
domain: Optional domain filter
|
|
310
|
+
max_results: Number of results to return
|
|
311
|
+
|
|
312
|
+
Returns:
|
|
313
|
+
Dict with filtered results
|
|
314
|
+
"""
|
|
315
|
+
if stack not in STACK_EXCLUSIONS:
|
|
316
|
+
return {"error": f"Unknown stack: {stack}. Available: {', '.join(AVAILABLE_STACKS)}"}
|
|
317
|
+
|
|
318
|
+
result = search(query, domain, max_results * 2) # Get more to filter
|
|
319
|
+
|
|
320
|
+
if "error" in result:
|
|
321
|
+
return result
|
|
322
|
+
|
|
323
|
+
# Filter out conflicting packages
|
|
324
|
+
excluded = STACK_EXCLUSIONS[stack]
|
|
325
|
+
filtered_results = []
|
|
326
|
+
|
|
327
|
+
for item in result["results"]:
|
|
328
|
+
# Check package name field
|
|
329
|
+
pkg_name = item.get("pkg_name", "").lower()
|
|
330
|
+
if pkg_name not in excluded:
|
|
331
|
+
filtered_results.append(item)
|
|
332
|
+
|
|
333
|
+
if len(filtered_results) >= max_results:
|
|
334
|
+
break
|
|
335
|
+
|
|
336
|
+
result["results"] = filtered_results
|
|
337
|
+
result["count"] = len(filtered_results)
|
|
338
|
+
result["stack"] = stack
|
|
339
|
+
result["excluded"] = excluded
|
|
340
|
+
|
|
341
|
+
return result
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
Flutter Pro Max Search - CLI for Flutter knowledge base search
|
|
5
|
+
Usage: python search.py "<query>" [--domain <domain>] [--stack <stack>] [--top 5]
|
|
6
|
+
|
|
7
|
+
Domains: widget, package, pattern, architect, chart, color, typography, style, ux, icon, landing, naming, product, prompt
|
|
8
|
+
Stacks: riverpod, bloc, provider
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import argparse
|
|
12
|
+
import json
|
|
13
|
+
from core import (
|
|
14
|
+
CSV_CONFIG,
|
|
15
|
+
AVAILABLE_DOMAINS,
|
|
16
|
+
AVAILABLE_STACKS,
|
|
17
|
+
MAX_RESULTS,
|
|
18
|
+
search,
|
|
19
|
+
search_with_stack
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def format_output(result):
|
|
24
|
+
"""Format results for human-readable output (token-optimized for AI)"""
|
|
25
|
+
if "error" in result:
|
|
26
|
+
return f"❌ Error: {result['error']}"
|
|
27
|
+
|
|
28
|
+
output = []
|
|
29
|
+
|
|
30
|
+
# Header
|
|
31
|
+
output.append(f"\n🔍 Flutter Pro Max Search Results")
|
|
32
|
+
if result.get("stack"):
|
|
33
|
+
output.append(f" Stack: {result['stack']} (excluding: {', '.join(result.get('excluded', []))})")
|
|
34
|
+
output.append(f" Domain: {result['domain']} | Query: '{result['query']}'")
|
|
35
|
+
output.append(f" Source: {result['file']} | Found: {result['count']} results\n")
|
|
36
|
+
|
|
37
|
+
# Results
|
|
38
|
+
for i, row in enumerate(result['results'], 1):
|
|
39
|
+
output.append(f"{'='*60}")
|
|
40
|
+
output.append(f"[{i}] Score: {row.get('_score', 'N/A')}")
|
|
41
|
+
|
|
42
|
+
for key, value in row.items():
|
|
43
|
+
if key == "_score":
|
|
44
|
+
continue
|
|
45
|
+
value_str = str(value)
|
|
46
|
+
if len(value_str) > 200:
|
|
47
|
+
value_str = value_str[:200] + "..."
|
|
48
|
+
output.append(f" {key}: {value_str}")
|
|
49
|
+
output.append("")
|
|
50
|
+
|
|
51
|
+
return "\n".join(output)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def main():
|
|
55
|
+
parser = argparse.ArgumentParser(
|
|
56
|
+
description="Flutter Pro Max Search - BM25 search for Flutter knowledge base",
|
|
57
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
58
|
+
epilog="""
|
|
59
|
+
Examples:
|
|
60
|
+
python search.py "ListView pagination" --top 3
|
|
61
|
+
python search.py "network http" --domain package
|
|
62
|
+
python search.py "state management" --stack riverpod
|
|
63
|
+
python search.py "login" --json
|
|
64
|
+
"""
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
parser.add_argument("query", help="Search query")
|
|
68
|
+
parser.add_argument(
|
|
69
|
+
"--domain", "-d",
|
|
70
|
+
choices=AVAILABLE_DOMAINS,
|
|
71
|
+
help=f"Search domain (auto-detected if not specified)"
|
|
72
|
+
)
|
|
73
|
+
parser.add_argument(
|
|
74
|
+
"--stack", "-s",
|
|
75
|
+
choices=AVAILABLE_STACKS,
|
|
76
|
+
help="Stack preference to exclude conflicting packages"
|
|
77
|
+
)
|
|
78
|
+
parser.add_argument(
|
|
79
|
+
"--top", "-n",
|
|
80
|
+
type=int,
|
|
81
|
+
default=MAX_RESULTS,
|
|
82
|
+
help=f"Max results (default: {MAX_RESULTS})"
|
|
83
|
+
)
|
|
84
|
+
parser.add_argument(
|
|
85
|
+
"--json", "-j",
|
|
86
|
+
action="store_true",
|
|
87
|
+
help="Output as JSON"
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
args = parser.parse_args()
|
|
91
|
+
|
|
92
|
+
# Perform search
|
|
93
|
+
if args.stack:
|
|
94
|
+
result = search_with_stack(args.query, args.stack, args.domain, args.top)
|
|
95
|
+
else:
|
|
96
|
+
result = search(args.query, args.domain, args.top)
|
|
97
|
+
|
|
98
|
+
# Output
|
|
99
|
+
if args.json:
|
|
100
|
+
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
101
|
+
else:
|
|
102
|
+
print(format_output(result))
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
if __name__ == "__main__":
|
|
106
|
+
main()
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
path_pattern,layer,responsibility_description,allowed_dependencies,tech_stack_note
|
|
2
|
+
lib/main.dart,Root,"Điểm khởi đầu (Entry point), khởi tạo DI, cấu hình Environment, chạy App","lib/app.dart; lib/core/di; lib/core/config",All
|
|
3
|
+
lib/app.dart,Root,"Widget gốc (MaterialApp), cấu hình Theme, Route, Localization","lib/features/**; lib/core/**",All
|
|
4
|
+
lib/core,Core,"Chứa các thành phần dùng chung, tiện ích, hằng số toàn cục (Shared Kernel)","External Packages; Dart SDK",All
|
|
5
|
+
lib/core/errors,Core,"Định nghĩa các Failure gốc và logic xử lý Exception","Dart SDK",All
|
|
6
|
+
lib/core/network,Infrastructure,"Cấu hình HTTP Client (Dio/Retrofit), Interceptors","Package: Dio; Package: Retrofit",All
|
|
7
|
+
lib/core/services,Application,"Các dịch vụ hạ tầng (Navigation, Storage, Notification)","External Packages",All
|
|
8
|
+
lib/features/{feature}/domain/entities,Domain,"Đối tượng nghiệp vụ cốt lõi (Business Objects), Pure Dart, không logic JSON","Dart SDK; Package: Equatable",All
|
|
9
|
+
lib/features/{feature}/domain/repositories,Domain,"Interfaces (Contracts) cho việc truy xuất dữ liệu, tuân thủ DIP","domain/entities",All
|
|
10
|
+
lib/features/{feature}/domain/usecases,Domain,"Logic nghiệp vụ ứng dụng, từng hành động cụ thể (Single Responsibility)","domain/repositories; domain/entities; core/errors",All
|
|
11
|
+
lib/features/{feature}/data/models,Data,"Data Transfer Objects (DTOs), chịu trách nhiệm parse JSON/XML","domain/entities; Package: json_annotation",All
|
|
12
|
+
lib/features/{feature}/data/datasources,Data,"Giao tiếp cấp thấp với API (Remote) hoặc DB (Local)","data/models; core/network; core/errors",All
|
|
13
|
+
lib/features/{feature}/data/repositories,Data,"Triển khai (Implement) Repository Interface của Domain, xử lý Data Orchestration","data/datasources; data/models; domain/repositories; core/network",All
|
|
14
|
+
lib/features/{feature}/presentation/blocs,Presentation,"Quản lý trạng thái UI theo mô hình BLoC (Event-Driven)","domain/usecases; presentation/states; Package: flutter_bloc",BLoC Only
|
|
15
|
+
lib/features/{feature}/presentation/providers,Presentation,"Quản lý trạng thái UI & Dependency Injection theo mô hình Riverpod","domain/usecases; data/repositories; Package: flutter_riverpod",Riverpod Only
|
|
16
|
+
lib/features/{feature}/presentation/pages,Presentation,"Màn hình UI chính (Full Screens), kết nối với State Management","presentation/widgets; presentation/blocs; presentation/providers",All
|
|
17
|
+
lib/features/{feature}/presentation/widgets,Presentation,"UI Components nhỏ, tái sử dụng nội bộ (Dumb Widgets)","Flutter SDK",All
|
|
18
|
+
packages/{package_name}/lib,Package,"Module tách biệt (Very Good Ventures Style) - Auth, UI Kit, API Client","External Packages",Multi-Package Arch
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
No,Data Type,Keywords,Best Chart Type,Secondary Options,Color Guidance,Performance Impact,Accessibility Notes,Library Recommendation,Interactive Level
|
|
2
|
+
1,Trend Over Time,"trend, time-series, line, growth, timeline, progress",Line Chart,"Area Chart, Smooth Area",Primary: #0080FF. Multiple series: use distinct colors. Fill: 20% opacity,⚡ Excellent (optimized),✓ Clear line patterns for colorblind users. Add pattern overlays.,"Chart.js, Recharts, ApexCharts",Hover + Zoom
|
|
3
|
+
2,Compare Categories,"compare, categories, bar, comparison, ranking",Bar Chart (Horizontal or Vertical),"Column Chart, Grouped Bar",Each bar: distinct color. Category: grouped same color. Sorted: descending order,⚡ Excellent,✓ Easy to compare. Add value labels on bars for clarity.,"Chart.js, Recharts, D3.js",Hover + Sort
|
|
4
|
+
3,Part-to-Whole,"part-to-whole, pie, donut, percentage, proportion, share",Pie Chart or Donut,"Stacked Bar, Treemap",Colors: 5-6 max. Contrasting palette. Large slices first. Use labels.,⚡ Good (limit 6 slices),⚠ Hard for accessibility. Better: Stacked bar with legend. Avoid pie if >5 items.,"Chart.js, Recharts, D3.js",Hover + Drill
|
|
5
|
+
4,Correlation/Distribution,"correlation, distribution, scatter, relationship, pattern",Scatter Plot or Bubble Chart,"Heat Map, Matrix",Color axis: gradient (blue-red). Size: relative. Opacity: 0.6-0.8 to show density,⚠ Moderate (many points),⚠ Provide data table alternative. Use pattern + color distinction.,"D3.js, Plotly, Recharts",Hover + Brush
|
|
6
|
+
5,Heatmap/Intensity,"heatmap, heat-map, intensity, density, matrix",Heat Map or Choropleth,"Grid Heat Map, Bubble Heat",Gradient: Cool (blue) to Hot (red). Scale: clear legend. Divergent for ±data,⚡ Excellent (color CSS),⚠ Colorblind: Use pattern overlay. Provide numerical legend.,"D3.js, Plotly, ApexCharts",Hover + Zoom
|
|
7
|
+
6,Geographic Data,"geographic, map, location, region, geo, spatial","Choropleth Map, Bubble Map",Geographic Heat Map,Regional: single color gradient or categorized colors. Legend: clear scale,⚠ Moderate (rendering),⚠ Include text labels for regions. Provide data table alternative.,"D3.js, Mapbox, Leaflet",Pan + Zoom + Drill
|
|
8
|
+
7,Funnel/Flow,funnel/flow,"Funnel Chart, Sankey",Waterfall (for flows),Stages: gradient (starting color → ending color). Show conversion %,⚡ Good,✓ Clear stage labels + percentages. Good for accessibility if labeled.,"D3.js, Recharts, Custom SVG",Hover + Drill
|
|
9
|
+
8,Performance vs Target,performance-vs-target,Gauge Chart or Bullet Chart,"Dial, Thermometer",Performance: Red→Yellow→Green gradient. Target: marker line. Threshold colors,⚡ Good,✓ Add numerical value + percentage label beside gauge.,"D3.js, ApexCharts, Custom SVG",Hover
|
|
10
|
+
9,Time-Series Forecast,time-series-forecast,Line with Confidence Band,Ribbon Chart,Actual: solid line #0080FF. Forecast: dashed #FF9500. Band: light shading,⚡ Good,✓ Clearly distinguish actual vs forecast. Add legend.,"Chart.js, ApexCharts, Plotly",Hover + Toggle
|
|
11
|
+
10,Anomaly Detection,anomaly-detection,Line Chart with Highlights,Scatter with Alert,Normal: blue #0080FF. Anomaly: red #FF0000 circle/square marker + alert,⚡ Good,✓ Circle/marker for anomalies. Add text alert annotation.,"D3.js, Plotly, ApexCharts",Hover + Alert
|
|
12
|
+
11,Hierarchical/Nested Data,hierarchical/nested-data,Treemap,"Sunburst, Nested Donut, Icicle",Parent: distinct hues. Children: lighter shades. White borders 2-3px.,⚠ Moderate,⚠ Poor - provide table alternative. Label large areas.,"D3.js, Recharts, ApexCharts",Hover + Drilldown
|
|
13
|
+
12,Flow/Process Data,flow/process-data,Sankey Diagram,"Alluvial, Chord Diagram",Gradient from source to target. Opacity 0.4-0.6 for flows.,⚠ Moderate,⚠ Poor - provide flow table alternative.,"D3.js (d3-sankey), Plotly",Hover + Drilldown
|
|
14
|
+
13,Cumulative Changes,cumulative-changes,Waterfall Chart,"Stacked Bar, Cascade",Increases: #4CAF50. Decreases: #F44336. Start: #2196F3. End: #0D47A1.,⚡ Good,✓ Good - clear directional colors with labels.,"ApexCharts, Highcharts, Plotly",Hover
|
|
15
|
+
14,Multi-Variable Comparison,multi-variable-comparison,Radar/Spider Chart,"Parallel Coordinates, Grouped Bar",Single: #0080FF 20% fill. Multiple: distinct colors per dataset.,⚡ Good,⚠ Moderate - limit 5-8 axes. Add data table.,"Chart.js, Recharts, ApexCharts",Hover + Toggle
|
|
16
|
+
15,Stock/Trading OHLC,stock/trading-ohlc,Candlestick Chart,"OHLC Bar, Heikin-Ashi",Bullish: #26A69A. Bearish: #EF5350. Volume: 40% opacity below.,⚡ Good,⚠ Moderate - provide OHLC data table.,"Lightweight Charts (TradingView), ApexCharts",Real-time + Hover + Zoom
|
|
17
|
+
16,Relationship/Connection Data,relationship/connection-data,Network Graph,"Hierarchical Tree, Adjacency Matrix",Node types: categorical colors. Edges: #90A4AE 60% opacity.,❌ Poor (500+ nodes struggles),❌ Very Poor - provide adjacency list alternative.,"D3.js (d3-force), Vis.js, Cytoscape.js",Drilldown + Hover + Drag
|
|
18
|
+
17,Distribution/Statistical,distribution/statistical,Box Plot,"Violin Plot, Beeswarm",Box: #BBDEFB. Border: #1976D2. Median: #D32F2F. Outliers: #F44336.,⚡ Excellent,"✓ Good - include stats table (min, Q1, median, Q3, max).","Plotly, D3.js, Chart.js (plugin)",Hover
|
|
19
|
+
18,Performance vs Target (Compact),performance-vs-target-(compact),Bullet Chart,"Gauge, Progress Bar","Ranges: #FFCDD2, #FFF9C4, #C8E6C9. Performance: #1976D2. Target: black 3px.",⚡ Excellent,✓ Excellent - compact with clear values.,"D3.js, Plotly, Custom SVG",Hover
|
|
20
|
+
19,Proportional/Percentage,proportional/percentage,Waffle Chart,"Pictogram, Stacked Bar 100%",10x10 grid. 3-5 categories max. 2-3px spacing between squares.,⚡ Good,✓ Good - better than pie for accessibility.,"D3.js, React-Waffle, Custom CSS Grid",Hover
|
|
21
|
+
20,Hierarchical Proportional,hierarchical-proportional,Sunburst Chart,"Treemap, Icicle, Circle Packing",Center to outer: darker to lighter. 15-20% lighter per level.,⚠ Moderate,⚠ Poor - provide hierarchy table alternative.,"D3.js (d3-hierarchy), Recharts, ApexCharts",Drilldown + Hover
|
|
22
|
+
21,Root Cause Analysis,"root cause, decomposition, tree, hierarchy, drill-down, ai-split",Decomposition Tree,"Decision Tree, Flow Chart",Nodes: #2563EB (Primary) vs #EF4444 (Negative impact). Connectors: Neutral grey.,⚠ Moderate (calculation heavy),✓ clear hierarchy. Allow keyboard navigation for nodes.,"Power BI (native), React-Flow, Custom D3.js",Drill + Expand
|
|
23
|
+
22,3D Spatial Data,"3d, spatial, immersive, terrain, molecular, volumetric",3D Scatter/Surface Plot,"Volumetric Rendering, Point Cloud",Depth cues: lighting/shading. Z-axis: color gradient (cool to warm).,❌ Heavy (WebGL required),❌ Poor - requires alternative 2D view or data table.,"Three.js, Deck.gl, Plotly 3D",Rotate + Zoom + VR
|
|
24
|
+
23,Real-Time Streaming,"streaming, real-time, ticker, live, velocity, pulse",Streaming Area Chart,"Ticker Tape, Moving Gauge",Current: Bright Pulse (#00FF00). History: Fading opacity. Grid: Dark.,⚡ Optimized (canvas/webgl),⚠ Flashing elements - provide pause button. High contrast.,"Smoothed D3.js, CanvasJS, SciChart",Real-time + Pause
|
|
25
|
+
24,Sentiment/Emotion,"sentiment, emotion, nlp, opinion, feeling",Word Cloud with Sentiment,"Sentiment Arc, Radar Chart",Positive: #22C55E. Negative: #EF4444. Neutral: #94A3B8. Size = Frequency.,⚡ Good,⚠ Word clouds poor for screen readers. Use list view.,"D3-cloud, Highcharts, Nivo",Hover + Filter
|
|
26
|
+
25,Process Mining,"process, mining, variants, path, bottleneck, log",Process Map / Graph,"Directed Acyclic Graph (DAG), Petri Net",Happy path: #10B981 (Thick). Deviations: #F59E0B (Thin). Bottlenecks: #EF4444.,⚠ Moderate to Heavy,⚠ Complex graphs hard to navigate. Provide path summary.,"React-Flow, Cytoscape.js, Recharts",Drag + Node-Click
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
No,Product Type,Keywords,Primary (Hex),Secondary (Hex),CTA (Hex),Background (Hex),Text (Hex),Border (Hex),Notes
|
|
2
|
+
1,SaaS (General),"saas, general",#2563EB,#3B82F6,#F97316,#F8FAFC,#1E293B,#E2E8F0,Trust blue + accent contrast
|
|
3
|
+
2,Micro SaaS,"micro, saas",#2563EB,#3B82F6,#F97316,#F8FAFC,#1E293B,#E2E8F0,Vibrant primary + white space
|
|
4
|
+
3,E-commerce,commerce,#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand primary + success green
|
|
5
|
+
4,E-commerce Luxury,"commerce, luxury",#1C1917,#44403C,#CA8A04,#FAFAF9,#0C0A09,#D6D3D1,Premium colors + minimal accent
|
|
6
|
+
5,Service Landing Page,"service, landing, page",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand primary + trust colors
|
|
7
|
+
6,B2B Service,"b2b, service",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Professional blue + neutral grey
|
|
8
|
+
7,Financial Dashboard,"financial, dashboard",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark bg + red/green alerts + trust blue
|
|
9
|
+
8,Analytics Dashboard,"analytics, dashboard",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Cool→Hot gradients + neutral grey
|
|
10
|
+
9,Healthcare App,"healthcare, app",#0891B2,#22D3EE,#059669,#ECFEFF,#164E63,#A5F3FC,Calm blue + health green + trust
|
|
11
|
+
10,Educational App,"educational, app",#4F46E5,#818CF8,#F97316,#EEF2FF,#1E1B4B,#C7D2FE,Playful colors + clear hierarchy
|
|
12
|
+
11,Creative Agency,"creative, agency",#EC4899,#F472B6,#06B6D4,#FDF2F8,#831843,#FBCFE8,Bold primaries + artistic freedom
|
|
13
|
+
12,Portfolio/Personal,"portfolio, personal",#18181B,#3F3F46,#2563EB,#FAFAFA,#09090B,#E4E4E7,Brand primary + artistic interpretation
|
|
14
|
+
13,Gaming,gaming,#7C3AED,#A78BFA,#F43F5E,#0F0F23,#E2E8F0,#4C1D95,Vibrant + neon + immersive colors
|
|
15
|
+
14,Government/Public Service,"government, public, service",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Professional blue + high contrast
|
|
16
|
+
15,Fintech/Crypto,"fintech, crypto",#F59E0B,#FBBF24,#8B5CF6,#0F172A,#F8FAFC,#334155,Dark tech colors + trust + vibrant accents
|
|
17
|
+
16,Social Media App,"social, media, app",#2563EB,#60A5FA,#F43F5E,#F8FAFC,#1E293B,#DBEAFE,Vibrant + engagement colors
|
|
18
|
+
17,Productivity Tool,"productivity, tool",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Clear hierarchy + functional colors
|
|
19
|
+
18,Design System/Component Library,"design, system, component, library",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Clear hierarchy + code-like structure
|
|
20
|
+
19,AI/Chatbot Platform,"chatbot, platform",#7C3AED,#A78BFA,#06B6D4,#FAF5FF,#1E1B4B,#DDD6FE,Neutral + AI Purple (#6366F1)
|
|
21
|
+
20,NFT/Web3 Platform,"nft, web3, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark + Neon + Gold (#FFD700)
|
|
22
|
+
21,Creator Economy Platform,"creator, economy, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Vibrant + Brand colors
|
|
23
|
+
22,Sustainability/ESG Platform,"sustainability, esg, platform",#7C3AED,#A78BFA,#06B6D4,#FAF5FF,#1E1B4B,#DDD6FE,Green (#228B22) + Earth tones
|
|
24
|
+
23,Remote Work/Collaboration Tool,"remote, work, collaboration, tool",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Calm Blue + Neutral grey
|
|
25
|
+
24,Mental Health App,"mental, health, app",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Calm Pastels + Trust colors
|
|
26
|
+
25,Pet Tech App,"pet, tech, app",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Playful + Warm colors
|
|
27
|
+
26,Smart Home/IoT Dashboard,"smart, home, iot, dashboard",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark + Status indicator colors
|
|
28
|
+
27,EV/Charging Ecosystem,"charging, ecosystem",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Electric Blue (#009CD1) + Green
|
|
29
|
+
28,Subscription Box Service,"subscription, box, service",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand + Excitement colors
|
|
30
|
+
29,Podcast Platform,"podcast, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark + Audio waveform accents
|
|
31
|
+
30,Dating App,"dating, app",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Warm + Romantic (Pink/Red gradients)
|
|
32
|
+
31,Micro-Credentials/Badges Platform,"micro, credentials, badges, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Trust Blue + Gold (#FFD700)
|
|
33
|
+
32,Knowledge Base/Documentation,"knowledge, base, documentation",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Clean hierarchy + minimal color
|
|
34
|
+
33,Hyperlocal Services,"hyperlocal, services",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Location markers + Trust colors
|
|
35
|
+
34,Beauty/Spa/Wellness Service,"beauty, spa, wellness, service",#10B981,#34D399,#8B5CF6,#ECFDF5,#064E3B,#A7F3D0,Soft pastels (Pink #FFB6C1 Sage #90EE90) + Cream + Gold accents
|
|
36
|
+
35,Luxury/Premium Brand,"luxury, premium, brand",#1C1917,#44403C,#CA8A04,#FAFAF9,#0C0A09,#D6D3D1,Black + Gold (#FFD700) + White + Minimal accent
|
|
37
|
+
36,Restaurant/Food Service,"restaurant, food, service",#DC2626,#F87171,#CA8A04,#FEF2F2,#450A0A,#FECACA,Warm colors (Orange Red Brown) + appetizing imagery
|
|
38
|
+
37,Fitness/Gym App,"fitness, gym, app",#DC2626,#F87171,#16A34A,#FEF2F2,#1F2937,#FECACA,Energetic (Orange #FF6B35 Electric Blue) + Dark bg
|
|
39
|
+
38,Real Estate/Property,"real, estate, property",#0F766E,#14B8A6,#0369A1,#F0FDFA,#134E4A,#99F6E4,Trust Blue (#0077B6) + Gold accents + White
|
|
40
|
+
39,Travel/Tourism Agency,"travel, tourism, agency",#EC4899,#F472B6,#06B6D4,#FDF2F8,#831843,#FBCFE8,Vibrant destination colors + Sky Blue + Warm accents
|
|
41
|
+
40,Hotel/Hospitality,"hotel, hospitality",#1E3A8A,#3B82F6,#CA8A04,#F8FAFC,#1E40AF,#BFDBFE,Warm neutrals + Gold (#D4AF37) + Brand accent
|
|
42
|
+
41,Wedding/Event Planning,"wedding, event, planning",#7C3AED,#A78BFA,#F97316,#FAF5FF,#4C1D95,#DDD6FE,Soft Pink (#FFD6E0) + Gold + Cream + Sage
|
|
43
|
+
42,Legal Services,"legal, services",#1E3A8A,#1E40AF,#B45309,#F8FAFC,#0F172A,#CBD5E1,Navy Blue (#1E3A5F) + Gold + White
|
|
44
|
+
43,Insurance Platform,"insurance, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Trust Blue (#0066CC) + Green (security) + Neutral
|
|
45
|
+
44,Banking/Traditional Finance,"banking, traditional, finance",#0F766E,#14B8A6,#0369A1,#F0FDFA,#134E4A,#99F6E4,Navy (#0A1628) + Trust Blue + Gold accents
|
|
46
|
+
45,Online Course/E-learning,"online, course, learning",#0D9488,#2DD4BF,#EA580C,#F0FDFA,#134E4A,#5EEAD4,Vibrant learning colors + Progress green
|
|
47
|
+
46,Non-profit/Charity,"non, profit, charity",#0891B2,#22D3EE,#F97316,#ECFEFF,#164E63,#A5F3FC,Cause-related colors + Trust + Warm
|
|
48
|
+
47,Music Streaming,"music, streaming",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark (#121212) + Vibrant accents + Album art colors
|
|
49
|
+
48,Video Streaming/OTT,"video, streaming, ott",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark bg + Content poster colors + Brand accent
|
|
50
|
+
49,Job Board/Recruitment,"job, board, recruitment",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Professional Blue + Success Green + Neutral
|
|
51
|
+
50,Marketplace (P2P),"marketplace, p2p",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Trust colors + Category colors + Success green
|
|
52
|
+
51,Logistics/Delivery,"logistics, delivery",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Blue (#2563EB) + Orange (tracking) + Green (delivered)
|
|
53
|
+
52,Agriculture/Farm Tech,"agriculture, farm, tech",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Earth Green (#4A7C23) + Brown + Sky Blue
|
|
54
|
+
53,Construction/Architecture,"construction, architecture",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Grey (#4A4A4A) + Orange (safety) + Blueprint Blue
|
|
55
|
+
54,Automotive/Car Dealership,"automotive, car, dealership",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand colors + Metallic accents + Dark/Light
|
|
56
|
+
55,Photography Studio,"photography, studio",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Black + White + Minimal accent
|
|
57
|
+
56,Coworking Space,"coworking, space",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Energetic colors + Wood tones + Brand accent
|
|
58
|
+
57,Cleaning Service,"cleaning, service",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Fresh Blue (#00B4D8) + Clean White + Green
|
|
59
|
+
58,Home Services (Plumber/Electrician),"home, services, plumber, electrician",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Trust Blue + Safety Orange + Professional grey
|
|
60
|
+
59,Childcare/Daycare,"childcare, daycare",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Playful pastels + Safe colors + Warm accents
|
|
61
|
+
60,Senior Care/Elderly,"senior, care, elderly",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Calm Blue + Warm neutrals + Large text
|
|
62
|
+
61,Medical Clinic,"medical, clinic",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Medical Blue (#0077B6) + Trust White + Calm Green
|
|
63
|
+
62,Pharmacy/Drug Store,"pharmacy, drug, store",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Pharmacy Green + Trust Blue + Clean White
|
|
64
|
+
63,Dental Practice,"dental, practice",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Fresh Blue + White + Smile Yellow accent
|
|
65
|
+
64,Veterinary Clinic,"veterinary, clinic",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Caring Blue + Pet-friendly colors + Warm accents
|
|
66
|
+
65,Florist/Plant Shop,"florist, plant, shop",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Natural Green + Floral pinks/purples + Earth tones
|
|
67
|
+
66,Bakery/Cafe,"bakery, cafe",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Warm Brown + Cream + Appetizing accents
|
|
68
|
+
67,Coffee Shop,"coffee, shop",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Coffee Brown (#6F4E37) + Cream + Warm accents
|
|
69
|
+
68,Brewery/Winery,"brewery, winery",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Deep amber/burgundy + Gold + Craft aesthetic
|
|
70
|
+
69,Airline,airline,#7C3AED,#A78BFA,#06B6D4,#FAF5FF,#1E1B4B,#DDD6FE,Sky Blue + Brand colors + Trust accents
|
|
71
|
+
70,News/Media Platform,"news, media, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand colors + High contrast + Category colors
|
|
72
|
+
71,Magazine/Blog,"magazine, blog",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Editorial colors + Brand primary + Clean white
|
|
73
|
+
72,Freelancer Platform,"freelancer, platform",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Professional Blue + Success Green + Neutral
|
|
74
|
+
73,Consulting Firm,"consulting, firm",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Navy + Gold + Professional grey
|
|
75
|
+
74,Marketing Agency,"marketing, agency",#EC4899,#F472B6,#06B6D4,#FDF2F8,#831843,#FBCFE8,Bold brand colors + Creative freedom
|
|
76
|
+
75,Event Management,"event, management",#7C3AED,#A78BFA,#F97316,#FAF5FF,#4C1D95,#DDD6FE,Event theme colors + Excitement accents
|
|
77
|
+
76,Conference/Webinar Platform,"conference, webinar, platform",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Professional Blue + Video accent + Brand
|
|
78
|
+
77,Membership/Community,"membership, community",#7C3AED,#A78BFA,#F97316,#FAF5FF,#4C1D95,#DDD6FE,Community brand colors + Engagement accents
|
|
79
|
+
78,Newsletter Platform,"newsletter, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand primary + Clean white + CTA accent
|
|
80
|
+
79,Digital Products/Downloads,"digital, products, downloads",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Product category colors + Brand + Success green
|
|
81
|
+
80,Church/Religious Organization,"church, religious, organization",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Warm Gold + Deep Purple/Blue + White
|
|
82
|
+
81,Sports Team/Club,"sports, team, club",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Team colors + Energetic accents
|
|
83
|
+
82,Museum/Gallery,"museum, gallery",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Art-appropriate neutrals + Exhibition accents
|
|
84
|
+
83,Theater/Cinema,"theater, cinema",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark + Spotlight accents + Gold
|
|
85
|
+
84,Language Learning App,"language, learning, app",#0D9488,#2DD4BF,#EA580C,#F0FDFA,#134E4A,#5EEAD4,Playful colors + Progress indicators + Country flags
|
|
86
|
+
85,Coding Bootcamp,"coding, bootcamp",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Code editor colors + Brand + Success green
|
|
87
|
+
86,Cybersecurity Platform,"cybersecurity, security, cyber, hacker",#00FF41,#0D0D0D,#00FF41,#000000,#E0E0E0,#1F1F1F,Matrix Green + Deep Black + Terminal feel
|
|
88
|
+
87,Developer Tool / IDE,"developer, tool, ide, code, dev",#3B82F6,#1E293B,#2563EB,#0F172A,#F1F5F9,#334155,Dark syntax theme colors + Blue focus
|
|
89
|
+
88,Biotech / Life Sciences,"biotech, science, biology, medical",#0EA5E9,#0284C7,#10B981,#F8FAFC,#0F172A,#E2E8F0,Sterile White + DNA Blue + Life Green
|
|
90
|
+
89,Space Tech / Aerospace,"space, aerospace, tech, futuristic",#FFFFFF,#94A3B8,#3B82F6,#0B0B10,#F8FAFC,#1E293B,Deep Space Black + Star White + Metallic
|
|
91
|
+
90,Architecture / Interior,"architecture, interior, design, luxury",#171717,#404040,#D4AF37,#FFFFFF,#171717,#E5E5E5,Monochrome + Gold Accent + High Imagery
|
|
92
|
+
91,Quantum Computing,"quantum, qubit, tech",#00FFFF,#7B61FF,#FF00FF,#050510,#E0E0FF,#333344,Interference patterns + Neon + Deep Dark
|
|
93
|
+
92,Biohacking / Longevity,"bio, health, science",#FF4D4D,#4D94FF,#00E676,#F5F5F7,#1C1C1E,#E5E5EA,Biological red/blue + Clinical white
|
|
94
|
+
93,Autonomous Systems,"drone, robot, fleet",#00FF41,#008F11,#FF3333,#0D1117,#E6EDF3,#30363D,Terminal Green + Tactical Dark
|
|
95
|
+
94,Generative AI Art,"art, gen-ai, creative",#111111,#333333,#FFFFFF,#FAFAFA,#000000,#E5E5E5,Canvas Neutral + High Contrast
|
|
96
|
+
95,Spatial / Vision OS,"spatial, glass, vision",#FFFFFF,#E5E5E5,#007AFF,#888888,#000000,#FFFFFF,Glass opacity 20% + System Blue
|
|
97
|
+
96,Climate Tech,"climate, green, energy",#2E8B57,#87CEEB,#FFD700,#F0FFF4,#1A3320,#C6E6C6,Nature Green + Solar Yellow + Air Blue
|