← Extractions

Building Beautiful UIs with Ruby — A Rails-Native Approach (wroclove.rb 2025)

Seth Horsley's wroclove.rb 2025 talk on migrating Statesert's front end from React to Phlex + Ruby UI, with Joel Drapper on stage to explain Phlex's 'accordion of complexity' for composable components, benchmark caveats, and Turbo integration. Q&A covers Turbo interop, why Ruby UI favors atomic components over slots, front-end developer onboarding, CSS/JS integration (Tailwind, Stimulus, floating-ui), and strategies for testing Phlex-rendered output.

Model
claude-opus-4-7
Ingestion
02014cf1
Input tokens
172,225
fresh
127,525
cached
37,614
cache write
7,086
Output tokens
12,512
Duration
168.9s
Roundtrips
4
Tool calls
22
Cost
$0.00
Nodes/edges extracted
19 / 59
Read set (nodes/edges)
128 / 2

Nodes (19)

create floating-ui tool
kind (empty) → tool
name (empty) → floating-ui
slug (empty) → floating-ui
attrs (empty) → {"category" => "library"}
description (empty) → JavaScript library for positioning floating elements (tooltips, popovers, dropdowns, menus) relative to an anchor ele...
short_description (empty) → JavaScript positioning library for tooltips, popovers and dropdowns.
update Building Beautiful UIs with Ruby A Rails-Native Approach talk
attrs {"type" => "talk"} → {"date" => "2025-03-14", "type" => "talk"}
description Talk at wroclove.rb 2025. → Talk at wroclove.rb 2025 by Seth Horsley (with Joel Drapper co-presenting part of the content). Tells the story of mi...
short_description Talk at wroclove.rb 2025. → Seth Horsley's wroclove.rb 2025 talk on Phlex and Ruby UI for Rails-native component UIs.
update Seth Horsley person
attrs (empty) → {"role" => "Owner at Statesert"}
description Conference speaker. → Conference speaker and owner of Statesert. Led Statesert's migration from a MERN stack (MongoDB, Express, React, Node...
short_description Conference speaker. → Owner of Statesert; Ruby UI contributor; wroclove.rb 2025 speaker.
create Ruby UI project
kind (empty) → project
name (empty) → Ruby UI
slug (empty) → ruby-ui
attrs (empty) → {"status" => "active", "license" => "open-source"}
description (empty) → Open-source component library for Phlex, modeled after shadcn/ui. Ships a catalog of reusable primitives (buttons wit...
short_description (empty) → shadcn/ui-style component library for Phlex, built in Ruby.
create Statesert company
kind (empty) → company
name (empty) → Statesert
slug (empty) → statesert
attrs (empty) → {"industry" => "software"}
description (empty) → Company owned by Seth Horsley. Originally built on a MERN stack (MongoDB, Express, React, Node.js); about six years a...
short_description (empty) → Company owned by Seth Horsley; migrated from MERN stack to Ruby on Rails + Phlex.
create MongoDB tool
kind (empty) → tool
name (empty) → MongoDB
slug (empty) → mongodb
attrs (empty) → {"category" => "service"}
description (empty) → Document-oriented NoSQL database. Part of the MERN stack. Statesert originally stored its data in MongoDB and migrate...
short_description (empty) → Document-oriented NoSQL database.
create Express.js tool
kind (empty) → tool
name (empty) → Express.js
slug (empty) → express-js
attrs (empty) → {"category" => "framework"}
description (empty) → Minimalist web application framework for Node.js. The 'E' in the MERN stack. Statesert used it before migrating to Ru...
short_description (empty) → Minimalist web framework for Node.js.
create MERN Stack concept
kind (empty) → concept
name (empty) → MERN Stack
slug (empty) → mern-stack
attrs (empty) → {"category" => "architecture"}
description (empty) → Full-JavaScript web stack combining MongoDB, Express, React, and Node.js. Statesert originally used the MERN stack be...
short_description (empty) → MongoDB + Express + React + Node.js JavaScript web stack.
create shadcn/ui resource
kind (empty) → resource
name (empty) → shadcn/ui
slug (empty) → shadcn-ui
attrs (empty) → {"type" => "documentation"}
description (empty) → Popular component collection originating in the React/Tailwind world where components are distributed by copy-paste/C...
short_description (empty) → Tailwind-based React component collection distributed by copy-paste rather than as a package.
update Accordion of Complexity concept
attrs {"category" => "methodology"} → {"category" => "pattern"}
description Idea (attributed by Joel Drapper to Stephen Margheim's upcoming talk at wroclove.rb 2025) that good interfaces let yo... → Phlex-flavored design philosophy articulated by Joel Drapper during the talk: a component system should let you 'expa...
short_description Design progression that scales with use case — add complexity only when needed. → Design philosophy letting component APIs expand or contract in expressiveness.
update Phlex tool
description Ruby gem for building HTML views as Ruby objects/methods instead of template files. Created by Joel Drapper. Componen... → Ruby gem for building HTML views as Ruby objects/methods instead of template files. Created by Joel Drapper. One file...
create Phlex is only faster than ERB at scale takeaway
kind (empty) → takeaway
name (empty) → Phlex is only faster than ERB at scale
slug (empty) → phlex-is-only-faster-than-erb-at-scale
attrs (empty) → {"type" => "insight"}
description (empty) → Joel Drapper's clarification of a widely cited benchmark: Phlex actually does more work than ERB to render a single H...
short_description (empty) → Phlex beats ActionView on component-heavy pages, not on single-tag rendering.
create One file rules them all takeaway
kind (empty) → takeaway
name (empty) → One file rules them all
slug (empty) → one-file-rules-them-all
attrs (empty) → {"type" => "recommendation"}
description (empty) → Seth Horsley's rationale for choosing Phlex over ViewComponent: with Phlex there is one Ruby file per component that ...
short_description (empty) → Keep a component's view and logic in a single Ruby file for simplicity and maintainability.
create Prefer atomic components over slots takeaway
kind (empty) → takeaway
name (empty) → Prefer atomic components over slots
slug (empty) → prefer-atomic-components-over-slots
attrs (empty) → {"type" => "recommendation"}
description (empty) → Design preference behind Ruby UI: avoid a slots-based API (as popularized by ViewComponent and Web Components) and in...
short_description (empty) → Ruby UI favors many small composable components instead of a slots API.
create How does Phlex integrate with Turbo? question
kind (empty) → question
name (empty) → How does Phlex integrate with Turbo?
slug (empty) → how-does-phlex-integrate-with-turbo
attrs (empty) → {"answer_summary" => "Phlex implements Rails' 'renderable' interface (from the ViewComponent team), so all Turbo help...
description (empty) → Audience question on Phlex + Turbo interop. Joel Drapper answers that Rails has an abstraction called 'renderable' — ...
short_description (empty) → Audience asks how Phlex components interact with Turbo and the new Hotwire stack.
create Why does Ruby UI avoid slots? question
kind (empty) → question
name (empty) → Why does Ruby UI avoid slots?
slug (empty) → why-does-ruby-ui-avoid-slots
attrs (empty) → {"answer_summary" => "Slots aren't common in JavaScript and tie micro-components to a single parent, preventing reuse...
description (empty) → Audience question noting that Ruby UI favors many small atomic components rather than the common slots-based approach...
short_description (empty) → Audience asks why Ruby UI uses many atomic components instead of ViewComponent-style slots.
create How do pure front-end developers react to Ruby views? question
kind (empty) → question
name (empty) → How do pure front-end developers react to Ruby views?
slug (empty) → how-do-pure-front-end-developers-react-to-ruby-views
attrs (empty) → {"answer_summary" => "Ruby is approachable; Phlex gives clear errors, and an upcoming validator will ship literal sch...
description (empty) → Audience question: when pure front-end (HTML/CSS/JS) developers encounter a UI written in Ruby with Phlex, how do the...
short_description (empty) → Audience asks how HTML/CSS/JS developers handle UIs written in Ruby.
create How does Ruby UI integrate with CSS and JavaScript? question
kind (empty) → question
name (empty) → How does Ruby UI integrate with CSS and JavaScript?
slug (empty) → how-does-ruby-ui-integrate-with-css-and-javascript
attrs (empty) → {"answer_summary" => "Tied to Stimulus (for now) and Tailwind; not tied to Active Support, so works in Sinatra too; u...
description (empty) → Audience question about how Ruby UI integrates with CSS and JavaScript — whether it depends on the Rails asset pipeli...
short_description (empty) → Audience asks whether Ruby UI depends on Tailwind, Stimulus, or the Rails asset pipeline.
create How do you test rendered Phlex components? question
kind (empty) → question
name (empty) → How do you test rendered Phlex components?
slug (empty) → how-do-you-test-rendered-phlex-components
attrs (empty) → {"answer_summary" => "Today: render to string and query with Nokogiri/Capybara (a helper is documented). Future: comp...
description (empty) → Audience question about automated testing of Phlex-rendered views — e.g. feature specs in RSpec — without having to w...
short_description (empty) → Audience asks how to write automated tests / feature specs against Phlex output.

Edges (59)

update Seth Horsley → authored → Building Beautiful UIs with Ruby A Rails-Native Approach
context (empty) → Seth Horsley gave this talk at wroclove.rb 2025 — his first conference talk.
update Building Beautiful UIs with Ruby A Rails-Native Approach → presented_at → wroclove.rb 2025
context (empty) → Talk delivered at wroclove.rb 2025.
create Seth Horsley → attended → wroclove.rb 2025
context (empty) → Spoke at and attended the conference.
relation (empty) → attended
source_node_id (empty) → bb9d1de8-88ba-4492-bfb3-4944b512b5ec
target_node_id (empty) → 4a9688cf-482e-48ac-a0b5-de88900bdb2b
update Joel Drapper → attended → wroclove.rb 2025
context Traveled to Wrocław to give the opening talk and stay for the after-party. → Co-presented a segment of Seth's talk on Phlex's accordion-of-complexity and benchmarks.
create Stephen Margheim → attended → wroclove.rb 2025
context (empty) → Part of the after-hours Friday-night crew mentioned in the talk's opening and closing story.
relation (empty) → attended
source_node_id (empty) → f8314bba-5263-4bd3-9174-6613ee5fef9e
target_node_id (empty) → 4a9688cf-482e-48ac-a0b5-de88900bdb2b
create Seth Horsley → works_at → Statesert
attrs (empty) → {"role" => "Owner"}
context (empty) → Seth identifies himself as the owner of Statesert during the talk.
relation (empty) → works_at
source_node_id (empty) → bb9d1de8-88ba-4492-bfb3-4944b512b5ec
target_node_id (empty) → 78a197e6-d5a4-43b2-bd3f-f0fec22b9f6c
create Building Beautiful UIs with Ruby A Rails-Native Approach → about → shadcn/ui
context (empty) → Ruby UI is explicitly modeled after shadcn/ui.
relation (empty) → about
source_node_id (empty) → b8575937-2814-458b-a167-8c29ca456c11
target_node_id (empty) → 98f802ea-0535-4c58-8a89-f31d1ed8d323
create Building Beautiful UIs with Ruby A Rails-Native Approach → about → Turbo
context (empty) → Q&A covers Phlex's integration with Turbo via the renderable interface.
relation (empty) → about
source_node_id (empty) → b8575937-2814-458b-a167-8c29ca456c11
target_node_id (empty) → 0071d9d0-23d6-4880-af20-5c3369e78423
create MERN Stack → related_to → MongoDB
context (empty) → The 'M' of the MERN stack.
relation (empty) → related_to
source_node_id (empty) → 4cd9262e-8c3a-4f25-86d3-5f3020db6052
target_node_id (empty) → 0f6bafb9-3c05-4d6b-9374-bbeffd67d7d7
create Seth Horsley → works_on → Ruby UI
attrs (empty) → {"role" => "maintainer"}
context (empty) → Co-maintains the Phlex-based Ruby UI component library.
relation (empty) → works_on
source_node_id (empty) → bb9d1de8-88ba-4492-bfb3-4944b512b5ec
target_node_id (empty) → 7641be31-d6e5-4647-b2d4-a0075d2f66ad
update Joel Drapper → works_on → Phlex
context Creator of Phlex; used a Phlex Button component to demo Literal::Properties. → Creator of Phlex; explained its design and benchmarks on stage.
create Ruby UI → uses → Phlex
context (empty) → Ruby UI is a component library for Phlex.
relation (empty) → uses
source_node_id (empty) → 7641be31-d6e5-4647-b2d4-a0075d2f66ad
target_node_id (empty) → 6bb19a01-47fc-4521-83c9-874cd58c606a
create Ruby UI → uses → Tailwind CSS
context (empty) → Ruby UI is built on Tailwind, mirroring shadcn/ui; ships a Tailwind config to copy into the host app.
relation (empty) → uses
source_node_id (empty) → 7641be31-d6e5-4647-b2d4-a0075d2f66ad
target_node_id (empty) → ec73c2f6-5a41-41a5-8bc3-17addcf6fa0f
create Ruby UI → uses → Stimulus
context (empty) → Ruby UI components rely on Stimulus controllers for interactive behavior.
relation (empty) → uses
source_node_id (empty) → 7641be31-d6e5-4647-b2d4-a0075d2f66ad
target_node_id (empty) → 87cb1332-bd03-4cc9-a0b1-c8c83aae8051
create Ruby UI → uses → floating-ui
context (empty) → Ruby UI pulls in floating-ui for positioning in a few components.
relation (empty) → uses
source_node_id (empty) → 7641be31-d6e5-4647-b2d4-a0075d2f66ad
target_node_id (empty) → 66b33e49-891f-4c9a-9163-a6ef4a2af616
create Statesert → uses → Ruby on Rails
context (empty) → Migrated backend from the MERN stack to Ruby on Rails ~6 years before the talk.
relation (empty) → uses
source_node_id (empty) → 78a197e6-d5a4-43b2-bd3f-f0fec22b9f6c
target_node_id (empty) → 7aac705a-0987-49f2-b665-9d4e08a6acee
create Statesert → uses → PostgreSQL
context (empty) → Migrated data from MongoDB to PostgreSQL ~4 years before the talk.
relation (empty) → uses
source_node_id (empty) → 78a197e6-d5a4-43b2-bd3f-f0fec22b9f6c
target_node_id (empty) → 46fc2697-69fc-436b-ac82-250ba4370273
create Statesert → uses → Phlex
context (empty) → Uses Phlex as the front-end view layer after migrating away from React.
relation (empty) → uses
source_node_id (empty) → 78a197e6-d5a4-43b2-bd3f-f0fec22b9f6c
target_node_id (empty) → 6bb19a01-47fc-4521-83c9-874cd58c606a
create Statesert → uses → Ruby UI
context (empty) → Uses the Ruby UI component library.
relation (empty) → uses
source_node_id (empty) → 78a197e6-d5a4-43b2-bd3f-f0fec22b9f6c
target_node_id (empty) → 7641be31-d6e5-4647-b2d4-a0075d2f66ad
create Statesert → uses → MongoDB
attrs (empty) → {"status" => "former"}
context (empty) → Original datastore in the MERN era; since migrated away from.
relation (empty) → uses
source_node_id (empty) → 78a197e6-d5a4-43b2-bd3f-f0fec22b9f6c
target_node_id (empty) → 0f6bafb9-3c05-4d6b-9374-bbeffd67d7d7
create Statesert → uses → Express.js
attrs (empty) → {"status" => "former"}
context (empty) → Part of the original MERN stack.
relation (empty) → uses
source_node_id (empty) → 78a197e6-d5a4-43b2-bd3f-f0fec22b9f6c
target_node_id (empty) → 435384fc-f0bc-4539-918a-0d9896d5a23b
create Statesert → uses → React
attrs (empty) → {"status" => "former"}
context (empty) → Statesert originally used React on the front end before migrating to Phlex/Ruby UI.
relation (empty) → uses
source_node_id (empty) → 78a197e6-d5a4-43b2-bd3f-f0fec22b9f6c
target_node_id (empty) → 5026a4fc-0c6e-49d7-bb7d-29be23b72b24
create Statesert → uses → Node.js
attrs (empty) → {"status" => "former"}
context (empty) → Part of the original MERN stack.
relation (empty) → uses
source_node_id (empty) → 78a197e6-d5a4-43b2-bd3f-f0fec22b9f6c
target_node_id (empty) → 9aeec77e-7dee-4054-85fe-541434a0d272
create Building Beautiful UIs with Ruby A Rails-Native Approach → about → Phlex
context (empty) → Central subject of the talk — adopting Phlex for Rails view rendering.
relation (empty) → about
source_node_id (empty) → b8575937-2814-458b-a167-8c29ca456c11
target_node_id (empty) → 6bb19a01-47fc-4521-83c9-874cd58c606a
create Building Beautiful UIs with Ruby A Rails-Native Approach → about → Ruby UI
context (empty) → Talk showcases Ruby UI as a shadcn/ui-style component library for Phlex.
relation (empty) → about
source_node_id (empty) → b8575937-2814-458b-a167-8c29ca456c11
target_node_id (empty) → 7641be31-d6e5-4647-b2d4-a0075d2f66ad
create Building Beautiful UIs with Ruby A Rails-Native Approach → about → ViewComponent
context (empty) → Evaluated and rejected as a view-layer option due to split .rb/.html files and maintainer direction.
relation (empty) → about
source_node_id (empty) → b8575937-2814-458b-a167-8c29ca456c11
target_node_id (empty) → aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create Building Beautiful UIs with Ruby A Rails-Native Approach → about → MERN Stack
context (empty) → Origin story: migrating Statesert off the MERN stack.
relation (empty) → about
source_node_id (empty) → b8575937-2814-458b-a167-8c29ca456c11
target_node_id (empty) → 4cd9262e-8c3a-4f25-86d3-5f3020db6052
create Building Beautiful UIs with Ruby A Rails-Native Approach → about → Accordion of Complexity
context (empty) → Joel Drapper presents Phlex's accordion-of-complexity for a table component.
relation (empty) → about
source_node_id (empty) → b8575937-2814-458b-a167-8c29ca456c11
target_node_id (empty) → fb07dfa3-8cc3-4771-9946-54c856e9f78d
create MERN Stack → related_to → Express.js
context (empty) → The 'E' of the MERN stack.
relation (empty) → related_to
source_node_id (empty) → 4cd9262e-8c3a-4f25-86d3-5f3020db6052
target_node_id (empty) → 435384fc-f0bc-4539-918a-0d9896d5a23b
create MERN Stack → related_to → React
context (empty) → The 'R' of the MERN stack.
relation (empty) → related_to
source_node_id (empty) → 4cd9262e-8c3a-4f25-86d3-5f3020db6052
target_node_id (empty) → 5026a4fc-0c6e-49d7-bb7d-29be23b72b24
create MERN Stack → related_to → Node.js
context (empty) → The 'N' of the MERN stack.
relation (empty) → related_to
source_node_id (empty) → 4cd9262e-8c3a-4f25-86d3-5f3020db6052
target_node_id (empty) → 9aeec77e-7dee-4054-85fe-541434a0d272
create Ruby UI → related_to → shadcn/ui
context (empty) → Ruby UI adapts shadcn/ui's copy-paste/CLI-ejection model to the Phlex+Ruby world.
relation (empty) → related_to
source_node_id (empty) → 7641be31-d6e5-4647-b2d4-a0075d2f66ad
target_node_id (empty) → 98f802ea-0535-4c58-8a89-f31d1ed8d323
create Phlex → related_to → Turbo
context (empty) → Phlex implements Rails' renderable interface so all Turbo helpers work; experimental support for frame-scoped selecti...
relation (empty) → related_to
source_node_id (empty) → 6bb19a01-47fc-4521-83c9-874cd58c606a
target_node_id (empty) → 0071d9d0-23d6-4880-af20-5c3369e78423
create Phlex → related_to → ViewComponent
context (empty) → ViewComponent team pioneered the 'renderable' abstraction that Phlex implements to get Turbo interop for free.
relation (empty) → related_to
source_node_id (empty) → 6bb19a01-47fc-4521-83c9-874cd58c606a
target_node_id (empty) → aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create Phlex is only faster than ERB at scale → from_talk → Building Beautiful UIs with Ruby A Rails-Native Approach
context (empty) → Joel Drapper's on-stage correction of a well-known Phlex-vs-ERB benchmark.
relation (empty) → from_talk
source_node_id (empty) → 2b7d605a-755a-43ce-921b-43814030689f
target_node_id (empty) → b8575937-2814-458b-a167-8c29ca456c11
create Phlex is only faster than ERB at scale → about → Phlex
context (empty) → Concerns the performance characteristics of Phlex vs ActionView/ERB.
relation (empty) → about
source_node_id (empty) → 2b7d605a-755a-43ce-921b-43814030689f
target_node_id (empty) → 6bb19a01-47fc-4521-83c9-874cd58c606a
create Phlex is only faster than ERB at scale → about → Partial Rendering Overhead
context (empty) → Phlex's advantage grows with the number of partials/components because ActionView partial lookup dominates.
relation (empty) → about
source_node_id (empty) → 2b7d605a-755a-43ce-921b-43814030689f
target_node_id (empty) → 41125b40-39b1-4cc2-ac91-6245659c7667
create One file rules them all → from_talk → Building Beautiful UIs with Ruby A Rails-Native Approach
context (empty) → Seth's reason for preferring Phlex over ViewComponent.
relation (empty) → from_talk
source_node_id (empty) → a3b61087-ac59-49fe-828f-8bf8c45dcbbf
target_node_id (empty) → b8575937-2814-458b-a167-8c29ca456c11
create One file rules them all → about → Phlex
context (empty) → Describes Phlex's single-file component style.
relation (empty) → about
source_node_id (empty) → a3b61087-ac59-49fe-828f-8bf8c45dcbbf
target_node_id (empty) → 6bb19a01-47fc-4521-83c9-874cd58c606a
create Prefer atomic components over slots → from_talk → Building Beautiful UIs with Ruby A Rails-Native Approach
context (empty) → Articulated in Q&A on why Ruby UI doesn't adopt slots.
relation (empty) → from_talk
source_node_id (empty) → 02d46291-a913-4fde-9fb0-80eacd447506
target_node_id (empty) → b8575937-2814-458b-a167-8c29ca456c11
create Prefer atomic components over slots → about → Ruby UI
context (empty) → Ruby UI's core API design choice.
relation (empty) → about
source_node_id (empty) → 02d46291-a913-4fde-9fb0-80eacd447506
target_node_id (empty) → 7641be31-d6e5-4647-b2d4-a0075d2f66ad
create Prefer atomic components over slots → about → ViewComponent Slots
context (empty) → Explicit counterpoint — avoids the slots approach used by ViewComponent.
relation (empty) → about
source_node_id (empty) → 02d46291-a913-4fde-9fb0-80eacd447506
target_node_id (empty) → 8bc10077-07ca-4096-b040-6d648cb8d66a
create How does Phlex integrate with Turbo? → asked_at → Building Beautiful UIs with Ruby A Rails-Native Approach
context (empty) → Audience Q&A question.
relation (empty) → asked_at
source_node_id (empty) → 1f907bd1-70b2-479c-a6d9-e6496ca394b2
target_node_id (empty) → b8575937-2814-458b-a167-8c29ca456c11
create How does Phlex integrate with Turbo? → about → Phlex
context (empty) → Topic: Phlex behavior in the Turbo ecosystem.
relation (empty) → about
source_node_id (empty) → 1f907bd1-70b2-479c-a6d9-e6496ca394b2
target_node_id (empty) → 6bb19a01-47fc-4521-83c9-874cd58c606a
create How does Phlex integrate with Turbo? → about → Turbo
context (empty) → Topic: Turbo integration.
relation (empty) → about
source_node_id (empty) → 1f907bd1-70b2-479c-a6d9-e6496ca394b2
target_node_id (empty) → 0071d9d0-23d6-4880-af20-5c3369e78423
create How does Phlex integrate with Turbo? → about → Turbo Frames
context (empty) → Selective-rendering feature can render only the requested Turbo Frame.
relation (empty) → about
source_node_id (empty) → 1f907bd1-70b2-479c-a6d9-e6496ca394b2
target_node_id (empty) → 5aa85333-18b5-41a5-b233-a4d142706977
create Why does Ruby UI avoid slots? → asked_at → Building Beautiful UIs with Ruby A Rails-Native Approach
context (empty) → Audience Q&A.
relation (empty) → asked_at
source_node_id (empty) → a8d091e1-cdf5-4dad-a9e7-151e586c53c4
target_node_id (empty) → b8575937-2814-458b-a167-8c29ca456c11
create Why does Ruby UI avoid slots? → about → Ruby UI
context (empty) → About Ruby UI's API philosophy.
relation (empty) → about
source_node_id (empty) → a8d091e1-cdf5-4dad-a9e7-151e586c53c4
target_node_id (empty) → 7641be31-d6e5-4647-b2d4-a0075d2f66ad
create Why does Ruby UI avoid slots? → about → ViewComponent Slots
context (empty) → Contrasts with the slots pattern used by ViewComponent.
relation (empty) → about
source_node_id (empty) → a8d091e1-cdf5-4dad-a9e7-151e586c53c4
target_node_id (empty) → 8bc10077-07ca-4096-b040-6d648cb8d66a
create How do pure front-end developers react to Ruby views? → asked_at → Building Beautiful UIs with Ruby A Rails-Native Approach
context (empty) → Audience Q&A.
relation (empty) → asked_at
source_node_id (empty) → 856b55f7-a949-4cdf-9f11-09c85de6139c
target_node_id (empty) → b8575937-2814-458b-a167-8c29ca456c11
create How do pure front-end developers react to Ruby views? → about → Phlex
context (empty) → Developer-experience / error-message behavior of Phlex.
relation (empty) → about
source_node_id (empty) → 856b55f7-a949-4cdf-9f11-09c85de6139c
target_node_id (empty) → 6bb19a01-47fc-4521-83c9-874cd58c606a
create How does Ruby UI integrate with CSS and JavaScript? → asked_at → Building Beautiful UIs with Ruby A Rails-Native Approach
context (empty) → Audience Q&A.
relation (empty) → asked_at
source_node_id (empty) → 186e3eb9-7b9c-4110-ae87-0678d0c64760
target_node_id (empty) → b8575937-2814-458b-a167-8c29ca456c11
create How does Ruby UI integrate with CSS and JavaScript? → about → Ruby UI
context (empty) → Covers Ruby UI's dependencies on Tailwind, Stimulus and floating-ui.
relation (empty) → about
source_node_id (empty) → 186e3eb9-7b9c-4110-ae87-0678d0c64760
target_node_id (empty) → 7641be31-d6e5-4647-b2d4-a0075d2f66ad
create How does Ruby UI integrate with CSS and JavaScript? → about → Tailwind CSS
context (empty) → Ruby UI copies over a Tailwind configuration into the host app.
relation (empty) → about
source_node_id (empty) → 186e3eb9-7b9c-4110-ae87-0678d0c64760
target_node_id (empty) → ec73c2f6-5a41-41a5-8bc3-17addcf6fa0f
create How does Ruby UI integrate with CSS and JavaScript? → about → Stimulus
context (empty) → Ruby UI currently uses Stimulus controllers for component behavior.
relation (empty) → about
source_node_id (empty) → 186e3eb9-7b9c-4110-ae87-0678d0c64760
target_node_id (empty) → 87cb1332-bd03-4cc9-a0b1-c8c83aae8051
create How do you test rendered Phlex components? → asked_at → Building Beautiful UIs with Ruby A Rails-Native Approach
context (empty) → Audience Q&A on testing Phlex-rendered UI.
relation (empty) → asked_at
source_node_id (empty) → ae35dd6e-a29e-4549-845e-91a487186202
target_node_id (empty) → b8575937-2814-458b-a167-8c29ca456c11
create How do you test rendered Phlex components? → about → Phlex
context (empty) → Testing story for Phlex.
relation (empty) → about
source_node_id (empty) → ae35dd6e-a29e-4549-845e-91a487186202
target_node_id (empty) → 6bb19a01-47fc-4521-83c9-874cd58c606a
create Seth Horsley → recommends → Phlex
context (empty) → Recommends Phlex over ERB/ActionView and ViewComponent for Rails view layers.
relation (empty) → recommends
source_node_id (empty) → bb9d1de8-88ba-4492-bfb3-4944b512b5ec
target_node_id (empty) → 6bb19a01-47fc-4521-83c9-874cd58c606a
create Seth Horsley → recommends → Ruby UI
context (empty) → Promotes Ruby UI as a Phlex-based component library throughout the talk.
relation (empty) → recommends
source_node_id (empty) → bb9d1de8-88ba-4492-bfb3-4944b512b5ec
target_node_id (empty) → 7641be31-d6e5-4647-b2d4-a0075d2f66ad

Read set

128 nodes

takeaway Read the Ruby standard library search_nodes tool Phlex search_nodes tool Lookbook search_nodes tool ViewComponent search_nodes tool Deface search_nodes concept Partial Rendering Overhead search_nodes talk Extracting logic from templates with Hanami Views search_nodes tool Cells search_nodes tool acts_as_api search_nodes talk Better ActiveRecord IRB Output Gem Lightning Talk search_nodes tool TTY toolkit search_nodes tool Active Admin search_nodes talk Building Beautiful UIs with Ruby A Rails-Native Approach search_nodes+get_node_edges talk Component Driven UI with ViewComponent search_nodes talk Building Rails SPAs in Frontend Ruby with Glimmer DSL for Web search_nodes tool React Native search_nodes tool Ember.js search_nodes person Seth Horsley search_nodes+get_node_edges tool ChatGPT search_nodes takeaway Name Things To Find Their Properties search_nodes concept AI Agent search_nodes concept Retrieval Augmented Generation search_nodes tool langchainrb search_nodes company SpaceX search_nodes concept xkcd Dependency / Nebraska Problem search_nodes concept GraphQL max_depth search_nodes tool Speaker Deck search_nodes person Joel Drapper search_nodes tool RealtimeBoard search_nodes concept Prompt Alchemy search_nodes takeaway ViewComponent Checklist search_nodes concept ViewComponent Slots search_nodes concept Builder Pattern for ViewComponents search_nodes question Do you unit test ViewComponents? search_nodes question How do you test ViewComponents and Hotwire flows? search_nodes takeaway Use generic and object-specific ViewComponents together search_nodes tool Ruby on Rails search_nodes concept Cynefin Framework search_nodes event Rails World search_nodes project monolith framework search_nodes resource Woman on Rails search_nodes tool Rack search_nodes tool merb search_nodes takeaway Ruby as a Data Management Language search_nodes tool Discourse search_nodes tool Hotwire search_nodes tool Turbo search_nodes tool Turbo Native search_nodes question What licenses do Turbo Native libraries use? search_nodes tool Turbo Drive search_nodes tool Turbo Laravel search_nodes tool Turbo Frames search_nodes tool Turbo Streams search_nodes tool Strada search_nodes tool Tailwind CSS search_nodes tool cssbundling-rails search_nodes concept CSS-in-JS search_nodes takeaway Adopt CSS-in-JS for modern component-based frontends search_nodes tool Next.js search_nodes tool Preact search_nodes takeaway Don't Start a Design System from Button Components search_nodes tool Webpacker search_nodes tool Stimulus search_nodes question Have you heard of Stimulus? search_nodes tool StimulusReflex search_nodes tool htmx search_nodes takeaway Turbo Frames, Turbo Streams and Stimulus can be used independently search_nodes tool Jumpstart Pro search_nodes tool core-js search_nodes tool Relay search_nodes tool React search_nodes event wroclove.rb 2025 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2018 search_nodes talk Performance Panel wroclove.rb 2024 search_nodes talk It is not so bad, after all search_nodes talk Rewrite with confidence search_nodes person Stephen Margheim search_nodes person Stephen Wolfram search_nodes project Check search_nodes concept UI Component vs Domain Component Split search_nodes concept Optimistic UI search_nodes concept Vector Database search_nodes concept Database Indexes search_nodes question NoSQL vs Postgres for an event store search_nodes tool Metabase search_nodes tool CockroachDB search_nodes tool Litestream search_nodes tool pganalyze search_nodes tool MySQL search_nodes tool MessageDB search_nodes talk Fantastic Databases and Where to Find Them search_nodes concept respond_to Anti-Pattern search_nodes question Is rendering from cached pages with server-side includes possible in Rails? search_nodes tool PagerDuty search_nodes company Anthropic search_nodes company ThoughtWorks search_nodes project Nerds and Threads search_nodes tool Stripe search_nodes company Microsoft search_nodes tool Apollo GraphQL Platform search_nodes tool Apollo GraphQL search_nodes tool GraphQL search_nodes tool Node.js search_nodes tool Fulcro search_nodes tool MobX search_nodes concept esbuild Pipeline search_nodes tool Electron search_nodes tool PostgreSQL search_nodes resource Postgres for Everything search_nodes tool PgBouncer search_nodes talk From PostgreSQL to SQLite in Rails search_nodes concept EXPLAIN / EXPLAIN ANALYZE search_nodes tool Citus search_nodes tool PgHero search_nodes question Is starting with SQLite a lock-in if I later need Postgres? search_nodes takeaway Learn to Read EXPLAIN search_nodes tool SQLite search_nodes tool DBM / SDBM / GDBM search_nodes concept Pre-Compile Engine Assets at Build Time search_nodes tool Standard RB search_nodes concept Rails Engine search_nodes tool Distributed Ruby search_nodes tool rbspy search_nodes

2 edges