← Extractions

18 months of Hotwire and ViewComponent in production

Yaroslav Shmarov's wroclove.rb 2022 talk recounts 18 months of using Hotwire, ViewComponent, Stimulus, and Tailwind at French startup Bearer to build a modern Rails monolith front-end. He contrasts Hotwire with React for SaaS/B2B vs. B2C mobile, walks through ViewComponent patterns for badges, forms, nested components and testing, and demonstrates Turbo Frames + Streams + Stimulus interactions (async loading, modals, multi-step forms, infinite pagination, dynamic form fields).

Model
claude-opus-4-7
Ingestion
3fe2da67
Input tokens
673,395
fresh
507,762
cached
156,981
cache write
8,652
Output tokens
18,008
Duration
276.3s
Roundtrips
13
Tool calls
29
Cost
$0.00
Nodes/edges extracted
27 / 57
Read set (nodes/edges)
124 / 4

Nodes (27)

create Laravel tool
kind (empty) tool
name (empty) Laravel
slug (empty) laravel
attrs (empty) {"category" => "framework"}
description (empty) PHP web application framework. Mentioned in Yaroslav Shmarov's wroclove.rb 2022 talk as a host for Turbo Laravel, dem...
short_description (empty) PHP web application framework.
create StimulusReflex tool
kind (empty) tool
name (empty) StimulusReflex
slug (empty) stimulusreflex
attrs (empty) {"category" => "library"}
description (empty) Ruby and JavaScript library that builds on Action Cable and Stimulus to deliver reactive, CableReady-driven UIs with ...
short_description (empty) Ruby/JS library extending Action Cable for full server-rendered reactive UIs.
create htmx tool
kind (empty) tool
name (empty) htmx
slug (empty) htmx
attrs (empty) {"category" => "library"}
description (empty) JavaScript library that enables AJAX, CSS transitions, WebSockets and SSE directly from HTML attributes, popular as a...
short_description (empty) JavaScript library enabling server-rendered HTML updates via extended HTML attributes.
update Yaroslav Shmarov person
attrs (empty) {"nationality" => "Ukrainian", "youtube_channel" => "SupeRails"}
description Conference speaker. Ukrainian Ruby on Rails developer from Ukraine who speaks several languages. Active on Twitter, runs the SupeRails Yo...
short_description Conference speaker. Ukrainian Rails developer, SupeRails content creator, wroclove.rb speaker.
update 18 months of using hotwire and viewcomponent in production talk
attrs {"type" => "talk"} {"date" => "2022-03-11", "type" => "talk"}
description Talk at wroclove.rb 2022. Yaroslav Shmarov's wroclove.rb 2022 talk on 18 months of using Hotwire and ViewComponent to build a modern Rails mono...
short_description Talk at wroclove.rb 2022. Yaroslav Shmarov's wroclove.rb 2022 talk on Hotwire + ViewComponent at Bearer.
create Bearer company
kind (empty) company
name (empty) Bearer
slug (empty) bearer
attrs (empty) {"country" => "France", "industry" => "software"}
description (empty) French startup, a few years old as of 2022. Originally built with Rails + GraphQL + React, but around 2020 pivoted an...
short_description (empty) French startup where Yaroslav Shmarov works as a front-end developer.
create ViewComponent tool
kind (empty) tool
name (empty) ViewComponent
slug (empty) viewcomponent
attrs (empty) {"category" => "library"}
description (empty) Ruby on Rails gem for building reusable, testable view components as objects with a .rb file (parameters, variants, v...
short_description (empty) GitHub-originated Rails gem for building reusable, testable view components.
update Hotwire tool
description Rails front-end approach mentioned as a natural complement to read models: because read models are commonly Active Re... HTML-over-the-wire front-end stack composed of Turbo (Turbo Drive, Turbo Frames, Turbo Streams) and Stimulus.js. Not ...
short_description Rails front-end approach using HTML-over-the-wire and Turbo Streams. HTML-over-the-wire front-end stack: Turbo (Drive/Frames/Streams) plus Stimulus.
create Turbo tool
kind (empty) tool
name (empty) Turbo
slug (empty) turbo
attrs (empty) {"category" => "library"}
description (empty) HTML-over-the-wire library at the core of Hotwire, providing page-level navigation (Turbo Drive), Turbo Frames and Tu...
short_description (empty) HTML-over-the-wire library providing Drive, Frames, and Streams for Rails and beyond.
create Turbo Frames tool
kind (empty) tool
name (empty) Turbo Frames
slug (empty) turbo-frames
attrs (empty) {"category" => "library"}
description (empty) Hotwire/Turbo primitive that scopes a region of a page so it can be loaded lazily and navigate independently of the r...
short_description (empty) Hotwire primitive letting independent page regions be loaded and navigated separately.
create Turbo Streams tool
kind (empty) tool
name (empty) Turbo Streams
slug (empty) turbo-streams
attrs (empty) {"category" => "library"}
description (empty) Hotwire/Turbo primitive that delivers targeted HTML fragment updates (append/prepend/replace/update/remove/before/aft...
short_description (empty) Hotwire primitive delivering targeted HTML fragment updates over HTTP or WebSockets.
update Stimulus tool
description JavaScript library promoted by DHH for about three years (per the panel's recollection) that works alongside server-g... Modest JavaScript framework from Basecamp/DHH that augments server-rendered HTML with controllers attached via data a...
short_description Modest JavaScript library promoted by DHH for augmenting server-rendered HTML. Modest JavaScript framework from Basecamp/DHH that augments server-rendered HTML.
update Tailwind CSS tool
description Utility-first CSS framework used in the talk to compile a single `admin.tailwind.css` entry file into `public/admin-a... Utility-first CSS framework. Used at Bearer as part of the Hotwire + ViewComponent + Tailwind + Stimulus stack. Also ...
create Webpacker tool
kind (empty) tool
name (empty) Webpacker
slug (empty) webpacker
attrs (empty) {"category" => "library"}
description (empty) Legacy Rails gem that integrated webpack-based JavaScript tooling into Rails. Bearer recently migrated away from Webp...
short_description (empty) Legacy Rails gem integrating webpack-based JavaScript tooling.
create cssbundling-rails tool
kind (empty) tool
name (empty) cssbundling-rails
slug (empty) cssbundling-rails
attrs (empty) {"category" => "library"}
description (empty) Rails gem standardizing integration between Rails and CSS bundlers (Tailwind, PostCSS, Dart Sass, Bootstrap) via npm ...
short_description (empty) Rails gem integrating CSS bundlers (Tailwind, PostCSS, Dart Sass, Bootstrap) via npm scripts.
create Turbo Laravel tool
kind (empty) tool
name (empty) Turbo Laravel
slug (empty) turbo-laravel
attrs (empty) {"category" => "library"}
description (empty) Extension of Hotwire that brings Turbo to the Laravel PHP framework. Cited in Yaroslav Shmarov's wroclove.rb 2022 tal...
short_description (empty) Extension bringing Hotwire's Turbo to the Laravel PHP framework.
create Phoenix LiveView tool
kind (empty) tool
name (empty) Phoenix LiveView
slug (empty) phoenix-liveview
attrs (empty) {"category" => "library"}
description (empty) Elixir/Phoenix library for rich, real-time user experiences with server-rendered HTML updates pushed over WebSockets....
short_description (empty) Elixir/Phoenix library for real-time server-rendered UIs over WebSockets.
create Phlex tool
kind (empty) tool
name (empty) Phlex
slug (empty) phlex
attrs (empty) {"category" => "library"}
description (empty) Ruby gem for building HTML views as Ruby objects/methods instead of template files. Mentioned in Yaroslav Shmarov's w...
short_description (empty) Ruby gem for building HTML views as pure Ruby objects.
update React tool
description JavaScript UI library. In the panel, react combined with MobX is cited as an example of reactive programming where th... Component-based JavaScript UI library from Facebook. In Yaroslav Shmarov's wroclove.rb 2022 talk, recommended over Ho...
create SupeRails resource
kind (empty) resource
name (empty) SupeRails
slug (empty) superails
attrs (empty) {"type" => "blog-post"}
description (empty) Yaroslav Shmarov's YouTube channel and blog (visited by around 200 Ruby on Rails developers daily) publishing many vi...
short_description (empty) Yaroslav Shmarov's YouTube channel and blog of Rails/Hotwire tutorials.
create Hotwire suits B2B desktop apps; React suits B2C mobile and canvas UIs takeaway
kind (empty) takeaway
name (empty) Hotwire suits B2B desktop apps; React suits B2C mobile and canvas UIs
slug (empty) hotwire-suits-b2b-desktop-apps-react-suits-b2c-mobile-and-canvas-uis
attrs (empty) {"type" => "insight"}
description (empty) Don't argue Hotwire vs React in the abstract — they're different tools. Hotwire shines for early-stage iteration, sma...
short_description (empty) Pick Hotwire for B2B/desktop iteration; pick React when mobile APIs or canvas UIs are required.
create Prefer extending ViewComponent classes/attrs over multiplying variants takeaway
kind (empty) takeaway
name (empty) Prefer extending ViewComponent classes/attrs over multiplying variants
slug (empty) prefer-extending-viewcomponent-classes-attrs-over-multiplying-variants
attrs (empty) {"type" => "recommendation"}
description (empty) A ViewComponent should define a fixed set of variants (sizes, colors) but let callers append additional CSS classes a...
short_description (empty) Allow callers to append custom CSS classes and data attributes instead of adding component variants.
create Use generic and object-specific ViewComponents together takeaway
kind (empty) takeaway
name (empty) Use generic and object-specific ViewComponents together
slug (empty) use-generic-and-object-specific-viewcomponents-together
attrs (empty) {"type" => "recommendation"}
description (empty) Build two kinds of ViewComponents: generic ones that accept parameters like color/size/label, and object-specific one...
short_description (empty) Mix parameter-driven ViewComponents with record-driven ViewComponents depending on the use case.
create Turbo Frames, Turbo Streams and Stimulus can be used independently takeaway
kind (empty) takeaway
name (empty) Turbo Frames, Turbo Streams and Stimulus can be used independently
slug (empty) turbo-frames-turbo-streams-and-stimulus-can-be-used-independently
attrs (empty) {"type" => "lesson-learned"}
description (empty) Turbo Frames, Turbo Streams and Stimulus don't require each other to work. Learners often think a Stream must be rend...
short_description (empty) Learn each Hotwire primitive alone before combining them.
create HTTP Turbo Streams vs WebSocket Turbo Streams concept
kind (empty) concept
name (empty) HTTP Turbo Streams vs WebSocket Turbo Streams
slug (empty) http-turbo-streams-vs-websocket-turbo-streams
attrs (empty) {"category" => "architecture"}
description (empty) Two distinct technologies sharing the 'Turbo Streams' name. HTTP Turbo Streams are returned from controller responses...
short_description (empty) Distinction between response-driven HTTP Turbo Streams and Rails-specific WebSocket broadcasts.
create Migrate off Webpacker to cssbundling/jsbundling takeaway
kind (empty) takeaway
name (empty) Migrate off Webpacker to cssbundling/jsbundling
slug (empty) migrate-off-webpacker-to-cssbundling-jsbundling
attrs (empty) {"type" => "recommendation"}
description (empty) At Bearer, moving from Webpacker to cssbundling-rails + jsbundling-rails removed large amounts of configuration and c...
short_description (empty) Replacing Webpacker with css/js bundling dramatically reduced Bearer's build time.
create How do you test ViewComponents and Hotwire flows? question
kind (empty) question
name (empty) How do you test ViewComponents and Hotwire flows?
slug (empty) how-do-you-test-viewcomponents-and-hotwire-flows
attrs (empty) {"answer_summary" => "Use RSpec assertions on factory-built objects, snapshot tests for ViewComponents, and Rails sys...
description (empty) Attendee notes that in React, component tests often rely on artificial supplied data that drifts from the real backen...
short_description (empty) Audience question comparing testing ViewComponents vs React components.

Edges (57)

create Yaroslav Shmarovhas_skillStimulus
attrs (empty) {"level" => "intermediate"}
context (empty) Uses Stimulus controllers throughout Bearer's front-end.
relation (empty) has_skill
source_node_id (empty) 8b840b39-cb9e-4062-a149-3b4cb09a379f
target_node_id (empty) 87cb1332-bd03-4cc9-a0b1-c8c83aae8051
create BearerusesHotwire
context (empty) Bearer's Rails monolith front-end is built on Hotwire.
relation (empty) uses
source_node_id (empty) 8b16f825-b106-4136-bd99-49176d48f53a
target_node_id (empty) a0a8a415-bd9e-46ed-8ee3-8448312af347
create BearerusesViewComponent
context (empty) Bearer structures its front-end around ViewComponent instead of plain partials/templates.
relation (empty) uses
source_node_id (empty) 8b16f825-b106-4136-bd99-49176d48f53a
target_node_id (empty) aaa7fac1-54d6-4dde-8805-bbc7219cd58a
update Yaroslav Shmarovauthored18 months of using hotwire and viewcomponent in production
context (empty) Speaker of the talk at wroclove.rb 2022.
update 18 months of using hotwire and viewcomponent in productionpresented_atwroclove.rb 2022
context (empty) Delivered at wroclove.rb 2022 on 2022-03-11.
create Yaroslav Shmarovworks_atBearer
attrs (empty) {"role" => "front-end developer"}
context (empty) Hired at the French startup Bearer specifically as a front-end developer on the Hotwire/Stimulus/Tailwind stack.
relation (empty) works_at
source_node_id (empty) 8b840b39-cb9e-4062-a149-3b4cb09a379f
target_node_id (empty) 8b16f825-b106-4136-bd99-49176d48f53a
create Yaroslav Shmarovworks_onSupeRails
attrs (empty) {"role" => "creator"}
context (empty) Runs the SupeRails YouTube channel and blog publishing Hotwire and Rails tutorials.
relation (empty) works_on
source_node_id (empty) 8b840b39-cb9e-4062-a149-3b4cb09a379f
target_node_id (empty) 2eb72f17-27e2-4f8a-9258-713ac976a8e2
create Yaroslav Shmarovhas_skillHotwire
attrs (empty) {"level" => "expert"}
context (empty) Built front-end features for 18 months at Bearer using Hotwire; publishes tutorials.
relation (empty) has_skill
source_node_id (empty) 8b840b39-cb9e-4062-a149-3b4cb09a379f
target_node_id (empty) a0a8a415-bd9e-46ed-8ee3-8448312af347
create Yaroslav Shmarovhas_skillViewComponent
attrs (empty) {"level" => "expert"}
context (empty) Uses ViewComponent extensively in production at Bearer.
relation (empty) has_skill
source_node_id (empty) 8b840b39-cb9e-4062-a149-3b4cb09a379f
target_node_id (empty) aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create BearerusesStimulus
context (empty) Used for dropdowns, tabs, debounced submits, modal auto-open, dynamic forms, etc.
relation (empty) uses
source_node_id (empty) 8b16f825-b106-4136-bd99-49176d48f53a
target_node_id (empty) 87cb1332-bd03-4cc9-a0b1-c8c83aae8051
create BearerusesTailwind CSS
context (empty) Tailwind is part of Bearer's front-end stack alongside Hotwire and ViewComponent.
relation (empty) uses
source_node_id (empty) 8b16f825-b106-4136-bd99-49176d48f53a
target_node_id (empty) ec73c2f6-5a41-41a5-8bc3-17addcf6fa0f
create Bearerusescssbundling-rails
context (empty) Adopted after migrating away from Webpacker.
relation (empty) uses
source_node_id (empty) 8b16f825-b106-4136-bd99-49176d48f53a
target_node_id (empty) 8cbf6eb3-3f3f-4445-8b65-2f7ee5669987
create Bearerusesjsbundling-rails
context (empty) Adopted after migrating away from Webpacker.
relation (empty) uses
source_node_id (empty) 8b16f825-b106-4136-bd99-49176d48f53a
target_node_id (empty) 7953f328-bfd7-45a3-9e50-231782b6dfb5
create BearerusesRuby on Rails
context (empty) Bearer runs a Ruby on Rails monolith.
relation (empty) uses
source_node_id (empty) 8b16f825-b106-4136-bd99-49176d48f53a
target_node_id (empty) 7aac705a-0987-49f2-b665-9d4e08a6acee
update 18 months of using hotwire and viewcomponent in productionaboutHotwire
context Krzywda refers to 'Yaroslav's' talk on view components and Hotwire earlier at the conference. Second half of the talk explores Turbo Frames, Turbo Streams and Stimulus in production.
create 18 months of using hotwire and viewcomponent in productionaboutViewComponent
context (empty) First half of the talk is dedicated to structuring the Rails front-end with ViewComponent.
relation (empty) about
source_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
target_node_id (empty) aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create 18 months of using hotwire and viewcomponent in productionaboutTurbo Frames
context (empty) Live demo showcases async record loading, modals, and YouTube-like independent regions with Turbo Frames.
relation (empty) about
source_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
target_node_id (empty) 5aa85333-18b5-41a5-b233-a4d142706977
create 18 months of using hotwire and viewcomponent in productionaboutTurbo Streams
context (empty) Live demo shows reset-filter buttons, filter counts, one-time token reveal, and infinite pagination via Turbo Streams.
relation (empty) about
source_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
target_node_id (empty) 49fa87f7-e960-4281-8be7-62c36bbd270b
create 18 months of using hotwire and viewcomponent in productionaboutStimulus
context (empty) Demonstrates hidden-link modal triggers, re-submit buttons, and how a few lines of Stimulus extend Hotwire dramatically.
relation (empty) about
source_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
target_node_id (empty) 87cb1332-bd03-4cc9-a0b1-c8c83aae8051
create 18 months of using hotwire and viewcomponent in productionaboutTailwind CSS
context (empty) Part of Bearer's front-end stack used alongside ViewComponent.
relation (empty) about
source_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
target_node_id (empty) ec73c2f6-5a41-41a5-8bc3-17addcf6fa0f
create 18 months of using hotwire and viewcomponent in productionaboutBearer
context (empty) Case study of the speaker's employer and its Rails monolith rewrite.
relation (empty) about
source_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
target_node_id (empty) 8b16f825-b106-4136-bd99-49176d48f53a
create 18 months of using hotwire and viewcomponent in productionaboutReact
context (empty) Frames Hotwire vs React decision criteria early in the talk.
relation (empty) about
source_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
target_node_id (empty) 5026a4fc-0c6e-49d7-bb7d-29be23b72b24
create 18 months of using hotwire and viewcomponent in productionaboutWebpacker
context (empty) Describes migrating away from Webpacker as the year's favorite PR.
relation (empty) about
source_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
target_node_id (empty) 7e62c431-0947-4d48-af04-cb5f5be12394
create 18 months of using hotwire and viewcomponent in productionaboutTurbo Laravel
context (empty) Cited to argue Hotwire is not Rails-specific.
relation (empty) about
source_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
target_node_id (empty) f3c3b6c9-96ed-4836-92a4-b3b15ee3e0a9
create 18 months of using hotwire and viewcomponent in productionaboutStimulusReflex
context (empty) Recommended path to extend capabilities beyond default Hotwire.
relation (empty) about
source_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
target_node_id (empty) 3ebeb557-2326-491d-9877-ac9b062f485f
create 18 months of using hotwire and viewcomponent in productionaboutAnyCable
context (empty) Mentioned as extending Action Cable for going further than Hotwire defaults.
relation (empty) about
source_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
target_node_id (empty) 91a3f2b0-4b18-4814-997e-b70b169a9214
create 18 months of using hotwire and viewcomponent in productionabouthtmx
context (empty) Listed as a non-Rails server-side-rendering alternative to Hotwire.
relation (empty) about
source_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
target_node_id (empty) 704680e3-3592-445c-b2b7-c6e2435d08a6
create 18 months of using hotwire and viewcomponent in productionaboutPhoenix LiveView
context (empty) Listed as a non-Rails server-side-rendering alternative to Hotwire.
relation (empty) about
source_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
target_node_id (empty) 725c6849-3a6d-4893-b7ad-5fbca3f69fd5
create 18 months of using hotwire and viewcomponent in productionaboutPhlex
context (empty) Mentioned as a potential substitute for ViewComponent.
relation (empty) about
source_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
target_node_id (empty) 6bb19a01-47fc-4521-83c9-874cd58c606a
create Hotwirerelated_toTurbo
context (empty) Hotwire bundles Turbo (Drive/Frames/Streams) with Stimulus.
relation (empty) related_to
source_node_id (empty) a0a8a415-bd9e-46ed-8ee3-8448312af347
target_node_id (empty) 0071d9d0-23d6-4880-af20-5c3369e78423
create Hotwirerelated_toStimulus
context (empty) Hotwire bundles Stimulus.js as its JavaScript-sprinkle library.
relation (empty) related_to
source_node_id (empty) a0a8a415-bd9e-46ed-8ee3-8448312af347
target_node_id (empty) 87cb1332-bd03-4cc9-a0b1-c8c83aae8051
create Turborelated_toTurbo Frames
context (empty) Turbo Frames are one of Turbo's core primitives.
relation (empty) related_to
source_node_id (empty) 0071d9d0-23d6-4880-af20-5c3369e78423
target_node_id (empty) 5aa85333-18b5-41a5-b233-a4d142706977
create Turborelated_toTurbo Streams
context (empty) Turbo Streams are one of Turbo's core primitives.
relation (empty) related_to
source_node_id (empty) 0071d9d0-23d6-4880-af20-5c3369e78423
target_node_id (empty) 49fa87f7-e960-4281-8be7-62c36bbd270b
create Turbo Laravelrelated_toLaravel
context (empty) Turbo Laravel is an extension of Hotwire's Turbo for the Laravel framework.
relation (empty) related_to
source_node_id (empty) f3c3b6c9-96ed-4836-92a4-b3b15ee3e0a9
target_node_id (empty) b825bd83-2934-4d30-8885-028d898b7e87
create Turbo Laravelrelated_toHotwire
context (empty) Port of Hotwire's Turbo to another host framework, cited to show Hotwire is not Rails-specific.
relation (empty) related_to
source_node_id (empty) f3c3b6c9-96ed-4836-92a4-b3b15ee3e0a9
target_node_id (empty) a0a8a415-bd9e-46ed-8ee3-8448312af347
create Turbo Streamsrelated_toAction Cable
context (empty) WebSocket Turbo Streams are Rails-specific broadcasts delivered over Action Cable.
relation (empty) related_to
source_node_id (empty) 49fa87f7-e960-4281-8be7-62c36bbd270b
target_node_id (empty) 013851e3-4ca1-43b2-ab9a-8c531798c325
create HTTP Turbo Streams vs WebSocket Turbo StreamsaboutTurbo Streams
context (empty) Clarifies the distinction between the HTTP and WebSocket flavors of Turbo Streams.
relation (empty) about
source_node_id (empty) aa55200d-6643-41b2-a5e4-3ef3d8ac4a49
target_node_id (empty) 49fa87f7-e960-4281-8be7-62c36bbd270b
create HTTP Turbo Streams vs WebSocket Turbo StreamsaboutAction Cable
context (empty) The WebSocket variant is delivered over Action Cable and is Rails-specific.
relation (empty) about
source_node_id (empty) aa55200d-6643-41b2-a5e4-3ef3d8ac4a49
target_node_id (empty) 013851e3-4ca1-43b2-ab9a-8c531798c325
create cssbundling-railsrelated_toTailwind CSS
context (empty) cssbundling-rails integrates Tailwind (among other CSS toolchains) via npm scripts.
relation (empty) related_to
source_node_id (empty) 8cbf6eb3-3f3f-4445-8b65-2f7ee5669987
target_node_id (empty) ec73c2f6-5a41-41a5-8bc3-17addcf6fa0f
create jsbundling-railsrelated_toesbuild
context (empty) jsbundling-rails supports esbuild as one of its bundler backends.
relation (empty) related_to
source_node_id (empty) 7953f328-bfd7-45a3-9e50-231782b6dfb5
target_node_id (empty) 1a1e75c2-83e5-45a5-b860-0bede4e80b8e
create Hotwire suits B2B desktop apps; React suits B2C mobile and canvas UIsfrom_talk18 months of using hotwire and viewcomponent in production
context (empty) Key framing at the start of the talk.
relation (empty) from_talk
source_node_id (empty) 139f5ec1-ce78-4f85-93b0-e12b559c96c1
target_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
create Hotwire suits B2B desktop apps; React suits B2C mobile and canvas UIsaboutHotwire
context (empty) Recommends Hotwire for specific product contexts.
relation (empty) about
source_node_id (empty) 139f5ec1-ce78-4f85-93b0-e12b559c96c1
target_node_id (empty) a0a8a415-bd9e-46ed-8ee3-8448312af347
create Hotwire suits B2B desktop apps; React suits B2C mobile and canvas UIsaboutReact
context (empty) Identifies where React is the better choice.
relation (empty) about
source_node_id (empty) 139f5ec1-ce78-4f85-93b0-e12b559c96c1
target_node_id (empty) 5026a4fc-0c6e-49d7-bb7d-29be23b72b24
create Prefer extending ViewComponent classes/attrs over multiplying variantsfrom_talk18 months of using hotwire and viewcomponent in production
context (empty) Key learning from building the badge component.
relation (empty) from_talk
source_node_id (empty) f4cff76b-f7df-4826-aff0-5afa9e8c03a2
target_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
create Prefer extending ViewComponent classes/attrs over multiplying variantsaboutViewComponent
context (empty) Design guideline for ViewComponent APIs.
relation (empty) about
source_node_id (empty) f4cff76b-f7df-4826-aff0-5afa9e8c03a2
target_node_id (empty) aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create Use generic and object-specific ViewComponents togetherfrom_talk18 months of using hotwire and viewcomponent in production
context (empty) Reported pattern after 18 months in production.
relation (empty) from_talk
source_node_id (empty) b8e50665-3ec6-4f45-8e64-27c2b4700152
target_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
create Use generic and object-specific ViewComponents togetheraboutViewComponent
context (empty) Component design recommendation.
relation (empty) about
source_node_id (empty) b8e50665-3ec6-4f45-8e64-27c2b4700152
target_node_id (empty) aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create Turbo Frames, Turbo Streams and Stimulus can be used independentlyfrom_talk18 months of using hotwire and viewcomponent in production
context (empty) Explicit advice during and in the takeaways slide.
relation (empty) from_talk
source_node_id (empty) 53468dd6-8903-40b9-a4af-c733cf9d39b1
target_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
create Turbo Frames, Turbo Streams and Stimulus can be used independentlyaboutHotwire
context (empty) Concerns the three main Hotwire primitives.
relation (empty) about
source_node_id (empty) 53468dd6-8903-40b9-a4af-c733cf9d39b1
target_node_id (empty) a0a8a415-bd9e-46ed-8ee3-8448312af347
create Migrate off Webpacker to cssbundling/jsbundlingfrom_talk18 months of using hotwire and viewcomponent in production
context (empty) Shared as the speaker's favorite merged PR of the last year.
relation (empty) from_talk
source_node_id (empty) 2c4dcf1b-100e-4d4f-856d-909d667f941c
target_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
create Migrate off Webpacker to cssbundling/jsbundlingaboutWebpacker
context (empty) Recommendation is specifically about leaving Webpacker behind.
relation (empty) about
source_node_id (empty) 2c4dcf1b-100e-4d4f-856d-909d667f941c
target_node_id (empty) 7e62c431-0947-4d48-af04-cb5f5be12394
create Migrate off Webpacker to cssbundling/jsbundlingaboutcssbundling-rails
context (empty) Recommended replacement for Webpacker (CSS side).
relation (empty) about
source_node_id (empty) 2c4dcf1b-100e-4d4f-856d-909d667f941c
target_node_id (empty) 8cbf6eb3-3f3f-4445-8b65-2f7ee5669987
create Migrate off Webpacker to cssbundling/jsbundlingaboutjsbundling-rails
context (empty) Recommended replacement for Webpacker (JS side).
relation (empty) about
source_node_id (empty) 2c4dcf1b-100e-4d4f-856d-909d667f941c
target_node_id (empty) 7953f328-bfd7-45a3-9e50-231782b6dfb5
create How do you test ViewComponents and Hotwire flows?asked_at18 months of using hotwire and viewcomponent in production
context (empty) Asked in Q&A at the end of the talk.
relation (empty) asked_at
source_node_id (empty) e0567509-0349-4295-ac1c-150b1c022f00
target_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
create How do you test ViewComponents and Hotwire flows?aboutViewComponent
context (empty) Asks how ViewComponent testing compares to React component testing.
relation (empty) about
source_node_id (empty) e0567509-0349-4295-ac1c-150b1c022f00
target_node_id (empty) aaa7fac1-54d6-4dde-8805-bbc7219cd58a
create Yaroslav ShmarovrecommendsHotwire
context (empty) Endorses Hotwire for B2B desktop apps and early-stage iteration throughout the talk.
relation (empty) recommends
source_node_id (empty) 8b840b39-cb9e-4062-a149-3b4cb09a379f
target_node_id (empty) a0a8a415-bd9e-46ed-8ee3-8448312af347
create Yaroslav ShmarovrecommendsViewComponent
context (empty) Promotes ViewComponent as key to structuring the Rails monolith front-end.
relation (empty) recommends
source_node_id (empty) 8b840b39-cb9e-4062-a149-3b4cb09a379f
target_node_id (empty) aaa7fac1-54d6-4dde-8805-bbc7219cd58a

Read set

124 nodes

tool Hotwire search_nodes talk 18 months of using hotwire and viewcomponent in production search_nodes+get_node_edges tool Action Cable search_nodes talk No-build Utopia: Modern User Experiences with Rails & Web Standards search_nodes talk Building Rails SPAs in Frontend Ruby with Glimmer DSL for Web search_nodes concept Static Page Caching via nginx search_nodes talk Better WebPerformance with Rails search_nodes tool Active Admin search_nodes tool Ember.js search_nodes tool acts_as_api search_nodes talk Component Driven UI with ViewComponent search_nodes tool Cells search_nodes talk Extracting logic from templates with Hanami Views search_nodes tool jsbundling-rails search_nodes person Yaroslav Shmarov search_nodes+get_node_edges talk Scientific Ruby Lightning Talk search_nodes resource Rails Architect Master Class search_nodes talk Counterintuitive Rails pt. 1 search_nodes project Ruby Romania search_nodes talk Towards the post framework future search_nodes talk Toolbelt of a Seasoned Bug Hunter search_nodes tool Rails 5.2 search_nodes talk When REST is Not Enough: Implementing Alternative Protocols in Ruby on Rails search_nodes tool Stimulus search_nodes tool Tailwind CSS search_nodes tool Preact search_nodes concept Live Reload search_nodes tool esbuild search_nodes tool Elm search_nodes takeaway Start with Action Cable, switch when performance hurts search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2025 search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2018 search_nodes talk Mutation testing workshop wroclove.rb 2019 search_nodes talk Building LLM powered applications in Ruby search_nodes talk Fix Production Bugs 20x Faster search_nodes takeaway Keep refresh tokens in HttpOnly Secure SameSite cookies search_nodes takeaway Use devise_token_auth for API tokens search_nodes concept Refresh Tokens in HttpOnly Cookies search_nodes tool devise_token_auth search_nodes project AnyCable search_nodes talk Cables! Cables! Cables! search_nodes resource Equestrian-Shows Platform Case Study search_nodes project LiteCable search_nodes resource Rocket Real-Time Benchmark search_nodes question Have you heard of Stimulus? search_nodes tool Phoenix search_nodes takeaway Use Logux for optimistic UI with Rails search_nodes concept Logux Proxy search_nodes tool Elixir search_nodes concept Cynefin Framework search_nodes tool Ruby on Rails search_nodes project monolith framework search_nodes tool Trailblazer search_nodes question Is MVC enough for a successful enterprise app? search_nodes tool Rack search_nodes tool React search_nodes concept Virtual DOM search_nodes concept CSS-in-JS search_nodes takeaway Adopt CSS-in-JS for modern component-based frontends search_nodes tool Redux search_nodes tool Fulcro search_nodes tool Ruby search_nodes tool Plezi search_nodes company Auth0 search_nodes concept Data Tokenization search_nodes tool Codecov search_nodes tool GraphQL search_nodes takeaway Rate-limit login forms with a skip path search_nodes tool RealtimeBoard search_nodes concept GitHub Self-Hosted Runner search_nodes tool Fulcro Inspect search_nodes tool Representable search_nodes question Packaging a Rails engine that uses Webpacker search_nodes concept Pre-Compile Engine Assets at Build Time search_nodes takeaway Share Browser-Support Config Across Front-End And Back-End search_nodes tool streamio-ffmpeg search_nodes concept tus protocol search_nodes concept HTTP/2 Server Push search_nodes concept On-the-fly Processing search_nodes tool Reform search_nodes concept Immutable Form Runtime API search_nodes talk Orchestrating video transcoding in ruby search_nodes resource My Ruby Story search_nodes resource Short Ruby Newsletter search_nodes talk Events events events search_nodes tool GitHub Releases search_nodes resource awesome-ddd search_nodes tool GitHub Actions search_nodes tool reviewdog search_nodes tool Release Drafter search_nodes tool actions/upload-artifact search_nodes takeaway Buy Faster Hardware search_nodes takeaway Keep Project Setup Simple search_nodes tool Tyrant search_nodes tool Avo search_nodes takeaway Switch on HTTP/2 search_nodes takeaway Trailblazer tracing saves thousands of debugging hours search_nodes tool JSON API Resources search_nodes question JSON API or GraphQL — what do you recommend? search_nodes talk Optimizing performance in Rails apps with GraphQL layer search_nodes project granite search_nodes takeaway Don't follow JSON API religiously search_nodes question Is rendering from cached pages with server-side includes possible in Rails? search_nodes concept Distributed Monolith search_nodes concept Majestic Monolith search_nodes concept Monolith as Data Model search_nodes takeaway Stop Building Web Apps, Build Software search_nodes company Transloadit search_nodes tool Miro search_nodes concept Direct Upload to Cloud search_nodes tool Sync Space VR search_nodes takeaway Add Fun to Keep Remote Workshops Human search_nodes takeaway Sign serverlessforruby.org petition search_nodes tool Standard RB search_nodes talk Ruby Standard Library Hidden Gems Lightning Talk search_nodes tool Distributed Ruby search_nodes concept Refinements search_nodes tool FactoryBot search_nodes company SpaceX search_nodes

4 edges