← Extractions

Component Driven UI with ViewComponent — Radoslav Stankov at wroclove.rb 2024

Radoslav Stankov walks through how he uses the ViewComponent gem to structure a Rails-only front end for his Angry Building ERP side project. He shares a practical checklist for when to reach for ViewComponents vs partials/helpers, and dissects real code for stats, filter form, page header, and table components — including slots, builder patterns, i18n helpers, and smoke-testing components via Lookbook previews.

Model
claude-opus-4-7
Ingestion
f0af4dd8
Input tokens
299,821
fresh
206,224
cached
80,226
cache write
13,371
Output tokens
11,080
Duration
169.0s
Roundtrips
7
Tool calls
23
Cost
$0.00
Nodes/edges extracted
20 / 49
Read set (nodes/edges)
147 / 2

Nodes (20)

update Radoslav Stankov person
attrs (empty) → {"country" => "Bulgaria", "newsletter" => "tips.rstankov.com"}
description Conference speaker. → Bulgarian software engineer. Former CTO of Product Hunt, where he worked with a Rails backend + GraphQL + Apollo + Ne...
short_description Conference speaker. → Bulgarian Rails developer, former CTO of Product Hunt, author of the tips.rstankov.com newsletter.
update Component Driven UI with ViewComponent talk
attrs {"type" => "talk"} → {"date" => "2024-03-22", "type" => "talk"}
description Talk at wroclove.rb 2024. → Talk at wroclove.rb 2024 by Radoslav Stankov. Walks through how he structures the front end of his Angry Building ERP...
short_description Talk at wroclove.rb 2024. → Radoslav Stankov's wroclove.rb 2024 talk on structuring Rails front-ends with ViewComponent.
create Angry Building project
kind (empty) → project
name (empty) → Angry Building
slug (empty) → angry-building
attrs (empty) → {"domain" => "facility management / ERP", "status" => "active"}
description (empty) → ERP-style facility-management system Radoslav Stankov started as a weekend side project while CTO at Product Hunt. St...
short_description (empty) → Rails ERP system for facility management, built as Radoslav Stankov's side project.
create Product Hunt company
kind (empty) → company
name (empty) → Product Hunt
slug (empty) → product-hunt
attrs (empty) → {"industry" => "product discovery / media"}
description (empty) → Product-discovery platform. Radoslav Stankov was its CTO; during that time the stack was a Rails backend with a Graph...
short_description (empty) → Product-discovery platform where Radoslav Stankov was CTO.
create tips.rstankov.com resource
kind (empty) → resource
name (empty) → tips.rstankov.com
slug (empty) → tips-rstankov-com
attrs (empty) → {"url" => "tips.rstankov.com", "type" => "blog-post"}
description (empty) → Newsletter by Radoslav Stankov at tips.rstankov.com where he shares developer tips.
short_description (empty) → Radoslav Stankov's developer tips newsletter.
create Speaker Deck tool
kind (empty) → tool
name (empty) → Speaker Deck
slug (empty) → speaker-deck
attrs (empty) → {"category" => "service"}
description (empty) → Online slide-hosting service. Radoslav Stankov uploads his wroclove.rb 2024 slides there in advance because he tends ...
short_description (empty) → Online service for hosting and sharing presentation slides.
create Lookbook tool
kind (empty) → tool
name (empty) → Lookbook
slug (empty) → lookbook
attrs (empty) → {"category" => "library", "ecosystem" => "Rails"}
description (empty) → Ruby on Rails gem that layers on top of ViewComponent's preview feature to give a browsable UI for all components and...
short_description (empty) → Rails gem providing a browsable UI for ViewComponent previews.
create Capybara tool
kind (empty) → tool
name (empty) → Capybara
slug (empty) → capybara
attrs (empty) → {"category" => "library", "language" => "Ruby"}
description (empty) → Ruby acceptance-test library. Used by Radoslav Stankov for end-to-end tests of his Angry Building ERP, and for smoke-...
short_description (empty) → Ruby acceptance-test framework simulating user interactions in a browser.
update ViewComponent tool
description Ruby on Rails gem for building reusable, testable view components as objects with a .rb file (parameters, variants, v... → Ruby on Rails gem released by GitHub for building reusable, testable view components. Each component is a Ruby class ...
create UI Component vs Domain Component Split concept
kind (empty) → concept
name (empty) → UI Component vs Domain Component Split
slug (empty) → ui-component-vs-domain-component-split
attrs (empty) → {"category" => "pattern"}
description (empty) → Mental model Radoslav Stankov borrows from his React experience and applies to ViewComponent. Layer your components i...
short_description (empty) → Layer components into generic UI ones and object-aware domain ones that compose them.
create ViewComponent Slots concept
kind (empty) → concept
name (empty) → ViewComponent Slots
slug (empty) → viewcomponent-slots
attrs (empty) → {"category" => "pattern"}
description (empty) → ViewComponent feature analogous to Web-component slots or React children: a component declares named 'holes' (renders...
short_description (empty) → ViewComponent feature exposing named content holes filled by callers (render_one / render_many).
create Builder Pattern for ViewComponents concept
kind (empty) → concept
name (empty) → Builder Pattern for ViewComponents
slug (empty) → builder-pattern-for-viewcomponents
attrs (empty) → {"category" => "pattern"}
description (empty) → Pattern Radoslav Stankov uses for his filter_form component, implemented before he discovered ViewComponent slots. Th...
short_description (empty) → Expose a component's configuration as DSL methods on a yielded builder object.
create Fetch With Fallback concept
kind (empty) → concept
name (empty) → Fetch With Fallback
slug (empty) → fetch-with-fallback
attrs (empty) → {"category" => "practice"}
description (empty) → Defensive helper Radoslav Stankov uses in Angry Building's application component layer. Given a value and a lookup ta...
short_description (empty) → Raise in dev/test but silently fall back with reported error in production for unknown values.
create Isolate Messy HTML Rather Than Fix Prematurely takeaway
kind (empty) → takeaway
name (empty) → Isolate Messy HTML Rather Than Fix Prematurely
slug (empty) → isolate-messy-html-rather-than-fix-prematurely
attrs (empty) → {"type" => "lesson-learned"}
description (empty) → Radoslav Stankov's philosophy: don't extract ViewComponents from messy HTML just to make it clean. Keep the mess isol...
short_description (empty) → Keep messy code contained on one page until you have a better idea; don't over-extract.
create Don't Start a Design System from Button Components takeaway
kind (empty) → takeaway
name (empty) → Don't Start a Design System from Button Components
slug (empty) → don-t-start-a-design-system-from-button-components
attrs (empty) → {"type" => "recommendation"}
description (empty) → Friendly advice from Radoslav Stankov: when building a new UI/design system, leave the button component for last. But...
short_description (empty) → Buttons are the most varied, most opinionated component — extract them last.
create ViewComponent Checklist takeaway
kind (empty) → takeaway
name (empty) → ViewComponent Checklist
slug (empty) → viewcomponent-checklist
attrs (empty) → {"type" => "recommendation"}
description (empty) → Use a ViewComponent when: code is shared between two controllers; a view helper is generating more than ~2–3 lines of...
short_description (empty) → Radoslav Stankov's criteria for when to use a ViewComponent vs a partial or helper.
create Smoke Test ViewComponents via Lookbook Previews takeaway
kind (empty) → takeaway
name (empty) → Smoke Test ViewComponents via Lookbook Previews
slug (empty) → smoke-test-viewcomponents-via-lookbook-previews
attrs (empty) → {"type" => "recommendation"}
description (empty) → Radoslav Stankov's testing strategy for ViewComponents: don't unit-test them individually. Instead, write one Capybar...
short_description (empty) → Use Capybara to visit every Lookbook preview; rely on end-to-end tests for business logic.
create Choose Frontend Stack Based on Product Constraints takeaway
kind (empty) → takeaway
name (empty) → Choose Frontend Stack Based on Product Constraints
slug (empty) → choose-frontend-stack-based-on-product-constraints
attrs (empty) → {"type" => "insight"}
description (empty) → Radoslav Stankov's answer to the React comparison question: ViewComponent and React are different value propositions....
short_description (empty) → View components for Rails monoliths, React/React Native when the product needs it — each is a trade-off.
create Experience with React comparison question question
kind (empty) → question
name (empty) → Experience with React comparison question
slug (empty) → experience-with-react-comparison-question
attrs (empty) → {"answer_summary" => "Different value propositions — ViewComponent fits Rails-centric B2B ERPs; React/Next.js fit B2C...
description (empty) → Audience asks Radoslav Stankov about his React experience and how ViewComponent compares. Answer: he has plenty of Re...
short_description (empty) → Audience question comparing ViewComponent with React and asking for Stankov's feelings.
create Do you unit test ViewComponents? question
kind (empty) → question
name (empty) → Do you unit test ViewComponents?
slug (empty) → do-you-unit-test-viewcomponents
attrs (empty) → {"answer_summary" => "No unit tests; Capybara smoke tests over Lookbook previews plus end-to-end business tests."}
description (empty) → Audience asks whether Radoslav Stankov writes unit tests for ViewComponents, given that testability is often cited as...
short_description (empty) → Audience question on whether Stankov heavily unit-tests ViewComponents.

Edges (49)

update Radoslav Stankov → authored → Component Driven UI with ViewComponent
context (empty) → Speaker and author of this wroclove.rb 2024 talk.
update Component Driven UI with ViewComponent → presented_at → wroclove.rb 2024
context (empty) → Talk delivered at wroclove.rb 2024 on 2024-03-22.
create Radoslav Stankov → attended → wroclove.rb 2024
context (empty) → Attended as a speaker.
relation (empty) → attended
source_node_id (empty) → 69cb744b-77f2-438a-9a32-5a6acaa40385
target_node_id (empty) → 748e0524-a102-41d4-97dc-575881583d91
create Radoslav Stankov → works_at → Product Hunt
attrs (empty) → {"role" => "former CTO"}
context (empty) → Former CTO of Product Hunt.
relation (empty) → works_at
source_node_id (empty) → 69cb744b-77f2-438a-9a32-5a6acaa40385
target_node_id (empty) → ce572b82-bb6e-4e89-9e21-c574d6c933f1
create Product Hunt → uses → Next.js
context (empty) → Next.js was the front end at Product Hunt.
relation (empty) → uses
source_node_id (empty) → ce572b82-bb6e-4e89-9e21-c574d6c933f1
target_node_id (empty) → 3c364ae0-0e7e-4fbc-b2b6-3f4bd983fc17
create Product Hunt → uses → React
context (empty) → Next.js-based React front end.
relation (empty) → uses
source_node_id (empty) → ce572b82-bb6e-4e89-9e21-c574d6c933f1
target_node_id (empty) → 5026a4fc-0c6e-49d7-bb7d-29be23b72b24
create Radoslav Stankov → uses → Speaker Deck
context (empty) → Uploads slides to Speaker Deck in advance of talks.
relation (empty) → uses
source_node_id (empty) → 69cb744b-77f2-438a-9a32-5a6acaa40385
target_node_id (empty) → 75a6d0ab-be63-41d1-ac5a-144fe9002a08
create Radoslav Stankov → has_skill → ViewComponent
attrs (empty) → {"level" => "expert"}
context (empty) → Deep, opinionated practical experience with ViewComponent in production.
relation (empty) → has_skill
source_node_id (empty) → 69cb744b-77f2-438a-9a32-5a6acaa40385
target_node_id (empty) → aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create Radoslav Stankov → works_on → Angry Building
attrs (empty) → {"role" => "creator"}
context (empty) → Created Angry Building as a weekend side project while at Product Hunt.
relation (empty) → works_on
source_node_id (empty) → 69cb744b-77f2-438a-9a32-5a6acaa40385
target_node_id (empty) → bf511ffe-9f4e-47ce-af33-37f8431f7163
create Radoslav Stankov → authored → tips.rstankov.com
context (empty) → Runs this newsletter.
relation (empty) → authored
source_node_id (empty) → 69cb744b-77f2-438a-9a32-5a6acaa40385
target_node_id (empty) → adae32c7-eb75-430f-ab73-1b298d051bca
create Component Driven UI with ViewComponent → about → ViewComponent
context (empty) → Central topic of the talk.
relation (empty) → about
source_node_id (empty) → c288601f-6e75-45fe-a084-515c30daa779
target_node_id (empty) → aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create Component Driven UI with ViewComponent → about → Angry Building
context (empty) → All real code examples come from the Angry Building ERP.
relation (empty) → about
source_node_id (empty) → c288601f-6e75-45fe-a084-515c30daa779
target_node_id (empty) → bf511ffe-9f4e-47ce-af33-37f8431f7163
create Component Driven UI with ViewComponent → about → Lookbook
context (empty) → Talk shows how Lookbook surfaces ViewComponent previews and enables smoke testing.
relation (empty) → about
source_node_id (empty) → c288601f-6e75-45fe-a084-515c30daa779
target_node_id (empty) → 5d84789d-16ad-423f-8735-567ed5459fde
create Component Driven UI with ViewComponent → about → UI Component vs Domain Component Split
context (empty) → Stankov explains layering components into UI and domain tiers.
relation (empty) → about
source_node_id (empty) → c288601f-6e75-45fe-a084-515c30daa779
target_node_id (empty) → 5047b8d4-0001-4f82-9d4d-d130672a46b7
create Component Driven UI with ViewComponent → about → ViewComponent Slots
context (empty) → Slots are demoed in stats, page_header, and discussed as an alternative to the builder pattern.
relation (empty) → about
source_node_id (empty) → c288601f-6e75-45fe-a084-515c30daa779
target_node_id (empty) → 8bc10077-07ca-4096-b040-6d648cb8d66a
create Component Driven UI with ViewComponent → about → Builder Pattern for ViewComponents
context (empty) → Filter form component is built as a yielded builder with DSL methods.
relation (empty) → about
source_node_id (empty) → c288601f-6e75-45fe-a084-515c30daa779
target_node_id (empty) → 52eb12c5-0def-46c9-a273-e76592b642d3
create Component Driven UI with ViewComponent → about → Fetch With Fallback
context (empty) → Application component uses this pattern for safe enum/color lookups.
relation (empty) → about
source_node_id (empty) → c288601f-6e75-45fe-a084-515c30daa779
target_node_id (empty) → d50eab76-d826-4581-ad29-30d218e5bbf1
create Angry Building → uses → Ruby on Rails
context (empty) → Angry Building is a Rails application.
relation (empty) → uses
source_node_id (empty) → bf511ffe-9f4e-47ce-af33-37f8431f7163
target_node_id (empty) → 7aac705a-0987-49f2-b665-9d4e08a6acee
create Angry Building → uses → ViewComponent
context (empty) → Front-end is structured entirely around ViewComponent.
relation (empty) → uses
source_node_id (empty) → bf511ffe-9f4e-47ce-af33-37f8431f7163
target_node_id (empty) → aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create Angry Building → uses → Tailwind CSS
context (empty) → Styled with Tailwind instead of hand-rolled CSS.
relation (empty) → uses
source_node_id (empty) → bf511ffe-9f4e-47ce-af33-37f8431f7163
target_node_id (empty) → ec73c2f6-5a41-41a5-8bc3-17addcf6fa0f
create Angry Building → uses → Lookbook
context (empty) → Hosts ViewComponent previews for visual exploration and smoke testing.
relation (empty) → uses
source_node_id (empty) → bf511ffe-9f4e-47ce-af33-37f8431f7163
target_node_id (empty) → 5d84789d-16ad-423f-8735-567ed5459fde
create Angry Building → uses → Capybara
context (empty) → End-to-end and smoke tests (over Lookbook previews) are written with Capybara.
relation (empty) → uses
source_node_id (empty) → bf511ffe-9f4e-47ce-af33-37f8431f7163
target_node_id (empty) → 3322cb95-ef6a-43c0-8814-16c1c1ab7379
create Angry Building → uses → Stimulus
context (empty) → Mentioned as the JS framework components can connect to when JavaScript is needed.
relation (empty) → uses
source_node_id (empty) → bf511ffe-9f4e-47ce-af33-37f8431f7163
target_node_id (empty) → 87cb1332-bd03-4cc9-a0b1-c8c83aae8051
create Angry Building → uses → React Native
context (empty) → Companion mobile app for Angry Building is built in React Native.
relation (empty) → uses
source_node_id (empty) → bf511ffe-9f4e-47ce-af33-37f8431f7163
target_node_id (empty) → 3244aefe-82e6-4dd5-a1f6-ac7e98897b86
create Product Hunt → uses → Ruby on Rails
context (empty) → Rails backend per Stankov's description of the stack.
relation (empty) → uses
source_node_id (empty) → ce572b82-bb6e-4e89-9e21-c574d6c933f1
target_node_id (empty) → 7aac705a-0987-49f2-b665-9d4e08a6acee
create Product Hunt → uses → GraphQL
context (empty) → GraphQL layer connected the Rails backend to the front end.
relation (empty) → uses
source_node_id (empty) → ce572b82-bb6e-4e89-9e21-c574d6c933f1
target_node_id (empty) → c6a1041c-3116-4194-b7f0-eba7cd4a7e64
create Product Hunt → uses → Apollo GraphQL
context (empty) → Apollo sat between GraphQL and the Next.js front end.
relation (empty) → uses
source_node_id (empty) → ce572b82-bb6e-4e89-9e21-c574d6c933f1
target_node_id (empty) → cebd5aab-3634-4afe-b0a8-ba8fb96ddffc
create Radoslav Stankov → has_skill → Ruby on Rails
attrs (empty) → {"level" => "expert"}
context (empty) → Self-describes as 'really good with' Rails.
relation (empty) → has_skill
source_node_id (empty) → 69cb744b-77f2-438a-9a32-5a6acaa40385
target_node_id (empty) → 7aac705a-0987-49f2-b665-9d4e08a6acee
create Radoslav Stankov → has_skill → React
attrs (empty) → {"level" => "expert"}
context (empty) → 'Plenty of experience with React' including at Product Hunt.
relation (empty) → has_skill
source_node_id (empty) → 69cb744b-77f2-438a-9a32-5a6acaa40385
target_node_id (empty) → 5026a4fc-0c6e-49d7-bb7d-29be23b72b24
create Lookbook → related_to → ViewComponent
context (empty) → Lookbook builds on ViewComponent's preview feature.
relation (empty) → related_to
source_node_id (empty) → 5d84789d-16ad-423f-8735-567ed5459fde
target_node_id (empty) → aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create ViewComponent Slots → related_to → ViewComponent
context (empty) → Slots are a feature of ViewComponent.
relation (empty) → related_to
source_node_id (empty) → 8bc10077-07ca-4096-b040-6d648cb8d66a
target_node_id (empty) → aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create Builder Pattern for ViewComponents → related_to → ViewComponent
context (empty) → Pattern applied inside ViewComponent classes, predating slots adoption.
relation (empty) → related_to
source_node_id (empty) → 52eb12c5-0def-46c9-a273-e76592b642d3
target_node_id (empty) → aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create UI Component vs Domain Component Split → related_to → React
context (empty) → Concept Stankov borrows from his React practice and applies to ViewComponents.
relation (empty) → related_to
source_node_id (empty) → 5047b8d4-0001-4f82-9d4d-d130672a46b7
target_node_id (empty) → 5026a4fc-0c6e-49d7-bb7d-29be23b72b24
create ViewComponent Checklist → from_talk → Component Driven UI with ViewComponent
context (empty) → Checklist explicitly presented during the talk.
relation (empty) → from_talk
source_node_id (empty) → 5dd689c4-ae31-46a3-bbcf-7d6057d7942c
target_node_id (empty) → c288601f-6e75-45fe-a084-515c30daa779
create ViewComponent Checklist → about → ViewComponent
context (empty) → Criteria for deciding when a piece of UI becomes a ViewComponent.
relation (empty) → about
source_node_id (empty) → 5dd689c4-ae31-46a3-bbcf-7d6057d7942c
target_node_id (empty) → aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create Isolate Messy HTML Rather Than Fix Prematurely → from_talk → Component Driven UI with ViewComponent
context (empty) → Stated in the talk as Stankov's personal philosophy.
relation (empty) → from_talk
source_node_id (empty) → 77ecb987-79bc-4e98-945a-828cf09ef850
target_node_id (empty) → c288601f-6e75-45fe-a084-515c30daa779
create Don't Start a Design System from Button Components → from_talk → Component Driven UI with ViewComponent
context (empty) → Friendly advice during the table/button discussion.
relation (empty) → from_talk
source_node_id (empty) → c84b76ca-61d7-4f58-a5a9-884e6343fce7
target_node_id (empty) → c288601f-6e75-45fe-a084-515c30daa779
create Smoke Test ViewComponents via Lookbook Previews → from_talk → Component Driven UI with ViewComponent
context (empty) → Testing approach explained in Q&A.
relation (empty) → from_talk
source_node_id (empty) → 0b480b41-08b9-4efd-96af-15464cacf50a
target_node_id (empty) → c288601f-6e75-45fe-a084-515c30daa779
create Smoke Test ViewComponents via Lookbook Previews → about → Lookbook
context (empty) → Strategy leverages Lookbook preview pages.
relation (empty) → about
source_node_id (empty) → 0b480b41-08b9-4efd-96af-15464cacf50a
target_node_id (empty) → 5d84789d-16ad-423f-8735-567ed5459fde
create Smoke Test ViewComponents via Lookbook Previews → about → Capybara
context (empty) → Uses Capybara to drive preview-page visits.
relation (empty) → about
source_node_id (empty) → 0b480b41-08b9-4efd-96af-15464cacf50a
target_node_id (empty) → 3322cb95-ef6a-43c0-8814-16c1c1ab7379
create Choose Frontend Stack Based on Product Constraints → from_talk → Component Driven UI with ViewComponent
context (empty) → Key point from the React-comparison Q&A.
relation (empty) → from_talk
source_node_id (empty) → 6751e16e-ab5b-4de7-b3f3-2742d7d7fffb
target_node_id (empty) → c288601f-6e75-45fe-a084-515c30daa779
create Experience with React comparison question → asked_at → Component Driven UI with ViewComponent
context (empty) → First audience question during Q&A.
relation (empty) → asked_at
source_node_id (empty) → 7b8fb7de-7d4b-4fd5-96eb-6e5c5345dd78
target_node_id (empty) → c288601f-6e75-45fe-a084-515c30daa779
create Experience with React comparison question → about → React
context (empty) → Asks about React vs ViewComponent.
relation (empty) → about
source_node_id (empty) → 7b8fb7de-7d4b-4fd5-96eb-6e5c5345dd78
target_node_id (empty) → 5026a4fc-0c6e-49d7-bb7d-29be23b72b24
create Experience with React comparison question → about → ViewComponent
context (empty) → Compares the two approaches.
relation (empty) → about
source_node_id (empty) → 7b8fb7de-7d4b-4fd5-96eb-6e5c5345dd78
target_node_id (empty) → aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create Do you unit test ViewComponents? → asked_at → Component Driven UI with ViewComponent
context (empty) → Second audience question during Q&A.
relation (empty) → asked_at
source_node_id (empty) → 828a2860-61f7-4c79-9ccb-79c6653a8e2f
target_node_id (empty) → c288601f-6e75-45fe-a084-515c30daa779
create Do you unit test ViewComponents? → about → ViewComponent
context (empty) → Asks about testability of ViewComponents.
relation (empty) → about
source_node_id (empty) → 828a2860-61f7-4c79-9ccb-79c6653a8e2f
target_node_id (empty) → aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create Do you unit test ViewComponents? → about → Lookbook
context (empty) → Answer centers on smoke testing Lookbook previews.
relation (empty) → about
source_node_id (empty) → 828a2860-61f7-4c79-9ccb-79c6653a8e2f
target_node_id (empty) → 5d84789d-16ad-423f-8735-567ed5459fde
create Radoslav Stankov → recommends → ViewComponent
context (empty) → Entire talk advocates structuring Rails front-ends around ViewComponent.
relation (empty) → recommends
source_node_id (empty) → 69cb744b-77f2-438a-9a32-5a6acaa40385
target_node_id (empty) → aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create Radoslav Stankov → recommends → Lookbook
context (empty) → Recommends Lookbook for browsing previews and smoke testing.
relation (empty) → recommends
source_node_id (empty) → 69cb744b-77f2-438a-9a32-5a6acaa40385
target_node_id (empty) → 5d84789d-16ad-423f-8735-567ed5459fde

Read set

147 nodes

person Radoslav Stankov search_nodes+get_node_edges project Check search_nodes project Ruby Romania search_nodes tool Preact search_nodes question What licenses do Turbo Native libraries use? search_nodes concept Tree Shaking search_nodes tool Stimulus search_nodes concept Cynefin Framework search_nodes question Have you heard of Stimulus? search_nodes project monolith framework search_nodes tool StimulusReflex search_nodes concept Reform 3 Parsing Pipeline search_nodes tool PagerDuty search_nodes project Trezy search_nodes company Apply4 search_nodes takeaway Prompts as Business Logic search_nodes tool Apartment search_nodes concept Noisy Neighbor Problem search_nodes tool Sync Space VR search_nodes concept Retrieval Augmented Generation search_nodes tool ChatGPT search_nodes takeaway Name Things To Find Their Properties search_nodes tool langchainrb search_nodes concept AI Agent search_nodes tool RealtimeBoard search_nodes concept Vector Database search_nodes tool ViewComponent search_nodes talk Component Driven UI with ViewComponent search_nodes+get_node_edges company GitHub search_nodes tool GitHub Releases search_nodes question How do you test ViewComponents and Hotwire flows? search_nodes tool Cells search_nodes tool Deface search_nodes takeaway Use generic and object-specific ViewComponents together search_nodes tool GitHub Actions search_nodes tool Jekyll search_nodes tool Ruby on Rails search_nodes tool Ruby search_nodes event Rails World search_nodes resource Woman on Rails search_nodes tool Rails 5.2 search_nodes takeaway Ruby as a Data Management Language search_nodes tool ruby-openai search_nodes tool Active Admin search_nodes project logux-rails search_nodes resource Painless Rails search_nodes tool cssbundling-rails search_nodes talk No-build Utopia: Modern User Experiences with Rails & Web Standards search_nodes resource The Rails and Hotwire Codex search_nodes tool Webpacker search_nodes project Rails World Website search_nodes talk Better WebPerformance with Rails search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2025 search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2018 search_nodes talk Performance Panel wroclove.rb 2024 search_nodes talk Webmock unmocked search_nodes talk Mutation testing workshop wroclove.rb 2019 search_nodes project Nerds and Threads search_nodes resource awesome-ddd search_nodes project Ruby News search_nodes talk Events events events search_nodes takeaway Buy Faster Hardware search_nodes project BBC Sport App search_nodes tool Tailwind CSS 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 Turbo Laravel search_nodes tool Ember.js search_nodes tool Hotwire search_nodes tool htmx search_nodes takeaway Turbo Frames, Turbo Streams and Stimulus can be used independently search_nodes tool Turbo Streams search_nodes tool React search_nodes tool React Native search_nodes tool Redux search_nodes tool MobX search_nodes tool Elm search_nodes concept Mutation Testing search_nodes takeaway Rails Tests Are Mostly Integration Tests search_nodes concept Time.current Testing Trap search_nodes concept Rails Testing Pyramid (Ivan's version) search_nodes tool parallel_tests search_nodes tool FactoryBot search_nodes concept Fixtures over Factories search_nodes question Do fixtures beat factories? search_nodes tool TestBench search_nodes tool Apollo GraphQL search_nodes tool Apollo GraphQL Platform search_nodes tool GraphQL search_nodes tool graphql-ruby search_nodes concept GraphQL query batching search_nodes tool graphql-batch search_nodes concept Nested GraphQL query bottleneck search_nodes concept GraphQL look_ahead search_nodes concept GraphQL query timeout search_nodes tool graphql-preload search_nodes tool Turbo Native search_nodes talk Native apps are dead, long live native apps search_nodes question How does hybrid compare to React Native after a decade? search_nodes question Is there a generator or scaffold for Turbo Native apps? search_nodes takeaway Use hybrid when your app's core is a server-rendered web app search_nodes concept Web-to-Native Bridge search_nodes concept Partial Rendering Overhead search_nodes talk Extracting logic from templates with Hanami Views search_nodes tool Glimmer search_nodes tool Phlex search_nodes question Is rendering from cached pages with server-side includes possible in Rails? search_nodes tool jsbundling-rails search_nodes tool merb search_nodes concept Optimistic UI search_nodes concept Stalling For Time search_nodes concept Sometimes Nothing Is Enough search_nodes concept Embrace The Evented Model search_nodes concept Command Form search_nodes question Does per-field validation blow up UI complexity? search_nodes concept Task-Driven UI search_nodes concept Saga Pattern search_nodes concept Immutable Form Runtime API search_nodes concept Form Object search_nodes tool Reform search_nodes takeaway Form objects must not save search_nodes question What does the application do? search_nodes tool Bootsnap search_nodes talk Better ActiveRecord IRB Output Gem Lightning Talk search_nodes tool Active Storage search_nodes tool acts_as_api search_nodes takeaway Use Logux for optimistic UI with Rails search_nodes tool Ruby Browser Detection Gem search_nodes takeaway Share Browser-Support Config Across Front-End And Back-End search_nodes tool test-prof search_nodes tool knapsack_pro search_nodes concept Ruby Module Customization Mechanics search_nodes tool interactor search_nodes takeaway Don't Use Interactors search_nodes takeaway Look outside Ruby for better patterns search_nodes concept Service Object search_nodes tool Representable search_nodes concept Refinements search_nodes concept Monkey Patching search_nodes tool Mimic search_nodes talk Offline Sandwich Focus Workflow search_nodes

2 edges