From 763017676ebabe527457c5c41654e0d4e58cb573 Mon Sep 17 00:00:00 2001 From: Ines Alvergne Date: Thu, 19 Jun 2025 10:22:28 +0200 Subject: [PATCH 01/12] create agenda page --- .../world/2025/components/agenda_header.html | 13 +++ .../world/2025/components/agenda_tabs.html | 59 ++++++++++++++ .../world/2025/components/navbar_links.html | 1 + _sass/world/2025/base/_colors.scss | 2 + _sass/world/2025/base/_layout.scss | 11 +++ _sass/world/2025/modules/_agenda_page.scss | 80 +++++++++++++++++++ _sass/world/2025/modules/_speaker_show.scss | 11 --- assets/css/world-2025.scss | 1 + world/2025/agenda/day-1.html | 27 +++++++ world/2025/agenda/day-2.html | 27 +++++++ 10 files changed, 221 insertions(+), 11 deletions(-) create mode 100644 _includes/world/2025/components/agenda_header.html create mode 100644 _includes/world/2025/components/agenda_tabs.html create mode 100644 _sass/world/2025/modules/_agenda_page.scss create mode 100644 world/2025/agenda/day-1.html create mode 100644 world/2025/agenda/day-2.html diff --git a/_includes/world/2025/components/agenda_header.html b/_includes/world/2025/components/agenda_header.html new file mode 100644 index 000000000..c74470362 --- /dev/null +++ b/_includes/world/2025/components/agenda_header.html @@ -0,0 +1,13 @@ +
+
+

Rails World 2025

+

Official Agenda

+

+ When we say there’s something for everyone... we mean it. Here’s the full breakdown so you can plan your Rails World 2025 experience. +

+
+ +
+ attendees at rails world +
+
diff --git a/_includes/world/2025/components/agenda_tabs.html b/_includes/world/2025/components/agenda_tabs.html new file mode 100644 index 000000000..7f41b6cf8 --- /dev/null +++ b/_includes/world/2025/components/agenda_tabs.html @@ -0,0 +1,59 @@ +
+
Day 1

+
+ +
+

Day 2

+
+
+ + diff --git a/_includes/world/2025/components/navbar_links.html b/_includes/world/2025/components/navbar_links.html index ef60075fb..705f79732 100644 --- a/_includes/world/2025/components/navbar_links.html +++ b/_includes/world/2025/components/navbar_links.html @@ -1,3 +1,4 @@ Speakers +Agenda FAQs Rails at Scale Summit diff --git a/_sass/world/2025/base/_colors.scss b/_sass/world/2025/base/_colors.scss index 7302734c8..8e99d8e29 100644 --- a/_sass/world/2025/base/_colors.scss +++ b/_sass/world/2025/base/_colors.scss @@ -15,3 +15,5 @@ $speaker-card-gradient-hover: linear-gradient(180deg, rgba(59, 29, 98, 0%) 0%, r $session-card-gradient: linear-gradient(-90deg, rgba(59, 29, 98, 0%) 20%, $red 100%); $session-card-gradient-hover: linear-gradient(-90deg, rgba(59, 29, 98, 0%) 0%, $red 61%); + +$agenda-tag-gradient: linear-gradient(0deg, rgba(59, 29, 98, 0%) 0%, $red 140%); diff --git a/_sass/world/2025/base/_layout.scss b/_sass/world/2025/base/_layout.scss index 6e465cc59..b8ae24a11 100644 --- a/_sass/world/2025/base/_layout.scss +++ b/_sass/world/2025/base/_layout.scss @@ -54,3 +54,14 @@ body { padding: 0 5%; } } + +.sessions-container { + margin-top: 80px; + display: flex; + flex-direction: column; + gap: 25px; + + @include media(MobileAndTabletScreens) { + margin-top: 50px; + } +} diff --git a/_sass/world/2025/modules/_agenda_page.scss b/_sass/world/2025/modules/_agenda_page.scss new file mode 100644 index 000000000..47ca9ac5e --- /dev/null +++ b/_sass/world/2025/modules/_agenda_page.scss @@ -0,0 +1,80 @@ +.agenda-page { + padding-left: 80px; + + @include media(MobileScreens) { + padding: 0 20px; + margin-bottom: 50px; + } + + @include media(TabletScreens) { + padding: 0 40px; + } +} + +.agenda-header { + margin-top: 50px; + display: flex; + align-items: center; + justify-content: space-between; + + @include media(MobileAndTabletScreens) { + flex-direction: column-reverse; + margin-top: 25px; + } + + h1 { + @include media(MobileScreens) { + font-size: 35px; + margin-bottom: 10px; + } + } + + h2 { + @include media(MobileScreens) { + font-size: $large; + } + } +} + +.agenda-header .content { + width: 50%; + align-self: flex-start; + margin-top: 100px; + + @include media(MobileAndTabletScreens) { + width: 100%; + margin-top: 25px; + } +} + +.agenda-header .illustration-container { + @include media(MobileAndTabletScreens) { + display: none; + } + + img { + width: 500px; + rotate: 180deg; + } +} + +.agenda-tabs { + display: flex; + gap: 25px; + + @include media(MobileAndTabletScreens) { + margin-top: 50px; + } + + .tab { + cursor: pointer; + padding: 10px 50px; + border-top: 1px solid white; + border-right: 1px solid white; + border-left: 1px solid white; + + &:hover, &.active { + background-image: $agenda-tag-gradient; + } + } +} diff --git a/_sass/world/2025/modules/_speaker_show.scss b/_sass/world/2025/modules/_speaker_show.scss index 622b4440c..e6ca7f2a1 100644 --- a/_sass/world/2025/modules/_speaker_show.scss +++ b/_sass/world/2025/modules/_speaker_show.scss @@ -128,14 +128,3 @@ } } } - -.speaker-show-page .sessions-container { - margin-top: 80px; - display: flex; - flex-direction: column; - gap: 25px; - - @include media(MobileAndTabletScreens) { - margin-top: 50px; - } -} diff --git a/assets/css/world-2025.scss b/assets/css/world-2025.scss index 396c1826c..5199016b4 100644 --- a/assets/css/world-2025.scss +++ b/assets/css/world-2025.scss @@ -17,6 +17,7 @@ @import 'world/2025/common/hexagon_frame'; @import 'world/2025/common/social_card'; +@import 'world/2025/modules/agenda_page'; @import 'world/2025/modules/announcement_banner'; @import 'world/2025/modules/faq'; @import 'world/2025/modules/footer'; diff --git a/world/2025/agenda/day-1.html b/world/2025/agenda/day-1.html new file mode 100644 index 000000000..42fdd0401 --- /dev/null +++ b/world/2025/agenda/day-1.html @@ -0,0 +1,27 @@ +--- +layout: world/2025/default +permalink: /world/2025/agenda/day-1 +redirect_from: /world/agenda/day-1 +day: day-1 +title: Agenda +--- + +{% assign sessions = site.world_sessions | where_exp: "session", "session.path contains '2025/day-1'" %} +{% assign sortedSessions = sessions | sort: "running_order" %} + +
+
+ {% include world/2025/components/agenda_header.html %} + {% include world/2025/components/agenda_tabs.html dayOneActive=true %} + +
+ {% for session in sortedSessions %} + {% assign speaker_path = session.speaker | replace: '.md', '' %} + {% assign session_speaker = site.world_speakers | where: "path", "/_world_speakers/2025" | map: "path" %} + {% assign session_speaker = site.world_speakers | where_exp: "s", "s.path contains speaker_path" | first %} + + {% include world/2025/components/session_card.html session=session speaker=session_speaker %} + {% endfor %} +
+
+
diff --git a/world/2025/agenda/day-2.html b/world/2025/agenda/day-2.html new file mode 100644 index 000000000..e2d2fdd86 --- /dev/null +++ b/world/2025/agenda/day-2.html @@ -0,0 +1,27 @@ +--- +layout: world/2025/default +permalink: /world/2025/agenda/day-2 +redirect_from: /world/agenda/day-2 +day: day-2 +title: Agenda +--- + +{% assign sessions = site.world_sessions | where_exp: "session", "session.path contains '2025/day-2'" %} +{% assign sortedSessions = sessions | sort: "running_order" %} + +
+
+ {% include world/2025/components/agenda_header.html %} + {% include world/2025/components/agenda_tabs.html dayTwoActive=true %} + +
+ {% for session in sortedSessions %} + {% assign speaker_path = session.speaker | replace: '.md', '' %} + + + + {% include world/2025/components/session_card.html session=session speaker=speaker %} + {% endfor %} +
+
+
From 4cf2a57edea33c0cab215fdd133e7d4023eeaf08 Mon Sep 17 00:00:00 2001 From: Ines Alvergne Date: Thu, 19 Jun 2025 10:29:11 +0200 Subject: [PATCH 02/12] add agenda markdown data --- _world_sessions/2025/day-1/adrianna-chang.md | 6 +++--- _world_sessions/2025/day-1/austin-story.md | 6 +++--- _world_sessions/2025/day-1/david-hansson.md | 6 +++--- _world_sessions/2025/day-1/donal-mcbreen.md | 6 +++--- _world_sessions/2025/day-1/hartley-mcguire.md | 6 +++--- _world_sessions/2025/day-1/jack-sharkey.md | 6 +++--- _world_sessions/2025/day-1/katarina-rossi.md | 6 +++--- _world_sessions/2025/day-1/kevin-mcconnell.md | 6 +++--- _world_sessions/2025/day-1/kinsey-durham.md | 6 +++--- _world_sessions/2025/day-1/mike-dalessio.md | 6 +++--- _world_sessions/2025/day-1/miles-mcguire.md | 6 +++--- _world_sessions/2025/day-1/xavier-noria.md | 6 +++--- _world_sessions/2025/{day-1 => day-2}/aaron-patterson.md | 6 +++--- _world_sessions/2025/{day-1 => day-2}/chris-oliver.md | 6 +++--- _world_sessions/2025/{day-1 => day-2}/jason-meller.md | 6 +++--- _world_sessions/2025/{day-1 => day-2}/joe-masilotti.md | 6 +++--- _world_sessions/2025/{day-1 => day-2}/masafumi-okura.md | 6 +++--- _world_sessions/2025/{day-1 => day-2}/pawel-strzalkowski.md | 6 +++--- _world_sessions/2025/{day-1 => day-2}/peter-zhu.md | 6 +++--- _world_sessions/2025/{day-1 => day-2}/radan-skoric.md | 6 +++--- _world_sessions/2025/{day-1 => day-2}/rosa-gutierrez.md | 6 +++--- _world_sessions/2025/{day-1 => day-2}/snehal-ahire.md | 6 +++--- 22 files changed, 66 insertions(+), 66 deletions(-) rename _world_sessions/2025/{day-1 => day-2}/aaron-patterson.md (75%) rename _world_sessions/2025/{day-1 => day-2}/chris-oliver.md (90%) rename _world_sessions/2025/{day-1 => day-2}/jason-meller.md (93%) rename _world_sessions/2025/{day-1 => day-2}/joe-masilotti.md (93%) rename _world_sessions/2025/{day-1 => day-2}/masafumi-okura.md (90%) rename _world_sessions/2025/{day-1 => day-2}/pawel-strzalkowski.md (93%) rename _world_sessions/2025/{day-1 => day-2}/peter-zhu.md (92%) rename _world_sessions/2025/{day-1 => day-2}/radan-skoric.md (93%) rename _world_sessions/2025/{day-1 => day-2}/rosa-gutierrez.md (86%) rename _world_sessions/2025/{day-1 => day-2}/snehal-ahire.md (94%) diff --git a/_world_sessions/2025/day-1/adrianna-chang.md b/_world_sessions/2025/day-1/adrianna-chang.md index 452bddb95..feb06ef23 100644 --- a/_world_sessions/2025/day-1/adrianna-chang.md +++ b/_world_sessions/2025/day-1/adrianna-chang.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "From Chaos to Clarity: Structured Event Reporting in Rails" speaker: adrianna-chang.md -time: -location: -running_order: +time: 14:45 - 15:15 +location: Graanbeurs +running_order: 5 --- Events in Rails applications are like the heartbeat of your code - whether it’s a log, a telemetry signal, or a business event, they tell us when something interesting is happening. To truly harness he power of these events for observability and data analysis, we need high-quality, contextualized data. The human-readable lines that Rails.logger provides is great for manual inspection but falls short in production and analytics contexts. diff --git a/_world_sessions/2025/day-1/austin-story.md b/_world_sessions/2025/day-1/austin-story.md index a32106d92..6f1b976f0 100644 --- a/_world_sessions/2025/day-1/austin-story.md +++ b/_world_sessions/2025/day-1/austin-story.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Startup Speed, Enterprise Scale: Rails Powers 3k Events/Sec Throughput" speaker: austin-story.md -time: -location: -running_order: +time: 11:15 - 11:45 +location: Graanbeurs +running_order: 2 --- Ditch vendor lock-in! diff --git a/_world_sessions/2025/day-1/david-hansson.md b/_world_sessions/2025/day-1/david-hansson.md index 1e3642b7a..fe904696f 100644 --- a/_world_sessions/2025/day-1/david-hansson.md +++ b/_world_sessions/2025/day-1/david-hansson.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Rails World Opening Keynote" speaker: david-hansson.md -time: -location: -running_order: +time: 10:00 - 11:00 +location: Effectenbeurs +running_order: 1 --- DHH will kick off the third edition of Rails World in Amsterdam with an Opening Keynote highlighting what is new in Rails today, and where the framework is headed tomorrow. diff --git a/_world_sessions/2025/day-1/donal-mcbreen.md b/_world_sessions/2025/day-1/donal-mcbreen.md index df426b169..64befe2f0 100644 --- a/_world_sessions/2025/day-1/donal-mcbreen.md +++ b/_world_sessions/2025/day-1/donal-mcbreen.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Resumable Jobs with Active Job Continuations" speaker: donal-mcbreen.md -time: -location: -running_order: +time: 13:45 - 14:15 +location: Graanbeurs +running_order: 4 --- Long-running jobs can cause problems. They can delay deployments and leave old versions of your code running longer than expected. Interrupting them can leave data in an inconsistent state or cause redundant rework. diff --git a/_world_sessions/2025/day-1/hartley-mcguire.md b/_world_sessions/2025/day-1/hartley-mcguire.md index 3289f30b4..7fc5619aa 100644 --- a/_world_sessions/2025/day-1/hartley-mcguire.md +++ b/_world_sessions/2025/day-1/hartley-mcguire.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Active Record 8: Resilient by Default" speaker: hartley-mcguire.md -time: -location: -running_order: +time: 15:45 - 16:00 +location: Graanbeurs +running_order: 6 --- Databases crash, connections drop, and queries timeout at the worst possible moments. Rather than writing custom rescue code everywhere, Rails is revolutionizing how Active Record handles these inevitable hiccups. diff --git a/_world_sessions/2025/day-1/jack-sharkey.md b/_world_sessions/2025/day-1/jack-sharkey.md index da71704c4..edd3bcba3 100644 --- a/_world_sessions/2025/day-1/jack-sharkey.md +++ b/_world_sessions/2025/day-1/jack-sharkey.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "The $1B Rails Startup: Scaling from 0 to Unicorn in Four Years" speaker: jack-sharkey.md -time: -location: -running_order: +time: 15:45 - 16:00 +location: Effectenbeurs +running_order: 6 --- We started when Rails was “dead.” Everyone said it wouldn’t scale, wasn’t fast enough, and that no one used it anymore. Four years later, we’ve processed $1B+, handle 150k RPM, and run a feature-complete marketplace with real-time chat, notifications, payments, and live streaming - all on a Rails monolith with just 15 engineers. diff --git a/_world_sessions/2025/day-1/katarina-rossi.md b/_world_sessions/2025/day-1/katarina-rossi.md index b8ba321b4..b4ca8a6f2 100644 --- a/_world_sessions/2025/day-1/katarina-rossi.md +++ b/_world_sessions/2025/day-1/katarina-rossi.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Teaching Rails with the Real Thing: Onboarding Engineers into a (Massive) Monolith" speaker: katarina-rossi.md -time: -location: -running_order: +time: 13:00 - 13:30 +location: Graanbeurs +running_order: 3 --- At Procore, our Rails monolith is massive - among the largest in the world - and intimidating to newcomers. I designed and taught a course that helped over 900 engineers of varying skill levels stop fearing it by teaching Rails and our monolith at the same time. Rather than using generic tutorials, we grounded everything in the actual product they’d be working on - layering Rails fundamentals with the domain-specific knowledge they really needed. In this talk, I’ll share how learning science, product context, and deep app knowledge came together to make our course work—and how you can adapt it for your team. diff --git a/_world_sessions/2025/day-1/kevin-mcconnell.md b/_world_sessions/2025/day-1/kevin-mcconnell.md index caf4804f8..1643d182d 100644 --- a/_world_sessions/2025/day-1/kevin-mcconnell.md +++ b/_world_sessions/2025/day-1/kevin-mcconnell.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "SQLite Replication with Beamer" speaker: kevin-mcconnell.md -time: -location: -running_order: +time: 13:00 - 13:30 +location: Effectenbeurs +running_order: 3 --- SQLite is an increasingly popular choice for powering Rails applications. It's fast, simple to use, and has an impressive feature set. But without a conventional database server, scaling beyond a single application server can be challenging. diff --git a/_world_sessions/2025/day-1/kinsey-durham.md b/_world_sessions/2025/day-1/kinsey-durham.md index f89c5cf95..515faa83b 100644 --- a/_world_sessions/2025/day-1/kinsey-durham.md +++ b/_world_sessions/2025/day-1/kinsey-durham.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Beyond the Prompt: Building Real-World LLM Features in Rails" speaker: kinsey-durham.md -time: -location: -running_order: +time: 13:45 - 14:15 +location: Effectenbeurs +running_order: 4 --- Prompting an LLM is easy. Building a Rails app that reliably integrates one? That’s a different story. This talk goes beyond prompt hacking to explore what it takes to bring LLM-powered features into real-world Rails apps—with real users, latency constraints, and production consequences. We’ll cover architectural patterns like model orchestration, prompt versioning, and skill/tool design, all tailored to the Rails ecosystem. You’ll learn how to connect your LLM to internal APIs, business logic, and background jobs, while keeping everything observable, testable, and maintainable. Whether you're adding a smart assistant or orchestrating agents, you’ll leave with practical Rails-specific strategies and patterns to build it right. diff --git a/_world_sessions/2025/day-1/mike-dalessio.md b/_world_sessions/2025/day-1/mike-dalessio.md index 59eae14d6..a6b484429 100644 --- a/_world_sessions/2025/day-1/mike-dalessio.md +++ b/_world_sessions/2025/day-1/mike-dalessio.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Multi-Tenant Rails: Everybody Gets a Database!" speaker: mike-dalessio.md -time: -location: -running_order: +time: 11:15 - 11:45 +location: Effectenbeurs +running_order: 2 --- As Rails’s SQLite support has improved, it's finally possible to have truly multi-tenant Rails applications - isolated data for each account! - without sacrificing performance or ease of use. This talk describes a novel, production-vetted approach to isolating tenant data everywhere in Rails: the database, fragment caches, background jobs, Active Storage, Turbo Stream broadcasts, Action Mailer, and even the testing framework. diff --git a/_world_sessions/2025/day-1/miles-mcguire.md b/_world_sessions/2025/day-1/miles-mcguire.md index 7aa8141c8..f7ff105ee 100644 --- a/_world_sessions/2025/day-1/miles-mcguire.md +++ b/_world_sessions/2025/day-1/miles-mcguire.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Taming the Beast: Safely Managing Database Operations in Rails in a Team of 100s" speaker: miles-mcguire.md -time: -location: -running_order: +time: 14:45 - 15:15 +location: Effectenbeurs +running_order: 5 --- Intercom leverages Rails to empower hundreds of engineers to move fast and make the changes they need in production without a lengthy centralized review process. But allowing arbitrary migrations to run across hundreds of tables and hundreds of terabytes of data in MySQL comes with inherent risks. In this session, we’ll look at where we came from, what changes we've made to reduce risk and enable people to move fast while safely leveraging Rails’ power, and where we're going in the future. diff --git a/_world_sessions/2025/day-1/xavier-noria.md b/_world_sessions/2025/day-1/xavier-noria.md index 66f7eac23..d2e1a29f8 100644 --- a/_world_sessions/2025/day-1/xavier-noria.md +++ b/_world_sessions/2025/day-1/xavier-noria.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Day 1 Closing Keynote" speaker: xavier-noria.md -time: -location: -running_order: +time: 16:30 - 17:30 +location: Effectenbeurs +running_order: 7 --- This talk will cover Rails internals that are closest to the user. It has been written with both newcomers and seasoned developers in mind. diff --git a/_world_sessions/2025/day-1/aaron-patterson.md b/_world_sessions/2025/day-2/aaron-patterson.md similarity index 75% rename from _world_sessions/2025/day-1/aaron-patterson.md rename to _world_sessions/2025/day-2/aaron-patterson.md index 8be4a8aa2..977ecd967 100644 --- a/_world_sessions/2025/day-1/aaron-patterson.md +++ b/_world_sessions/2025/day-2/aaron-patterson.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Rails World Closing Keynote" speaker: aaron-patterson.md -time: -location: -running_order: +time: 16:30 - 17:30 +location: Effectenbeurs +running_order: 7 --- We actually never know with Aaron. We'll find out what this session is about when you do. diff --git a/_world_sessions/2025/day-1/chris-oliver.md b/_world_sessions/2025/day-2/chris-oliver.md similarity index 90% rename from _world_sessions/2025/day-1/chris-oliver.md rename to _world_sessions/2025/day-2/chris-oliver.md index 808de9170..fcb20c768 100644 --- a/_world_sessions/2025/day-1/chris-oliver.md +++ b/_world_sessions/2025/day-2/chris-oliver.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Beyond the Basics: Advanced Rails Techniques" speaker: chris-oliver.md -time: -location: -running_order: +time: 13:45 - 14:15 +location: Effectenbeurs +running_order: 3 --- This talk showcases ways to take a traditional Rails app and shape it around your product domain—while also using Rails tools in ways you might not have considered. diff --git a/_world_sessions/2025/day-1/jason-meller.md b/_world_sessions/2025/day-2/jason-meller.md similarity index 93% rename from _world_sessions/2025/day-1/jason-meller.md rename to _world_sessions/2025/day-2/jason-meller.md index 1271ff3c6..06248076f 100644 --- a/_world_sessions/2025/day-1/jason-meller.md +++ b/_world_sessions/2025/day-2/jason-meller.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Passkeys Have Problems, but So Will You If You Ignore Them" speaker: jason-meller.md -time: -location: -running_order: +time: 14:45 - 15:15 +location: Graanbeurs +running_order: 5 --- Back in 2024, many of us in the Rails community dismissed passkeys as hype rather than a real password replacement. But now we're facing a serious problem - a newer and more sophisticated attack called Real-Time Phishing is gaining popularity and effortlessly defeating nearly all popular 2FA methods, except one: passkeys. Even security experts are getting fooled, and AI makes these attacks frighteningly scalable. In this session, I'll demo exactly how attackers execute real-time phishing live. Then we'll turn the tables: I'll guide you step-by-step through adding secure, user-friendly passkey authentication as an MFA option to your Rails 8 apps. Come on, Rails! Let's give passkeys one more chance. diff --git a/_world_sessions/2025/day-1/joe-masilotti.md b/_world_sessions/2025/day-2/joe-masilotti.md similarity index 93% rename from _world_sessions/2025/day-1/joe-masilotti.md rename to _world_sessions/2025/day-2/joe-masilotti.md index a3b0a664b..8726eaf56 100644 --- a/_world_sessions/2025/day-1/joe-masilotti.md +++ b/_world_sessions/2025/day-2/joe-masilotti.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Hotwire Native: A Rails Developer’s Secret Tool to Building Mobile Apps" speaker: joe-masilotti.md -time: -location: -running_order: +time: 14:45 - 15:15 +location: Effectenbeurs +running_order: 5 --- Building native mobile apps is time-consuming and expensive. Each screen must be built three times: once for web, again for iOS, and a third time for Android. diff --git a/_world_sessions/2025/day-1/masafumi-okura.md b/_world_sessions/2025/day-2/masafumi-okura.md similarity index 90% rename from _world_sessions/2025/day-1/masafumi-okura.md rename to _world_sessions/2025/day-2/masafumi-okura.md index 399daf49e..935e3ce90 100644 --- a/_world_sessions/2025/day-1/masafumi-okura.md +++ b/_world_sessions/2025/day-2/masafumi-okura.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Reading Rails 1.0 Source Code" speaker: masafumi-okura.md -time: -location: -running_order: +time: 13:00 - 13:30 +location: Graanbeurs +running_order: 3 --- Rails is great. In fact, Rails has been great since the very beginning. However, in terms of technical details, Rails 1.0 was very different from Rails 8. Lots of things have changed, many frameworks have been introduced and overall quality has been polished. diff --git a/_world_sessions/2025/day-1/pawel-strzalkowski.md b/_world_sessions/2025/day-2/pawel-strzalkowski.md similarity index 93% rename from _world_sessions/2025/day-1/pawel-strzalkowski.md rename to _world_sessions/2025/day-2/pawel-strzalkowski.md index 5119ac979..d89115159 100644 --- a/_world_sessions/2025/day-1/pawel-strzalkowski.md +++ b/_world_sessions/2025/day-2/pawel-strzalkowski.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Make Rails AI-Ready by Design with the Model Context Protocol" speaker: pawel-strzalkowski.md -time: -location: -running_order: +time: 13:00 - 13:30 +location: Effectenbeurs +running_order: 3 --- Remember the joy of Rails scaffold creating web interfaces in DHH’s demos? Let’s make it just as simple for AI integrations! diff --git a/_world_sessions/2025/day-1/peter-zhu.md b/_world_sessions/2025/day-2/peter-zhu.md similarity index 92% rename from _world_sessions/2025/day-1/peter-zhu.md rename to _world_sessions/2025/day-2/peter-zhu.md index 0833694eb..61658103d 100644 --- a/_world_sessions/2025/day-1/peter-zhu.md +++ b/_world_sessions/2025/day-2/peter-zhu.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Ruby Stability at Scale" speaker: peter-zhu.md -time: -location: -running_order: +time: 11:15 - 11:45 +location: Effectenbeurs +running_order: 2 --- There are many talks, articles, and tutorials on how to monitor your Rails app for stability. These assume the source of the bug comes from your application code, from Rails itself, or from a gem. But what if the source of instability comes from Ruby or a native gem? If Ruby crashes, do you have any monitoring or ways to debug it? diff --git a/_world_sessions/2025/day-1/radan-skoric.md b/_world_sessions/2025/day-2/radan-skoric.md similarity index 93% rename from _world_sessions/2025/day-1/radan-skoric.md rename to _world_sessions/2025/day-2/radan-skoric.md index d23893e20..31b9deeb5 100644 --- a/_world_sessions/2025/day-1/radan-skoric.md +++ b/_world_sessions/2025/day-2/radan-skoric.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Lessons from Migrating a Legacy Frontend to Hotwire" speaker: radan-skoric.md -time: -location: -running_order: +time: 15:45 - 16:00 +location: Graanbeurs +running_order: 6 --- Is Hotwire just for `rails new` scenarios and not worth it for mature applications? Absolutely not. diff --git a/_world_sessions/2025/day-1/rosa-gutierrez.md b/_world_sessions/2025/day-2/rosa-gutierrez.md similarity index 86% rename from _world_sessions/2025/day-1/rosa-gutierrez.md rename to _world_sessions/2025/day-2/rosa-gutierrez.md index a605c57a2..e8c91fb8d 100644 --- a/_world_sessions/2025/day-1/rosa-gutierrez.md +++ b/_world_sessions/2025/day-2/rosa-gutierrez.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Coming Soon: Offline Mode to Hotwire with Service Workers" speaker: rosa-gutierrez.md -time: -location: -running_order: +time: 13:45 - 14:15 +location: Graanbeurs +running_order: 4 --- Rosa is trying out a new methodology called Conference Driven Development™, so she's actually hard at work on building what she will discuss in her talk at Rails World. So for now, this abstract is To Be Determined. Wish her luck! diff --git a/_world_sessions/2025/day-1/snehal-ahire.md b/_world_sessions/2025/day-2/snehal-ahire.md similarity index 94% rename from _world_sessions/2025/day-1/snehal-ahire.md rename to _world_sessions/2025/day-2/snehal-ahire.md index 56bfbaed5..b7542b350 100644 --- a/_world_sessions/2025/day-1/snehal-ahire.md +++ b/_world_sessions/2025/day-2/snehal-ahire.md @@ -2,9 +2,9 @@ layout: world/2025/session title: "Rails Under a Microscope: Diagnosing Slowness at the Byte Level" speaker: snehal-ahire.md -time: -location: -running_order: +time: 11:15 - 11:45 +location: Graanbeurs +running_order: 2 --- We realized our legacy code didn’t need a rewrite, it needed a performance plan. From 5247194ee99f7a8337254fdc4df17c78468d55d9 Mon Sep 17 00:00:00 2001 From: Ines Alvergne Date: Thu, 19 Jun 2025 10:33:36 +0200 Subject: [PATCH 03/12] add time to session card --- .../world/2025/components/agenda_tabs.html | 4 +- .../world/2025/components/session_card.html | 15 ++++--- _sass/world/2025/modules/_session_card.scss | 41 +++++++++++++++++-- 3 files changed, 48 insertions(+), 12 deletions(-) diff --git a/_includes/world/2025/components/agenda_tabs.html b/_includes/world/2025/components/agenda_tabs.html index 7f41b6cf8..f6454d7b9 100644 --- a/_includes/world/2025/components/agenda_tabs.html +++ b/_includes/world/2025/components/agenda_tabs.html @@ -3,7 +3,7 @@ role="button" tabindex="0" title="Day One" - aria-label="View day one agenda" + aria-label="View day one agenda">

Day 1

@@ -11,7 +11,7 @@ role="button" tabindex="0" title="Day Two" - aria-label="View day two agenda"> + aria-label="View day two agenda">

Day 2

diff --git a/_includes/world/2025/components/session_card.html b/_includes/world/2025/components/session_card.html index d3c556fa4..9aecf91ce 100644 --- a/_includes/world/2025/components/session_card.html +++ b/_includes/world/2025/components/session_card.html @@ -1,6 +1,5 @@ {% assign speaker_url = include.speaker.path | split: '/' | last | remove_first: '.md' %} {% assign session = include.session %} - {% assign clean_path = session.path | replace: '_world_sessions/2025', '' | replace: '.md', '' %}
-

{{ session.title }}

-

{{ include.speaker.first_name }} {{ include.speaker.last_name }} - {{ include.speaker.tagline }}{% if include.speaker.company %}, {{ include.speaker.company }} {% endif %}

+ +

{{session.time}}

+ +
+

{{ session.title }}

+

{{ include.speaker.first_name }} {{ include.speaker.last_name }} - {{ include.speaker.tagline }}{% if include.speaker.company %}, {{ include.speaker.company }} {% endif %}

+
diff --git a/_sass/world/2025/modules/_agenda_page.scss b/_sass/world/2025/modules/_agenda_page.scss index 47ca9ac5e..24711b591 100644 --- a/_sass/world/2025/modules/_agenda_page.scss +++ b/_sass/world/2025/modules/_agenda_page.scss @@ -19,19 +19,48 @@ @include media(MobileAndTabletScreens) { flex-direction: column-reverse; + text-align: center; + } + + @include media(MobileScreens) { margin-top: 25px; } + @include media(TabletScreens) { + margin-top: 50px; + } + h1 { + margin-bottom: 10px; + @include media(MobileScreens) { - font-size: 35px; - margin-bottom: 10px; + font-size: $xx-large; + } + + @include media(TabletScreens) { + font-size: 50px; } } h2 { + font-size: 60px; + @include media(MobileScreens) { - font-size: $large; + font-size: 25px; + } + + @include media(TabletScreens) { + font-size: 40px; + } + } + + p { + @include media(MobileScreens) { + font-size: 18px; + } + + @include media(TabletScreens) { + font-size: 28px; } } } diff --git a/_sass/world/2025/modules/_session_card.scss b/_sass/world/2025/modules/_session_card.scss index 5208ba35b..b32af3e1b 100644 --- a/_sass/world/2025/modules/_session_card.scss +++ b/_sass/world/2025/modules/_session_card.scss @@ -9,14 +9,21 @@ background-image: $session-card-gradient; transition: background 0.6s ease-in; - @include media(MobileScreens) { + @include media(MobileAndTabletScreens) { flex-direction: column; align-items: flex-start; - gap: 20px; padding: 25px; width: fit-content; } + @include media(MobileScreens) { + gap: 20px; + } + + @include media(TabletScreens) { + gap: 30px; + } + .time { width: 150px; padding-right: 50px; @@ -25,16 +32,18 @@ font-size: 22px; @include media(MobileScreens) { - width: fit-content; - border-right: none; - padding-right: 0; font-size: 16px;; } @include media(TabletScreens) { - padding-right: 20px; + font-size: 20px; } + @include media(MobileAndTabletScreens) { + width: fit-content; + border-right: none; + padding-right: 0; + } } .content { @@ -42,7 +51,7 @@ flex-direction: column; justify-content: flex-start; - @include media(MobileScreens) { + @include media(MobileAndTabletScreens) { gap: 10px; } } @@ -57,6 +66,11 @@ font-size: 18px; line-height: 25px; } + + @include media(TabletScreens) { + font-size: 22px; + line-height: 35px; + } } p { diff --git a/world/2025/agenda/day-1.html b/world/2025/agenda/day-1.html index 42fdd0401..7f9c8e10f 100644 --- a/world/2025/agenda/day-1.html +++ b/world/2025/agenda/day-1.html @@ -8,17 +8,17 @@ {% assign sessions = site.world_sessions | where_exp: "session", "session.path contains '2025/day-1'" %} {% assign sortedSessions = sessions | sort: "running_order" %} +{% assign speakers_2025 = site.world_speakers | where_exp: 'item', 'item.path contains "2025"'%}
{% include world/2025/components/agenda_header.html %} - {% include world/2025/components/agenda_tabs.html dayOneActive=true %} + {% include world/2025/components/agenda_tabs.html %}
{% for session in sortedSessions %} - {% assign speaker_path = session.speaker | replace: '.md', '' %} - {% assign session_speaker = site.world_speakers | where: "path", "/_world_speakers/2025" | map: "path" %} - {% assign session_speaker = site.world_speakers | where_exp: "s", "s.path contains speaker_path" | first %} + {% assign speaker_filename = session.speaker | replace: '.md', '' %} + {% assign session_speaker = speakers_2025 | where_exp: "s", "s.path contains speaker_filename" | first %} {% include world/2025/components/session_card.html session=session speaker=session_speaker %} {% endfor %} diff --git a/world/2025/agenda/day-2.html b/world/2025/agenda/day-2.html index e2d2fdd86..4fb3ce75b 100644 --- a/world/2025/agenda/day-2.html +++ b/world/2025/agenda/day-2.html @@ -8,6 +8,7 @@ {% assign sessions = site.world_sessions | where_exp: "session", "session.path contains '2025/day-2'" %} {% assign sortedSessions = sessions | sort: "running_order" %} +{% assign speakers_2025 = site.world_speakers | where_exp: 'item', 'item.path contains "2025"'%}
@@ -16,11 +17,10 @@
{% for session in sortedSessions %} - {% assign speaker_path = session.speaker | replace: '.md', '' %} - - + {% assign speaker_filename = session.speaker | replace: '.md', '' %} + {% assign session_speaker = speakers_2025 | where_exp: "s", "s.path contains speaker_filename" | first %} - {% include world/2025/components/session_card.html session=session speaker=speaker %} + {% include world/2025/components/session_card.html session=session speaker=session_speaker %} {% endfor %}
From 7f3731463dc6c48ee97cbbc7dac5b7ada3a16755 Mon Sep 17 00:00:00 2001 From: Ines Alvergne Date: Tue, 24 Jun 2025 16:02:21 +0200 Subject: [PATCH 05/12] add missing sessions and re-organise order --- .../world/2025/components/agenda_tabs.html | 24 +++++++++++++------ .../world/2025/components/session_card.html | 8 +++++-- _sass/world/2025/modules/_session_card.scss | 2 +- .../2025/day-0/1-early-registration.md | 8 +++++++ _world_sessions/2025/day-1/adrianna-chang.md | 2 +- _world_sessions/2025/day-1/donal-mcbreen.md | 2 +- _world_sessions/2025/day-1/hartley-mcguire.md | 4 ++-- _world_sessions/2025/day-1/jack-sharkey.md | 4 ++-- _world_sessions/2025/day-1/katarina-rossi.md | 2 +- _world_sessions/2025/day-1/kevin-mcconnell.md | 2 +- _world_sessions/2025/day-1/kinsey-durham.md | 2 +- _world_sessions/2025/day-1/lunch.md | 8 +++++++ _world_sessions/2025/day-1/miles-mcguire.md | 2 +- _world_sessions/2025/day-1/opening.md | 8 +++++++ _world_sessions/2025/day-1/xavier-noria.md | 2 +- _world_sessions/2025/day-2/andrew-mcnamara.md | 9 +++++++ _world_sessions/2025/day-2/closing.md | 8 +++++++ _world_sessions/2025/day-2/lunch.md | 8 +++++++ _world_sessions/2025/day-2/opening-keynote.md | 11 +++++++++ _world_sessions/2025/day-2/opening.md | 8 +++++++ _world_sessions/2025/day-2/radan-skoric.md | 2 +- .../2025/speakers/andrew-mcnamara.md | 15 ++++++++++++ .../2025/speakers/hiroshi-shibata.md | 15 ++++++++++++ .../2025/speakers/jean-boussier.md | 15 ++++++++++++ world/2025/agenda/day-0.html | 22 +++++++++++++++++ world/2025/agenda/day-1.html | 8 +++++-- world/2025/agenda/day-2.html | 8 +++++-- 27 files changed, 183 insertions(+), 26 deletions(-) create mode 100644 _world_sessions/2025/day-0/1-early-registration.md create mode 100644 _world_sessions/2025/day-1/lunch.md create mode 100644 _world_sessions/2025/day-1/opening.md create mode 100644 _world_sessions/2025/day-2/andrew-mcnamara.md create mode 100644 _world_sessions/2025/day-2/closing.md create mode 100644 _world_sessions/2025/day-2/lunch.md create mode 100644 _world_sessions/2025/day-2/opening-keynote.md create mode 100644 _world_sessions/2025/day-2/opening.md create mode 100644 _world_speakers/2025/speakers/andrew-mcnamara.md create mode 100644 _world_speakers/2025/speakers/hiroshi-shibata.md create mode 100644 _world_speakers/2025/speakers/jean-boussier.md create mode 100644 world/2025/agenda/day-0.html diff --git a/_includes/world/2025/components/agenda_tabs.html b/_includes/world/2025/components/agenda_tabs.html index f6454d7b9..cd5665d8d 100644 --- a/_includes/world/2025/components/agenda_tabs.html +++ b/_includes/world/2025/components/agenda_tabs.html @@ -1,18 +1,26 @@
-
+

Wednesday

+
+ +
-

Day 1

+

Thursday

-

Day 2

+

Friday

@@ -23,7 +31,9 @@ tabs.forEach((tab, index) => { tab.addEventListener("click", () => { - const day = index + 1; + console.log(index); + + const day = index; loadAgendaDay(day); setActiveTab(tab); }); diff --git a/_includes/world/2025/components/session_card.html b/_includes/world/2025/components/session_card.html index 975871178..0a8f97d01 100644 --- a/_includes/world/2025/components/session_card.html +++ b/_includes/world/2025/components/session_card.html @@ -12,8 +12,12 @@

{{ session.title }}

-

{{ include.speaker.first_name }} {{ include.speaker.last_name }} - {{ include.speaker.tagline }}{% if include.speaker.company %}, {{ include.speaker.company }} {% endif %}

-
+ {% if session.multiple_speakers %} +

{{session.multiple_speakers}}

+ {% elsif include.speaker %} +

{{ include.speaker.first_name }} {{ include.speaker.last_name }} {% if include.speaker.tagline %} - {{ include.speaker.tagline }} {% endif %} {% if include.speaker.company %}, {{ include.speaker.company }} {% endif %}

+ {% endif %} +