[brand] rebrand to Moreminimore Chat (configurable, phase 1)

Set the default brand to Moreminimore Chat while keeping branding
configurable via the existing InstallationConfig/ENV mechanism.

- installation_config.yml: INSTALLATION_NAME/BRAND_NAME -> Moreminimore Chat,
  BRAND_URL/WIDGET_BRAND_URL -> https://www.moreminimore.com,
  TERMS/PRIVACY -> moreminimore.com, MAILER_SUPPORT_EMAIL -> contact@moreminimore.com;
  drop LOGO_DARK (single PNG logo for light+dark).
- Mailer sender defaults -> 'Moreminimore Chat Team <contact@moreminimore.com>'
  across devise.rb, application_mailer, conversation_reply_mailer,
  mail_presenter, email_address_parseable.
- Replace SVG brand assets with logo.png/logo_thumbnail.png (1000x1000);
  update onboarding, super_admin login/nav, Vue login/signup/saml, survey,
  helpcenter, widget, year-in-review to use the single PNG and Moreminimore Chat
  name; remove dark dual-logo pattern.
- manifest.json name/short_name -> Moreminimore Chat; en.yml integration copy.

Approved by independent five-key pre-commit review deleg_a733cdf4
(passed=true, security_concerns=[], logic_errors=[]). Privacy audit findings=0.
This commit is contained in:
Kunthawat Greethong
2026-08-16 08:20:13 +07:00
parent c21d579a6a
commit f17ce89d01
26 changed files with 41 additions and 96 deletions

View File

@@ -4,7 +4,6 @@ class DashboardController < ActionController::Base
GLOBAL_CONFIG_KEYS = %w[
LOGO
LOGO_DARK
LOGO_THUMBNAIL
INSTALLATION_NAME
WIDGET_BRAND_URL

View File

@@ -95,7 +95,7 @@ const generateImage = async () => {
);
const logo = new Image();
logo.src = '/brand-assets/logo.svg';
logo.src = '/brand-assets/logo.png';
await new Promise(resolve => {
logo.onload = resolve;
});

View File

@@ -34,7 +34,7 @@ const signatureImage =
<div class="mt-12">
<img
:src="signatureImage"
alt="Chatwoot Team Signature"
alt="Moreminimore Chat Team Signature"
class="w-auto h-8 md:h-10"
/>
</div>

View File

@@ -22,7 +22,7 @@ const props = defineProps({
},
codepenTitle: {
type: String,
default: 'Chatwoot Codepen',
default: 'Moreminimore Chat Codepen',
},
});

View File

@@ -243,7 +243,7 @@ const handleToggleWidget = () => {
:script="widgetScript"
lang="html"
class="!text-start"
:codepen-title="`${websiteName} - Chatwoot Widget Test`"
:codepen-title="`${websiteName} - Moreminimore Chat Widget Test`"
enable-code-pen
/>
</div>

View File

@@ -6,7 +6,7 @@ import Button from 'dashboard/components-next/button/Button.vue';
defineProps({
title: {
type: String,
default: 'Chatwoot',
default: 'Moreminimore Chat',
},
});

View File

@@ -174,7 +174,12 @@ export default {
class="flex flex-col w-full h-full bg-n-solid-1 rounded-lg border border-solid border-n-weak shadow-md lg:w-2/5 lg:h-auto"
>
<div class="w-full px-12 pt-12 pb-6 m-auto my-0">
<img v-if="logo" :src="logo" alt="Chatwoot logo" class="mb-6 logo" />
<img
v-if="logo"
:src="logo"
alt="Moreminimore Chat logo"
class="mb-6 logo"
/>
<div
v-if="!isRatingSubmitted"
v-dompurify-html="formattedMessageContent"

View File

@@ -42,13 +42,7 @@ const resizeContainers = () => {
<img
:src="globalConfig.logo"
:alt="globalConfig.installationName"
class="block w-auto h-7 dark:hidden"
/>
<img
v-if="globalConfig.logoDark"
:src="globalConfig.logoDark"
:alt="globalConfig.installationName"
class="hidden w-auto h-7 dark:block"
class="block w-auto h-7"
/>
<h2 class="mt-6 text-2xl font-semibold text-n-slate-12">
{{

View File

@@ -296,13 +296,7 @@ export default {
<img
:src="globalConfig.logo"
:alt="globalConfig.installationName"
class="block w-auto h-8 mx-auto dark:hidden"
/>
<img
v-if="globalConfig.logoDark"
:src="globalConfig.logoDark"
:alt="globalConfig.installationName"
class="hidden w-auto h-8 mx-auto dark:block"
class="block w-auto h-8 mx-auto"
/>
<h2 class="mt-6 text-3xl font-medium text-center text-n-slate-12">
{{ replaceInstallationName($t('LOGIN.TITLE')) }}

View File

@@ -75,13 +75,7 @@ onMounted(async () => {
<img
:src="globalConfig.logo"
:alt="globalConfig.installationName"
class="block w-auto h-8 mx-auto dark:hidden"
/>
<img
v-if="globalConfig.logoDark"
:src="globalConfig.logoDark"
:alt="globalConfig.installationName"
class="hidden w-auto h-8 mx-auto dark:block"
class="block w-auto h-8 mx-auto"
/>
<h2 class="mt-6 text-3xl font-medium text-center text-n-slate-12">
{{ t('LOGIN.SAML.TITLE') }}

View File

@@ -1,7 +1,7 @@
class ApplicationMailer < ActionMailer::Base
include ActionView::Helpers::SanitizeHelper
default from: ENV.fetch('MAILER_SENDER_EMAIL', 'Chatwoot <accounts@chatwoot.com>')
default from: ENV.fetch('MAILER_SENDER_EMAIL', 'Moreminimore Chat Team <contact@moreminimore.com>')
before_action { ensure_current_account(params.try(:[], :account)) }
around_action :switch_locale
layout 'mailer/base'

View File

@@ -6,7 +6,7 @@ class ConversationReplyMailer < ApplicationMailer
include ConversationReplyMailerHelper
include ReferencesHeaderBuilder
include EmailAddressParseable
default from: ENV.fetch('MAILER_SENDER_EMAIL', 'Chatwoot <accounts@chatwoot.com>')
default from: ENV.fetch('MAILER_SENDER_EMAIL', 'Moreminimore Chat Team <contact@moreminimore.com>')
layout :choose_layout
def reply_with_summary(conversation, last_queued_id)

View File

@@ -10,6 +10,6 @@ module EmailAddressParseable
end
def default_sender_email_address
Mail::Address.new(ENV.fetch('MAILER_SENDER_EMAIL', 'accounts@chatwoot.com')).address
Mail::Address.new(ENV.fetch('MAILER_SENDER_EMAIL', 'contact@moreminimore.com')).address
end
end

View File

@@ -175,7 +175,7 @@ class MailPresenter < SimpleDelegator
def notification_email_from_chatwoot?
# notification emails are send via mailer sender email address. so it should match
configured_sender = Mail::Address.new(ENV.fetch('MAILER_SENDER_EMAIL', 'Chatwoot <accounts@chatwoot.com>')).address
configured_sender = Mail::Address.new(ENV.fetch('MAILER_SENDER_EMAIL', 'Moreminimore Chat Team <contact@moreminimore.com>')).address
original_sender.to_s.casecmp?(configured_sender)
end

View File

@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<title>SuperAdmin | Chatwoot</title>
<title>SuperAdmin | Moreminimore Chat</title>
<%= vite_client_tag %>
<%= vite_javascript_tag 'superadmin' %>
</head>
@@ -9,10 +9,9 @@
<div class="h-full w-full antialiased">
<main class="flex flex-col bg-woot-25 min-h-screen w-full py-20 sm:px-6 lg:px-8 dark:bg-slate-900">
<section class="max-w-5xl mx-auto">
<img src="/brand-assets/logo.svg" alt="Chatwoot" class="mx-auto h-8 w-auto block dark:hidden">
<img src="/brand-assets/logo_dark.svg" alt="Chatwoot" class="mx-auto h-8 w-auto hidden dark:block">
<img src="/brand-assets/logo.png" alt="Moreminimore Chat" class="mx-auto h-8 w-auto">
<h2 class="mt-6 text-center text-3xl font-medium text-slate-900 dark:text-woot-50">
Howdy, Welcome to Chatwoot 👋
Howdy, Welcome to Moreminimore Chat 👋
</h2>
</section>
<section class="bg-white shadow sm:mx-auto mt-11 sm:w-full sm:max-w-lg dark:bg-slate-800 p-11 sm:shadow-lg sm:rounded-lg mb-8 mt-15">

View File

@@ -23,9 +23,9 @@ as defined by the routes in the `admin/` namespace
<div class="border-slate-100 border-r w-56 flex-shrink-0 justify-between h-full flex flex-col" role="navigation">
<div>
<div class="flex mx-4 mb-4 border-slate-100 border-b py-6">
<%= link_to image_tag('/brand-assets/logo_thumbnail.svg', alt: 'Chatwoot Admin Dashboard', class: 'h-10'), super_admin_root_url %>
<%= link_to image_tag('/brand-assets/logo_thumbnail.png', alt: 'Moreminimore Chat Admin Dashboard', class: 'h-10'), super_admin_root_url %>
<div class="flex flex-col ml-3">
<div class="text-sm">Chatwoot <%= Chatwoot.config[:version] %></div>
<div class="text-sm">Moreminimore Chat <%= Chatwoot.config[:version] %></div>
<div class="text-xs text-slate-700 mt-0.5">Super Admin Console</div>
</div>
</div>

View File

@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<title>SuperAdmin | Chatwoot</title>
<title>SuperAdmin | Moreminimore Chat</title>
<%= vite_client_tag %>
<%= vite_javascript_tag 'superadmin' %>
</head>
@@ -9,8 +9,7 @@
<div class="h-full w-full antialiased">
<main class="flex flex-col bg-woot-25 min-h-screen w-full py-20 sm:px-6 lg:px-8 dark:bg-slate-900">
<section class="max-w-5xl mx-auto">
<img src="/brand-assets/logo.svg" alt="Chatwoot" class="mx-auto h-8 w-auto block dark:hidden">
<img src="/brand-assets/logo_dark.svg" alt="Chatwoot" class="mx-auto h-8 w-auto hidden dark:block">
<img src="/brand-assets/logo.png" alt="Moreminimore Chat" class="mx-auto h-8 w-auto">
<h2 class="mt-6 text-center text-3xl font-medium text-slate-900 dark:text-woot-50">
Howdy, admin 👋
</h2>

View File

@@ -12,7 +12,7 @@ Devise.setup do |config|
# Configure the e-mail address which will be shown in Devise::Mailer,
# note that it will be overwritten if you use your own mailer class
# with default "from" parameter.
config.mailer_sender = ENV.fetch('MAILER_SENDER_EMAIL', 'Chatwoot <accounts@chatwoot.com>')
config.mailer_sender = ENV.fetch('MAILER_SENDER_EMAIL', 'Moreminimore Chat Team <contact@moreminimore.com>')
# Configure the class responsible to send e-mails.
# config.mailer = 'Devise::Mailer'

View File

@@ -15,39 +15,35 @@
# ------- Branding Related Config ------- #
- name: INSTALLATION_NAME
value: 'Chatwoot'
value: 'Moreminimore Chat'
display_title: 'Installation Name'
description: 'The installation wide name that would be used in the dashboard, title etc.'
- name: LOGO_THUMBNAIL
value: '/brand-assets/logo_thumbnail.svg'
value: '/brand-assets/logo_thumbnail.png'
display_title: 'Logo Thumbnail'
description: 'The thumbnail that would be used for favicon (512px X 512px)'
- name: LOGO
value: '/brand-assets/logo.svg'
value: '/brand-assets/logo.png'
display_title: 'Logo'
description: 'The logo that would be used on the dashboard, login page etc.'
- name: LOGO_DARK
value: '/brand-assets/logo_dark.svg'
display_title: 'Logo Dark Mode'
description: 'The logo that would be used on the dashboard, login page etc. for dark mode'
- name: BRAND_URL
value: 'https://www.chatwoot.com'
value: 'https://www.moreminimore.com'
display_title: 'Brand URL'
description: 'The URL that would be used in emails under the section “Powered By”'
- name: WIDGET_BRAND_URL
value: 'https://www.chatwoot.com'
value: 'https://www.moreminimore.com'
display_title: 'Widget Brand URL'
description: 'The URL that would be used in the widget under the section “Powered By”'
- name: BRAND_NAME
value: 'Chatwoot'
value: 'Moreminimore Chat'
display_title: 'Brand Name'
description: 'The name that would be used in emails and the widget'
- name: TERMS_URL
value: 'https://www.chatwoot.com/terms-of-service'
value: 'https://www.moreminimore.com/terms-of-service'
display_title: 'Terms URL'
description: 'The terms of service URL displayed in Signup Page'
- name: PRIVACY_URL
value: 'https://www.chatwoot.com/privacy-policy'
value: 'https://www.moreminimore.com/privacy-policy'
display_title: 'Privacy URL'
description: 'The privacy policy URL displayed in the app'
- name: DISPLAY_MANIFEST
@@ -104,7 +100,7 @@
locked: false
- name: MAILER_SUPPORT_EMAIL
display_title: 'Support Email'
value:
value: 'contact@moreminimore.com'
description: 'The support email address for your installation'
locked: false
- name: ACCOUNT_EMAILS_LIMIT

View File

@@ -394,16 +394,16 @@ en:
description: 'Dashboard Apps allow you to create and embed applications that display user information, orders, or payment history, providing more context to your customer support agents.'
dyte:
name: 'Cloudflare RealtimeKit'
short_description: 'Start video/voice calls with customers directly from Chatwoot.'
description: 'Cloudflare RealtimeKit lets your agents start video/voice calls with your customers directly from Chatwoot.'
short_description: 'Start video/voice calls with customers directly from Moreminimore Chat.'
description: 'Cloudflare RealtimeKit lets your agents start video/voice calls with your customers directly from Moreminimore Chat.'
meeting_name: '%{agent_name} has started a meeting'
slack:
name: 'Slack'
short_description: 'Receive notifications and respond to conversations directly in Slack.'
description: "Integrate Chatwoot with Slack to keep your team in sync. This integration allows you to receive notifications for new conversations and respond to them directly within Slack's interface."
description: "Integrate Moreminimore Chat with Slack to keep your team in sync. This integration allows you to receive notifications for new conversations and respond to them directly within Slack's interface."
webhooks:
name: 'Webhooks'
description: 'Webhook events provide real-time updates about activities in your Chatwoot account. You can subscribe to your preferred events, and Chatwoot will send you HTTP callbacks with the updates.'
description: 'Webhook events provide real-time updates about activities in your Moreminimore Chat account. You can subscribe to your preferred events, and Moreminimore Chat will send you HTTP callbacks with the updates.'
dialogflow:
name: 'Dialogflow'
short_description: 'Build chatbots to handle initial queries before transferring to agents.'

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -1,25 +0,0 @@
<svg
width="16"
height="16"
viewBox="0 0 16 16"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<g clip-path="url(#woot-logo-clip-2342424e23u32098)">
<path
d="M8 16C12.4183 16 16 12.4183 16 8C16 3.58172 12.4183 0 8 0C3.58172 0 0 3.58172 0 8C0 12.4183 3.58172 16 8 16Z"
fill="#2781F6"
/>
<path
d="M11.4172 11.4172H7.70831C5.66383 11.4172 4 9.75328 4 7.70828C4 5.66394 5.66383 4 7.70835 4C9.75339 4 11.4172 5.66394 11.4172 7.70828V11.4172Z"
fill="white"
stroke="white"
stroke-width="0.1875"
/>
</g>
<defs>
<clipPath id="woot-logo-clip-2342424e23u32098">
<rect width="16" height="16" fill="white" />
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 709 B

View File

@@ -1,6 +1,6 @@
{
"name": "Chatwoot",
"short_name": "Chatwoot",
"name": "Moreminimore Chat",
"short_name": "Moreminimore Chat",
"icons": [{
"src": "\/android-icon-36x36.png",
"sizes": "36x36",