← Extractions

wroclove.rb 2024 — Prevent Account Sharing (Andrei Kaleshka)

Andrei Kaleshka's first English talk at wroclove.rb 2024 on preventing paid-account credential sharing in a Ruby on Rails music-education app. He walks through data collection with paper_trail and a login_sessions table, charting indicators in Metabase, rolling out devise-two-factor email MFA selectively to users with 4+ active sessions, and reports a ~27% lift in signups.

Model
claude-opus-4-7
Ingestion
1e927be1
Input tokens
550,282
fresh
485,614
cached
57,979
cache write
6,689
Output tokens
10,588
Duration
165.7s
Roundtrips
6
Tool calls
17
Cost
$0.00
Nodes/edges extracted
24 / 42
Read set (nodes/edges)
486 / 2

Nodes (24)

update Andrei Kaleshka person
description Ruby developer at an outsourced company, working as main developer and sometimes tech lead depending on the project. ... Ruby developer at an outsourced company, working as main developer and sometimes tech lead depending on the project. ...
update Prevent account sharing talk
attrs {"type" => "talk"} {"type" => "talk", "first_english_talk" => "true"}
description Talk at wroclove.rb 2024. Andrei Kaleshka's wroclove.rb 2024 talk (his first English-language talk) on fighting credential sharing in a Ruby on...
short_description Talk at wroclove.rb 2024. wroclove.rb 2024 talk on detecting and curbing shared credentials in a Rails app.
create paper_trail tool
kind (empty) tool
name (empty) paper_trail
slug (empty) paper_trail
attrs (empty) {"category" => "library"}
description (empty) Ruby gem that records changes to Active Record models as versions — trivial to install on an existing Ruby on Rails a...
short_description (empty) Ruby gem for tracking changes to Active Record models as a version log.
create Metabase tool
kind (empty) tool
name (empty) Metabase
slug (empty) metabase
attrs (empty) {"category" => "service"}
description (empty) Open-source BI tool for exploring data via charts, numbers and dashboards. Easy to set up (~5 minutes via the Docker ...
short_description (empty) Open-source business-intelligence tool for charts and dashboards over a database.
create devise-two-factor tool
kind (empty) tool
name (empty) devise-two-factor
slug (empty) devise-two-factor
attrs (empty) {"category" => "library"}
description (empty) Ruby gem extending Devise with two-factor authentication. Used in the Prevent Account Sharing talk with email-based v...
short_description (empty) Devise extension adding two-factor authentication to Rails apps.
create Amazon CloudFront tool
kind (empty) tool
name (empty) Amazon CloudFront
slug (empty) amazon-cloudfront
attrs (empty) {"category" => "service"}
description (empty) AWS CDN service that sits in front of the Rails application as a proxy. Has an optional feature that enriches every p...
short_description (empty) AWS content delivery network, also used as a request-proxy exposing geo/IP headers.
create Fingerprint tool
kind (empty) tool
name (empty) Fingerprint
slug (empty) fingerprint
attrs (empty) {"category" => "service"}
description (empty) Commercial third-party service that identifies returning browsers/devices via fingerprinting, used to detect shared a...
short_description (empty) Third-party browser/device fingerprinting service for identifying returning users.
create Stripe tool
kind (empty) tool
name (empty) Stripe
slug (empty) stripe
attrs (empty) {"category" => "service"}
description (empty) Online payments platform. Used in the Prevent Account Sharing talk as the source of truth for revenue — the team watc...
short_description (empty) Online payments platform widely used by SaaS applications.
create devise_token_authenticatable tool
kind (empty) tool
name (empty) devise_token_authenticatable
slug (empty) devise_token_authenticatable
attrs (empty) {"category" => "library"}
description (empty) Extension for Devise that adds authentication-token support for API clients. Used in the Prevent Account Sharing talk...
short_description (empty) Devise extension adding token-based authentication for API clients.
create Account Sharing concept
kind (empty) concept
name (empty) Account Sharing
slug (empty) account-sharing
attrs (empty) {"category" => "practice"}
description (empty) Situation in a paid-subscription application where one user shares their credentials with friends, family or stranger...
short_description (empty) Users reusing paid credentials with others, hurting subscription revenue.
create Login Session Tracking concept
kind (empty) concept
name (empty) Login Session Tracking
slug (empty) login-session-tracking
attrs (empty) {"category" => "pattern"}
description (empty) Pattern of creating a database record for every user login and injecting its id into the browser's cookie session, so...
short_description (empty) Persisting each user login as a database record identified via cookies.
create Selective MFA Rollout concept
kind (empty) concept
name (empty) Selective MFA Rollout
slug (empty) selective-mfa-rollout
attrs (empty) {"category" => "pattern"}
description (empty) Risk-management pattern from the Prevent Account Sharing talk: instead of turning MFA on for every user — which risks...
short_description (empty) Enabling MFA only for users flagged as violating account-sharing rules.
create Scaffolding Before Features concept
kind (empty) concept
name (empty) Scaffolding Before Features
slug (empty) scaffolding-before-features
attrs (empty) {"category" => "methodology"}
description (empty) Analogy drawn in the Prevent Account Sharing talk to the construction industry: before starting a building, scaffoldi...
short_description (empty) Collect data and define indicators before rolling out a risky feature.
create Music Education SaaS project
kind (empty) project
name (empty) Music Education SaaS
slug (empty) music-education-saas
attrs (empty) {"domain" => "music education", "status" => "active"}
description (empty) The application at the center of the Prevent Account Sharing talk. A Ruby on Rails product that sells online courses ...
short_description (empty) Rails application selling online classes and courses for musicians.
create Collect data before enabling risky features takeaway
kind (empty) takeaway
name (empty) Collect data before enabling risky features
slug (empty) collect-data-before-enabling-risky-features
attrs (empty) {"type" => "recommendation"}
description (empty) When you face implementing a feature whose impact on the product is hard to predict (like MFA), stop and think first:...
short_description (empty) Define indicators and capture data before rolling out hard-to-predict features.
create Learn SQL to analyze your product takeaway
kind (empty) takeaway
name (empty) Learn SQL to analyze your product
slug (empty) learn-sql-to-analyze-your-product
attrs (empty) {"type" => "recommendation"}
description (empty) Even with a BI tool like Metabase, preparing the data into meaningful charts required writing custom SQL. The speaker...
short_description (empty) Analyzing application indicators effectively requires writing custom SQL.
create MFA improves account-sharing health takeaway
kind (empty) takeaway
name (empty) MFA improves account-sharing health
slug (empty) mfa-improves-account-sharing-health
attrs (empty) {"type" => "insight"}
description (empty) Outcome reported in the Prevent Account Sharing talk: after enabling email-based MFA weekly for users with 4+ concurr...
short_description (empty) Selective MFA significantly reduces account sharing and boosts signups.
create Record CloudFront request headers on sessions takeaway
kind (empty) takeaway
name (empty) Record CloudFront request headers on sessions
slug (empty) record-cloudfront-request-headers-on-sessions
attrs (empty) {"type" => "lesson-learned"}
description (empty) AWS CloudFront has an optional feature that attaches IP, location, latitude/longitude and other details to every requ...
short_description (empty) CloudFront can enrich requests with IP/geo headers but accuracy is limited.
create Why a limit of four login sessions? question
kind (empty) question
name (empty) Why a limit of four login sessions?
slug (empty) why-a-limit-of-four-login-sessions
attrs (empty) {"answer_summary" => "The app has multiple device surfaces (desktop, mobile web, iOS, upcoming React Native), the bus...
description (empty) Audience member argues four devices per user is still generous — most people use one or two at a time. Andrei answers...
short_description (empty) Q&A: why was four chosen as the maximum concurrent sessions per user?
create How is MFA enabled per user — manual or automated? question
kind (empty) question
name (empty) How is MFA enabled per user — manual or automated?
slug (empty) how-is-mfa-enabled-per-user-manual-or-automated
attrs (empty) {"answer_summary" => "Automated: a SQL query on the login_sessions table identifies users with 4+ active sessions and...
description (empty) Audience asks whether enabling MFA per user is done manually or by automation. Andrei answers that a SQL query identi...
short_description (empty) Q&A: is flagging which users get MFA manual or script-driven?
create Do you protect against shared cookies? question
kind (empty) question
name (empty) Do you protect against shared cookies?
slug (empty) do-you-protect-against-shared-cookies
attrs (empty) {"answer_summary" => "No — the solution does not protect against sharing of raw session cookies."}
description (empty) Audience asks what happens if a sophisticated user shares their session cookies (not username/password) with someone ...
short_description (empty) Q&A: is cookie sharing between users mitigated?
create Why MFA via email and not authenticator app or SMS? question
kind (empty) question
name (empty) Why MFA via email and not authenticator app or SMS?
slug (empty) why-mfa-via-email-and-not-authenticator-app-or-sms
attrs (empty) {"answer_summary" => "Minimize user friction to avoid churn: no phone numbers on file (no SMS), authenticator apps ad...
description (empty) Audience asks why MFA via a second device or an authenticator app was considered unsuitable, and what made email MFA ...
short_description (empty) Q&A: rationale for picking email-based MFA.
create Do users just create new shared accounts to dodge MFA? question
kind (empty) question
name (empty) Do users just create new shared accounts to dodge MFA?
slug (empty) do-users-just-create-new-shared-accounts-to-dodge-mfa
attrs (empty) {"answer_summary" => "Not analyzed yet — acknowledged as a fair next step. Main win so far: revenue stopped dropping."}
description (empty) Audience asks whether users drop their accounts and simply create new ones with a new shared email to continue sharin...
short_description (empty) Q&A: have you checked whether flagged users re-register with a shared email?
create What does the application do? question
kind (empty) question
name (empty) What does the application do?
slug (empty) what-does-the-application-do
attrs (empty) {"answer_summary" => "A music-education SaaS that sells online courses/classes for musicians."}
description (empty) Closing audience question. Andrei answers that the application is an education platform for musicians that sells onli...
short_description (empty) Q&A: what is the product behind the case study?

Edges (42)

create Music Education SaaSusespaper_trail
context (empty) Installed to collect historical data.
relation (empty) uses
source_node_id (empty) bf2260ce-2012-408b-8636-402d443f48c4
target_node_id (empty) c94cfb12-f5f2-4321-be12-b73efd47e871
create Music Education SaaSusesDevise
context (empty) Base authentication stack.
relation (empty) uses
source_node_id (empty) bf2260ce-2012-408b-8636-402d443f48c4
target_node_id (empty) 9113bde3-534a-47d0-8333-e171c4b55e79
create Music Education SaaSusesdevise-two-factor
context (empty) Email-based MFA for flagged users.
relation (empty) uses
source_node_id (empty) bf2260ce-2012-408b-8636-402d443f48c4
target_node_id (empty) d05fd6e1-4c37-46a3-8f53-feaa90dc2fcf
update Andrei KaleshkaauthoredPrevent account sharing
context (empty) Andrei delivered this as his first English-language talk.
update Prevent account sharingpresented_atwroclove.rb 2024
context (empty) Talk given at wroclove.rb 2024.
create Prevent account sharingaboutAccount Sharing
context (empty) Entire talk is about detecting and reducing credential sharing.
relation (empty) about
source_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
target_node_id (empty) f35a0d81-c597-4f6b-880f-72e0f1466ade
create Prevent account sharingaboutLogin Session Tracking
context (empty) Introduces a login_sessions table as the core mechanism.
relation (empty) about
source_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
target_node_id (empty) 6e163e58-41c1-4ae0-b90d-489f3b10f748
create Prevent account sharingaboutSelective MFA Rollout
context (empty) Enables MFA only for users who violate the 4+ sessions rule.
relation (empty) about
source_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
target_node_id (empty) 9f8983a0-c0d7-4752-88ab-b401c55067e5
create Prevent account sharingaboutScaffolding Before Features
context (empty) Construction-scaffolding analogy motivates collecting data before rolling out MFA.
relation (empty) about
source_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
target_node_id (empty) fef4f998-1493-403f-be84-bc5b7be6f35d
create Prevent account sharingaboutMusic Education SaaS
context (empty) The case-study application.
relation (empty) about
source_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
target_node_id (empty) bf2260ce-2012-408b-8636-402d443f48c4
create Prevent account sharingaboutpaper_trail
context (empty) Used to start collecting historical data.
relation (empty) about
source_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
target_node_id (empty) c94cfb12-f5f2-4321-be12-b73efd47e871
create Prevent account sharingaboutMetabase
context (empty) Used to chart the indicators.
relation (empty) about
source_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
target_node_id (empty) 29e6eb96-90a0-4194-9745-1f0266d21b15
create Prevent account sharingaboutdevise-two-factor
context (empty) Gem used to implement email-based MFA on top of Devise.
relation (empty) about
source_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
target_node_id (empty) d05fd6e1-4c37-46a3-8f53-feaa90dc2fcf
create Prevent account sharingaboutDevise
context (empty) Base authentication gem; warden hooks are leveraged to manage login sessions.
relation (empty) about
source_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
target_node_id (empty) 9113bde3-534a-47d0-8333-e171c4b55e79
create Prevent account sharingaboutdevise_token_authenticatable
context (empty) Used to authenticate the iOS app.
relation (empty) about
source_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
target_node_id (empty) dba46ba1-d8f9-4ded-bb90-9a601e3242d5
create Prevent account sharingaboutAmazon CloudFront
context (empty) CloudFront headers (IP, geo, lat/long) are recorded on each login session.
relation (empty) about
source_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
target_node_id (empty) 5663b347-93f4-4252-99ce-4a2be65d8123
create Prevent account sharingaboutFingerprint
context (empty) Evaluated as a third-party solution and rejected.
relation (empty) about
source_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
target_node_id (empty) 590f34b9-17a9-4ada-9ebe-19170c5d0619
create Prevent account sharingaboutStripe
context (empty) Revenue on Stripe tracked as one of the indicators.
relation (empty) about
source_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
target_node_id (empty) e3389b72-3041-48ce-95c9-e1d0e2e23c8b
create Prevent account sharingaboutRuby on Rails
context (empty) The application is a Rails application.
relation (empty) about
source_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
target_node_id (empty) 7aac705a-0987-49f2-b665-9d4e08a6acee
create Music Education SaaSusesRuby on Rails
context (empty) Built on Rails.
relation (empty) uses
source_node_id (empty) bf2260ce-2012-408b-8636-402d443f48c4
target_node_id (empty) 7aac705a-0987-49f2-b665-9d4e08a6acee
create Music Education SaaSusesdevise_token_authenticatable
context (empty) Authenticates iOS clients.
relation (empty) uses
source_node_id (empty) bf2260ce-2012-408b-8636-402d443f48c4
target_node_id (empty) dba46ba1-d8f9-4ded-bb90-9a601e3242d5
create Music Education SaaSusesMetabase
context (empty) Charts indicators.
relation (empty) uses
source_node_id (empty) bf2260ce-2012-408b-8636-402d443f48c4
target_node_id (empty) 29e6eb96-90a0-4194-9745-1f0266d21b15
create Music Education SaaSusesAmazon CloudFront
context (empty) Fronts application requests and injects geo/IP headers.
relation (empty) uses
source_node_id (empty) bf2260ce-2012-408b-8636-402d443f48c4
target_node_id (empty) 5663b347-93f4-4252-99ce-4a2be65d8123
create Music Education SaaSusesStripe
context (empty) Billing and revenue tracking.
relation (empty) uses
source_node_id (empty) bf2260ce-2012-408b-8636-402d443f48c4
target_node_id (empty) e3389b72-3041-48ce-95c9-e1d0e2e23c8b
create Collect data before enabling risky featuresfrom_talkPrevent account sharing
context (empty) Core closing takeaway of the talk.
relation (empty) from_talk
source_node_id (empty) b24f144b-3636-46ed-a5f9-60b9082248e4
target_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
create Learn SQL to analyze your productfrom_talkPrevent account sharing
context (empty) Closing advice from the speaker.
relation (empty) from_talk
source_node_id (empty) 068c74c2-543a-4968-9043-9abf6c49b5d7
target_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
create MFA improves account-sharing healthfrom_talkPrevent account sharing
context (empty) Result reported after the selective MFA rollout.
relation (empty) from_talk
source_node_id (empty) 2b13ae1e-375f-4512-ada9-b54ec17c47d2
target_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
create Record CloudFront request headers on sessionsfrom_talkPrevent account sharing
context (empty) Lesson learned about CloudFront geolocation quality.
relation (empty) from_talk
source_node_id (empty) 3a5b7ea9-165a-4eac-920c-28a9ac4e57b0
target_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
create Collect data before enabling risky featuresaboutScaffolding Before Features
context (empty) Takeaway rephrases the scaffolding analogy.
relation (empty) about
source_node_id (empty) b24f144b-3636-46ed-a5f9-60b9082248e4
target_node_id (empty) fef4f998-1493-403f-be84-bc5b7be6f35d
create MFA improves account-sharing healthaboutSelective MFA Rollout
context (empty) Result of the selective MFA approach.
relation (empty) about
source_node_id (empty) 2b13ae1e-375f-4512-ada9-b54ec17c47d2
target_node_id (empty) 9f8983a0-c0d7-4752-88ab-b401c55067e5
create Record CloudFront request headers on sessionsaboutAmazon CloudFront
context (empty) About using CloudFront headers for session telemetry.
relation (empty) about
source_node_id (empty) 3a5b7ea9-165a-4eac-920c-28a9ac4e57b0
target_node_id (empty) 5663b347-93f4-4252-99ce-4a2be65d8123
create Why a limit of four login sessions?asked_atPrevent account sharing
context (empty) Q&A question at the talk.
relation (empty) asked_at
source_node_id (empty) 69d10a6a-cf2a-4f47-bd35-dae179412c6e
target_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
create How is MFA enabled per user — manual or automated?asked_atPrevent account sharing
context (empty) Q&A question at the talk.
relation (empty) asked_at
source_node_id (empty) 169d7d14-0d85-4071-a308-dd202ea91809
target_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
create Do you protect against shared cookies?asked_atPrevent account sharing
context (empty) Q&A question at the talk.
relation (empty) asked_at
source_node_id (empty) 367b0265-9700-43ed-8c3b-45e3eff90137
target_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
create Why MFA via email and not authenticator app or SMS?asked_atPrevent account sharing
context (empty) Q&A question at the talk.
relation (empty) asked_at
source_node_id (empty) e6fee7df-6611-46f0-aad0-9554520c2800
target_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
create Do users just create new shared accounts to dodge MFA?asked_atPrevent account sharing
context (empty) Q&A question at the talk.
relation (empty) asked_at
source_node_id (empty) dda5f080-2ca2-4e9b-a96e-7916c60c3014
target_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
create What does the application do?asked_atPrevent account sharing
context (empty) Closing Q&A question.
relation (empty) asked_at
source_node_id (empty) 2386e0f9-4c48-425e-8edf-216b33582fe2
target_node_id (empty) 516b9afb-2d96-4460-ba38-c190cebbc820
create Why MFA via email and not authenticator app or SMS?aboutdevise-two-factor
context (empty) About why the email factor was chosen over TOTP/SMS.
relation (empty) about
source_node_id (empty) e6fee7df-6611-46f0-aad0-9554520c2800
target_node_id (empty) d05fd6e1-4c37-46a3-8f53-feaa90dc2fcf
create Why a limit of four login sessions?aboutLogin Session Tracking
context (empty) Discusses the planned cap on concurrent login sessions.
relation (empty) about
source_node_id (empty) 69d10a6a-cf2a-4f47-bd35-dae179412c6e
target_node_id (empty) 6e163e58-41c1-4ae0-b90d-489f3b10f748
create How is MFA enabled per user — manual or automated?aboutSelective MFA Rollout
context (empty) About the automation that selects users for MFA.
relation (empty) about
source_node_id (empty) 169d7d14-0d85-4071-a308-dd202ea91809
target_node_id (empty) 9f8983a0-c0d7-4752-88ab-b401c55067e5
create What does the application do?aboutMusic Education SaaS
context (empty) Reveals the application domain.
relation (empty) about
source_node_id (empty) 2386e0f9-4c48-425e-8edf-216b33582fe2
target_node_id (empty) bf2260ce-2012-408b-8636-402d443f48c4
create Andrei Kaleshkaattendedwroclove.rb 2024
context (empty) Spoke at the conference.
relation (empty) attended
source_node_id (empty) 3280fd8c-3dfa-4d42-bf04-970c90024d3d
target_node_id (empty) 748e0524-a102-41d4-97dc-575881583d91

Read set

486 nodes

tool CircleCI list_nodes_by_kind tool Citus list_nodes_by_kind tool ClickHouse list_nodes_by_kind+search_nodes tool Clojure list_nodes_by_kind tool ClojureScript list_nodes_by_kind tool CockroachDB list_nodes_by_kind tool Codecov list_nodes_by_kind tool git bisect list_nodes_by_kind tool GitHub Actions list_nodes_by_kind tool GitHub Releases list_nodes_by_kind tool Glimmer list_nodes_by_kind tool minitest list_nodes_by_kind tool Miro list_nodes_by_kind tool MobX list_nodes_by_kind tool mruby list_nodes_by_kind tool Mutant list_nodes_by_kind tool MySQL list_nodes_by_kind tool .NET list_nodes_by_kind tool New Relic list_nodes_by_kind tool WebP list_nodes_by_kind tool Webpacker list_nodes_by_kind tool webpagetest.org list_nodes_by_kind+search_nodes tool Wolfram Language list_nodes_by_kind tool Workspaces list_nodes_by_kind tool Xcode list_nodes_by_kind tool Yacc list_nodes_by_kind tool Zencoder list_nodes_by_kind tool Zoom list_nodes_by_kind takeaway Rate-limit login forms with a skip path search_nodes concept Timing-Based Enumeration search_nodes concept Multi-Tenancy search_nodes concept Checks, Tests, Reviews and Flags search_nodes takeaway Gradual migration via steps search_nodes event Advent of Code list_nodes_by_kind event Brighton Ruby list_nodes_by_kind event EmberConf list_nodes_by_kind event Eventide Summit 2023 list_nodes_by_kind event Hacktoberfest list_nodes_by_kind event KanDDDinsky list_nodes_by_kind event Rails World list_nodes_by_kind event wroclove.rb 2018 list_nodes_by_kind+search_nodes event wroclove.rb 2019 list_nodes_by_kind+search_nodes event wroclove.rb 2022 list_nodes_by_kind+search_nodes event wroclove.rb 2023 list_nodes_by_kind+search_nodes event wroclove.rb 2024 list_nodes_by_kind+search_nodes event wroclove.rb 2025 list_nodes_by_kind event wroclove.rb 2026 list_nodes_by_kind+search_nodes person Aaron Patterson list_nodes_by_kind person Adam Okoń list_nodes_by_kind person Adam Piotrowski list_nodes_by_kind person Adrian Marin list_nodes_by_kind person Agnieszka Małaszkiewicz list_nodes_by_kind person Akira Matsuda list_nodes_by_kind person Alberto Brandolini list_nodes_by_kind person Amanda list_nodes_by_kind person Amelia Walter-Dzikowska list_nodes_by_kind person Andrei Bondarev list_nodes_by_kind person Andrei Kaleshka list_nodes_by_kind person Andrew Kane list_nodes_by_kind person Andrey Sitnik list_nodes_by_kind person Andrzej Krzywda list_nodes_by_kind person Andrzej Śliwa list_nodes_by_kind person Andy Kroll list_nodes_by_kind person Andy Maleh list_nodes_by_kind person Anita Jaszewska list_nodes_by_kind person Anton Davydov list_nodes_by_kind person Armin Pašalić list_nodes_by_kind person Arturo Herrero list_nodes_by_kind person Ayush Newatia list_nodes_by_kind person Bartosz Blimke list_nodes_by_kind person Bertrand Meyer list_nodes_by_kind person Caio Almeida list_nodes_by_kind person Charles Nutter list_nodes_by_kind person Chikahiro Tokoro list_nodes_by_kind person Chris Oliver list_nodes_by_kind person Claude Lévi-Strauss list_nodes_by_kind person Damir Zekić list_nodes_by_kind person Dan Kubb list_nodes_by_kind person David Halasz list_nodes_by_kind person DHH list_nodes_by_kind person Dimitry Salahutdinov list_nodes_by_kind person Elisabeth Kübler-Ross list_nodes_by_kind person Emiliano Della Casa list_nodes_by_kind person Eric Evans list_nodes_by_kind person Eric Normand list_nodes_by_kind person Erwin Kroon list_nodes_by_kind person Ethan Garofolo list_nodes_by_kind person Galileo Galilei list_nodes_by_kind person Garry Kasparov list_nodes_by_kind person G.K. Chesterton list_nodes_by_kind person Gottfried Wilhelm Leibniz list_nodes_by_kind person Greg Molnar list_nodes_by_kind person Greg Navis list_nodes_by_kind person Greg Young list_nodes_by_kind person Isaac Newton list_nodes_by_kind person Ismael Celis list_nodes_by_kind person Ivan Nemytchenko list_nodes_by_kind person Jakub Rodzik list_nodes_by_kind person Jan list_nodes_by_kind person Janko Marohnic list_nodes_by_kind person Jared list_nodes_by_kind person Joel Drapper list_nodes_by_kind person John Gallagher list_nodes_by_kind person Josef Strzibny list_nodes_by_kind person José Valim list_nodes_by_kind person Julik Tarkhanov list_nodes_by_kind person Karol Szuster list_nodes_by_kind person Koichi Sasada list_nodes_by_kind person Krzysztof Hasiński list_nodes_by_kind person Kuba Suder list_nodes_by_kind person Louis Antonopoulos list_nodes_by_kind person Lucian Ghinda list_nodes_by_kind person Łukasz Reszke list_nodes_by_kind person Łukasz Szydło list_nodes_by_kind person Maciej Rząsa list_nodes_by_kind person Maciek list_nodes_by_kind person Magnus Carlsen list_nodes_by_kind person Marco Heimeshoff list_nodes_by_kind person Mariusz Gil list_nodes_by_kind person Markus Schirp list_nodes_by_kind person Mark Zuckerberg list_nodes_by_kind person Martin Fowler list_nodes_by_kind person Martin Gamsjaeger list_nodes_by_kind person Masahiro Nakagawa list_nodes_by_kind person Mateusz Nowak list_nodes_by_kind person Matthias Verraes list_nodes_by_kind person Matz list_nodes_by_kind person Max Howell list_nodes_by_kind person Michał Bronikowski list_nodes_by_kind person Michał (Helpling) list_nodes_by_kind person Michal Matyas list_nodes_by_kind person Michał Młoźniak list_nodes_by_kind person Michał Zajączkowski de Mezer list_nodes_by_kind person Mike Perham list_nodes_by_kind person Miron Marczuk list_nodes_by_kind person Nate Berkopec list_nodes_by_kind person Nathan Ladd list_nodes_by_kind person Nick Schwaderer list_nodes_by_kind person Nick Sutterer list_nodes_by_kind person Nicolò Rebughini list_nodes_by_kind person Norbert Wójtowicz list_nodes_by_kind person Pavo list_nodes_by_kind person Paweł Dąbrowski list_nodes_by_kind person Paweł Pacana list_nodes_by_kind person Paweł Pokrywka list_nodes_by_kind person Paweł Strzałkowski list_nodes_by_kind person Peter Solnica list_nodes_by_kind person Piotr Solnica list_nodes_by_kind person Radoslav Stankov list_nodes_by_kind person Rafael Zamaris list_nodes_by_kind person Rafał Cymerys list_nodes_by_kind person Rafał Rothenberger list_nodes_by_kind person René Descartes list_nodes_by_kind person Rich Hickey list_nodes_by_kind person Romeu Moura list_nodes_by_kind person Ryan Townsend list_nodes_by_kind person Scott Bell list_nodes_by_kind person Scott Bellware list_nodes_by_kind person Scott Wlaschin list_nodes_by_kind person Sebastian Wilgosz list_nodes_by_kind person Sergey Ivanov list_nodes_by_kind person Sergey Sergyenko list_nodes_by_kind person Seth Horsley list_nodes_by_kind person Sharon Rosner list_nodes_by_kind person Shona list_nodes_by_kind person Shugo Maeda list_nodes_by_kind person Stefan Wintermeyer list_nodes_by_kind person Stephan Schmidt list_nodes_by_kind person Stephen Margheim list_nodes_by_kind person Stephen Wolfram list_nodes_by_kind person Steve Ballmer list_nodes_by_kind person Szymon Fiedler list_nodes_by_kind person Szymon Kulec list_nodes_by_kind person Tomasz Donarski list_nodes_by_kind person Victor Shepelev list_nodes_by_kind person Vladimir Dementyev list_nodes_by_kind person Wojtek Wrona list_nodes_by_kind person Xavier Noria list_nodes_by_kind person Yaroslav Shmarov list_nodes_by_kind person Yatish Mehta list_nodes_by_kind person Yehuda Katz list_nodes_by_kind tool Abbrev list_nodes_by_kind tool Action Cable list_nodes_by_kind tool actions/checkout list_nodes_by_kind tool actions/upload-artifact list_nodes_by_kind+search_nodes tool Active Admin list_nodes_by_kind tool activerecord-multi-tenant list_nodes_by_kind+search_nodes tool Active Storage list_nodes_by_kind tool acts_as_api list_nodes_by_kind tool acts_as_paranoid list_nodes_by_kind tool acts_as_tenant list_nodes_by_kind tool AES list_nodes_by_kind tool aggregate_root list_nodes_by_kind+search_nodes tool Akamai list_nodes_by_kind tool Amazon ECS list_nodes_by_kind+search_nodes tool Amazon Elastic Transcoder list_nodes_by_kind+search_nodes tool Amazon Route 53 list_nodes_by_kind+search_nodes tool Amazon S3 list_nodes_by_kind+search_nodes tool Amazon Web Services list_nodes_by_kind tool Android Studio list_nodes_by_kind tool Angular list_nodes_by_kind tool anyway_config list_nodes_by_kind tool Apache HTTP Server list_nodes_by_kind tool Apache Kafka list_nodes_by_kind tool Apartment list_nodes_by_kind tool Apple QuickTime list_nodes_by_kind tool AppSignal list_nodes_by_kind tool Argon2 list_nodes_by_kind+search_nodes tool async list_nodes_by_kind tool Avo list_nodes_by_kind tool awk list_nodes_by_kind tool AWS DataSync list_nodes_by_kind+search_nodes tool AWS Elastic Load Balancer list_nodes_by_kind+search_nodes tool AWS Lambda list_nodes_by_kind+search_nodes tool Babel list_nodes_by_kind tool bcrypt list_nodes_by_kind tool BME280 list_nodes_by_kind+search_nodes tool Brotli list_nodes_by_kind tool Browserslist list_nodes_by_kind tool bump gem list_nodes_by_kind+search_nodes tool C++ list_nodes_by_kind tool CarrierWave list_nodes_by_kind tool carrierwave_backgrounder list_nodes_by_kind tool carrierwave-video list_nodes_by_kind tool Cassandra list_nodes_by_kind tool Cells list_nodes_by_kind tool Celluloid list_nodes_by_kind tool ChatGPT list_nodes_by_kind+search_nodes tool chess.com list_nodes_by_kind tool colors.js list_nodes_by_kind tool Cordova list_nodes_by_kind tool core-js list_nodes_by_kind tool Crystal list_nodes_by_kind tool Crystal Ball list_nodes_by_kind tool cssbundling-rails list_nodes_by_kind tool curl list_nodes_by_kind tool curses list_nodes_by_kind tool Datadog list_nodes_by_kind tool DBM / SDBM / GDBM list_nodes_by_kind tool Deface list_nodes_by_kind tool Dependency list_nodes_by_kind+search_nodes tool Devise list_nodes_by_kind+search_nodes tool devise_token_auth list_nodes_by_kind+search_nodes tool Discourse list_nodes_by_kind tool Distributed Ruby list_nodes_by_kind tool Django list_nodes_by_kind tool Docker list_nodes_by_kind tool dry-cli list_nodes_by_kind tool dry-container list_nodes_by_kind tool dry-struct list_nodes_by_kind tool dry-types list_nodes_by_kind tool dry-validation list_nodes_by_kind tool EDN list_nodes_by_kind tool Elasticsearch list_nodes_by_kind tool Electron list_nodes_by_kind tool Elixir list_nodes_by_kind tool Elm list_nodes_by_kind tool Ember.js list_nodes_by_kind tool Entity Store list_nodes_by_kind tool Erlang list_nodes_by_kind tool esbuild list_nodes_by_kind tool ESLint list_nodes_by_kind tool ESP32 list_nodes_by_kind tool ESP-IDF list_nodes_by_kind tool Ethereum list_nodes_by_kind tool EventMachine list_nodes_by_kind tool FactoryBot list_nodes_by_kind tool Faker list_nodes_by_kind tool Faker.js list_nodes_by_kind tool Falcor list_nodes_by_kind tool FFmpeg list_nodes_by_kind tool ffprobe list_nodes_by_kind tool file (Unix command) list_nodes_by_kind tool find-slow script list_nodes_by_kind tool fish shell list_nodes_by_kind tool flag_shih_tzu list_nodes_by_kind tool Flow list_nodes_by_kind tool FreeRTOS list_nodes_by_kind tool Fulcro list_nodes_by_kind tool Fulcro Inspect list_nodes_by_kind tool Go list_nodes_by_kind tool Golf Script list_nodes_by_kind tool Grafana list_nodes_by_kind+search_nodes tool GraphQL list_nodes_by_kind+search_nodes tool gRPC list_nodes_by_kind tool Guard list_nodes_by_kind tool gzip list_nodes_by_kind tool Hanami list_nodes_by_kind tool hanami-events list_nodes_by_kind tool heapy list_nodes_by_kind tool Heckle list_nodes_by_kind tool Heroku list_nodes_by_kind tool Homebrew list_nodes_by_kind tool Hotwire list_nodes_by_kind tool htmx list_nodes_by_kind tool HTTP/2 list_nodes_by_kind tool ImageMagick list_nodes_by_kind tool image_processing gem list_nodes_by_kind tool Initializer list_nodes_by_kind tool interactor list_nodes_by_kind tool Iodine list_nodes_by_kind tool IronRuby list_nodes_by_kind tool iTerm2 list_nodes_by_kind tool Java list_nodes_by_kind tool Jekyll list_nodes_by_kind tool JIRA list_nodes_by_kind tool jq list_nodes_by_kind tool JRuby list_nodes_by_kind tool jsbundling-rails list_nodes_by_kind tool JSON API Resources list_nodes_by_kind tool Jumpstart Pro list_nodes_by_kind tool Kerbal Space Program list_nodes_by_kind tool Klaviyo list_nodes_by_kind+search_nodes tool knapsack_pro list_nodes_by_kind tool Kotlin list_nodes_by_kind tool Laravel list_nodes_by_kind tool Leela Chess Zero list_nodes_by_kind tool left-pad list_nodes_by_kind tool libvips list_nodes_by_kind tool Lichess list_nodes_by_kind tool log4j list_nodes_by_kind tool Logux list_nodes_by_kind tool macOS say command list_nodes_by_kind tool Matrix (Ruby stdlib) list_nodes_by_kind tool merb list_nodes_by_kind tool MessageDB list_nodes_by_kind tool methods gem list_nodes_by_kind tool Midjourney list_nodes_by_kind tool Mimic list_nodes_by_kind tool mini_magick list_nodes_by_kind tool MinIO list_nodes_by_kind tool nginx list_nodes_by_kind tool Node.js list_nodes_by_kind tool npm list_nodes_by_kind tool Opal list_nodes_by_kind tool OptionParser list_nodes_by_kind tool Outlook list_nodes_by_kind tool Paperclip list_nodes_by_kind+search_nodes tool parallel_tests list_nodes_by_kind tool Pathom list_nodes_by_kind tool Perl list_nodes_by_kind tool PgBouncer list_nodes_by_kind tool PgHero list_nodes_by_kind+search_nodes tool Phlex list_nodes_by_kind tool Phoenix list_nodes_by_kind tool Phoenix LiveView list_nodes_by_kind tool PHP list_nodes_by_kind tool Plezi list_nodes_by_kind tool PostgreSQL list_nodes_by_kind tool power_assert list_nodes_by_kind tool Power BI list_nodes_by_kind+search_nodes tool Preact list_nodes_by_kind tool Prime (Ruby stdlib) list_nodes_by_kind tool PR Labeler list_nodes_by_kind tool Prometheus list_nodes_by_kind tool Protocol Buffers list_nodes_by_kind tool PStore list_nodes_by_kind tool Puma list_nodes_by_kind tool Pundit list_nodes_by_kind tool PureScript list_nodes_by_kind tool QEMU list_nodes_by_kind tool Rack list_nodes_by_kind tool Rack::Static list_nodes_by_kind tool Rails 5.2 list_nodes_by_kind tool rails_event_store list_nodes_by_kind+search_nodes tool Rails Event Store Event Browser list_nodes_by_kind tool RBS list_nodes_by_kind tool React list_nodes_by_kind tool React Native list_nodes_by_kind tool RealtimeBoard list_nodes_by_kind+search_nodes tool Redis list_nodes_by_kind tool Redmine list_nodes_by_kind tool Redux list_nodes_by_kind tool Refile list_nodes_by_kind tool Reform list_nodes_by_kind tool Release Drafter list_nodes_by_kind tool Representable list_nodes_by_kind tool RequestStore list_nodes_by_kind tool reviewdog list_nodes_by_kind tool ROM list_nodes_by_kind tool RSpec list_nodes_by_kind tool Rubinius list_nodes_by_kind tool RuboCop list_nodes_by_kind tool Ruby list_nodes_by_kind tool Ruby Browser Detection Gem list_nodes_by_kind tool ruby-contracts list_nodes_by_kind tool Ruby Event Store list_nodes_by_kind+search_nodes tool RubyGems list_nodes_by_kind+search_nodes tool Ruby on Rails list_nodes_by_kind tool Ruby Packer list_nodes_by_kind tool ruby/setup-ruby list_nodes_by_kind tool Rust list_nodes_by_kind tool Sequel list_nodes_by_kind tool server-engine list_nodes_by_kind tool Shrine list_nodes_by_kind tool Sidekiq list_nodes_by_kind tool Solidus list_nodes_by_kind tool Sonic Pi list_nodes_by_kind tool Sorbet list_nodes_by_kind tool Spree list_nodes_by_kind tool Spring list_nodes_by_kind tool SQLite list_nodes_by_kind tool Standard RB list_nodes_by_kind tool Stimulus list_nodes_by_kind tool StimulusReflex list_nodes_by_kind tool Stockfish list_nodes_by_kind tool Strada list_nodes_by_kind tool streamio-ffmpeg list_nodes_by_kind tool Sumo Logic list_nodes_by_kind tool Swift list_nodes_by_kind tool Sync Space VR list_nodes_by_kind tool Tailwind CSS list_nodes_by_kind tool TestBench list_nodes_by_kind tool test-prof list_nodes_by_kind tool ThingSpeak list_nodes_by_kind tool Thor list_nodes_by_kind tool Trailblazer list_nodes_by_kind tool Traveling Ruby list_nodes_by_kind+search_nodes tool TruffleRuby list_nodes_by_kind tool TSort list_nodes_by_kind tool TTY toolkit list_nodes_by_kind tool Turbo list_nodes_by_kind tool Turbo Drive list_nodes_by_kind tool Turbo Frames list_nodes_by_kind tool Turbo Laravel list_nodes_by_kind tool Turbo Native list_nodes_by_kind tool Turbo Streams list_nodes_by_kind tool TypeScript list_nodes_by_kind tool Tyrant list_nodes_by_kind+search_nodes tool Unicorn list_nodes_by_kind tool Uppy list_nodes_by_kind tool ViewComponent list_nodes_by_kind talk Prevent account sharing search_nodes+get_node_edges company Auth0 search_nodes concept Open Banking Provider search_nodes concept Direct Upload to Cloud search_nodes concept Logux Proxy search_nodes takeaway Contribute to Arkency aggregates repository search_nodes concept Unique Per-Site Email Leak Detection search_nodes company Transloadit search_nodes takeaway Trailblazer tracing saves thousands of debugging hours search_nodes project logux-rails search_nodes concept Trailblazer Workflow search_nodes takeaway Use Logux for optimistic UI with Rails search_nodes question Can parts of Eventide, Rails Event Store and Trailblazer be combined in one project? search_nodes talk Better ActiveRecord IRB Output Gem Lightning Talk search_nodes concept EXPLAIN / EXPLAIN ANALYZE search_nodes question Cross-region business reporting aggregation search_nodes takeaway UI Data Is Never Truly Fresh search_nodes takeaway Name Things To Find Their Properties search_nodes takeaway Use devise_token_auth for API tokens search_nodes question Using external auth providers instead of Devise search_nodes question Have you reported these issues upstream to Devise? search_nodes talk Devise pitfalls and way to tighten security search_nodes takeaway Limit Devise password length to 72 bytes search_nodes concept ActiveRecord Encryption search_nodes concept DNS geolocation routing search_nodes takeaway Use 302 not 301 for region redirects search_nodes takeaway CDN is not always the answer search_nodes takeaway Add SEO alternate links across regions search_nodes concept Magic bytes MIME detection search_nodes concept Command UUID Deduplication search_nodes concept Data Tokenization search_nodes talk Sonic Pi Music Performance search_nodes talk Building LLM powered applications in Ruby search_nodes talk One machine please, make it Turing search_nodes talk No 'Pundit' Intended search_nodes resource Short Ruby Newsletter search_nodes project gemcheck search_nodes talk Phantom Migrations Gem Lightning Talk search_nodes takeaway Use Ruby Packer for Single-Binary CLIs search_nodes takeaway Use Refinements for Coordinated Modernization search_nodes talk Fantastic Databases and Where to Find Them search_nodes takeaway Sign serverlessforruby.org petition search_nodes project Trezy search_nodes project rails_event_store/ecommerce search_nodes company SpaceX search_nodes question Should 'add item' be split into add-new and increase-existing? search_nodes talk Event Sourcing and Actor model in Ruby search_nodes concept Event Sourcing search_nodes talk Introduction To Event Sourcing How To Use It With Ruby search_nodes takeaway Don't be afraid of event sourcing search_nodes takeaway Adopt event sourcing gradually search_nodes talk Applying CQRS & Event Sourcing on Rails applications search_nodes question Can you do DDD without event sourcing? search_nodes takeaway Hiring For Event Sourcing Trade-off search_nodes

2 edges