Flimix Studio is a WYSIWYG block-based landing page builder tailored for OTT platforms like Netflix, Prime Video, etc. It allows teams to visually build marketing and onboarding pages using configurable content blocks. The editor outputs a clean, structured JSON schema, which can be rendered across web, mobile, and TV platforms.
- Visual Block Editor – Drag-and-drop interface with live preview
- JSON Schema Output – Cross-platform compatible content definitions
- Responsive Layout – Automatically adapts for mobile, desktop, and more
- TypeScript + Tailwind – Fast modern stack with scalable architecture
- Schema-Driven UI – All blocks follow strict RFC-style specs
- Frontend: React 18 + TypeScript
- Build Tool: Vite
- Styling: Tailwind CSS v4
- State Management: Coming soon (Zustand or similar)
- Schema-Driven Rendering: Fully declarative layout engine (JSON → UI)
flimix-studio/
├── src/
│ ├── components/
│ │ ├── TopBar.tsx # Top toolbar with global actions
│ │ ├── Canvas.tsx # Main block rendering surface
│ │ └── Sidebar.tsx # Block/property inspector
│ ├── App.tsx # Main layout scaffold
│ ├── main.tsx # App entry point
│ └── index.css # Tailwind layers and globals
├── vite.config.ts
├── package.json
└── README.md
- ✅
<TopBar />
for Save/Preview/Insert - ✅
<Canvas />
for rendering blocks visually - ✅
<Sidebar />
for inspecting and editing selected block - ✅ Tailwind-powered responsive layout
The editor outputs a page-level JSON document that can be rendered consistently across any OTT client.
{
"title": "Flimix Landing Page",
"theme": "dark",
"visibility": {
"platform": ["tv", "mobile", "desktop"]
},
"blocks": [ /* array of block objects */ ]
}
{
"type": "hero",
"id": "hero-001",
"props": {
"title": "Stream the Best",
"subtitle": "Now playing on Flimix",
"backgroundImage": "https://cdn.flimix.com/hero.jpg",
"ctaButton": {
"label": "Subscribe Now",
"link": "/subscribe"
}
},
"style": {
"theme": "dark",
"padding": "lg",
"textColor": "#ffffff"
},
"visibility": {
"platform": ["mobile", "desktop"]
},
"events": {
"onCTAClick": "track-hero-cta"
}
}
Each block follows a strict spec with fields like:
type
(required): block type (e.g.,hero
,poster-grid
)props
: block-specific content fieldsstyle
: visual design tokensevents
: optional interaction trackingvisibility
: device/platform targeting
- Initialize project scaffold
- Tailwind CSS setup
- Layout: TopBar, Canvas, Sidebar
- JSON schema → block renderer
- Load sample schema and render block tree
- Block selection, Sidebar editing
- Drag-and-drop reordering
- Block insertion & deletion
- Undo / Redo stack
- Live preview mode
- Schema export (as JSON file)
- Schema import (from JSON)
- JSON validation rules
- Block-specific inspectors (e.g., Hero, Carousel)
- Document overview panel
- Conditional visibility editor
- Platform simulator (TV, Mobile, Desktop viewports)
- Template manager (starter pages)
- Schema-first: Visual UI that outputs machine-readable config
- Minimalist by default: Authors only see what they need
- Composable: Every block is a leaf or parent — nothing hardcoded
- Cross-platform: Built to work for OTT apps on any device
# Install dependencies
npm install
# Start dev server
npm run dev
# Build production assets
npm run build
# Preview production build
npm run preview
Then open: http://localhost:5173
- Fork this repository
- Create a new branch (
feat/block-carousel
) - Commit and push changes
- Open a Pull Request (PR) with context
MIT License. Crafted with ❤️ to power OTT landing pages with less code and more creativity.