Esposter
Esposter

Platform

The platform area is the cross-product integration program: everything is a resource with opt-in capabilities, surfaced through one Azure-portal-like Resource Explorer at /resource-explorer. A sheet, a survey, a program, a todo list, a dashboard, an email, a webpage, and a flowchart are all the same thing to the platform — an identity row, a content blob, and a definition — differing only in which blades and commands their type declares.

The standards the platform applies live in architecture: the layer model (the platform layer model), the resource model (resources), datasets (datasets), and publishing (publishing). The pages in this area describe the product surface built on them.

Key concepts

  • Resource — one Postgres identity row + one content blob in Azure Blob + one ResourceDefinitionMap entry. Single-owner, auth-gated, one contentVersion write path.
  • Capability — a cross-cutting mechanism a type opts into: Publishable (versioned snapshot + public /view/[type]/[id]), DatasetProvider (serves columns + rows through dataset.readDataset), Portable (import/export formats), FileAssets (hosted binary assets under {id}/files/… — see resource file assets).
  • Explorer — the Azure-portal-shaped shell: Home landing, /resource-explorer/all list, marketplace-style create flow, and a resource page composing blades. See resource explorer.
  • Blade — one panel of a resource page, addressed by route segment (/resource-explorer/[id]/[[blade]]). Every resource has a built-in Overview; types add their own (Sheet: Data + Settings, Survey: Responses, Program: Setup + Status, TodoList: Items + Calendar) and editor-backed types render their editor inline in the Editor blade.
  • Dataset — the read contract that lets one resource consume another's data: a Dashboard visual binds to a DatasetReference (dashboard data binding), an Email binds one for merge fields (email personalization), and a Program both binds one as its audience and serves one as its funnel status (program resource).

Feature pages

  • Resource explorer — the shell: Home, list, create flow, resource page, blades, command bar
  • Resource service menu — the standing left rail: All, Favorites, Recent, Tags and the bin as sibling routes over one list surface
  • List filters & views — the list workbench: filter pills, URL-synced state, bulk operations, column chooser, grouping, CSV export
  • Summary view — the /all List/Summary toggle: per-type count cards over a grouped count procedure
  • Resource page parity — labeled command bar with overflow, Refresh, Duplicate, type-the-name delete guard, save-conflict surface
  • Share to esbabbler — Share command posting a published resource's public link into a room you pick
  • Notifications bell — session-scoped operation-outcome toasts + app-bar bell panel
  • TodoList due reminders — web-push when a TodoList item comes due, over the scheduled-job + push subsystems
  • Global search — grouped as-you-type dropdown, Ctrl+K command palette, keyboard chords, relevance-ranked results
  • Global search relevancepg_trgm trigram index and similarity() ranking, so a typo still finds its resource
  • Favorites & recents — server-side stars and server-side opens, as Home tabs and as full list routes
  • Resource tags — name:value pairs in Essentials, edited in place, filterable on /all
  • Recycle bin — soft delete with restore, permanent purge, and a 30-day timer sweep
  • Activity log — the per-resource audit trail blade, in Azure Table Storage
  • Resource snapshots — published versions and revisions of the working copy in one version history panel, with preview, restore and undo
  • Shell cohesion — the shared chrome primitives (page header, breadcrumbs, empty/loading states, launcher)
  • Breadcrumb trail — crumbs are the click path, the current page is the title, and a direct link shows no ancestor at all
  • Sheet resource — CSV/JSON/XLSX files as resources with Data + Settings blades
  • Create from file — drop a CSV/JSON/XLSX on the Sheet create form and land in a ready Data blade
  • Survey resource — SurveyJS authoring, public respondent page, responses dataset
  • Program resource — the distribution orchestrator: audience + email + survey bindings, opaque participant tokens, funnel status
  • Note resource — a rich-text document type on Tiptap: JSON at rest, publishable generateHTML read view
  • Blueprint resource — a parameterized manifest of resources: deploy one blueprint, get a fully wired set with all the right cross-references
  • Blueprint capture — Save as blueprint on selected resources: contents captured, cross-resource ids rewritten to aliases automatically
  • Survey response controls — the accepting-responses toggle and the closed state that keeps participant links alive
  • Survey response modes — Anonymous or Identified identity, enforced at the write boundary
  • Survey response management — response detail, owner delete, response count on Overview
  • Published view analytics — best-effort view counts on public reads for every publishable type
  • Dashboard data binding — visuals bound to datasets with client aggregation and publish-time snapshots
  • Dashboard chart interaction — the ApexCharts v6 investigation surface on visuals: linked highlighting, shareable view state, annotations
  • Email personalization — merge fields, survey invite blocks, personalized HTML export
  • Dataset row-cap warning — "showing N of M" wherever a dataset read hits the 1000-row cap
  • Email web view — Email is Publishable: save-time HTML capture, /view/Email/[id] browser copy
  • Flowchart publish — Flowchart is Publishable: read-only VueFlow render at /view/Flowchart/[id]
  • Resource file assets — the FileAssets capability: hosted binary assets + GrapesJS Asset Manager
  • Storage quotas — per-user blob allowance held at SAS issuance and charged by Storage's own BlobCreated event, with a usage bar in the explorer shell's header
  • Webpage survey invite blocks — published surveys as drag-in invite buttons in both GrapesJS editors

Open work is in the roadmap; the Azure-portal-parity designs it references live under proposals. Ideas we chose not to pursue are under deferred (with revisit triggers) and rejected.

Shipped log

One line per program of work; the feature pages above carry the detail. The fact worth keeping at this level is what the whole program cost: one Azure Table for the activity blade, one Service Bus queue for reminders, one Event Grid subscription on a system topic that already existed, and a handful of Postgres migrations — no new Azure service at any point.

  • Resource Explorer consolidation — every product became a resource behind one explorer: the resources and resource_publications tables, one ResourceAssets container replacing six, the createResourceProcedures factory, and every per-editor page, picker and hub deleted.
  • Capabilities — Publishable, DatasetProvider, Portable and FileAssets, each adopted by the types that declare them rather than rebuilt per type.
  • Explorer surface — the list workbench, summary view, service menu, command-bar parity, global search and its trigram ranking, favorites, recents, tags, the recycle bin, activity log, and version history.
  • Resource types — Sheet (renamed from File), Survey, Program, Note and Blueprint, plus publish parity for Email and Flowchart.
  • Datasets — the read contract one resource consumes another through: dashboard visual binding, email merge fields, and the Program funnel status, with the row cap surfaced wherever a read hits it.
  • Platform services — storage quotas charged by Storage's own BlobCreated event, TodoList due reminders on the scheduled-job stack, and the notifications bell.