Merge pull request #1367 from basecamp/boxcar

Fizzy -> Boxcar
This commit is contained in:
Jason Zimdars
2025-10-22 14:15:58 -07:00
committed by GitHub
38 changed files with 115 additions and 141 deletions
+58 -83
View File
@@ -24,6 +24,7 @@
margin-inline: auto;
max-inline-size: var(--main-width);
overflow-x: auto;
overflow-y: hidden;
position: relative;
/* When it has something expanded */
@@ -65,7 +66,7 @@
inline-size: var(--column-width-expanded);
position: relative;
scroll-snap-align: start;
transition: inline-size 200ms ease-out;
transition: inline-size 300ms ease-out;
will-change: inline-size;
.no-transitions & {
@@ -101,7 +102,9 @@
/* The wrapper around the cards used to clip overflow while transitioning.
* Also, don't resize cards while transitioning to avoid reflow. */
.cards__list {
display: grid;
align-items: flex-end; /* use flex-start to wipe from left */
display: flex;
flex-direction: column;
gap: var(--cards-gap);
margin-block-start: -1ch;
margin-inline: -1ch;
@@ -462,93 +465,12 @@
/* ------------------------------------------------------------------------ */
.cards--considering {
--gradient-opacity: 25%;
--bottom-gradient-size: 4em;
padding-bottom: var(--bottom-gradient-size);
position: relative;
@supports(mask: linear-gradient(black)) {
&:before {
background-image: linear-gradient(90deg,
transparent 0%,
color-mix(in srgb, var(--color-considering) var(--gradient-opacity), transparent) 33%,
color-mix(in srgb, var(--color-considering) var(--gradient-opacity), transparent) 66%,
transparent 100%);
content: "";
inset: calc(var(--column-width-collapsed) + var(--block-space-half)) 0 0 0;
position: absolute;
z-index: 0;
}
&:after {
background: linear-gradient(90deg,
color-mix(in oklch, var(--color-considering) 0%, transparent) 0%,
color-mix(in oklch, var(--color-considering) 20%, transparent) 25%,
color-mix(in oklch, var(--color-considering) 20%, transparent) 50%,
color-mix(in oklch, var(--color-considering) 0%, transparent) 100%);
content: "";
inset: calc(var(--column-width-collapsed) + var(--block-space-half)) 0 0 0;
mask: var(--wavy-background-mask);
position: absolute;
z-index: -1;
}
}
@media (min-width: 640px) {
padding-inline: var(--cards-gap);
}
@media (prefers-color-scheme: dark) {
--gradient-opacity: 10%;
}
.cards__decoration {
--gradient-opacity: 30%;
--size: 2.2em;
background-color: var(--color-canvas);
background-image: radial-gradient(ellipse at bottom,
color-mix(in srgb, var(--color-considering) var(--gradient-opacity), transparent) 0%,
transparent 70%);
block-size: var(--size);
inline-size: 100%;
inset: calc(var(--column-width-collapsed) + var(--block-space) - var(--size)) 0 auto 0;
position: absolute;
z-index: -1;
@media (prefers-color-scheme: dark) {
--gradient-opacity: 15%;
}
@supports(mask: radial-gradient(black)) {
--gradient-opacity: 30%;
&:before {
background: radial-gradient(ellipse at bottom,
color-mix(in srgb, var(--color-considering) var(--gradient-opacity), transparent) 0%,
transparent 70%);
content: "";
inset: 0;
mask: radial-gradient(6px at 50% calc(100% + 3px),
transparent calc(99% - 2px),
black calc(101% - 2px) 99%, transparent 101%) calc(50% - 8px) calc(50% - 3px + .5px)/16px 6px,
radial-gradient(6px at 50% -3px, transparent calc(99% - 2px), black calc(101% - 2px) 99%, transparent 101%) 50% calc(50% + 3px)/16px 6px;
position: absolute;
z-index: 0;
}
}
}
.cards__decoration-end {
background: linear-gradient( transparent 0%, var(--color-canvas) 90%);
block-size: var(--bottom-gradient-size);
content: "";
inset: auto 0 0;
position: absolute;
z-index: 1;
}
.card {
--avatar-size: 2.75em;
--text-small: 1.1em;
@@ -589,6 +511,59 @@
}
}
/* Pinstripes
/* -------------------------------------------------------------------------- */
.pinstripes {
--pinstripe-color: oklch(var(--lch-blue-light));
--pinstripe-spacing: 5px;
background: repeating-linear-gradient(
90deg,
var(--pinstripe-color),
var(--pinstripe-color) 1px,
transparent 1px,
transparent var(--pinstripe-spacing)
);
inset: -24px 0;
overflow: hidden;
position: absolute;
/* Fade */
&:before,
&:after {
background: radial-gradient(
circle at center bottom,
transparent,
transparent 65%,
var(--color-canvas) 70%,
var(--color-canvas)
);
block-size: 480px;
inline-size: 200%;
content: "";
inset: 0;
position: absolute;
translate: -25% 0;
}
&:after {
inset-block: auto 0;
rotate: 180deg;
}
}
.pinstripes--alt {
--pinstripe-spacing: 10px; /* 2x previous spacing value */
}
.pinstripes__fade {
background: linear-gradient(to right, var(--color-canvas), transparent 10%, transparent 90%, var(--color-canvas));
content: "";
inset: 0;
position: absolute;
}
/* Collection tools
/* -------------------------------------------------------------------------- */
@@ -11,7 +11,7 @@ class Conversations::MessagesController < ApplicationController
rescue Ai::Quota::UsageExceedsQuotaError
render json: { error: "You've depleted your quota" }, status: :too_many_requests
rescue Conversation::InvalidStateError
render json: { error: "Fizzy is still working on an answer to your last question" }, status: :conflict
render json: { error: "Boxcar is still working on an answer to your last question" }, status: :conflict
end
private
+1 -1
View File
@@ -1,6 +1,6 @@
module ApplicationHelper
def page_title_tag
tag.title @page_title || "Fizzy"
tag.title @page_title || "Boxcar"
end
def icon_tag(name, **options)
@@ -9,7 +9,7 @@ class Conversation::Message::ResponseGeneratorJob < ApplicationJob
retry_on RubyLLM::RateLimitError, RubyLLM::ServiceUnavailableError, wait: 2.seconds, attempts: 3 do |job, error|
message = job.arguments.first
message.conversation.respond("Fizzy is very busy at the moment. Please try again in a minute.")
message.conversation.respond("Boxcar is very busy at the moment. Please try again in a minute.")
end
def perform(message)
+1 -1
View File
@@ -1,5 +1,5 @@
class ApplicationMailer < ActionMailer::Base
default from: "The Fizzy team <support@37signals.com>"
default from: "The Boxcar team <support@37signals.com>"
layout "mailer"
append_view_path Rails.root.join("app/views/mailers")
+1 -1
View File
@@ -11,6 +11,6 @@ class Notification::BundleMailer < ApplicationMailer
mail \
to: bundle.user.email_address,
subject: "Latest Activity in Fizzy"
subject: "Latest Activity in Boxcar"
end
end
@@ -1,5 +1,5 @@
<div class="settings__panel settings__panel--entropy panel shadow center">
<h2 class="divider txt-large">Auto close</h2>
<p class="margin-none-block-start">Fizzy doesnt let stale cards stick around forever. Cards automatically close as “Not Now” without activity for specific period of time. <em>This is the default, global setting — you can override it on each Board.</em></p>
<p class="margin-none-block-start">Boxcar doesnt let stale cards stick around forever. Cards automatically close as “Not Now” without activity for specific period of time. <em>This is the default, global setting — you can override it on each board.</em></p>
<%= render "entropy/auto_close", model: account.default_entropy_configuration, url: account_entropy_configuration_path %>
</div>
@@ -0,0 +1,4 @@
<div class="pinstripes"></div>
<div class="pinstripes pinstripes--alt">
<div class="pinstripes__fade"></div>
</div>
+2 -2
View File
@@ -17,8 +17,8 @@
<section class="settings">
<div class="settings__panel settings__panel--users panel shadow center">
<header>
<h2 class="divider txt-large">Name and Access</h2>
<div>Choose who can access this Board</div>
<h2 class="divider txt-large">Name and access</h2>
<div>Choose who can access this board</div>
</header>
<%= form_with model: @collection, class: "display-contents", data: {
@@ -1,7 +1,7 @@
<%= turbo_frame_tag @collection, :entropy_configuration do %>
<div class="margin-block-end">
<h2 class="divider txt-large">Auto close</h2>
<p class="margin-none-block-start">Fizzy doesnt let stale cards stick around forever. Cards automatically close as “Not now” if no one updates, comments, or moves a card for…</p>
<p class="margin-none-block-start">Boxcar doesnt let stale cards stick around forever. Cards automatically close as “Not now” if no one updates, comments, or moves a card for…</p>
<%= render "entropy/auto_close", model: collection, url: collection_entropy_configuration_path(collection) %>
</div>
<% end %>
+2 -2
View File
@@ -1,8 +1,8 @@
<% if Current.user.collections.many? %>
<%= form_with model: collection, class: "txt-align-center margin-block-start-auto", method: :delete do |form| %>
<%= form.button class: "btn txt-negative borderless txt-small", data: { turbo_confirm: "Are you sure you want to permanently delete this Board?" } do %>
<%= form.button class: "btn txt-negative borderless txt-small", data: { turbo_confirm: "Are you sure you want to permanently delete this board?" } do %>
<%= icon_tag "trash" %>
<span>Delete this Board</span>
<span>Delete this board</span>
<% end %>
<% end %>
<% end %>
@@ -1,7 +1,7 @@
<%= turbo_frame_tag @collection, :publication do %>
<header>
<h2 class="divider txt-large">Public link</h2>
<div>Turn on the Public link to share this Board with anyone in the world. They wont need to log in and they wont be able to see anything else in Fizzy.</div>
<div>Turn on the Public link to share this board with anyone in the world. They wont need to log in and they wont be able to see anything else in Boxcar.</div>
</header>
<% if collection.published? %>
+1 -1
View File
@@ -14,7 +14,7 @@
<label for="collection_all_access" class="switch">
<%= form.check_box :all_access, class: "switch__input", checked: collection.all_access?, data: { action: "change->toggle-class#toggle" } %>
<span class="switch__btn round"></span>
<span class="for-screen-reader">Give everyone access to this Board</span>
<span class="for-screen-reader">Give everyone access to this board</span>
</label>
</li>
+1 -1
View File
@@ -1,4 +1,4 @@
<% @page_title = "Create a new Board" %>
<% @page_title = "Create a new board" %>
<% content_for :header do %>
<%= render "filters/menu" %>
+2 -3
View File
@@ -2,7 +2,8 @@
data-drag-and-drop-target="container"
data-action="turbo:before-morph-attribute->collapsible-columns#preventToggle"
data-drag-and-drop-url="<%= columns_card_drops_stream_path("__id__") %>">
<div class="cards__decoration"></div>
<%= render "collections/columns/pinstripes" %>
<header class="cards__expander">
<h2 class="cards__expander-title position-relative">The Stream</h2>
@@ -19,6 +20,4 @@
<%= render "collections/columns/list", cards: page.records, draggable: true %>
<% end %>
<% end %>
<div class="cards__decoration-end"></div>
</section>
+1 -1
View File
@@ -8,7 +8,7 @@
<%= render "conversations/composer/thinking_indicator", conversation: nil %>
<%= form.hidden_field :client_message_id, data: { conversation__composer_target: "clientMessageIdInput" } %>
<%= form.label :content, "Ask Fizzy", class: "font-weight-black txt-nowrap" %>
<%= form.label :content, "Ask Boxcar", class: "font-weight-black txt-nowrap" %>
<%= form.text_field :content,
autofocus: true,
autocomplete: "off",
+1 -1
View File
@@ -29,7 +29,7 @@
<iframe
frameborder="0"
src="https://www.youtube.com/embed/kAgUQbD9Wc0?si=IIjKjUIk5PchL0-a"
title="Fizzy Beta orientation"
title="Boxcar Beta orientation"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen></iframe>
+1 -1
View File
@@ -3,5 +3,5 @@
action: "click->dialog#open:stop keydown.j@document->hotkey#click keydown.meta+j@document->hotkey#click keydown.ctrl+j@document->hotkey#click",
controller: "hotkey" } do %>
<span><%= image_tag "fizzy-logo.png" %></span>
<strong class="txt-medium overflow-ellipsis margin-none">Fizzy</strong>
<strong class="txt-medium overflow-ellipsis margin-none">Boxcar</strong>
<% end %>
+1 -1
View File
@@ -2,7 +2,7 @@
<%= filter_hotkey_link "Home", root_path, 1, "home" %>
<%= filter_hotkey_link "Assigned to me", cards_path(assignee_ids: [Current.user.id]), 2, "clipboard" %>
<%= filter_hotkey_link "Added by me", cards_path(creator_ids: [Current.user.id]), 3, "person-add" %>
<%= filter_hotkey_link "New Board", new_collection_path, 4, "collection-add" %>
<%= filter_hotkey_link "New board", new_collection_path, 4, "collection-add" %>
<%= filter_hotkey_link "Notifications", notifications_path, 5, "bell" %>
<%= filter_hotkey_link "Account #{tag.span("Settings", class: "visually-hidden")}", account_settings_path, 6, "settings" %>
</div>
+1 -1
View File
@@ -1,5 +1,5 @@
<%= collapsible_nav_section "Jump to…" do %>
<%= filter_place_menu_item "https://www.youtube.com/watch?v=rNKRdk7DLHM", "Fizzy beta orientation", "youtube", new_window: true %>
<%= filter_place_menu_item "https://www.youtube.com/watch?v=rNKRdk7DLHM", "Boxcar beta orientation", "youtube", new_window: true %>
<%= filter_place_menu_item account_settings_path, "Account Settings", "settings" %>
<%= filter_place_menu_item user_path(Current.user), "My Profile", "person" %>
<%= filter_place_menu_item notifications_path, "Notifications", "bell" %>
-4
View File
@@ -153,10 +153,6 @@
</style>
</head>
<body>
<figure class="error-page__logo">
<%= image_tag "fizzy-logo.png" %>
Fizzy
</figure>
<%= yield %>
<%= link_to "&larr; Back home".html_safe, root_url %>
</body>
+1 -1
View File
@@ -15,7 +15,7 @@
<footer id="footer">
<div class="justify-center center margin-block-double flex align-end gap">
<%= image_tag "fizzy-logo.png", size: 28 %>
<strong><a href="http://37signals.com" class="txt-ink">Made with Fizzy&trade;</a></strong>
<strong><a href="http://box-car.com" class="txt-ink">Made with Boxcar&trade;</a></strong>
</div>
</footer>
</body>
@@ -3,7 +3,7 @@
<h1 class="title">Everything since <%= @bundle.starts_at.strftime("%-l%P on %A, %B %-d") %></h1>
<p class="subtitle">You have <%= link_to pluralize(@notifications.count, "new notification"), notifications_url %>.</p>
<%= render partial: "notification/bundle_mailer/notification", collection: @notifications, as: :notification %>
<p class="footer">Fizzy emails you about new notifications every few hours. <br>
<p class="footer">Boxcar emails you about new notifications every few hours. <br>
<%= link_to "Change how often you get these", notifications_settings_url %>
or <%= link_to "unsubscribe from all email notifications", new_notifications_unsubscribe_url(access_token: @unsubscribe_token) %>.
</p>
@@ -4,7 +4,7 @@ You have <%= pluralize @notifications.count, "new notification" %>.
<%= render partial: "notification/bundle_mailer/notification", collection: @notifications, as: :notification %>
--------------------------------------------------------------------------------
Fizzy emails you about new notifications every few hours.
Boxcar emails you about new notifications every few hours.
Change how often you get these:
<%= notifications_settings_url %>
@@ -1,10 +1,10 @@
<% unless (platform.chrome? && !platform.ios?) || (platform.firefox? && !platform.android?) %>
<div class="notifications-help pwa__instructions hide-in-pwa">
<h2><%= platform.safari? && platform.desktop? ? "…or install" : "Install " -%> Fizzy as a web app.</h2>
<h2><%= platform.safari? && platform.desktop? ? "…or install" : "Install " -%> Boxcar as a web app.</h2>
<% case
when platform.edge? %>
<ol>
<li>Click <em><%= icon_tag "install-edge", alt: "the app available - install Fizzy button" %></em>in the address bar.</li>
<li>Click <em><%= icon_tag "install-edge", alt: "the app available - install Boxcar button" %></em>in the address bar.</li>
<li>Click <em>Install</em>.</li>
</ol>
<% when platform.chrome? && platform.android? %>
@@ -23,13 +23,13 @@
<li>Click <em>Add to Dock…</em>.</li>
</ol>
<% when (platform.safari? || platform.chrome?) && platform.ios? %>
<p>To receive push notifications in <%= platform.browser.capitalize %> for <%= platform.operating_system %>, you must first install Fizzy as a web app.</p>
<p>To receive push notifications in <%= platform.browser.capitalize %> for <%= platform.operating_system %>, you must first install Boxcar as a web app.</p>
<ol>
<li>Tap <em><%= icon_tag "share", alt: "the share button" %></em></li>
<li>Tap <em>Add to Home Screen</em>.</li>
</ol>
<% else %>
<p>Some platforms require you to install Fizzy as a web app to receive push notifications.</p>
<p>Some platforms require you to install Boxcar as a web app to receive push notifications.</p>
<% end %>
</div>
<% end %>
@@ -12,19 +12,19 @@
<ol>
<li>Click <em>Start</em>, then <em>Settings</em>.</li>
<li>Go to <em>System &gt; Notification</em>.</li>
<li>Click <em><%= icon_tag "switch", alt: "the toggle button" %></em> <em>ON</em> for Fizzy.</li>
<li>Click <em><%= icon_tag "switch", alt: "the toggle button" %></em> <em>ON</em> for Boxcar.</li>
</ol>
<% when (platform.firefox? || platform.chrome?) && platform.desktop? %>
<ol>
<% if platform.windows? %>
<li>Click <em>Start</em>, then <em>Settings</em>.</li>
<li>Go to <em>System &gt; Notification</em>.</li>
<li>Click <em><%= icon_tag "switch", alt: "the toggle button" %></em> <em>ON</em> for Fizzy.</li>
<li>Click <em><%= icon_tag "switch", alt: "the toggle button" %></em> <em>ON</em> for Boxcar.</li>
<% else %>
<li>Click <em aria-label="the Apple menu"></em> in the top left.</li>
<li>Click <em>System Settings…</em>.</li>
<li>Click <em>Notifications</em>.</li>
<li>Click <em>Fizzy</em>.</li>
<li>Click <em>Boxcar</em>.</li>
<li>Click <em><%= icon_tag "switch", alt: "the allow notifications switch" %></em> to <em>Allow notifications</em>.</li>
<% end %>
</ol>
@@ -33,13 +33,13 @@
<li>Click <em aria-label="the Apple menu"></em> in the top left.</li>
<li>Click <em>System Settings…</em>.</li>
<li>Click <em>Notifications</em>.</li>
<li>Click <em>Fizzy</em>.</li>
<li>Click <em>Boxcar</em>.</li>
<li>Click <em><%= icon_tag "switch", alt: "the allow notifications switch" %></em> to <em>Allow notifications</em>.</li>
</ol>
<% when (platform.safari? || platform.chrome?) && platform.ios? %>
<ol>
<li>Open the <em><%= icon_tag "gear", aria: { hidden: "true" } %></em> Settings app.</li>
<li>Scroll to and tap <em>Fizzy</em>.</li>
<li>Scroll to and tap <em>Boxcar</em>.</li>
<li>Tap <em>Notifications</em>.</li>
<li>Tap <em><%= icon_tag "switch", alt: "the allow notifications switch button" %></em> to <em>Allow Notifications</em>.</li>
</ol>
@@ -48,7 +48,7 @@
<li>Open the <em><%= icon_tag "gear", aria: { hidden: "true" } %></em> Settings app.</li>
<li>Tap <em>Notifications</em>.</li>
<li>Tap <em>App notifications</em>.</li>
<li>Scroll to <em>Fizzy</em>.</li>
<li>Scroll to <em>Boxcar</em>.</li>
<li>Tap <em><%= icon_tag "switch", alt: "the switch" %></em> to <em>Allow Notifications</em>.</li>
</ol>
<% else %>
@@ -1,9 +1,9 @@
<div class="panel margin-block-double center shadow">
<h1 class="font-black txt-x-large margin-none-block-end">Youre unsubscribed</h1>
<p class="margin-block-start-half">Thanks, <%= @user.first_name %>! Fizzy wont send you any more email notifications. If you change your mind you can turn them back on in <%= link_to "Notifications Settings", notifications_settings_path %>.</p>
<p class="margin-block-start-half">Thanks, <%= @user.first_name %>! Boxcar wont send you any more email notifications. If you change your mind you can turn them back on in <%= link_to "Notifications Settings", notifications_settings_path %>.</p>
<%= link_to root_path, class: "btn btn--link margin-block-start" do %>
<%= icon_tag "arrow-left" %>
<span>Back to Fizzy</span>
<span>Back to Boxcar</span>
<% end %>
</div>
@@ -1,5 +1,7 @@
<section id="considering-cards" class="cards cards--considering">
<div class="cards__decoration"></div>
<%= render "collections/columns/pinstripes" %>
<% if page.used? %>
<%= render partial: "cards/display/public_preview", collection: page.records, as: :card, cached: true %>
@@ -11,5 +13,4 @@
<% else %>
<p class="txt-medium translucent">Nothing here</p>
<% end %>
<div class="cards__decoration-end"></div>
</section>
@@ -1,6 +1,7 @@
<section id="the-stream" class="cards cards--considering"
data-action="turbo:before-morph-attribute->collapsible-columns#preventToggle">
<div class="cards__decoration"></div>
<%= render "collections/columns/pinstripes" %>
<header class="cards__expander">
<h2 class="cards__expander-title position-relative"">The Stream</h2>
@@ -11,6 +12,4 @@
<%= render "public/collections/columns/list", cards: page.records %>
<% end %>
<% end %>
<div class="cards__decoration-end"></div>
</section>
+1 -1
View File
@@ -1,5 +1,5 @@
{
"name": "<%= [ Account.sole.name, "Fizzy", Rails.env.production? ? nil : Rails.env ].compact.join(" - ") %>",
"name": "<%= [ Account.sole.name, "Boxcar", Rails.env.production? ? nil : Rails.env ].compact.join(" - ") %>",
"icons": [
{
"src": "/app-icon-192.png",
+1 -1
View File
@@ -1,5 +1,5 @@
<%= form_with url: search_path, method: :get, class: "search__form flex align-center justify-center gap-half", data: { turbo_frame: "bar-content" } do |form| %>
<%= form.label :q, "Search Fizzy", class: "font-weight-black txt-nowrap" %>
<%= form.label :q, "Search Boxcar", class: "font-weight-black txt-nowrap" %>
<%= text_field_tag :q, query_terms,
class: "search__input input",
type: "search",
+3 -3
View File
@@ -1,12 +1,12 @@
<% @page_title = "Choose Account" %>
<div class="panel shadow center margin-block-double" style="--panel-size: 55ch;">
<h1 class="txt-xx-large margin-block-end-double">Fizzy</h1>
<h1 class="txt-xx-large margin-block-end-double">Boxcar</h1>
<% identity = Identity.find_signed(Current.identity_token.id) %>
<% memberships = identity&.memberships %>
<% if memberships.present? %>
<h2 class="txt-large margin-block-end">Your Fizzy Accounts</h2>
<h2 class="txt-large margin-block-end">Your Boxcar Accounts</h2>
<ul class="flex flex-column gap txt-large" style="list-style-type: none; padding: 0;">
<% memberships.each do |membership| %>
<li>
@@ -15,6 +15,6 @@
<% end %>
</ul>
<% else %>
<p class="txt-large txt-align-center txt-subtle">You don't have any existing Fizzy accounts.</p>
<p class="txt-large txt-align-center txt-subtle">You don't have any existing Boxcar accounts.</p>
<% end %>
</div>
+1 -1
View File
@@ -1,7 +1,7 @@
<% @page_title = "Sign in" %>
<div class="panel shadow center margin-block-double <%= "shake" if flash[:alert] %>" style="--panel-size: 55ch;">
<h1 class="txt-xx-large margin-block-end-double">Fizzy</h1>
<h1 class="txt-xx-large margin-block-end-double">Boxcar</h1>
<%= form_with url: session_path, class: "flex flex-column gap txt-large" do |form| %>
<div class="flex align-center gap">
+1 -1
View File
@@ -10,7 +10,7 @@
<% end %>
<div class="panel shadow center">
<h1 class="margin-none-block-start margin-block-end-double">Fizzy</h1>
<h1 class="margin-none-block-start margin-block-end-double">Boxcar</h1>
<%= form_with model: @user, url: join_path(params[:join_code]), class: "flex flex-column gap" do |form| %>
<div class="flex align-center gap">
+2 -2
View File
@@ -27,8 +27,8 @@
<%= render partial: "webhooks/webhook", collection: @page.records %>
</ul>
<% else %>
<p>Webhooks can notify another application when something happens in this Fizzy collection. You'll choose which events to subscribe to and provide a URL to receive the data.</p>
<p>For example, you could create a webhook that posts to a Campfire chat in Basecamp when new cards are added to Fizzy.</p>
<p>Webhooks can notify another application when something happens in this Boxcar board. Youll choose which events to subscribe to and provide a URL to receive the data.</p>
<p>For example, you could create a webhook that posts to a Campfire chat in Basecamp when new cards are added to Boxcar.</p>
<%= link_to new_collection_webhook_path, class: "btn btn--link" do %>
<%= icon_tag "add" %>
<span>Set up a webhook</span>
+1 -1
View File
@@ -23,7 +23,7 @@
<div class="flex flex-column gap-half">
<%= form.label :url do %>
<strong>Payload URL</strong><br>
<p class="margin-none txt-x-small txt-subtle">This is the URL for the app that will receive payloads from Fizzy.</p>
<p class="margin-none txt-x-small txt-subtle">This is the URL for the app that will receive payloads from Boxcar.</p>
<% end %>
<%= form.url_field :url,
required: true,
@@ -7,7 +7,7 @@ class ControllerAuthenticationTest < ActionDispatch::IntegrationTest
get cards_path
assert_response :success
assert_dom "p", text: "You don't have any existing Fizzy accounts."
assert_dom "p", text: "You don't have any existing Boxcar accounts."
end
test "access with an account slug but no session redirects to new session" do
@@ -39,6 +39,6 @@ class Conversation::Message::ResponseGeneratorJobTest < ActiveJob::TestCase
last_message = conversation.messages.ordered.last
assert last_message.assistant?
assert_match(/Fizzy is very busy/i, last_message.content.to_plain_text)
assert_match(/Boxcar is very busy/i, last_message.content.to_plain_text)
end
end