@lumerahq/cli 0.19.11 → 0.19.12

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumerahq/cli",
3
- "version": "0.19.11",
3
+ "version": "0.19.12",
4
4
  "description": "CLI for building and deploying Lumera apps",
5
5
  "type": "module",
6
6
  "engines": {
@@ -17,6 +17,12 @@ src/
17
17
  scripts/ # Utility scripts (seed data, migrations, etc.)
18
18
  ```
19
19
 
20
+ The starter UI is intentionally throwaway. `src/routes/index.tsx` is just the
21
+ default landing page shown before the real app exists, and `index.html` is only
22
+ the Vite shell. When building the user's first real workflow or screen, replace
23
+ the starter home page with the app experience instead of preserving or building
24
+ around the placeholder content.
25
+
20
26
  ## Lumera Concepts
21
27
 
22
28
  A Lumera app is built from these primitives — all defined as code in `platform/`:
@@ -122,6 +128,17 @@ const invoiceLink = buildShareableAppUrl('/invoices/123', { router: 'hash' });
122
128
 
123
129
  When reporting a deployed app, use `launch_url` or `url` from the deploy response. Do not share `iframe_url`; it is only the internal iframe/static asset mount.
124
130
 
131
+ ## Preview and Verification
132
+
133
+ The Studio environment already runs the Vite dev server and exposes it through
134
+ the portal's **Preview tab**. Users are not expected to run local developer
135
+ commands, and raw localhost URLs are not reachable from the Studio portal.
136
+
137
+ **Never tell users to run `pnpm dev`, `pnpm dev:vite`, `npm run dev`, or any
138
+ other dev-server command. Never tell users to open `localhost`, `127.0.0.1`, or
139
+ Vite ports such as `http://localhost:5173/`.** When explaining how to verify UI
140
+ changes, tell them to open the **Preview tab**.
141
+
125
142
 
126
143
  ## Workflow
127
144
 
@@ -134,7 +151,7 @@ Follow the user's lead. If they tell you exactly what to build, build it. The wo
134
151
 
135
152
  ### Step 2: Build (one slice at a time)
136
153
  4. **Build horizontally** — Pick the first step. Build the full slice: collection schema → `lumera apply` → seed data → UI route/components → commit. Each slice should be deployable and usable on its own.
137
- 5. **Stop and ask for feedback** — Tell the user to open the **Preview tab** to see the app. The dev server starts automatically you do NOT need to run `pnpm dev` or start any server. Iterate on the slice until they're happy.
154
+ 5. **Stop and ask for feedback** — Tell the user to open the **Preview tab** to see the app. Do not mention local dev-server commands or localhost URLs. Iterate on the slice until they're happy.
138
155
  6. **Repeat** — Move to the next step. Build, deploy, get feedback.
139
156
 
140
157
  ### Rules
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/2.0.0/schema.json",
2
+ "$schema": "https://biomejs.dev/schemas/2.4.16/schema.json",
3
3
  "vcs": {
4
4
  "enabled": true,
5
5
  "clientKind": "git",
@@ -24,7 +24,7 @@
24
24
  "check:ci": "biome check . && tsr generate && tsc --noEmit"
25
25
  },
26
26
  "dependencies": {
27
- "@lumerahq/ui": "^0.7.6",
27
+ "@lumerahq/ui": "^0.9.1",
28
28
  "@tanstack/react-query": "^5.90.11",
29
29
  "@tanstack/react-router": "1.155.0",
30
30
  "@tanstack/router-plugin": "1.155.0",
@@ -1,5 +1,5 @@
1
- import { type ClassValue, clsx } from "clsx";
2
- import { twMerge } from "tailwind-merge";
1
+ import { type ClassValue, clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
3
 
4
4
  export function cn(...inputs: ClassValue[]) {
5
5
  return twMerge(clsx(inputs));
@@ -125,6 +125,6 @@ if (rootElement && !rootElement.innerHTML) {
125
125
  ReactDOM.createRoot(rootElement).render(
126
126
  <StrictMode>
127
127
  <App />
128
- </StrictMode>,
128
+ </StrictMode>
129
129
  );
130
130
  }
@@ -1,6 +1,6 @@
1
1
  import { createFileRoute } from '@tanstack/react-router';
2
+ import { Bot, LayoutGrid, MessageSquare, Workflow } from 'lucide-react';
2
3
  import { useContext } from 'react';
3
- import { MessageSquare, LayoutGrid, Bot, Workflow } from 'lucide-react';
4
4
  import { AuthContext } from '../lib/auth';
5
5
 
6
6
  export const Route = createFileRoute('/')({
@@ -14,8 +14,12 @@ function HomePage() {
14
14
  <div className="space-y-10">
15
15
  {/* Header */}
16
16
  <div>
17
- <h1 className="text-2xl font-semibold tracking-tight">Welcome{auth?.user?.name ? `, ${auth.user.name}` : ''}</h1>
18
- <p className="text-muted-foreground mt-2 text-[0.95rem] leading-relaxed">Your app is ready. Use Studio to start building.</p>
17
+ <h1 className="text-2xl font-semibold tracking-tight">
18
+ Welcome{auth?.user?.name ? `, ${auth.user.name}` : ''}
19
+ </h1>
20
+ <p className="text-muted-foreground mt-2 text-[0.95rem] leading-relaxed">
21
+ Your app is ready. Use Studio to start building.
22
+ </p>
19
23
  </div>
20
24
 
21
25
  {/* Getting Started */}
@@ -27,8 +31,8 @@ function HomePage() {
27
31
  <div className="space-y-2">
28
32
  <h2 className="font-semibold text-lg tracking-tight">Build with Studio</h2>
29
33
  <p className="text-muted-foreground text-sm leading-relaxed">
30
- Switch to the <strong>Chat</strong> tab and tell the agent what you want to build.
31
- It will set up your data, write the logic, and build your UI — all from a conversation.
34
+ Switch to the <strong>Chat</strong> tab and tell the agent what you want to build. It
35
+ will set up your data, write the logic, and build your UI — all from a conversation.
32
36
  </p>
33
37
  </div>
34
38
  </div>
@@ -36,7 +40,9 @@ function HomePage() {
36
40
 
37
41
  {/* Example prompts */}
38
42
  <div>
39
- <h2 className="text-sm font-semibold uppercase tracking-wider text-muted-foreground mb-4">Try asking the agent</h2>
43
+ <h2 className="text-sm font-semibold uppercase tracking-wider text-muted-foreground mb-4">
44
+ Try asking the agent
45
+ </h2>
40
46
  <div className="flex flex-wrap gap-2">
41
47
  {[
42
48
  'Build an invoice processing app with approval workflows',
@@ -57,27 +63,32 @@ function HomePage() {
57
63
 
58
64
  {/* What you can build */}
59
65
  <div>
60
- <h2 className="text-sm font-semibold uppercase tracking-wider text-muted-foreground mb-5">What you can build</h2>
66
+ <h2 className="text-sm font-semibold uppercase tracking-wider text-muted-foreground mb-5">
67
+ What you can build
68
+ </h2>
61
69
  <div className="grid gap-4 md:grid-cols-3">
62
70
  <div className="group rounded-xl bg-card p-5 space-y-3 shadow-[0_1px_2px_0_oklch(0_0_0/0.03)] border border-border/60 hover:shadow-[0_4px_12px_-2px_oklch(0_0_0/0.06)] hover:border-border transition-all duration-300">
63
71
  <LayoutGrid className="size-5 text-primary transition-colors duration-300" />
64
72
  <h3 className="font-medium text-sm tracking-tight">Internal apps</h3>
65
73
  <p className="text-xs text-muted-foreground leading-relaxed">
66
- Back-office tools for your team — dashboards, approval queues, and operational workflows.
74
+ Back-office tools for your team — dashboards, approval queues, and operational
75
+ workflows.
67
76
  </p>
68
77
  </div>
69
78
  <div className="group rounded-xl bg-card p-5 space-y-3 shadow-[0_1px_2px_0_oklch(0_0_0/0.03)] border border-border/60 hover:shadow-[0_4px_12px_-2px_oklch(0_0_0/0.06)] hover:border-border transition-all duration-300">
70
79
  <Bot className="size-5 text-primary transition-colors duration-300" />
71
80
  <h3 className="font-medium text-sm tracking-tight">Agent-powered workflows</h3>
72
81
  <p className="text-xs text-muted-foreground leading-relaxed">
73
- AI agents that extract data, run reviews, draft outputs, and route exceptions — humans stay in the loop.
82
+ AI agents that extract data, run reviews, draft outputs, and route exceptions — humans
83
+ stay in the loop.
74
84
  </p>
75
85
  </div>
76
86
  <div className="group rounded-xl bg-card p-5 space-y-3 shadow-[0_1px_2px_0_oklch(0_0_0/0.03)] border border-border/60 hover:shadow-[0_4px_12px_-2px_oklch(0_0_0/0.06)] hover:border-border transition-all duration-300">
77
87
  <Workflow className="size-5 text-primary transition-colors duration-300" />
78
88
  <h3 className="font-medium text-sm tracking-tight">Automations</h3>
79
89
  <p className="text-xs text-muted-foreground leading-relaxed">
80
- Connect to your systems, process inbound emails, and trigger actions automatically — with a full audit trail.
90
+ Connect to your systems, process inbound emails, and trigger actions automatically —
91
+ with a full audit trail.
81
92
  </p>
82
93
  </div>
83
94
  </div>
@@ -34,7 +34,7 @@ body {
34
34
  --secondary-foreground: oklch(0.16 0.01 60);
35
35
  /* Warm stone muted tones */
36
36
  --muted: oklch(0.955 0.005 60);
37
- --muted-foreground: oklch(0.50 0.01 60);
37
+ --muted-foreground: oklch(0.5 0.01 60);
38
38
  /* Accent — lighter orange tint */
39
39
  --accent: oklch(0.95 0.03 50);
40
40
  --accent-foreground: oklch(0.35 0.12 35);
@@ -20,9 +20,6 @@ export default defineConfig({
20
20
  dedupe: ['react', 'react-dom'],
21
21
  },
22
22
  server: {
23
- allowedHosts: [
24
- 'mac.lumerahq.com',
25
- 'untunable-del-nonephemerally.ngrok-free.dev',
26
- ],
23
+ allowedHosts: ['mac.lumerahq.com'],
27
24
  },
28
25
  });