4 Commits
Author SHA1 Message Date
jcoffey-dev 0191f7e10c Merge pull request 'Write the name in lowercase where people see it' (#11) from fix/brand-lowercase into main
ci / build (push) Successful in 1m23s
ci / publish (push) Skipped
2026-09-22 22:21:02 +00:00
jcoffey-dev 7e3418079c Write the name in lowercase where people see it
ci / build (pull_request) Successful in 1m1s
ci / publish (pull_request) Skipped
The brand is lowercase inbuxa. This changes the setup wizard's welcome and
completion text, the logo's accessible name, the version line in the top bar,
the document title, the legacy-protocols screens and banner, the protocol
table's JMAP row, one help text, and the issuer new authenticator enrollments
are labeled with.

Keys are ids here, not English text, so nothing moved: each catalog value and
its inline fallback changed together. This console ships English only, so
there is no other catalog to follow. Comments, identifiers and env var names
are untouched.
2026-09-22 15:19:25 -07:00
jcoffey-dev 0ea86b6be0 Merge pull request 'Point links at git.coffeylabs.org after the move from GitHub' (#10) from fix/links-after-move into main
ci / build (push) Successful in 1m4s
ci / publish (push) Skipped
2026-09-22 16:11:23 +00:00
jcoffey-dev 3e7bb80f73 Point links at git.coffeylabs.org after the move from GitHub
ci / build (pull_request) Successful in 1m6s
ci / publish (pull_request) Skipped
GitHub took the organization's repos and GHCR offline on 2026-09-20. Repo,
release, raw-file and clone links now go to Gitea at git.coffeylabs.org,
container images to registry.coffeylabs.org, and GitLab-style /-/blob paths
to Gitea's /src/branch form. Go module paths are identifiers and stay as
they are; links to GitHub issues and pull requests are left as history.
2026-09-22 09:08:22 -07:00
14 changed files with 27 additions and 27 deletions
+1 -1
View File
@@ -32,6 +32,6 @@ session.
You'll get an acknowledgement within a few days. A report that turns out to
affect the mail server rather than this interface will be moved to
[inbuxa-server](https://github.com/inbuxa/inbuxa-server), and one that affects
[inbuxa-server](https://git.coffeylabs.org/inbuxa/inbuxa-server), and one that affects
upstream Stalwart's web interface will be passed to Stalwart Labs with credit
to you.
+3 -3
View File
@@ -336,7 +336,7 @@ export function BootstrapWizard() {
<WizardShell>
<div className="space-y-6">
<div>
<h2 className="text-2xl font-semibold tracking-tight">{t('bootstrap.welcome', 'Welcome to INBUXA')}</h2>
<h2 className="text-2xl font-semibold tracking-tight">{t('bootstrap.welcome', 'Welcome to inbuxa')}</h2>
<p className="text-sm text-muted-foreground mt-1">
{t('bootstrap.welcomeSubtitle', "Let's get your server set up.")}
</p>
@@ -471,7 +471,7 @@ function SuccessScreen({
'bootstrap.credentialsCreated',
'Your administrator account has been created. Write these down now: the password will not be shown again.',
)
: t('bootstrap.configuredSuccessfully', 'INBUXA has been configured successfully.')}
: t('bootstrap.configuredSuccessfully', 'inbuxa has been configured successfully.')}
</p>
</div>
</div>
@@ -503,7 +503,7 @@ function SuccessScreen({
<span className="font-medium">{t('bootstrap.nextStepLabel', 'Next step:')}</span>{' '}
{t(
'bootstrap.nextStepBody',
'restart INBUXA for the new configuration to take effect. Once restarted, sign in with the credentials above to continue administering your server.',
'restart inbuxa for the new configuration to take effect. Once restarted, sign in with the credentials above to continue administering your server.',
)}
</p>
</div>
+1 -1
View File
@@ -20,7 +20,7 @@ export function DefaultLogo() {
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="165 35 616 130"
aria-label={t('logo.inbuxaAlt', 'INBUXA')}
aria-label={t('logo.inbuxaAlt', 'inbuxa')}
className="h-7 w-auto max-w-[320px]"
>
<image x="165.85" y="35.00" width="109.39" height="130.00" href={inbuxaMark} />
+1 -1
View File
@@ -38,7 +38,7 @@ function buildOtpAuthUrl(totp: OTPAuth.TOTP): string {
function generateTotp(): { totp: OTPAuth.TOTP; url: string } {
const totp = new OTPAuth.TOTP({
issuer: 'INBUXA',
issuer: 'inbuxa',
label: 'account',
algorithm: 'SHA1',
digits: 6,
+1 -1
View File
@@ -104,7 +104,7 @@ export function TopBar() {
</Link>
</TooltipTrigger>
<TooltipContent side="bottom">
{t('version.label', 'INBUXA Admin {{version}}', { version: __APP_VERSION__ })}
{t('version.label', 'inbuxa Admin {{version}}', { version: __APP_VERSION__ })}
</TooltipContent>
</Tooltip>
</TooltipProvider>
@@ -62,10 +62,10 @@ export function LegacyProtocolsBanner() {
{t('legacyProtocols.bannerLead', 'Legacy mail protocols are')}{' '}
<strong>{t('legacyProtocols.bannerOff', 'off')}</strong>{' '}
{off === 'server'
? t('legacyProtocols.bannerTail', 'on this server. Only INBUXA webmail and JMAP apps can sign in.')
? t('legacyProtocols.bannerTail', 'on this server. Only inbuxa webmail and JMAP apps can sign in.')
: t(
'legacyProtocols.bannerTailTenant',
'for your organization. Only INBUXA webmail and JMAP apps can sign in.',
'for your organization. Only inbuxa webmail and JMAP apps can sign in.',
)}
</span>
{off === 'server' && (
@@ -115,7 +115,7 @@ export function LegacyProtocolsPage() {
<p className="text-muted-foreground">
{t(
'legacyProtocols.subtitle',
'Turn off IMAP, POP3, ManageSieve and sending from mail apps, so that only INBUXA webmail and JMAP apps can reach this server.',
'Turn off IMAP, POP3, ManageSieve and sending from mail apps, so that only inbuxa webmail and JMAP apps can reach this server.',
)}
</p>
</header>
@@ -206,7 +206,7 @@ function StatusCard({
</p>
<p className="text-sm text-muted-foreground">
{off
? t('legacyProtocols.statusOffBody', 'Only INBUXA webmail and JMAP apps can sign in.')
? t('legacyProtocols.statusOffBody', 'Only inbuxa webmail and JMAP apps can sign in.')
: t('legacyProtocols.statusOnBody', 'Mail apps can use IMAP, POP3 and ManageSieve.')}
{policy.changedAt !== null && (
<>
@@ -276,7 +276,7 @@ function ProtocolTable({ rows, off }: { rows: ProtocolRow[]; off: boolean }) {
<p className="border-t bg-muted/30 px-4 py-2 text-xs text-muted-foreground">
{t(
'legacyProtocols.lockNote',
'Incoming mail (SMTP) and INBUXA webmail (JMAP) are locked open: closing them would stop mail arriving and lock everyone out, including you.',
'Incoming mail (SMTP) and inbuxa webmail (JMAP) are locked open: closing them would stop mail arriving and lock everyone out, including you.',
)}
</p>
</div>
@@ -102,7 +102,7 @@ export function TenantLegacyProtocols({ tenantId }: { tenantId: string }) {
{off
? t(
'legacyProtocols.tenantOff',
'Off for {{organization}}. Only INBUXA webmail and JMAP apps can sign in to its domains.',
'Off for {{organization}}. Only inbuxa webmail and JMAP apps can sign in to its domains.',
{ organization: name },
)
: t(
+5 -5
View File
@@ -128,7 +128,7 @@ export function Statement({ scope }: { scope: StatementScope }) {
return (
<section className="space-y-3 rounded-xl border border-amber-500/40 bg-amber-500/5 p-5 text-sm leading-relaxed">
<p className="text-base font-semibold">
{t('legacyProtocols.statementTitle', 'Only INBUXA webmail and JMAP apps will work.')}
{t('legacyProtocols.statementTitle', 'Only inbuxa webmail and JMAP apps will work.')}
</p>
<p>
{scope.kind === 'server'
@@ -152,7 +152,7 @@ export function Statement({ scope }: { scope: StatementScope }) {
<li>
{t(
'legacyProtocols.statementFilters',
'Filters managed from a mail app (ManageSieve) will stop working. Filters set in INBUXA webmail keep working.',
'Filters managed from a mail app (ManageSieve) will stop working. Filters set in inbuxa webmail keep working.',
)}
</li>
<li>
@@ -164,7 +164,7 @@ export function Statement({ scope }: { scope: StatementScope }) {
<li>
{t(
'legacyProtocols.statementWebmail',
'People keep full access through INBUXA webmail, which can be installed as an app on phones and computers.',
'People keep full access through inbuxa webmail, which can be installed as an app on phones and computers.',
)}
</li>
</ul>
@@ -183,7 +183,7 @@ export function Statement({ scope }: { scope: StatementScope }) {
<p>
{t(
'legacyProtocols.statementSubmission',
'Sending from mail apps (SMTP submission) will stop working, but its ports stay open: mail apps will be told they cannot sign in. Incoming mail (SMTP) and INBUXA webmail (JMAP) are not affected and cannot be turned off here.',
'Sending from mail apps (SMTP submission) will stop working, but its ports stay open: mail apps will be told they cannot sign in. Incoming mail (SMTP) and inbuxa webmail (JMAP) are not affected and cannot be turned off here.',
)}
</p>
{scope.kind === 'server' && (
@@ -191,7 +191,7 @@ export function Statement({ scope }: { scope: StatementScope }) {
<strong>{t('legacyProtocols.firewallLead', 'This does not change your firewall or port forwarding.')}</strong>{' '}
{t(
'legacyProtocols.firewallBody',
'INBUXA stops answering on these ports; anything that still routes them to this server — firewall rules, NAT port-forwards, a load balancer or proxy — is yours to reconcile.',
'inbuxa stops answering on these ports; anything that still routes them to this server — firewall rules, NAT port-forwards, a load balancer or proxy — is yours to reconcile.',
)}
</p>
)}
+1 -1
View File
@@ -244,7 +244,7 @@ export function protocolRows(policy: ProtocolPolicy, listeners: PolicyListener[]
},
// Incoming mail and JMAP are never the switch's to close (LP-3, "Not affected, ever").
{ key: 'smtp', label: 'SMTP (incoming mail)', state: 'locked', ports: [] },
{ key: 'jmap', label: 'JMAP (INBUXA webmail)', state: 'locked', ports: [] },
{ key: 'jmap', label: 'JMAP (inbuxa webmail)', state: 'locked', ports: [] },
];
}
+1 -1
View File
@@ -104,7 +104,7 @@ export const PAGE_HELP: Record<string, PageHelp> = {
about: 'Named sets of permissions. Give a role to a person to let them do more, or less.',
},
'x:OAuthClient': {
about: 'Apps allowed to sign people in through this server, like INBUXA webmail and INBUXA Admin.',
about: 'Apps allowed to sign people in through this server, like inbuxa webmail and inbuxa Admin.',
},
'x:DkimSignature': {
about: 'The keys that sign outgoing mail so receivers can check it really came from you.',
+1 -1
View File
@@ -9,7 +9,7 @@
import { useEffect } from 'react';
const APP_NAME = 'INBUXA Admin';
const APP_NAME = 'inbuxa Admin';
export function useDocumentTitle(title?: string | null) {
useEffect(() => {
+5 -5
View File
@@ -15,7 +15,7 @@
"bootstrap": {
"clipboardBlocked": "Your browser blocked clipboard access.",
"complete": "Setup complete",
"configuredSuccessfully": "INBUXA has been configured successfully.",
"configuredSuccessfully": "inbuxa has been configured successfully.",
"copyFailed": "Copy failed",
"credentialsCreated": "Your administrator account has been created. Write these down now: the password will not be shown again.",
"emptyForm": "Setup form is empty. The server did not return any bootstrap fields.",
@@ -23,11 +23,11 @@
"failedToLoad": "Failed to load bootstrap state.",
"finishSetup": "Finish setup",
"loadingSetup": "Loading setup...",
"nextStepBody": "restart INBUXA for the new configuration to take effect. Once restarted, sign in with the credentials above to continue administering your server.",
"nextStepBody": "restart inbuxa for the new configuration to take effect. Once restarted, sign in with the credentials above to continue administering your server.",
"nextStepLabel": "Next step:",
"noConfirm": "The server did not confirm the update.",
"stepOf": "Step {{current}} of {{total}}",
"welcome": "Welcome to INBUXA",
"welcome": "Welcome to inbuxa",
"welcomeSubtitle": "Let's get your server set up."
},
"common": {
@@ -295,11 +295,11 @@
},
"logo": {
"alt": "Logo",
"inbuxaAlt": "INBUXA"
"inbuxaAlt": "inbuxa"
},
"logout": "Logout",
"version": {
"label": "INBUXA Admin {{version}}"
"label": "inbuxa Admin {{version}}"
},
"nav": {
"layoutLegacy": "Legacy",
+1 -1
View File
@@ -11,4 +11,4 @@
* this fork. The version shown beside the link names the build, which is what
* makes the offer something a person can act on.
*/
export const SOURCE_URL = 'https://github.com/inbuxa/inbuxa-admin';
export const SOURCE_URL = 'https://git.coffeylabs.org/inbuxa/inbuxa-admin';