From 63bc8b60d40e33cf6458e0c5083190c7c3be4292 Mon Sep 17 00:00:00 2001 From: "Daniel (dB.) Doubrovkine" Date: Sun, 25 Oct 2026 10:51:16 -0400 Subject: [PATCH] Redesign Shell website with charcoal ribbon artwork Bring the shared responsive website layout to Shell, retain the original terminal branding and demo, and add keyboard-operable help. Preserve existing Slack OAuth, registration, status, and privacy behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .rubocop_todo.yml | 8 +- CHANGELOG.md | 1 + README.md | 6 + public/favicon.ico | Bin 1150 -> 24875 bytes public/help.html.erb | 53 +++++++-- public/img/bot-gamebot.png | Bin 0 -> 6877 bytes public/img/bot-slava.png | Bin 0 -> 37490 bytes public/img/bot-strada.png | Bin 0 -> 28810 bytes public/img/bot-sup.png | Bin 0 -> 17650 bytes public/img/screenshot-background.svg | 43 +++++++ public/index.html.erb | 98 ++++++++++++---- public/partials/_footer.html.erb | 10 +- public/partials/_head.html.erb | 5 +- public/partials/_install_button.html.erb | 1 + public/partials/_navigation.html.erb | 12 ++ public/privacy.html.erb | 12 +- public/styles.css | 140 ++++++++++++++++++++--- spec/integration/help_spec.rb | 9 ++ spec/integration/index_spec.rb | 46 ++++++++ 19 files changed, 375 insertions(+), 69 deletions(-) create mode 100644 public/img/bot-gamebot.png create mode 100644 public/img/bot-slava.png create mode 100644 public/img/bot-strada.png create mode 100644 public/img/bot-sup.png create mode 100644 public/img/screenshot-background.svg create mode 100644 public/partials/_install_button.html.erb create mode 100644 public/partials/_navigation.html.erb diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index e4a0063..8da2f71 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2026-10-24 23:19:23 UTC using RuboCop version 1.92.1. +# on 2026-10-25 15:08:27 UTC using RuboCop version 1.92.1. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -72,7 +72,7 @@ RSpec/ContextWording: - 'spec/models/team_spec.rb' - 'spec/support/api/endpoints/it_behaves_like_a_cursor_api.rb' -# Offense count: 9 +# Offense count: 13 # Configuration parameters: CountAsOne. RSpec/ExampleLength: Max: 11 @@ -94,7 +94,7 @@ RSpec/LetSetup: RSpec/MessageSpies: EnforcedStyle: receive -# Offense count: 23 +# Offense count: 29 RSpec/MultipleExpectations: Max: 6 @@ -128,7 +128,7 @@ RSpec/SpecFilePathFormat: - 'spec/commands/whoami_spec.rb' - 'spec/version_spec.rb' -# Offense count: 9 +# Offense count: 11 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowHeredoc, AllowURI, AllowQualifiedName, URISchemes, AllowRBSInlineAnnotation, AllowCopDirectives, AllowedPatterns, SplitStrings. # URISchemes: http, https diff --git a/CHANGELOG.md b/CHANGELOG.md index 41bd662..192f87c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ### Changelog +* 2026/10/25: [#87](https://github.com/slack-ruby/slack-shellbot/pull/87): Redesign the Shell website with shared responsive layouts, charcoal ribbon artwork, a black-bordered animated demo, an "Is this a joke?" FAQ linked from the homepage, and recommendations with original logos for Slava, Strada, Gamebot, and S'Up above Open source while preserving Slack installation and status flows - [@dblock](https://github.com/dblock), [@Copilot](https://github.com/apps/copilot-swe-agent). * 2026/10/24: [#86](https://github.com/slack-ruby/slack-shellbot/pull/86): Upgrade slack-ruby-bot-server to 2.2.1 to fix Grape error handling for unsupported requests and failing health checks - [@dblock](https://github.com/dblock), [@Copilot](https://github.com/apps/copilot-swe-agent). * 2026/10/23: Upgrade to Ruby 4.0.9 and refresh dependencies and CI browser tooling - [@dblock](https://github.com/dblock), [@Copilot](https://github.com/apps/copilot-swe-agent). * 2025/09/29: Upgraded to Ruby 3.4.6 - [@dblock](https://github.com/dblock). diff --git a/README.md b/README.md index dde69fd..007274a 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,12 @@ A shell bot for Slack. A demo is worth a thousand words. This bot is built with [slack-ruby-bot-server-events](https://github.com/slack-ruby/slack-ruby-bot-server-events). See [CONTRIBUTING](CONTRIBUTING.md). +## Website artwork + +The website follows the shared Slava, Strata, and Strada layout with a terminal-inspired black/charcoal palette (base `#303035`). The editable `public/img/screenshot-background.svg` adapts the shared ribbon artwork and keeps `preserveAspectRatio="none"` on a fixed viewport-sized layer so expanding help does not resize the background. Preserve the original transparent `public/img/icon.png` terminal logo, its matching multi-resolution favicon, and the original `public/img/shell.gif` demonstration when updating the design. + +The bot recommendations use local copies of the original logos: `bot-slava.png` and `bot-strada.png` from their respective projects' `public/img/icon.png`, `bot-gamebot.png` from slack-gamebot2's `public/img/game.png`, and `bot-sup.png` from slack-sup2's `public/img/icon.png`. Preserve their original colors rather than applying the Shell website's monochrome styling. + ## Copyright and License Copyright (c) 2016-2025, Daniel Doubrovkine, Artsy and [Contributors](CHANGELOG.md). diff --git a/public/favicon.ico b/public/favicon.ico index ecb668177bd81cecf3f58af230a8c50cb6df084d..757b3244d6ef05dd945a805ce4745adb4857b233 100644 GIT binary patch literal 24875 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 z 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

-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 Vuj?VMPdswS{pv3a@c9bl{sleN3()`o diff --git a/public/help.html.erb b/public/help.html.erb index 1c06e43..f455b31 100644 --- a/public/help.html.erb +++ b/public/help.html.erb @@ -1,18 +1,49 @@ - + + Shell: Help <%= partial 'public/partials/_head.html.erb' %> - -

- -

-
-
-        <%= CGI.escapeHTML(SlackShellbot::Commands::Man::HELP) %>
-      
-
+ + <%= partial 'public/partials/_navigation.html.erb' %> +
+
+

Shell: Help

+

A little help for your channel's command line.

+
+
+

Get started

+
    +
  1. <%= partial 'public/partials/_install_button.html.erb' %> and authorize Shell for your workspace.
  2. +
  3. Invite @sh into a Slack channel.
  4. +
  5. Type man to see the commands, or ls to list files.
  6. +
+

Each channel has its own rudimentary file system. This is a shell bot inside Slack, not a connection to your computer's shell.

+
+
+

Commands & questions

+
+ Is this a joke? +

Yes. Also, it works! Shell is a tiny Unix-like shell inside Slack, because apparently Slack needed a command line. Its commands and per-channel file system really work, but it is a toy, not a remote terminal.

+
+
+ Command reference +
<%= CGI.escapeHTML(SlackShellbot::Commands::Man::HELP) %>
+
+
+ How do I create and read a file? +

Try touch notes to create a file, ls to see it, and cat notes to read its contents. Use mkdir projects to create a directory.

+
+
+ How do I leave the editor? +

The basic vi-like editor updates messages in place. Use :wq to quit and save, or :q to quit without saving.

+
+
+
+

Need a hand?

+

Contact dblock@vestris.com, DM @playplayio, or report an issue on GitHub.

+
+
<%= partial 'public/partials/_footer.html.erb' %> - diff --git a/public/img/bot-gamebot.png b/public/img/bot-gamebot.png new file mode 100644 index 0000000000000000000000000000000000000000..20bd28512b5ae09b3be129828026a3c4ceb74dca GIT binary patch literal 6877 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 literal 0 HcmV?d00001 diff --git a/public/img/bot-strada.png b/public/img/bot-strada.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5310872791b564c5a56e933c7b885d81c41146 GIT binary patch literal 28810 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 a6!?D`H2Ww`)IjP00000(zC literal 0 HcmV?d00001 diff --git a/public/img/screenshot-background.svg b/public/img/screenshot-background.svg new file mode 100644 index 0000000..502821d --- /dev/null +++ b/public/img/screenshot-background.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/index.html.erb b/public/index.html.erb index 546a37f..31d3f68 100644 --- a/public/index.html.erb +++ b/public/index.html.erb @@ -1,35 +1,83 @@ - + + Shell: A Unix Shell in Every Slack Channel <%= partial 'public/partials/_head.html.erb' %> - - - + - -

- -

-

-

Whoa, a bash shell inside Slack!

-

-

- Creates a rudimentary file system in every channel.
Invite the bot into a channel, try man, ls, and other unix commands. -

-

 

-

-

- Add to Slack -

-

 

-

 

-

- -

+ + <%= partial 'public/partials/_navigation.html.erb' %> +
+
+
+ +
+

Shell for Slack

+

Whoa, a bash shell inside Slack!

+

A rudimentary file system in every channel. Invite the bot into a channel, try man, ls, and other Unix commands.

+
+

<%= partial 'public/partials/_install_button.html.erb' %>

+ Get started + Is this a joke? +
+

+

 

+
+
+
+ Shell running Unix commands inside a Slack channel +
A little command line, right where your team works.
+
+
+
+

A shell in every channel

+

Your familiar commands. A shared space to try them.

+
    +
  1. Add Shell to Slack

    Connect your workspace using Add to Slack.

  2. +
  3. Invite @sh

    Invite the bot into a channel to create its own rudimentary file system.

  4. +
  5. Try a command

    Start with man or ls. Create files, explore directories, or try the basic vi editor.

  6. +
+ Explore the commands +
+
+

More bots for Slack and Discord

+

A little more play, a little more connection.

+
    +
  • + +

    Strava in Slack

    +

    Share Strava activities, celebrate every finish, and keep your Slack team moving.

    + Meet Slava +
  • +
  • + +

    Strava in Discord

    +

    Bring your running or cycling club together with Strava activities in Discord.

    + Meet Strada +
  • +
  • + +

    S'Up for Slack

    +

    Meet someone new over coffee with fresh groups of three from your Slack channel each week.

    + Meet S'Up +
  • +
  • + +

    Leaderboards in Slack

    +

    Challenge teammates, report scores, and climb your Slack channel's leaderboard.

    + Meet Gamebot +
  • +
+
+
+

Open source

+

Shell is a shell bot for Slack, built with slack-ruby-bot-server-events. Explore the code, report an issue, or contribute on GitHub.

+

<%= partial 'public/partials/_install_button.html.erb' %>

+
+
<%= partial 'public/partials/_footer.html.erb' %> - diff --git a/public/partials/_footer.html.erb b/public/partials/_footer.html.erb index 86a5fee..c3dcf59 100644 --- a/public/partials/_footer.html.erb +++ b/public/partials/_footer.html.erb @@ -1,8 +1,12 @@ -

+

diff --git a/public/partials/_head.html.erb b/public/partials/_head.html.erb index c8cb63b..95e1cf8 100644 --- a/public/partials/_head.html.erb +++ b/public/partials/_head.html.erb @@ -1,4 +1,7 @@ + + + - + diff --git a/public/partials/_install_button.html.erb b/public/partials/_install_button.html.erb new file mode 100644 index 0000000..6c3f55c --- /dev/null +++ b/public/partials/_install_button.html.erb @@ -0,0 +1 @@ +Add to Slack diff --git a/public/partials/_navigation.html.erb b/public/partials/_navigation.html.erb new file mode 100644 index 0000000..9479836 --- /dev/null +++ b/public/partials/_navigation.html.erb @@ -0,0 +1,12 @@ + + diff --git a/public/privacy.html.erb b/public/privacy.html.erb index d1677dc..bf7bb5c 100644 --- a/public/privacy.html.erb +++ b/public/privacy.html.erb @@ -6,14 +6,10 @@ <%= partial 'public/partials/_head.html.erb' %> - -

- -

-

+ + <%= partial 'public/partials/_navigation.html.erb' %> +

Shell: Privacy Policy

-

-

tl;dr

Shell does not want to know who you are and tries to collect just enough data to enable our services. Please contact dblock@vestris.com for any questions about this privacy policy. @@ -79,7 +75,7 @@

If you have any questions or concerns or complaints about our Privacy Policy or our data collection or processing practices, or if you want to report any security violations to us, please message @dblockdotorg on Twitter or e-mail dblock@vestris.com.

-
+
<%= partial 'public/partials/_footer.html.erb' %> diff --git a/public/styles.css b/public/styles.css index 1ed21f9..8062f43 100644 --- a/public/styles.css +++ b/public/styles.css @@ -1,31 +1,137 @@ +html { + scrollbar-gutter: stable; +} + body { - font-family: 'Arial', 'Helvetica', sans-serif; - text-align: center; - margin: 20px; + font-family: Arial, Helvetica, sans-serif; } -.icon img { - width: 200px; +.site-page { + position: relative; + isolation: isolate; + display: flex; + flex-direction: column; + margin: 0; + min-height: 100vh; + color: #303035; + line-height: 1.7; + text-align: center; + background: #fff; } -.logo img { - width: 120px; +.site-page::before { + position: fixed; + inset: 0; + z-index: -1; + content: ""; + pointer-events: none; + background: linear-gradient(#ffffff66, #ffffff66), url("/img/screenshot-background.svg") center top / 100% 100% no-repeat; } -.image { - max-width: 560px; - margin: auto; +.site-page > main { flex: 1; } +.site-page * { box-sizing: border-box; } +.site-page a { color: #202024; text-underline-offset: 3px; } +.site-page a:hover { text-decoration-thickness: 2px; } +.site-page :focus-visible { outline: 3px solid #44444d; outline-offset: 5px; } +.site-page [id] { scroll-margin-top: 96px; } + +.page-container { + width: calc(100% - 48px); + max-width: 1120px; + margin: 0 auto; } -.image img { - width: 100%; +.narrow-container { max-width: 760px; } +.skip-link { position: absolute; top: -80px; left: 16px; z-index: 20; padding: 10px 16px; background: #fff; } +.skip-link:focus { top: 12px; } +.site-nav { position: sticky; top: 0; z-index: 10; border-bottom: 1px solid #25252b20; background: #ffffffe0; backdrop-filter: blur(12px); } +.nav-inner { display: flex; align-items: center; justify-content: space-between; gap: 24px; min-height: 80px; } +.site-brand { font: italic 700 32px Georgia, serif; text-decoration: none; } +.nav-links { display: flex; flex-wrap: wrap; justify-content: center; gap: 12px 28px; } +.nav-links a { font-size: 12px; font-weight: 700; letter-spacing: .08em; text-decoration: none; text-transform: uppercase; } +.hero { padding-top: 60px; } +.hero-intro { display: flex; align-items: flex-start; gap: 32px; max-width: 920px; margin: 0 auto; text-align: left; } +.hero-logo { flex: 0 0 auto; width: 112px; height: auto; margin-top: 12px; } +.site-page h1 { margin: 0; color: #17171b; font-size: 48px; letter-spacing: -.04em; line-height: 1.15; } +.hero-tagline { margin: 16px 0; font: italic 30px/1.35 Georgia, serif; } +.hero-description { max-width: 680px; margin: 0 0 24px; font-size: 18px; } +.hero-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 16px; } +#register { margin: 0; } + +.site-page .install-button { + display: inline-flex; + align-items: center; + justify-content: center; + max-width: 100%; + min-height: 44px; + padding: 8px 20px; + border-radius: 5px; + color: #fff; + background: #222226; + font-size: 16px; + font-weight: 700; + line-height: 1.4; + text-decoration: none; + vertical-align: middle; + transition: transform .1s ease-in-out, background-color .1s ease-in-out; } -.help { - width: 440px; - margin: auto; +.site-page .install-button:hover { background: #44444d; transform: scale(1.03); } +.secondary-button { display: inline-block; padding: 8px 20px; border: 1px solid #303035; border-radius: 4px; background: #ffffff99; font-size: 14px; font-weight: 700; text-decoration: none; } +.secondary-button:hover { background: #ffffffe6; } +#messages { min-height: 1.7em; margin: 12px 0 0; font-size: 14px; } +.team-count { min-height: 1.7em; margin: 8px 0 0; font-size: 13px; } +.has-error { color: #811c1c; } +.hero-preview { max-width: 691px; margin: 32px auto 0; } +.hero-preview img { display: block; width: 100%; height: auto; border: 1px solid #000; filter: drop-shadow(0 16px 24px #22222620); } +.hero-preview figcaption { margin-top: 20px; font-size: 13px; } +.homepage-section { padding: 64px 0; } +.homepage-section h2 { margin: 0 0 12px; font-size: 26px; letter-spacing: .04em; text-transform: uppercase; } +.section-intro { margin: 0 0 32px; font: italic 22px/1.5 Georgia, serif; } +.setup-steps { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 36px; margin: 32px 0; padding: 0; list-style: none; counter-reset: step; text-align: left; } +.setup-steps li { counter-increment: step; } +.setup-steps li::before { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: 50%; color: #fff; background: #222226; content: counter(step); font-weight: 700; } +.setup-steps h3 { margin: 16px 0 8px; font-size: 18px; } +.setup-steps p { margin: 0; } +.bot-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr)); gap: 20px; margin: 32px 0 0; padding: 0; list-style: none; text-align: left; } +.bot-card { display: flex; flex-direction: column; align-items: center; padding: 24px; border: 1px solid #25252b33; border-radius: 8px; background: #ffffffb3; text-align: center; } +.bot-logo { display: block; align-self: center; width: 72px; height: 72px; margin-bottom: 20px; object-fit: contain; } +.bot-card h3 { margin: 0; font-size: 18px; } +.bot-card p { flex: 1; margin: 12px 0 20px; font-size: 14px; } +code { padding: 2px 4px; border-radius: 3px; background: #ffffffb3; font-size: .95em; overflow-wrap: anywhere; } +.install-cta { margin: 28px 0; } +.site-footer { padding: 28px 0; border-top: 1px solid #25252b33; font-size: 13px; overflow-wrap: anywhere; } +.content-page { max-width: 860px; padding: 40px 0; text-align: left; overflow-wrap: anywhere; } +.content-page h1 { margin-bottom: 28px; } +.content-page h3, .content-page h4 { margin-top: 28px; line-height: 1.4; } +.help-content { max-width: 860px; padding-bottom: 40px; text-align: left; } +.help-header { padding: 40px 0 16px; } +.help-section { margin: 32px 0; } +.help-section h2 { font-size: 24px; } +.getting-started-steps { padding-left: 24px; } +.getting-started-steps li { margin: 14px 0; padding-left: 6px; } +.help-topic { padding: 16px 0; border-bottom: 1px solid #25252b33; } +.help-topic summary { cursor: pointer; font-weight: 700; } +.help-topic pre { white-space: pre-wrap; overflow-wrap: anywhere; font-size: 14px; } + +@media (max-width: 700px) { + .page-container { width: calc(100% - 32px); } + .nav-inner { flex-direction: column; gap: 8px; padding: 12px 0; } + .nav-links { gap: 8px 16px; } + .nav-links a { font-size: 10px; } + .site-page [id] { scroll-margin-top: 128px; } + .hero { padding-top: 32px; } + .hero-intro { flex-direction: column; align-items: center; gap: 16px; text-align: center; } + .hero-logo { width: 88px; margin-top: 0; } + .site-page h1 { font-size: 40px; } + .hero-tagline { font-size: 25px; } + .hero-description { font-size: 16px; } + .hero-actions { justify-content: center; } + .homepage-section { padding: 40px 0; } + .setup-steps { grid-template-columns: 1fr; gap: 28px; } } -.help pre { - text-align: left; +@media (prefers-reduced-motion: reduce) { + .site-page .install-button { transition: none; } + .site-page .install-button:hover { transform: none; } } diff --git a/spec/integration/help_spec.rb b/spec/integration/help_spec.rb index 809a7dd..ecaf023 100644 --- a/spec/integration/help_spec.rb +++ b/spec/integration/help_spec.rb @@ -10,4 +10,13 @@ it 'renders help' do expect(title).to eq('Shell: Help') end + + it 'expands the command reference with the keyboard' do + summary = find('summary', text: 'Command reference') + expect(page).to have_no_css('pre', visible: :visible) + summary.send_keys(:enter) + expect(page).to have_css('pre', text: SlackShellbot::Commands::Man::HELP.strip) + summary.send_keys(:enter) + expect(page).to have_no_css('pre', visible: :visible) + end end diff --git a/spec/integration/index_spec.rb b/spec/integration/index_spec.rb index cfff78b..3d1d1be 100644 --- a/spec/integration/index_spec.rb +++ b/spec/integration/index_spec.rb @@ -16,4 +16,50 @@ expect(title).to eq('Shell: A Unix Shell in Every Slack Channel') expect(first('p[id=register] a')['href']).to eq 'https://slack.com/oauth/v2/authorize?scope=chat:write,im:history,mpim:history,channels:history,groups:history&client_id=slack-client-id' end + + it 'links to the joke FAQ with its answer visible' do + click_link 'Is this a joke?' + expect(page).to have_current_path('/help.html', ignore_query: true) + expect(page).to have_css('#is-this-a-joke p', text: 'Yes. Also, it works!') + end + + it 'links to the bot recommendations after How to use in navigation' do + expect(page).to have_css('.nav-links a[href="/#how-to-use"] + a[href="/#more-bots"]', text: /More bots/i) + within('nav') { click_link 'More bots' } + expect(page).to have_css('#more-bots h3', text: 'Strava in Slack') + end + + it 'promotes the other bots above the open-source section' do + expect(page).to have_css('#more-bots + #open-source') + within('#more-bots') do + { + 'Slava' => 'https://slava.playplay.io/', + 'Strada' => 'https://strada.playplay.io/', + 'Gamebot' => 'https://gamebot2.playplay.io/', + "S'Up" => 'https://sup2.playplay.io/' + }.each do |name, url| + expect(page).to have_link("Meet #{name}", href: url) + end + end + end + + it "loads the promoted bots' original logos" do + find_by_id('more-bots').execute_script("this.scrollIntoView({block: 'center'})") + expect(page).to have_css('#more-bots img.bot-logo', count: 4) do |image| + image.evaluate_script('this.complete && this.naturalWidth > 0') + end + expect(all('#more-bots h3').map(&:text)).to eq(['Strava in Slack', 'Strava in Discord', "S'Up for Slack", 'Leaderboards in Slack']) + expect(page).to have_css('#bots-title', text: /More bots for Slack and Discord/i) + end + + it 'keeps navigation and installation usable on small screens' do + page.execute_script("document.body.innerHTML = ''") + within_frame('mobile') do + expect(page.evaluate_script('window.innerWidth')).to eq(320) + expect(page.evaluate_script('document.documentElement.scrollWidth <= window.innerWidth')).to be true + expect(page).to have_link('Add to Slack', count: 2) + within('nav') { click_link 'Help' } + expect(page).to have_css('h1', text: 'Shell: Help') + end + end end