Skip to content

Commit be49c7a

Browse files
authored
Merge pull request #700 from objectstack-ai/copilot/evaluate-ui-optimization-specs
2 parents 62f0bcf + a84b633 commit be49c7a

5 files changed

Lines changed: 607 additions & 51 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,8 @@ See **[ROADMAP.md](./ROADMAP.md)** for the next-phase optimization and improveme
191191

192192
Studio-specific roadmap: **[apps/studio/ROADMAP.md](./apps/studio/ROADMAP.md)**
193193

194+
Visual design UX optimization plan: **[docs/design/visual-design-ux-optimization.md](./docs/design/visual-design-ux-optimization.md)**
195+
194196
## 🤝 Contributing
195197

196198
We welcome contributions! Please read our **[Contributing Guide](./CONTRIBUTING.md)** for:

ROADMAP.md

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -364,20 +364,24 @@ The following renames are planned for packages that implement core service contr
364364
- [x] Per-element data binding — `dataSource` property on `PageComponentSchema` for multi-object pages
365365
- [x] Element props — `ElementTextPropsSchema`, `ElementNumberPropsSchema`, `ElementImagePropsSchema`
366366

367-
#### Phase B: Element Library & Builder (v3.3)
367+
#### Phase B: Element Library & Builder (v3.3)
368368

369-
- [ ] Interactive elements — `element:button`, `element:filter`, `element:form`, `element:record_picker`
370-
- [ ] `BlankPageLayoutSchema` — Free-form canvas composition with grid-based positioning
371-
- [ ] Record picker variable binding — `PageVariableSchema` integration with `element:record_picker`
372-
- [ ] Studio Interface Builder — Drag-and-drop element placement UI
369+
- [x] Interactive elements — `element:button`, `element:filter`, `element:form`, `element:record_picker`
370+
- [x] `BlankPageLayoutSchema` — Free-form canvas composition with grid-based positioning
371+
- [x] Record picker variable binding — `PageVariableSchema` integration with `element:record_picker`
372+
- [x] `InterfaceBuilderConfigSchema` — Canvas snap, zoom, element palette, layer panel configuration
373+
- [ ] Studio Interface Builder — Drag-and-drop element placement UI (runtime)
373374

374-
#### Phase C: Sharing, Embedding & Permissions (v4.0)
375+
#### Phase C: Sharing, Embedding & Permissions (v4.0) 🟡
375376

376-
- [ ] `SharingConfigSchema` — Public link, password, domain restriction, expiration (`src/ui/sharing.zod.ts`)
377-
- [ ] `EmbedConfigSchema` — iframe embedding with origin restrictions and display options
378-
- [ ] Per-interface role assignment — `assignedRoles` on `InterfaceSchema`
379-
- [ ] Public form sharing — `sharing` property on `FormViewSchema`
380-
- [ ] Design-time user impersonation — `previewAs` option for interface preview
377+
- [x] `SharingConfigSchema` — Public link, password, domain restriction, expiration (`src/ui/sharing.zod.ts`)
378+
- [x] `EmbedConfigSchema` — iframe embedding with origin restrictions and display options
379+
- [x] Per-interface role assignment — `assignedRoles` on `InterfaceSchema`
380+
- [x] Public form sharing — `sharing` property on `FormViewSchema`
381+
- [ ] Design-time user impersonation — `previewAs` option for interface preview (see [UX Optimization](docs/design/visual-design-ux-optimization.md))
382+
- [ ] Share link generation runtime service
383+
- [ ] Embed code generation runtime service
384+
- [ ] Security audit for shared/embedded access control
381385

382386
#### Phase D: Advanced Interface Features (v4.1)
383387

@@ -522,9 +526,9 @@ The following renames are planned for packages that implement core service contr
522526
| **v3.0** | ✅ Shipped | Protocol specification complete, core runtime stable |
523527
| **v3.1** | Q2 2026 | Essential services (`service-cache`, `service-queue`, `service-job`, `service-storage`), PostgreSQL driver, Turso/libSQL core driver ([design](docs/design/driver-turso.md)) |
524528
| **v3.2** | Q3 2026 | Communication services (`service-realtime`, `service-graphql`, `service-i18n`, `service-notification`), Turso embedded replica & edge sync, UI Protocol Enhancement Phase A (`InterfaceSchema`, `RecordReviewConfig`, content elements) — see [gap analysis](docs/design/airtable-interface-gap-analysis.md) |
525-
| **v3.3** | Q4 2026 | Business logic services (`service-automation`, `service-workflow`, `service-search`), Turso multi-tenancy (database-per-tenant), UI Protocol Enhancement Phase B (interactive elements, blank page layout, Interface Builder) |
526-
| **v4.0** | Q1 2027 | Zod v4 migration, `plugin-auth``service-auth` rename, JSON Schema output, OpenAPI generation, AI services, multi-tenancy, Turso vector search & FTS5 integration, UI Protocol Enhancement Phase C (sharing, embedding, per-interface permissions) |
527-
| **v4.1** | Q2 2027 | Studio IDE general availability, marketplace launch, UI Protocol Enhancement Phase D (templates, versioning, collaborative editing) |
529+
| **v3.3** | Q4 2026 | Business logic services (`service-automation`, `service-workflow`, `service-search`), Turso multi-tenancy (database-per-tenant), UI Protocol Enhancement Phase B spec ✅ complete (interactive elements, blank page layout), Studio Interface Builder runtime, Visual Design UX optimization ([plan](docs/design/visual-design-ux-optimization.md)) |
530+
| **v4.0** | Q1 2027 | Zod v4 migration, `plugin-auth``service-auth` rename, JSON Schema output, OpenAPI generation, AI services, multi-tenancy, Turso vector search & FTS5 integration, UI Protocol Enhancement Phase C spec 🟡 mostly complete (sharing, embedding), `previewAs` design-time preview, Data Studio protocol, runtime share/embed services |
531+
| **v4.1** | Q2 2027 | Studio IDE general availability, marketplace launch, UI Protocol Enhancement Phase D (templates, versioning, collaborative editing), Interface Builder enhancements (selection model, clipboard, alignment) |
528532
| **v5.0** | 2027+ | Managed cloud, app store, global ecosystem |
529533

530534
---
@@ -536,6 +540,7 @@ The following renames are planned for packages that implement core service contr
536540
| [`ARCHITECTURE.md`](ARCHITECTURE.md) | Microkernel design, package structure, three-layer protocol stack |
537541
| [`docs/design/driver-turso.md`](docs/design/driver-turso.md) | Turso/libSQL driver design document — architecture impact, capabilities, implementation phases |
538542
| [`docs/design/airtable-interface-gap-analysis.md`](docs/design/airtable-interface-gap-analysis.md) | Airtable Interface gap analysis — UI protocol comparison, schema proposals, implementation roadmap |
543+
| [`docs/design/visual-design-ux-optimization.md`](docs/design/visual-design-ux-optimization.md) | Visual Design UX optimization plan — Airtable benchmark, spec coverage audit, Studio builder alignment |
539544
| [`apps/studio/ROADMAP.md`](apps/studio/ROADMAP.md) | Studio IDE development phases (v2.1 → v3.0) |
540545
| [`docs/DX_ROADMAP.md`](docs/DX_ROADMAP.md) | Developer experience improvements |
541546
| [`RELEASE_NOTES.md`](RELEASE_NOTES.md) | Version history and changelog |

apps/studio/ROADMAP.md

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ObjectStack Studio — Development Roadmap
22

3-
> **Last Updated:** 2026-02-15
3+
> **Last Updated:** 2026-02-16
44
> **Version:** 2.0.0 → 3.0.0
55
> **Goal:** Transform Studio from a metadata inspector into a full-featured visual IDE for the ObjectStack platform.
66
@@ -106,7 +106,9 @@
106106

107107
### Phase 2: UI Protocol Designers (v2.3) — 6 weeks
108108

109-
> **Theme:** Visual builders for every UI metadata type — the "App Builder" experience.
109+
> **Theme:** Visual builders for every UI metadata type — the "App Builder" experience.
110+
> **Spec Status:** All UI Protocol schemas are complete (20 files, full Airtable parity). This phase is pure runtime implementation.
111+
> **Reference:** [Visual Design UX Optimization Plan](../../docs/design/visual-design-ux-optimization.md)
110112
111113
| # | Task | Plugin ID | Priority |
112114
|---|------|-----------|----------|
@@ -116,19 +118,21 @@
116118
| | Mode-specific config panels: Kanban (status field, swimlanes), Calendar (date fields, duration), Gantt (dependencies, milestones). | | |
117119
| 2.3 | **FormView Designer** | `objectstack.form-designer` | 🔴 P0 |
118120
| | Section/column layout editor. Field placement with drag-and-drop. Conditional visibility (`visibleOn`). Widget selection per field. Preview mode. | | |
119-
| 2.4 | **Page Builder** | `objectstack.page-builder` | 🟡 P1 |
121+
| 2.4 | **Interface Builder** | `objectstack.interface-builder` | 🔴 P0 |
122+
| | **Airtable Interface Designer parity.** Drag-and-drop element canvas using `BlankPageLayoutSchema`. Element palette (12 types: text, number, image, divider, button, filter, form, record_picker, grid, chart, details, list). Property panel per element. Snap-to-grid with alignment guides. Layer ordering. Undo/redo (50 steps). Data source binding per element (`ElementDataSourceSchema`). See `InterfaceBuilderConfigSchema` in `@objectstack/spec/studio`. | | |
123+
| 2.5 | **Page Builder** | `objectstack.page-builder` | 🟡 P1 |
120124
| | Component composition canvas. Drag regions and components (header, details, related list, AI chat, custom). Property panel for each component. Preview with live data context. | | |
121-
| 2.5 | **App Builder** | `objectstack.app-builder` | 🟡 P1 |
122-
| | Navigation tree editor (drag-and-drop reorder). Add object/dashboard/page/URL items. Branding panel (colors, logo). Home page selector. | | |
123-
| 2.6 | **Dashboard Designer** | `objectstack.dashboard-designer` | 🟡 P1 |
125+
| 2.6 | **App Builder** | `objectstack.app-builder` | 🟡 P1 |
126+
| | Navigation tree editor (drag-and-drop reorder). Add object/dashboard/page/URL items. Interface management (`interfaces[]`). Branding panel (colors, logo). Home page selector. | | |
127+
| 2.7 | **Dashboard Designer** | `objectstack.dashboard-designer` | 🟡 P1 |
124128
| | Grid layout editor (React-Grid-Layout). Widget palette: charts, KPIs, lists, embedded views. Data source binding per widget. Auto-refresh config. | | |
125-
| 2.7 | **Report Builder** | `objectstack.report-builder` | 🟢 P2 |
129+
| 2.8 | **Report Builder** | `objectstack.report-builder` | 🟢 P2 |
126130
| | Tabular/Summary/Matrix report config. Column picker, grouping, aggregation. Embedded chart toggle. Filter builder. Export options. | | |
127-
| 2.8 | **Chart Editor** | `objectstack.chart-editor` | 🟢 P2 |
131+
| 2.9 | **Chart Editor** | `objectstack.chart-editor` | 🟢 P2 |
128132
| | Visual chart type selector (40+ types). Axis/series configuration. Preview with sample data. Annotation support. | | |
129-
| 2.9 | **Action Editor** | `objectstack.action-editor` | 🟢 P2 |
133+
| 2.10 | **Action Editor** | `objectstack.action-editor` | 🟢 P2 |
130134
| | Configure action type (script/URL/modal/flow/API). Location picker. Confirm/success text. Keyboard shortcut. Visibility conditions. | | |
131-
| 2.10 | **Theme Editor** | `objectstack.theme-editor` | 🟢 P2 |
135+
| 2.11 | **Theme Editor** | `objectstack.theme-editor` | 🟢 P2 |
132136
| | Visual color palette picker. Typography controls. Spacing/radius scale. Live preview. Export to theme metadata. | | |
133137

134138
**Deliverable:** Full "App Builder" experience — design complete applications visually.
@@ -256,7 +260,8 @@
256260

257261
### Phase 8: Studio Platform Evolution (v3.0) — Ongoing
258262

259-
> **Theme:** Studio becomes a full IDE ecosystem.
263+
> **Theme:** Studio becomes a full IDE ecosystem.
264+
> **Reference:** [Visual Design UX Optimization Plan](../../docs/design/visual-design-ux-optimization.md)
260265
261266
| # | Task | Priority |
262267
|---|------|----------|
@@ -270,12 +275,18 @@
270275
| | Git diff viewer for metadata changes. Commit from Studio. Branch switching. Conflict resolution. |
271276
| 8.5 | **External Plugin Marketplace** | 🟡 P1 |
272277
| | Browse/install community Studio plugins. Plugin manifest validation. Sandboxed execution. |
273-
| 8.6 | **Collaborative Editing** | 🟢 P2 |
278+
| 8.6 | **Data Studio Mode** | 🟡 P1 |
279+
| | Unified interactive data workspace combining views + embedded charts + inline editing + quick filters. Cross-view global filter. Aggregation bar. View switcher tabs. See `DataStudioConfigSchema` proposal. |
280+
| 8.7 | **Design-Time Preview** | 🟡 P1 |
281+
| | Preview interfaces as different users/roles. Responsive viewport switcher (desktop/tablet/mobile). Live data preview. Show data binding indicators. |
282+
| 8.8 | **Template Gallery** | 🟡 P1 |
283+
| | Pre-built interface templates (CRM, Project, HR, etc.). One-click instantiation with variable binding. Community template marketplace. |
284+
| 8.9 | **Collaborative Editing** | 🟢 P2 |
274285
| | Real-time multi-user editing (CRDT). Presence indicators. Change attribution. |
275-
| 8.7 | **Responsive / Mobile Mode** | 🟢 P2 |
286+
| 8.10 | **Responsive / Mobile Mode** | 🟢 P2 |
276287
| | Mobile preview mode. Responsive layout testing. Touch-friendly interactions. |
277-
| 8.8 | **Embedded AI Copilot** | 🟡 P1 |
278-
| | In-Studio AI assistant. Generate metadata from natural language. Explain configuration. Suggest best practices. |
288+
| 8.11 | **Embedded AI Copilot** | 🟡 P1 |
289+
| | In-Studio AI assistant. Generate metadata from natural language. Explain configuration. Suggest best practices. AI-assisted layout suggestions. |
279290

280291
---
281292

@@ -350,7 +361,9 @@ export const myPlugin: StudioPlugin = {
350361
| Metadata types with dedicated viewer | 1 / 30+ | 15 / 30+ | 30+ / 30+ |
351362
| Object Designer protocol schemas | 16 schemas |||
352363
| Object Designer protocol tests | 46 tests |||
364+
| Interface Builder protocol schemas | 4 schemas | 10+ | 15+ |
353365
| Component test coverage | 0% | 50% | 80% |
354366
| Deep-linkable views | 0 | All | All |
355367
| Plugin count (built-in) | 7 | 20 | 35+ |
368+
| Airtable UX parity (visual builder) | 20% | 60% | 90% |
356369
| Time to build a complete app (from scratch) | N/A (manual JSON) | 30 min | 10 min |

docs/design/airtable-interface-gap-analysis.md

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
> **Author:** ObjectStack Core Team
44
> **Created:** 2026-02-16
5-
> **Status:** Phase A Implemented
5+
> **Status:** Phase A–C Spec Complete · Studio Runtime Pending
66
> **Target Version:** v3.2 – v4.0
77
88
---
@@ -59,12 +59,12 @@ ties them together — specifically:
5959
| Area | Airtable | ObjectStack |
6060
|:---|:---|:---|
6161
| **Interface as a first-class entity** | ✅ Multi-page app per base |`InterfaceSchema` + `App.interfaces[]` drives sidebar |
62-
| **Drag-and-drop element canvas** | ✅ Free-form element placement | 🟡 Region-based composition |
62+
| **Drag-and-drop element canvas** | ✅ Free-form element placement | `BlankPageLayoutSchema` + `InterfaceBuilderConfigSchema` |
6363
| **Record Review workflow** | ✅ Built-in record-by-record review |`RecordReviewConfigSchema` in `PageSchema` |
6464
| **Element-level data binding** | ✅ Each element binds to any table/view |`ElementDataSourceSchema` per component |
65-
| **Shareable interface URLs** | ✅ Public/private share links | ❌ Not modeled (Phase C) |
65+
| **Shareable interface URLs** | ✅ Public/private share links | `SharingConfigSchema` on `InterfaceSchema` |
6666
| **Interface-level permissions** | ✅ Per-interface user access |`assignedRoles` on `InterfaceSchema` |
67-
| **Embeddable interfaces** | ✅ iframe embed codes | ❌ Not modeled (Phase C) |
67+
| **Embeddable interfaces** | ✅ iframe embed codes | `EmbedConfigSchema` on `InterfaceSchema` |
6868

6969
This document proposes specific schema additions and a phased roadmap to close these gaps while
7070
preserving ObjectStack's superior extensibility and enterprise capabilities.
@@ -630,33 +630,34 @@ export const EmbedConfigSchema = z.object({
630630

631631
**Estimated effort:** 2–3 weeks
632632

633-
### 7.2 Phase B: Element Library & Builder (v3.3 — Q4 2026)
633+
### 7.2 Phase B: Element Library & Builder (v3.3 — Q4 2026)
634634

635635
> **Goal:** Complete the element library and enable free-form page composition.
636636
637-
- [ ] Add interactive elements: `element:button`, `element:filter`, `element:form`, `element:record_picker`
638-
- [ ] Add `ElementFormPropsSchema`, `ElementRecordPickerPropsSchema`, `ElementButtonPropsSchema`, `ElementFilterPropsSchema`
639-
- [ ] Define `BlankPageLayoutSchema` for free-form canvas composition (grid-based positioning)
640-
- [ ] Add `PageVariableSchema` integration with `element:record_picker` (variable binding)
641-
- [ ] Add `RecordReviewConfigSchema` with approval actions, navigation modes, and progress indicators
642-
- [ ] Implement Studio Interface Builder UI (drag-and-drop element placement)
643-
- [ ] Write integration tests for multi-element page composition
637+
- [x] Add interactive elements: `element:button`, `element:filter`, `element:form`, `element:record_picker`
638+
- [x] Add `ElementFormPropsSchema`, `ElementRecordPickerPropsSchema`, `ElementButtonPropsSchema`, `ElementFilterPropsSchema`
639+
- [x] Define `BlankPageLayoutSchema` for free-form canvas composition (grid-based positioning)
640+
- [x] Add `PageVariableSchema` integration with `element:record_picker` (variable binding)
641+
- [x] Add `RecordReviewConfigSchema` with approval actions, navigation modes, and progress indicators
642+
- [x] Define `InterfaceBuilderConfigSchema` with snap, zoom, palette, layer panel configuration
643+
- [ ] Implement Studio Interface Builder UI (drag-and-drop element placement) — **runtime task**
644+
- [x] Write integration tests for multi-element page composition
644645

645646
**Estimated effort:** 4–6 weeks
646647

647-
### 7.3 Phase C: Sharing, Embedding & Permissions (v4.0 — Q1 2027)
648+
### 7.3 Phase C: Sharing, Embedding & Permissions (v4.0 — Q1 2027) 🟡
648649

649650
> **Goal:** Enable Airtable-level sharing and access control for interfaces.
650651
651-
- [ ] Define `SharingConfigSchema` in `src/ui/sharing.zod.ts`
652-
- [ ] Define `EmbedConfigSchema` for iframe embedding configuration
653-
- [ ] Add `sharing` property to `InterfaceSchema` and `FormViewSchema` (public forms)
654-
- [ ] Add per-interface role assignment (`assignedRoles`)
655-
- [ ] Implement share link generation in runtime (service layer)
656-
- [ ] Implement embed code generation with origin restrictions
657-
- [ ] Add `previewAs` option for design-time user impersonation
658-
- [ ] Security audit for shared/embedded interface access control
659-
- [ ] Write permission and sharing tests
652+
- [x] Define `SharingConfigSchema` in `src/ui/sharing.zod.ts`
653+
- [x] Define `EmbedConfigSchema` for iframe embedding configuration
654+
- [x] Add `sharing` property to `InterfaceSchema` and `FormViewSchema` (public forms)
655+
- [x] Add per-interface role assignment (`assignedRoles`)
656+
- [ ] Implement share link generation in runtime (service layer)**runtime task**
657+
- [ ] Implement embed code generation with origin restrictions**runtime task**
658+
- [ ] Add `previewAs` option for design-time user impersonation — see [Visual Design UX Optimization](./visual-design-ux-optimization.md)
659+
- [ ] Security audit for shared/embedded interface access control**runtime task**
660+
- [x] Write permission and sharing tests
660661

661662
**Estimated effort:** 4–6 weeks
662663

0 commit comments

Comments
 (0)