Rebrand arc-web app from Arc to Fabro
Replace logo/favicon SVGs with Fabro brick icon wordmark. Update all page titles, alt text, auth UI copy, and GitHub App name prefix. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
|
@ -1,10 +1,10 @@
|
|||
import type { ReactNode } from "react";
|
||||
|
||||
function ArcLogo({ className }: { className?: string }) {
|
||||
function FabroLogo({ className }: { className?: string }) {
|
||||
return (
|
||||
<img
|
||||
src="/logo.svg"
|
||||
alt="Arc"
|
||||
alt="Fabro"
|
||||
className={className}
|
||||
draggable={false}
|
||||
/>
|
||||
|
|
@ -22,7 +22,7 @@ export function AuthLayout({
|
|||
<div className="flex min-h-screen flex-col items-center justify-center bg-atmosphere px-4">
|
||||
<div className="w-full max-w-sm">
|
||||
<div className="mb-8 flex justify-center">
|
||||
<ArcLogo className="h-12 w-12" />
|
||||
<FabroLogo className="h-12 w-12" />
|
||||
</div>
|
||||
<div className="rounded-xl border border-line bg-panel/80 p-8 shadow-lg backdrop-blur-sm">
|
||||
{children}
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ export default function AppShell({ loaderData }: Route.ComponentProps) {
|
|||
<div className="flex items-center">
|
||||
<div className="shrink-0">
|
||||
<Link to="/start">
|
||||
<img alt="Arc" src={theme === "dark" ? "/logotype.svg" : "/logotype-light.svg"} className="h-8 w-auto" />
|
||||
<img alt="Fabro" src={theme === "dark" ? "/logotype.svg" : "/logotype-light.svg"} className="h-8 w-auto" />
|
||||
</Link>
|
||||
</div>
|
||||
<div className="hidden md:block">
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ export default function AuthLogin({ loaderData }: Route.ComponentProps) {
|
|||
return (
|
||||
<AuthLayout>
|
||||
<h1 className="text-center text-lg font-semibold text-fg">
|
||||
Sign in to Arc
|
||||
Sign in to Fabro
|
||||
</h1>
|
||||
<p className="mt-2 text-center text-sm text-fg-3">
|
||||
Authenticate with your GitHub account to continue.
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import type { PaginatedSavedQueryList, PaginatedHistoryEntryList } from "@qltysh
|
|||
import type { Route } from "./+types/insights";
|
||||
|
||||
export function meta({}: Route.MetaArgs) {
|
||||
return [{ title: "Insights — Arc" }];
|
||||
return [{ title: "Insights — Fabro" }];
|
||||
}
|
||||
|
||||
export const handle = {
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ export async function loader({ request }: Route.LoaderArgs) {
|
|||
}
|
||||
|
||||
export function meta({}: Route.MetaArgs) {
|
||||
return [{ title: "Retros \u2014 Arc" }];
|
||||
return [{ title: "Retros \u2014 Fabro" }];
|
||||
}
|
||||
|
||||
const smoothnessOptions: Array<{ value: SmoothnessRating; label: string }> = [
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ export async function action({ params, request }: Route.ActionArgs) {
|
|||
|
||||
export function meta({ data }: Route.MetaArgs) {
|
||||
const run = data?.run;
|
||||
return [{ title: run ? `${run.title} — Arc` : "Run — Arc" }];
|
||||
return [{ title: run ? `${run.title} — Fabro` : "Run — Fabro" }];
|
||||
}
|
||||
|
||||
export default function RunDetail({ loaderData, params }: Route.ComponentProps) {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ export async function loader({ request, params }: Route.LoaderArgs) {
|
|||
|
||||
export function meta({ data }: Route.MetaArgs) {
|
||||
const retro = data?.retro;
|
||||
return [{ title: retro ? `Retro: ${retro.goal} \u2014 Arc` : "Retro \u2014 Arc" }];
|
||||
return [{ title: retro ? `Retro: ${retro.goal} \u2014 Fabro` : "Retro \u2014 Fabro" }];
|
||||
}
|
||||
|
||||
function formatCost(cost: number | undefined): string {
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ import type { PaginatedRunList } from "@qltysh/arc-api-client";
|
|||
import type { Route } from "./+types/runs";
|
||||
|
||||
export function meta({}: Route.MetaArgs) {
|
||||
return [{ title: "Runs — Arc" }];
|
||||
return [{ title: "Runs — Fabro" }];
|
||||
}
|
||||
|
||||
const columnConfig: {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import type { Route } from "./+types/session-detail";
|
|||
export const handle = { hideHeader: true, wide: true };
|
||||
|
||||
export function meta({}: Route.MetaArgs) {
|
||||
return [{ title: "Session — Arc" }];
|
||||
return [{ title: "Session — Fabro" }];
|
||||
}
|
||||
|
||||
export async function loader({ request, params }: Route.LoaderArgs) {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import type { ServerConfiguration } from "@qltysh/arc-api-client";
|
|||
import type { Route } from "./+types/settings";
|
||||
|
||||
export function meta({}: Route.MetaArgs) {
|
||||
return [{ title: "Settings — Arc" }];
|
||||
return [{ title: "Settings — Fabro" }];
|
||||
}
|
||||
|
||||
export const handle = { hideHeader: true };
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ export default function SetupCallback({ loaderData }: Route.ComponentProps) {
|
|||
<div className="flex min-h-screen flex-col items-center justify-center bg-atmosphere px-4">
|
||||
<div className="w-full max-w-sm">
|
||||
<div className="mb-8 flex justify-center">
|
||||
<img src="/logo.svg" alt="Arc" className="h-12 w-12" draggable={false} />
|
||||
<img src="/logo.svg" alt="Fabro" className="h-12 w-12" draggable={false} />
|
||||
</div>
|
||||
<div className="rounded-xl border border-line bg-panel/80 p-8 shadow-lg backdrop-blur-sm">
|
||||
<div className="mx-auto mb-4 flex h-10 w-10 items-center justify-center rounded-full bg-coral/10">
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ export function loader({ request }: Route.LoaderArgs) {
|
|||
const suffix = Math.random().toString(16).slice(2, 8);
|
||||
|
||||
const manifest = {
|
||||
name: `Arc-${suffix}`,
|
||||
name: `Fabro-${suffix}`,
|
||||
url: baseUrl,
|
||||
redirect_url: `${baseUrl}/setup/callback`,
|
||||
callback_urls: [`${baseUrl}/auth/callback`],
|
||||
|
|
@ -39,7 +39,7 @@ export default function Setup({ loaderData }: Route.ComponentProps) {
|
|||
return (
|
||||
<AuthLayout>
|
||||
<h1 className="text-center text-lg font-semibold text-fg">
|
||||
Set up Arc
|
||||
Set up Fabro
|
||||
</h1>
|
||||
<p className="mt-2 text-center text-sm text-fg-3">
|
||||
Register a GitHub App to enable OAuth login and repository access.
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ import type { Route } from "./+types/start";
|
|||
export const handle = { hideHeader: true, wide: true };
|
||||
|
||||
export function meta({}: Route.MetaArgs) {
|
||||
return [{ title: "Start — Arc" }];
|
||||
return [{ title: "Start — Fabro" }];
|
||||
}
|
||||
|
||||
export async function loader({ request }: Route.LoaderArgs) {
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ export async function loader({ request, params }: Route.LoaderArgs) {
|
|||
|
||||
export function meta({ data }: Route.MetaArgs) {
|
||||
const name = data?.data?.control?.name ?? "Verification";
|
||||
return [{ title: `${name} — Verification — Arc` }];
|
||||
return [{ title: `${name} — Verification — Fabro` }];
|
||||
}
|
||||
|
||||
type IconComponent = React.ComponentType<{ className?: string }>;
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ export async function loader({ request }: Route.LoaderArgs) {
|
|||
export const handle = { wide: true };
|
||||
|
||||
export function meta({}: Route.MetaArgs) {
|
||||
return [{ title: "Controls — Verification — Arc" }];
|
||||
return [{ title: "Controls — Verification — Fabro" }];
|
||||
}
|
||||
|
||||
type IconComponent = React.ComponentType<{ className?: string }>;
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ export async function loader({ request }: Route.LoaderArgs) {
|
|||
export const handle = { wide: true };
|
||||
|
||||
export function meta({}: Route.MetaArgs) {
|
||||
return [{ title: "Verifications — Arc" }];
|
||||
return [{ title: "Verifications — Fabro" }];
|
||||
}
|
||||
|
||||
type IconComponent = React.ComponentType<{ className?: string }>;
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ export async function loader({ request, params }: Route.LoaderArgs) {
|
|||
|
||||
export function meta({ data }: Route.MetaArgs) {
|
||||
const name = data?.data?.name ?? "Criterion";
|
||||
return [{ title: `${name} — Verification — Arc` }];
|
||||
return [{ title: `${name} — Verification — Fabro` }];
|
||||
}
|
||||
|
||||
type IconComponent = React.ComponentType<{ className?: string }>;
|
||||
|
|
|
|||
|
|
@ -224,7 +224,7 @@ export async function loader({ request, params }: Route.LoaderArgs) {
|
|||
|
||||
export function meta({ data }: Route.MetaArgs) {
|
||||
const title = data?.workflow?.name ?? "Workflow";
|
||||
return [{ title: `${title} — Arc` }];
|
||||
return [{ title: `${title} — Fabro` }];
|
||||
}
|
||||
|
||||
export default function WorkflowDetail({ loaderData }: Route.ComponentProps) {
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ import type { PaginatedWorkflowList } from "@qltysh/arc-api-client";
|
|||
import type { Route } from "./+types/workflows";
|
||||
|
||||
export function meta({}: Route.MetaArgs) {
|
||||
return [{ title: "Workflows — Arc" }];
|
||||
return [{ title: "Workflows — Fabro" }];
|
||||
}
|
||||
|
||||
export const handle = {
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 567 B |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 567 B |
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 7.8 KiB |