From 7d92c8970ee3eb8af3a51632242462a0fcae49a6 Mon Sep 17 00:00:00 2001
From: Dhamari Trice-Hanson <39872667+dhamariT@users.noreply.github.com>
Date: Thu, 2 Jul 2026 14:32:14 -0400
Subject: [PATCH 1/3] =?UTF-8?q?Hardware=E2=86=92Outpost:=20in-app=20notifi?=
=?UTF-8?q?cation=20instead=20of=20the=20after-recording=20popup?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Per review, recording a timelapse on a hardware project shouldn't throw a
modal — it should drop a notification in the inbox instead.
- New Notifications::HardwareMovedToOutpost type (inbox-only/low priority,
aggregatable so repeat recordings keep one unread notice), registered +
given an alert-triangle icon, with an inbox partial linking to Outpost.
- Fire it from LookoutSessionsController#create for hardware projects (flag
hardware_to_outpost), after the session is created so recording is
unaffected.
- Remove the on-recorder popup: the record.html.erb render + the capture
controller's showHardwareOutpostNotice trigger/method.
Project *creation* (new hardware project / hardware mission) still shows the
Outpost popup up front — that's unchanged. Notification links to
outpost.hackclub.com. Gated by hardware_to_outpost (+ the notification
system's own week_2_release rollout flag).
---
.../notifications/item_component.rb | 3 ++-
.../projects/lookout_sessions_controller.rb | 7 +++++++
.../controllers/lookout_capture_controller.js | 9 ---------
.../hardware_moved_to_outpost.rb | 19 +++++++++++++++++++
app/models/notifications/registry.rb | 1 +
.../inbox/_hardware_moved_to_outpost.html.erb | 4 ++++
.../projects/lookout_sessions/record.html.erb | 6 ------
7 files changed, 33 insertions(+), 16 deletions(-)
create mode 100644 app/models/notifications/hardware_moved_to_outpost.rb
create mode 100644 app/views/notifications/inbox/_hardware_moved_to_outpost.html.erb
diff --git a/app/components/notifications/item_component.rb b/app/components/notifications/item_component.rb
index 2c09f46be..712d6c938 100644
--- a/app/components/notifications/item_component.rb
+++ b/app/components/notifications/item_component.rb
@@ -19,7 +19,8 @@ class ItemComponent < ViewComponent::Base
"Notifications::Missions::SubmissionApproved" => "check-circle",
"Notifications::Missions::SubmissionRejected" => "alert-triangle",
"Notifications::Missions::SubmissionPendingForReviewer" => "clipboard",
- "Notifications::ShopOrders::StatusChanged" => "bag"
+ "Notifications::ShopOrders::StatusChanged" => "bag",
+ "Notifications::HardwareMovedToOutpost" => "alert-triangle"
}.freeze
attr_reader :notification
diff --git a/app/controllers/projects/lookout_sessions_controller.rb b/app/controllers/projects/lookout_sessions_controller.rb
index a4114f4cf..2fce586bb 100644
--- a/app/controllers/projects/lookout_sessions_controller.rb
+++ b/app/controllers/projects/lookout_sessions_controller.rb
@@ -34,6 +34,13 @@ def create
started_at: Time.current
)
+ # Hardware projects live on Outpost now — nudge the builder there with an
+ # inbox notification rather than the old on-recorder popup, without blocking
+ # the recording.
+ if @project.hardware? && Flipper.enabled?(:hardware_to_outpost, current_user)
+ Notifications::HardwareMovedToOutpost.notify(recipient: current_user, record: @project)
+ end
+
render json: session_json(@session), status: :created
end
diff --git a/app/javascript/controllers/lookout_capture_controller.js b/app/javascript/controllers/lookout_capture_controller.js
index 9d32665a7..7ec477e90 100644
--- a/app/javascript/controllers/lookout_capture_controller.js
+++ b/app/javascript/controllers/lookout_capture_controller.js
@@ -434,7 +434,6 @@ export default class extends Controller {
this.setText(statusEl, "Your timelapse is ready!");
}
if (showVideo) await this.revealVideo();
- this.showHardwareOutpostNotice();
return;
}
if (data.status === "failed") {
@@ -480,14 +479,6 @@ export default class extends Controller {
}
}
- // Hardware moved to Outpost — once the timelapse is done, let the builder know.
- // The notice is only rendered on the page for hardware projects with the flag
- // on, so this is a no-op everywhere else.
- showHardwareOutpostNotice() {
- const dialog = document.getElementById("hardware-outpost-modal");
- if (dialog && !dialog.open) dialog.showModal();
- }
-
close(event) {
if (event) event.preventDefault();
this.cleanup();
diff --git a/app/models/notifications/hardware_moved_to_outpost.rb b/app/models/notifications/hardware_moved_to_outpost.rb
new file mode 100644
index 000000000..562ebdf1a
--- /dev/null
+++ b/app/models/notifications/hardware_moved_to_outpost.rb
@@ -0,0 +1,19 @@
+module Notifications
+ # Heads-up that hardware projects live on Hack Club Outpost now, surfaced when
+ # a hardware project records a Lookout timelapse (replaces the old on-recorder
+ # popup). Inbox-only (low priority — no Slack/email), and aggregatable so a
+ # builder who records repeatedly keeps a single unread notice rather than a
+ # pile of them.
+ class HardwareMovedToOutpost < ::Notification
+ self.default_priority = :low
+ self.aggregatable = true
+ self.category_key = :hardware_moved_to_outpost
+ self.category_label = "Hardware moved to Outpost"
+ self.category_description = "Hardware projects have moved to Hack Club Outpost"
+ self.category_group = "General"
+
+ def preview_text
+ "Building hardware? It all happens over on Hack Club Outpost now."
+ end
+ end
+end
diff --git a/app/models/notifications/registry.rb b/app/models/notifications/registry.rb
index dbe3b0894..52c0a1b98 100644
--- a/app/models/notifications/registry.rb
+++ b/app/models/notifications/registry.rb
@@ -22,6 +22,7 @@ module Registry
Notifications::Payouts::ShipEventIssued
Notifications::Payouts::VoteDeficitBlocked
Notifications::ShopOrders::StatusChanged
+ Notifications::HardwareMovedToOutpost
].freeze
module_function
diff --git a/app/views/notifications/inbox/_hardware_moved_to_outpost.html.erb b/app/views/notifications/inbox/_hardware_moved_to_outpost.html.erb
new file mode 100644
index 000000000..2e82275f0
--- /dev/null
+++ b/app/views/notifications/inbox/_hardware_moved_to_outpost.html.erb
@@ -0,0 +1,4 @@
+Hardware projects have moved to
+<%= link_to "Hack Club Outpost", "https://outpost.hackclub.com",
+ class: "notifications-item__actor",
+ target: "_blank", rel: "noopener" %>
diff --git a/app/views/projects/lookout_sessions/record.html.erb b/app/views/projects/lookout_sessions/record.html.erb
index f8ee1cc32..13991bcab 100644
--- a/app/views/projects/lookout_sessions/record.html.erb
+++ b/app/views/projects/lookout_sessions/record.html.erb
@@ -175,9 +175,3 @@
hidden: true %>
-
-<%# Hardware moved to Outpost — once this timelapse finishes, the capture
- controller pops this notice (rendered only for hardware projects). %>
-<% if @project.hardware? && Flipper.enabled?(:hardware_to_outpost, current_user) %>
- <%= render "projects/hardware_outpost_modal" %>
-<% end %>
From 0870119a90f4c63049185f4b9de814e4284d6a6e Mon Sep 17 00:00:00 2001
From: Dhamari Trice-Hanson <39872667+dhamariT@users.noreply.github.com>
Date: Thu, 2 Jul 2026 15:11:53 -0400
Subject: [PATCH 2/3] =?UTF-8?q?Hardware=E2=86=92Outpost=20notif:=20backfil?=
=?UTF-8?q?l=20all=20hardware=20owners=20+=20Outpost=20flame=20icon?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Two follow-ups on the notification:
1) Notify everyone who already has a hardware project, not only those who
record a timelapse. New OneTime::BackfillHardwareOutpostNotificationsJob
sweeps every member of a hardware project (dry-run by default; the notif is
aggregatable + self-gates on week_2_release, so no dupes/spam). New hardware
projects can't be created on Stardance anymore, so this audience is fixed.
2) Prettier icon: instead of the generic alert-triangle line icon, show a
colour chip cropped from the Outpost flame logo (borrowed from the sidebar
widget). item_component gains optional image icons (TYPE_ICON_IMAGES); the
notifications SCSS crops the wide wordmark to its flame side as a rounded,
full-colour badge.
---
.../stylesheets/pages/_notifications.scss | 16 +++++++++
.../notifications/item_component.html.erb | 8 +++--
.../notifications/item_component.rb | 14 ++++++--
...fill_hardware_outpost_notifications_job.rb | 35 +++++++++++++++++++
4 files changed, 69 insertions(+), 4 deletions(-)
create mode 100644 app/jobs/one_time/backfill_hardware_outpost_notifications_job.rb
diff --git a/app/assets/stylesheets/pages/_notifications.scss b/app/assets/stylesheets/pages/_notifications.scss
index 1fc51c9f9..020e9f854 100644
--- a/app/assets/stylesheets/pages/_notifications.scss
+++ b/app/assets/stylesheets/pages/_notifications.scss
@@ -98,6 +98,22 @@
display: block;
}
+ // Full-colour brand chip (e.g. the Outpost flame) instead of a muted line icon.
+ &__icon--image {
+ opacity: 1;
+ }
+
+ &__icon-img {
+ width: 28px;
+ height: 28px;
+ // The Outpost logo is a wide wordmark; crop to its flame side so the chip
+ // reads as a little colourful badge rather than a squished wordmark.
+ object-fit: cover;
+ object-position: left center;
+ border-radius: 6px;
+ display: block;
+ }
+
&__main {
flex: 1 1 auto;
display: flex;
diff --git a/app/components/notifications/item_component.html.erb b/app/components/notifications/item_component.html.erb
index 6d501ea52..d0b680922 100644
--- a/app/components/notifications/item_component.html.erb
+++ b/app/components/notifications/item_component.html.erb
@@ -3,8 +3,12 @@
(card_data wires the Stimulus controller + click action; links are ignored by
the controller). Reading is handled by opening the inbox. %>
<%= tag.li class: li_classes, data: card_data do %>
-
- <%= inline_svg_tag type_icon_path, class: "notifications-item__icon-svg" %>
+ " aria-hidden="true">
+ <% if type_icon_image %>
+ <%= image_tag type_icon_image, alt: "", class: "notifications-item__icon-img" %>
+ <% else %>
+ <%= inline_svg_tag type_icon_path, class: "notifications-item__icon-svg" %>
+ <% end %>
diff --git a/app/components/notifications/item_component.rb b/app/components/notifications/item_component.rb
index 712d6c938..c7b8ec1a1 100644
--- a/app/components/notifications/item_component.rb
+++ b/app/components/notifications/item_component.rb
@@ -19,8 +19,13 @@ class ItemComponent < ViewComponent::Base
"Notifications::Missions::SubmissionApproved" => "check-circle",
"Notifications::Missions::SubmissionRejected" => "alert-triangle",
"Notifications::Missions::SubmissionPendingForReviewer" => "clipboard",
- "Notifications::ShopOrders::StatusChanged" => "bag",
- "Notifications::HardwareMovedToOutpost" => "alert-triangle"
+ "Notifications::ShopOrders::StatusChanged" => "bag"
+ }.freeze
+
+ # Types that show a cropped image chip instead of a line-art SVG icon — used
+ # to carry a bit of brand colour into the row (e.g. the Outpost flame).
+ TYPE_ICON_IMAGES = {
+ "Notifications::HardwareMovedToOutpost" => "outpost.png"
}.freeze
attr_reader :notification
@@ -60,6 +65,11 @@ def type_icon_path
"icons/notifications/#{name}.svg"
end
+ # An image asset to use as the icon chip instead of an SVG, or nil.
+ def type_icon_image
+ TYPE_ICON_IMAGES[notification.type]
+ end
+
def avatar_actor
notification.actor
end
diff --git a/app/jobs/one_time/backfill_hardware_outpost_notifications_job.rb b/app/jobs/one_time/backfill_hardware_outpost_notifications_job.rb
new file mode 100644
index 000000000..899714ca3
--- /dev/null
+++ b/app/jobs/one_time/backfill_hardware_outpost_notifications_job.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+# One-off sweep to drop the "hardware moved to Outpost" notice into the inbox of
+# everyone who already owns a hardware project — not just those who go on to
+# record a timelapse (LookoutSessionsController#create fires the same notice for
+# that path). New hardware projects can't be created on Stardance anymore
+# (creation is redirected to Outpost), so this audience is a fixed set; run once
+# when the feature is live.
+#
+# HardwareMovedToOutpost is aggregatable, so a user who already has an unread
+# copy (e.g. from recording) just gets it bumped, not duplicated. notify() also
+# self-gates on the notification system's own rollout flag (week_2_release), so
+# users without it are skipped.
+#
+# DRY RUN BY DEFAULT: logs how many users it would notify and writes nothing.
+# Pass dry_run: false to actually create the notifications.
+class OneTime::BackfillHardwareOutpostNotificationsJob < ApplicationJob
+ queue_as :literally_whenever
+
+ def perform(dry_run: true)
+ user_ids = Project::Membership
+ .where(project_id: Project.where.not(hardware_stage: nil).select(:id))
+ .distinct
+ .pluck(:user_id)
+
+ Rails.logger.info("[BackfillHardwareOutpost] #{user_ids.size} hardware-project users (dry_run: #{dry_run})")
+ return if dry_run
+
+ notified = 0
+ User.where(id: user_ids).find_each do |user|
+ notified += 1 if Notifications::HardwareMovedToOutpost.notify(recipient: user)
+ end
+ Rails.logger.info("[BackfillHardwareOutpost] notified #{notified} of #{user_ids.size} users")
+ end
+end
From 3a8c5e8e7f446a60fe86ee2200f1ffbffdea75e5 Mon Sep 17 00:00:00 2001
From: Dhamari Trice-Hanson <39872667+dhamariT@users.noreply.github.com>
Date: Thu, 2 Jul 2026 15:23:39 -0400
Subject: [PATCH 3/3] =?UTF-8?q?Hardware=E2=86=92Outpost=20notif:=20use=20t?=
=?UTF-8?q?he=20real=20Outpost=20favicon=20as=20the=20icon?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The cropped wordmark chip looked off. Swap it for the actual Outpost flame
favicon (square, transparent) and drop the crop hack — render it whole with
object-fit: contain so nothing clips.
---
app/assets/images/outpost-favicon.png | Bin 0 -> 39819 bytes
.../stylesheets/pages/_notifications.scss | 8 +++-----
app/components/notifications/item_component.rb | 2 +-
3 files changed, 4 insertions(+), 6 deletions(-)
create mode 100644 app/assets/images/outpost-favicon.png
diff --git a/app/assets/images/outpost-favicon.png b/app/assets/images/outpost-favicon.png
new file mode 100644
index 0000000000000000000000000000000000000000..bec4fee371af6d7e48ad759b7d94e3280ea24bac
GIT binary patch
literal 39819
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
literal 0
HcmV?d00001
diff --git a/app/assets/stylesheets/pages/_notifications.scss b/app/assets/stylesheets/pages/_notifications.scss
index 020e9f854..d6a9fa508 100644
--- a/app/assets/stylesheets/pages/_notifications.scss
+++ b/app/assets/stylesheets/pages/_notifications.scss
@@ -106,11 +106,9 @@
&__icon-img {
width: 28px;
height: 28px;
- // The Outpost logo is a wide wordmark; crop to its flame side so the chip
- // reads as a little colourful badge rather than a squished wordmark.
- object-fit: cover;
- object-position: left center;
- border-radius: 6px;
+ // A square, transparent brand mark (the Outpost flame favicon) — show the
+ // whole thing so nothing gets clipped.
+ object-fit: contain;
display: block;
}
diff --git a/app/components/notifications/item_component.rb b/app/components/notifications/item_component.rb
index c7b8ec1a1..b8246fcd3 100644
--- a/app/components/notifications/item_component.rb
+++ b/app/components/notifications/item_component.rb
@@ -25,7 +25,7 @@ class ItemComponent < ViewComponent::Base
# Types that show a cropped image chip instead of a line-art SVG icon — used
# to carry a bit of brand colour into the row (e.g. the Outpost flame).
TYPE_ICON_IMAGES = {
- "Notifications::HardwareMovedToOutpost" => "outpost.png"
+ "Notifications::HardwareMovedToOutpost" => "outpost-favicon.png"
}.freeze
attr_reader :notification