@mindstudio-ai/remy 0.1.38 → 0.1.40

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/headless.js CHANGED
@@ -1491,9 +1491,9 @@ var setProjectMetadataTool = {
1491
1491
  import fs9 from "fs/promises";
1492
1492
  var DEFAULT_MAX_LINES2 = 500;
1493
1493
  function isBinary(buffer) {
1494
- const sample3 = buffer.subarray(0, 8192);
1495
- for (let i = 0; i < sample3.length; i++) {
1496
- if (sample3[i] === 0) {
1494
+ const sample4 = buffer.subarray(0, 8192);
1495
+ for (let i = 0; i < sample4.length; i++) {
1496
+ if (sample4[i] === 0) {
1497
1497
  return true;
1498
1498
  }
1499
1499
  }
@@ -3387,9 +3387,44 @@ This is what the bar looks like. These are real sites that made it onto curated
3387
3387
  ${imageList}`.trim();
3388
3388
  }
3389
3389
 
3390
+ // src/subagents/designExpert/data/getUiInspirationSample.ts
3391
+ var uiScreens = readJsonAsset(
3392
+ { screens: [] },
3393
+ "subagents/designExpert/data/sources/ui_inspiration_compiled.json"
3394
+ ).screens;
3395
+ function sample3(arr, n) {
3396
+ if (arr.length <= n) {
3397
+ return [...arr];
3398
+ }
3399
+ const copy = [...arr];
3400
+ for (let i = copy.length - 1; i > 0; i--) {
3401
+ const j = Math.floor(Math.random() * (i + 1));
3402
+ [copy[i], copy[j]] = [copy[j], copy[i]];
3403
+ }
3404
+ return copy.slice(0, n);
3405
+ }
3406
+ function getUiInspirationSample() {
3407
+ const screens = sample3(uiScreens, 20);
3408
+ if (!screens.length) {
3409
+ return "";
3410
+ }
3411
+ const screenList = screens.map((s, i) => `### Screen ${i + 1}
3412
+ ${s.analysis}`).join("\n\n");
3413
+ return `
3414
+ ## UI Pattern References
3415
+
3416
+ There are real app screens from well-designed products, sourced and curated by hand as a reference by a desigher. Use them as inspiration and let the takeaways guide your work. Your designs should feel like they belong in this company.
3417
+
3418
+ ${screenList}`.trim();
3419
+ }
3420
+
3390
3421
  // src/subagents/designExpert/prompt.ts
3391
3422
  var SUBAGENT = "subagents/designExpert";
3392
- var RUNTIME_PLACEHOLDERS = /* @__PURE__ */ new Set(["font_library", "design_references"]);
3423
+ var RUNTIME_PLACEHOLDERS = /* @__PURE__ */ new Set([
3424
+ "font_library",
3425
+ "design_references",
3426
+ "ui_patterns"
3427
+ ]);
3393
3428
  var PROMPT_TEMPLATE = readAsset(SUBAGENT, "prompt.md").replace(/\{\{([^}]+)\}\}/g, (match, key) => {
3394
3429
  const k = key.trim();
3395
3430
  return RUNTIME_PLACEHOLDERS.has(k) ? match : readAsset(SUBAGENT, k);
@@ -3399,7 +3434,7 @@ function getDesignExpertPrompt() {
3399
3434
  let prompt = PROMPT_TEMPLATE.replace(
3400
3435
  "{{font_library}}",
3401
3436
  getFontLibrarySample()
3402
- ).replace("{{design_references}}", getDesignReferencesSample());
3437
+ ).replace("{{design_references}}", getDesignReferencesSample()).replace("{{ui_patterns}}", getUiInspirationSample());
3403
3438
  if (specContext) {
3404
3439
  prompt += `
3405
3440
 
package/dist/index.js CHANGED
@@ -1267,9 +1267,9 @@ var init_setProjectMetadata = __esm({
1267
1267
  // src/tools/code/readFile.ts
1268
1268
  import fs6 from "fs/promises";
1269
1269
  function isBinary(buffer) {
1270
- const sample3 = buffer.subarray(0, 8192);
1271
- for (let i = 0; i < sample3.length; i++) {
1272
- if (sample3[i] === 0) {
1270
+ const sample4 = buffer.subarray(0, 8192);
1271
+ for (let i = 0; i < sample4.length; i++) {
1272
+ if (sample4[i] === 0) {
1273
1273
  return true;
1274
1274
  }
1275
1275
  }
@@ -3489,6 +3489,44 @@ var init_getDesignReferencesSample = __esm({
3489
3489
  }
3490
3490
  });
3491
3491
 
3492
+ // src/subagents/designExpert/data/getUiInspirationSample.ts
3493
+ function sample3(arr, n) {
3494
+ if (arr.length <= n) {
3495
+ return [...arr];
3496
+ }
3497
+ const copy = [...arr];
3498
+ for (let i = copy.length - 1; i > 0; i--) {
3499
+ const j = Math.floor(Math.random() * (i + 1));
3500
+ [copy[i], copy[j]] = [copy[j], copy[i]];
3501
+ }
3502
+ return copy.slice(0, n);
3503
+ }
3504
+ function getUiInspirationSample() {
3505
+ const screens = sample3(uiScreens, 20);
3506
+ if (!screens.length) {
3507
+ return "";
3508
+ }
3509
+ const screenList = screens.map((s, i) => `### Screen ${i + 1}
3510
+ ${s.analysis}`).join("\n\n");
3511
+ return `
3512
+ ## UI Pattern References
3513
+
3514
+ There are real app screens from well-designed products, sourced and curated by hand as a reference by a desigher. Use them as inspiration and let the takeaways guide your work. Your designs should feel like they belong in this company.
3515
+
3516
+ ${screenList}`.trim();
3517
+ }
3518
+ var uiScreens;
3519
+ var init_getUiInspirationSample = __esm({
3520
+ "src/subagents/designExpert/data/getUiInspirationSample.ts"() {
3521
+ "use strict";
3522
+ init_assets();
3523
+ uiScreens = readJsonAsset(
3524
+ { screens: [] },
3525
+ "subagents/designExpert/data/sources/ui_inspiration_compiled.json"
3526
+ ).screens;
3527
+ }
3528
+ });
3529
+
3492
3530
  // src/subagents/designExpert/prompt.ts
3493
3531
  import fs13 from "fs";
3494
3532
  function getDesignExpertPrompt() {
@@ -3496,7 +3534,7 @@ function getDesignExpertPrompt() {
3496
3534
  let prompt = PROMPT_TEMPLATE.replace(
3497
3535
  "{{font_library}}",
3498
3536
  getFontLibrarySample()
3499
- ).replace("{{design_references}}", getDesignReferencesSample());
3537
+ ).replace("{{design_references}}", getDesignReferencesSample()).replace("{{ui_patterns}}", getUiInspirationSample());
3500
3538
  if (specContext) {
3501
3539
  prompt += `
3502
3540
 
@@ -3516,8 +3554,13 @@ var init_prompt2 = __esm({
3516
3554
  init_context();
3517
3555
  init_getFontLibrarySample();
3518
3556
  init_getDesignReferencesSample();
3557
+ init_getUiInspirationSample();
3519
3558
  SUBAGENT = "subagents/designExpert";
3520
- RUNTIME_PLACEHOLDERS = /* @__PURE__ */ new Set(["font_library", "design_references"]);
3559
+ RUNTIME_PLACEHOLDERS = /* @__PURE__ */ new Set([
3560
+ "font_library",
3561
+ "design_references",
3562
+ "ui_patterns"
3563
+ ]);
3521
3564
  PROMPT_TEMPLATE = readAsset(SUBAGENT, "prompt.md").replace(/\{\{([^}]+)\}\}/g, (match, key) => {
3522
3565
  const k = key.trim();
3523
3566
  return RUNTIME_PLACEHOLDERS.has(k) ? match : readAsset(SUBAGENT, k);
@@ -242,6 +242,8 @@ const [_, newOrder, pending] = await db.batch(
242
242
 
243
243
  **Always batch instead of sequential awaits.** A loop with `await Table.update()` inside makes N separate HTTP calls. Mapping to mutations and passing them to `db.batch()` makes one.
244
244
 
245
+ **Note:** `Table.get(id)` is a direct async method that returns `Promise<T | null>` — it does not return a `Query` and cannot be passed to `db.batch()`. To batch a get-by-id, use `Table.filter(row => row.id === someId).first()` instead, which returns a batchable `Query`.
246
+
245
247
  ## Migrations
246
248
 
247
249
  No migration files. Migrations are automatic:
@@ -8,7 +8,7 @@ Note: when you talk about the team to the user, refer to them by their name or a
8
8
 
9
9
  ### Design Expert (`visualDesignExpert`)
10
10
 
11
- Your designer. Consult for any visual decision — choosing a color, picking fonts, proposing a layout, generating images, reviewing whether something looks good. Not just during intake or big design moments. If you're about to write CSS and you're not sure about a color, ask. If you just built a page and want a gut check, ask the designer to take a quick look. If the user says "I don't like how this looks," ask the design expert what to change rather than guessing yourself, or if they say "I want a different image," that's the designer's problem, not yours.
11
+ Your designer. Consult for any visual decision — choosing a color, picking fonts, proposing a layout, soucing images, reviewing whether something looks good. Not just during intake or big design moments. If you're about to write CSS and you're not sure about a color, ask. If you just built a page and want a gut check, ask the designer to take a quick look. If the user says "I don't like how this looks," ask the design expert what to change rather than guessing yourself, or if they say "I want a different image," that's the designer's problem, not yours. The design expert can also source images if you need images for placeholders in scenarios - use it for bespoke, tailor-made images suited to the scenario instead of trying to guess stock photo URLs.
12
12
 
13
13
  The design expert cannot see your conversation with the user, so include all relevant context and requirements in your task. It can take screenshots of the app preview on its own — just ask it to review what's been built.
14
14
 
@@ -38,7 +38,7 @@ Always consult the code sanity check before writing code in initialCodegen with
38
38
 
39
39
  ### QA (`runAutomatedBrowserTest`)
40
40
 
41
- For verifying interactive flows that can't be confirmed from a static screenshot, or reproducing user-reported issues you can't identify from code alone. Run a scenario first to seed test data and set user roles.
41
+ For verifying complex stateful interactions: multi-step form submissions, auth flows, real-time updates, flows that require specific data/role setup. This spins up a full chrome browser automation — it's heavyweight. Do not use it for basic rendering or navigation checks. If you can verify something with a screenshot or by reading the code, do that instead. Run a scenario first to seed test data and set user roles.
42
42
 
43
43
  ### Background Execution
44
44
 
@@ -0,0 +1,132 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # Compile ui_inspiration.json → ui_inspiration_compiled.json
4
+ #
5
+ # Reads each image URL from ui_inspiration.json (flat array of URLs),
6
+ # runs analyze-image via the mindstudio CLI with the UI analysis prompt,
7
+ # and writes the compiled output with URL + analysis.
8
+ #
9
+ # Run manually: bash src/subagents/designExpert/data/sources/compile-ui-inspiration.sh
10
+ # Processes images in batches of 5 (parallel within batch).
11
+ # Supports resuming — skips URLs already present in the output file.
12
+
13
+ set -euo pipefail
14
+
15
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
16
+ RAW_FILE="$SCRIPT_DIR/ui_inspiration.json"
17
+ OUT_FILE="$SCRIPT_DIR/ui_inspiration_compiled.json"
18
+
19
+ PROMPT_FILE="$SCRIPT_DIR/prompts/ui-analysis.md"
20
+ if [ ! -f "$PROMPT_FILE" ]; then
21
+ echo "Error: $PROMPT_FILE not found"
22
+ exit 1
23
+ fi
24
+ PROMPT=$(cat "$PROMPT_FILE")
25
+
26
+ if [ ! -f "$RAW_FILE" ]; then
27
+ echo "Error: $RAW_FILE not found"
28
+ exit 1
29
+ fi
30
+
31
+ # Initialize output file if it doesn't exist
32
+ if [ ! -f "$OUT_FILE" ]; then
33
+ echo '{"screens":[]}' > "$OUT_FILE"
34
+ fi
35
+
36
+ TOTAL=$(python3 -c "import json; print(len(json.load(open('$RAW_FILE'))))")
37
+ DONE=$(python3 -c "import json; print(len(json.load(open('$OUT_FILE'))['screens']))")
38
+ echo "Compiling UI inspiration: $DONE/$TOTAL already done"
39
+
40
+ # Get URLs that haven't been compiled yet
41
+ URLS=$(python3 -c "
42
+ import json
43
+ raw = json.load(open('$RAW_FILE'))
44
+ done = set(s['url'] for s in json.load(open('$OUT_FILE'))['screens'])
45
+ remaining = [u for u in raw if u not in done]
46
+ print('\n'.join(remaining))
47
+ ")
48
+
49
+ if [ -z "$URLS" ]; then
50
+ echo "All images already compiled."
51
+ exit 0
52
+ fi
53
+
54
+ REMAINING=$(echo "$URLS" | wc -l | tr -d ' ')
55
+ echo "Processing $REMAINING remaining images (5 at a time)..."
56
+ BATCH_COUNT=0
57
+ TMPDIR=$(mktemp -d)
58
+
59
+ # Process a single URL — writes result to a temp file
60
+ process_one() {
61
+ local url="$1"
62
+ local idx="$2"
63
+ local outfile="$TMPDIR/$idx.json"
64
+
65
+ ANALYSIS=$(mindstudio analyze-image \
66
+ --prompt "$PROMPT" \
67
+ --image-url "$url" \
68
+ --output-key analysis \
69
+ --no-meta 2>&1) || true
70
+
71
+ if echo "$ANALYSIS" | grep -q '"error"'; then
72
+ echo " FAILED — $url"
73
+ return
74
+ fi
75
+
76
+ python3 -c "
77
+ import json, sys
78
+ json.dump({'url': sys.argv[1], 'analysis': sys.argv[2]}, open(sys.argv[3], 'w'))
79
+ " "$url" "$ANALYSIS" "$outfile"
80
+
81
+ echo " OK — $url"
82
+ }
83
+
84
+ # Merge all temp files from a batch into the output
85
+ merge_batch() {
86
+ python3 -c "
87
+ import json, glob, os
88
+ out = '$OUT_FILE'
89
+ tmp = '$TMPDIR'
90
+ with open(out, 'r') as f:
91
+ data = json.load(f)
92
+ for p in sorted(glob.glob(os.path.join(tmp, '*.json'))):
93
+ with open(p) as f:
94
+ data['screens'].append(json.load(f))
95
+ os.remove(p)
96
+ with open(out, 'w') as f:
97
+ json.dump(data, f, indent=2)
98
+ "
99
+ }
100
+
101
+ # Process in batches of 5
102
+ BATCH=()
103
+ IDX=0
104
+ while IFS= read -r url; do
105
+ BATCH+=("$url")
106
+ IDX=$((IDX + 1))
107
+ if [ ${#BATCH[@]} -eq 5 ]; then
108
+ BATCH_COUNT=$((BATCH_COUNT + 5))
109
+ echo " Batch $BATCH_COUNT/$REMAINING"
110
+ for i in "${!BATCH[@]}"; do
111
+ process_one "${BATCH[$i]}" "$((BATCH_COUNT - 5 + i))" &
112
+ done
113
+ wait
114
+ merge_batch
115
+ BATCH=()
116
+ fi
117
+ done <<< "$URLS"
118
+
119
+ # Process remaining
120
+ if [ ${#BATCH[@]} -gt 0 ]; then
121
+ BATCH_COUNT=$((BATCH_COUNT + ${#BATCH[@]}))
122
+ echo " Batch $BATCH_COUNT/$REMAINING"
123
+ for i in "${!BATCH[@]}"; do
124
+ process_one "${BATCH[$i]}" "$((BATCH_COUNT - ${#BATCH[@]} + i))" &
125
+ done
126
+ wait
127
+ merge_batch
128
+ fi
129
+
130
+ rm -rf "$TMPDIR"
131
+ FINAL=$(python3 -c "import json; print(len(json.load(open('$OUT_FILE'))['screens']))")
132
+ echo "Done. $FINAL/$TOTAL screens compiled."
@@ -0,0 +1,25 @@
1
+ You are analyzing a screenshot of a real mobile app screen for a designer's personal UI pattern reference notes.
2
+
3
+ Focus on what makes this screen well-crafted as a piece of interface design. What patterns does it use? How does it organize information? What would a designer building a similar screen want to know?
4
+
5
+ Provide the following analysis:
6
+
7
+ ## Screen
8
+ What is this screen? App type, purpose, and where this screen sits in a typical flow. Describe the layout structure. What are the primary interactive elements? Keep it concise and do not mention any brand names
9
+
10
+ ## Layout & Spacing
11
+ How is the content organized? Note any interesting spacing decisions.
12
+
13
+ ## Components
14
+ List the UI components visible and how they're styled. For each notable component, describe its visual treatment briefly.
15
+
16
+ ## Typography & Color
17
+ Brief description of the type hierarchy. Note the color palette and how color is used functionally .
18
+
19
+ ## Patterns
20
+ The specific UI/UX patterns that make this screen worth studying. Focus on non-obvious decisions and creative, interesting, compelling choices. Skip basics like "has a bottom nav bar."
21
+
22
+ ## Notes
23
+ Quick shorthand notes — fragments a designer would scribble as inspiration or ideas.
24
+
25
+ Respond only with the analysis and absolutely no other text.
@@ -0,0 +1,83 @@
1
+ [
2
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.06.41_1.png",
3
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.06.41_2.png",
4
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.06.41_3.png",
5
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.06.52_1.png",
6
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.06.52_2.png",
7
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.06.52_3.png",
8
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.06.58_1.png",
9
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.06.58_2.png",
10
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.06.58_3.png",
11
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.16_1.png",
12
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.16_2.png",
13
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.16_3.png",
14
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.23_1.png",
15
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.23_2.png",
16
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.23_3.png",
17
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.32_1.png",
18
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.32_2.png",
19
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.32_3.png",
20
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.43_1.png",
21
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.43_2.png",
22
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.43_3.png",
23
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.48_1.png",
24
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.48_2.png",
25
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.48_3.png",
26
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.53_1.png",
27
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.53_2.png",
28
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.07.53_3.png",
29
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.06_1.png",
30
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.06_2.png",
31
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.06_3.png",
32
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.20_1.png",
33
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.20_2.png",
34
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.20_3.png",
35
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.23_1.png",
36
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.23_2.png",
37
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.23_3.png",
38
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.44_1.png",
39
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.44_2.png",
40
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.44_3.png",
41
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.50_1.png",
42
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.50_2.png",
43
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.50_3.png",
44
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.54_1.png",
45
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.54_2.png",
46
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.54_3.png",
47
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.59_1.png",
48
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.59_2.png",
49
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.08.59_3.png",
50
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.02_1.png",
51
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.02_2.png",
52
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.02_3.png",
53
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.05_1.png",
54
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.05_2.png",
55
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.05_3.png",
56
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.10_1.png",
57
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.10_2.png",
58
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.10_3.png",
59
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.13_1.png",
60
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.13_2.png",
61
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.13_3.png",
62
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.27_1.png",
63
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.27_2.png",
64
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.27_3.png",
65
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.31_1.png",
66
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.31_2.png",
67
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.31_3.png",
68
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.49_1.png",
69
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.49_2.png",
70
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.49_3.png",
71
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.52_1.png",
72
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.52_2.png",
73
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.52_3.png",
74
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.55_1.png",
75
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.55_2.png",
76
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.55_3.png",
77
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.58_1.png",
78
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.58_2.png",
79
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.09.58_3.png",
80
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.10.01_1.png",
81
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.10.01_2.png",
82
+ "https://i.mscdn.ai/remy-ui-inspo/Screenshot%202026-03-25%20at%2021.10.01_3.png"
83
+ ]