@mindstudio-ai/remy 0.1.46 → 0.1.48
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.
|
@@ -82,7 +82,7 @@ The UI should feel instant. Never make the user wait for a server round-trip to
|
|
|
82
82
|
|
|
83
83
|
## FTUE
|
|
84
84
|
|
|
85
|
-
All interactive apps must be intuitive and easy to use. Form elements must be well-labelled. Complex interfaces should have descriptions or tooltips when helpful. Complex apps benefit from a beautiful simple onboarding modal on first use or a simple click tour. Even if the app is intuitive and easy to use, users showing up for the first time might still be overwhelmed or confused, and we have an opportunity to set expectations, provide context, and make the user confident as they use our product. Don't neglect this.
|
|
85
|
+
All interactive apps must be intuitive and easy to use. Form elements must be well-labelled. Complex interfaces should have descriptions or tooltips when helpful. Complex apps benefit from a beautiful simple onboarding modal on first use or a simple click tour. Mobile apps need a beautiful welcome screen sequence that orients the user to the app. Ask the visualDesignExpert for advice here. Even if the app is intuitive and easy to use, users showing up for the first time might still be overwhelmed or confused, and we have an opportunity to set expectations, provide context, and make the user confident as they use our product. Don't neglect this.
|
|
86
86
|
|
|
87
87
|
## What to Actively Avoid At All Costs
|
|
88
88
|
|
|
@@ -101,3 +101,7 @@ When a scenario runs, the platform:
|
|
|
101
101
|
3. **Impersonates** the roles from the scenario's `roles` field (the app renders from that user's perspective)
|
|
102
102
|
|
|
103
103
|
This is deterministic — same scenario always produces the same state.
|
|
104
|
+
|
|
105
|
+
## Scenario Images
|
|
106
|
+
|
|
107
|
+
When scenarios seed data that includes image URLs (profile photos, product images, cover art, etc.), ask the `visualDesignExpert` to generate a small batch of images that fit the app's aesthetic before writing the scenario code. A handful of bespoke photos make scenarios feel dramatically more real than placeholder services. Use the CDN URLs directly in your `db.push()` calls.
|
|
@@ -47,6 +47,16 @@ export const Users = db.defineTable<User>('users', {
|
|
|
47
47
|
| `object` / `array` / JSON types | TEXT | Stored as JSON string, parsed on read |
|
|
48
48
|
| `User` (branded type) | TEXT | User ID with `@@user@@` prefix (transparent — your code works with clean UUIDs) |
|
|
49
49
|
|
|
50
|
+
### When to Use JSON Columns vs Separate Tables
|
|
51
|
+
|
|
52
|
+
Every table operation is a network round-trip — not a local SQLite query. There are no JOINs. Fetching related data across tables means multiple sequential or batched HTTP calls. Design your schema around how data is accessed, not traditional normalization rules. Remember that databases in these apps are usually quite small - often single or a handful of users - we need to optimize for speed, not normalization.
|
|
53
|
+
|
|
54
|
+
**Use a JSON column** when the data is always read and written with its parent. A product with a list of variant options, a form submission with its answers etc — these are single units that load together and save together. One row, one round-trip.
|
|
55
|
+
|
|
56
|
+
**Use a separate table** when you need to query the child data independently, when the child set could grow unbounded, or when children are updated individually without touching the parent.
|
|
57
|
+
|
|
58
|
+
Most 1:1 and 1:few relationships belong in JSON columns. Separate tables are for genuinely independent entities that happen to reference each other.
|
|
59
|
+
|
|
50
60
|
### System Columns
|
|
51
61
|
|
|
52
62
|
Every table automatically has these columns. The SDK adds them to the TypeScript return type automatically — you can access them on any row returned from `get()`, `filter()`, `push()`, etc. without declaring them in your interface. They're also stripped from write inputs, so you never pass them to `push()` or `update()`.
|
|
@@ -42,7 +42,7 @@ For verifying complex stateful interactions: multi-step form submissions, auth f
|
|
|
42
42
|
|
|
43
43
|
### Background Execution
|
|
44
44
|
|
|
45
|
-
Some tools support `background: true`, which sends the task to the agent and returns immediately without blocking.
|
|
45
|
+
Some tools support `background: true`, which sends the task to the agent and returns immediately without blocking. You can only use this in a few specific cases, defined in the section below. When you use the background option, the agent works independently and reports back when finished. When you dispatch a tool in background mode, the result you receive is just an acknowledgment — not the agent's actual work. The real results arrive later as an automated message:
|
|
46
46
|
|
|
47
47
|
```xml
|
|
48
48
|
<background_results>
|
|
@@ -57,7 +57,7 @@ When you receive background results:
|
|
|
57
57
|
- Incorporate them into your current work if applicable
|
|
58
58
|
- Don't interrupt the user's flow with a lengthy summary — they can see the background work in the UI
|
|
59
59
|
|
|
60
|
-
#### When to Background
|
|
60
|
+
#### When You Are Allowed to Background
|
|
61
61
|
|
|
62
62
|
You can only background the following two tasks, unless the user specifically asks you to do work in the background:
|
|
63
63
|
- `productVision` seeding the intiial roadmap after writing the spec for the first time. This task takes a while and we can allow the user to continue building while it happens in the background
|