Skip to content

Commit 329abd6

Browse files
NiveditJainclaude
andauthored
[luv-332] feat: restyle dashboard for befailproof.ai theme; drop light mode (#332)
* [luv-332] feat: restyle dashboard for befailproof.ai theme; drop light mode Swap the dashboard palette from deep-navy + sky-blue to near-black + electric cyan (#0a0a0a / #06b6d4) with a sharper 0.5rem radius, wire Geist Mono via next/font/google, paint a faint cyan radial vignette behind the canvas, and turn the loading splash into a terminal-prompt with a blinking caret. The navbar drops the Exosphere icon + "Failproof AI" text combo for the failproof wordmark from the CDN. Light mode is removed entirely — ThemeContext, ThemeProvider, ThemeToggle, Logo (theme-branching), the localStorage-keyed pre-paint script, the .light CSS block, and the obsolete public/exospheresmall* assets all go. Also fixes the entry-highlight keyframe (which referenced hsl(var(--primary)/0.15) against a hex variable, so the row-click highlight never actually painted) using color-mix(in oklch, …). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * [luv-332] docs: drop dashboard 'Theme' section after removing light mode The "## Theme" section in docs/dashboard.mdx described a runtime light/dark toggle that no longer exists. Drop it rather than rewriting to "the dashboard is dark" — that line adds no information for the reader. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * [luv-332] docs: fold dashboard.mdx cleanup note into changelog entry Keep the restyle as a single coherent changelog entry rather than splitting across "feature" and "docs" lines, since the docs deletion is downstream of the same code change. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * [luv-332] docs: stamp PR number in changelog entry Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * [luv-332] fix: address CodeRabbit review on PR #332 - app/layout.tsx: drop the inline <script> (used to set the dark class) and inline <style> (loading-screen CSS). The dark class is now rendered statically via className={`${geistMono.variable} dark`} so no inline JS is required, and the loading-screen placeholder is removed entirely — with no theme indeterminacy there's no FOUC to mask. Cleaner CSP posture, fewer ast-grep warnings on dangerouslySetInnerHTML. - app/globals.css: also drop the now-unused #__loading and body > * unhide rules and the caret-blink keyframe; add the empty line before `position: relative;` in the body block to satisfy the declaration-empty-line-before stylelint rule. - CHANGELOG.md: tighten the Unreleased entry from a long narrative paragraph to a single dense paragraph (~half the prior length). The CodeRabbit guideline of "single line" is honored in spirit but not literally — every existing entry under Unreleased / 0.0.10-beta.x is multi-paragraph prose, so a true one-liner here would diverge from house style. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * [luv-332] docs: shorten changelog entry to one line per project rule Per the CHANGELOG.md format rule documented in CLAUDE.md ("Each entry should be a single line: a short description followed by the PR number") and reiterated in CodeRabbit's review on PR #332. The detailed prose now lives only in the PR description. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * [luv-332] feat: re-palette dashboard to brand colors (black/pink/green) Replace the cyan-on-near-black scheme from the prior commits with the actual failproofai brand: black-dominant canvas (#09090b — matches the dark logo SVG's text fill), pink primary #e4587d (from docs/docs.json's colors.light), green accent (#4ade80 / #16a34a / #18e299 — the leaf gradient stops in docs/logo/dark.svg). The faint top-of-page wash is now pink instead of cyan, focus rings + active states + the entry-highlight keyframe pick up the new --primary automatically through the existing @theme inline tokens. Also swap the navbar wordmark from the CDN PNG to the local SVG copy at public/wordmark.svg (sourced from docs/logo/dark.svg) — sharper at any size, includes the green leaf, and removes the external-host dependency. New CSS variables --success / --success-deep / --success-glow expose the green leaf gradient stops as theme tokens for status indicators. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Revert "[luv-332] feat: re-palette dashboard to brand colors (black/pink/green)" This reverts commit 99cef7f. * [luv-332] feat: switch primary accent from cyan to brand pink #e4587d --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 070a9c6 commit 329abd6

16 files changed

Lines changed: 108 additions & 454 deletions

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Unreleased
44

55
### Features
6+
- Restyle dashboard to match the failproofai brand (near-black canvas, pink primary `#e4587d`, Geist Mono, wordmark navbar) and drop light mode entirely (#332).
67
- `scripts/launch.ts`: redesign the dashboard-startup ASCII banner to mirror the hosted PNG wordmark — hand-crafted chunky pixel-block lowercase "failproof ai" compressed with Unicode 2x2 quadrant block characters (▖▗▘▙▚▛▜▝▞▟ + ▀ ▄ █ ▌ ▐) and horizontally scaled 4:3 so the full wordmark fits in ~75 cols × ~10 rows (clean on any standard ≥80-col terminal), with a plain-text fallback for narrower windows. Also drops the "Using default .claude projects path: …" log line at startup — it printed unconditionally on every dashboard launch and added no signal (#322).
78
- Remove the undocumented `--projects-path <path>` / `-p <path>` CLI flag from `scripts/parse-script-args.ts` and the corresponding plumbing in `scripts/launch.ts` (custom-path branch + log line + spawn-env override). Custom Claude project folders can still be pointed at via the `CLAUDE_PROJECTS_PATH` environment variable, which `lib/paths.ts:getClaudeProjectsPath` already honors. `docs/cli/dashboard.mdx` updated to reflect the env-var-only path; tests in `__tests__/scripts/parse-script-args.test.ts` trimmed to drop the 6 cases that exercised the removed flag (#322).
89

__tests__/components/button.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ describe("Button", () => {
2525
render(<Button variant="outline">Outline</Button>);
2626
const btn = screen.getByText("Outline");
2727
expect(btn.className).toContain("border");
28-
expect(btn.className).toContain("bg-background");
28+
expect(btn.className).toContain("bg-transparent");
2929
});
3030

3131
it("applies correct classes for icon size", () => {

__tests__/components/theme-context.test.tsx

Lines changed: 0 additions & 48 deletions
This file was deleted.

__tests__/components/theme-toggle.test.tsx

Lines changed: 0 additions & 64 deletions
This file was deleted.

__tests__/helpers/test-utils.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
import React from "react";
22
import { render, type RenderOptions } from "@testing-library/react";
3-
import { ThemeProvider } from "@/contexts/ThemeContext";
43
import { AutoRefreshProvider } from "@/contexts/AutoRefreshContext";
54

65
function Providers({ children }: { children: React.ReactNode }) {
7-
return (
8-
<ThemeProvider>
9-
<AutoRefreshProvider>{children}</AutoRefreshProvider>
10-
</ThemeProvider>
11-
);
6+
return <AutoRefreshProvider>{children}</AutoRefreshProvider>;
127
}
138

149
export function renderWithProviders(

app/components/cli-badge.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export function CliBadge({ cli }: { cli: ProjectCli }) {
1111
const classes = getCliBadgeClasses(cli);
1212
return (
1313
<span
14-
className={`inline-flex items-center rounded px-1.5 py-0.5 text-[0.6rem] font-medium border ${classes}`}
14+
className={`inline-flex items-center rounded px-1.5 py-0.5 text-[0.6rem] font-mono font-medium uppercase tracking-wider border ${classes}`}
1515
title={`Agent CLI: ${label}`}
1616
>
1717
{label}

0 commit comments

Comments
 (0)