Skip to content

Commit 259b8eb

Browse files
feat: frankendancer logo
1 parent 45f5f07 commit 259b8eb

File tree

13 files changed

+459
-23
lines changed

13 files changed

+459
-23
lines changed

.env.example

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
VITE_WEBSOCKET_URL=
1+
VITE_WEBSOCKET_URL=
2+
VITE_VALIDATOR_CLIENT=

index.html

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,45 @@
11
<!doctype html>
22
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<link id="favicon" rel="icon" type="image/svg+xml" />
6+
<link
7+
rel="preload"
8+
as="font"
9+
crossorigin="anonymous"
10+
href="/node_modules/@fontsource/inter-tight/files/inter-tight-latin-400-normal.woff2"
11+
type="font/woff2"
12+
/>
13+
<link
14+
rel="preload"
15+
type="image/svg+xml"
16+
as="image"
17+
href="./src/assets/firedancer.svg"
18+
/>
19+
<link
20+
rel="preload"
21+
type="image/svg+xml"
22+
as="image"
23+
href="./src/assets/firedancer_logo.svg"
24+
/>
25+
<link
26+
rel="preload"
27+
type="image/svg+xml"
28+
as="image"
29+
href="./src/assets/frankendancer.svg"
30+
/>
31+
<link
32+
rel="preload"
33+
type="image/svg+xml"
34+
as="image"
35+
href="./src/assets/frankendancer_logo.svg"
36+
/>
37+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
38+
<title>Firedancer</title>
39+
</head>
340

4-
<head>
5-
<meta charset="UTF-8" />
6-
<link rel="icon" type="image/svg+xml" href="./src/assets/firedancer_logo.svg" />
7-
<link rel="preload" as="font" crossorigin="anonymous"
8-
href="/node_modules/@fontsource/inter-tight/files/inter-tight-latin-400-normal.woff2" type="font/woff2" />
9-
<link rel="preload" type="image/svg+xml" as="image" href="./src/assets/firedancer.svg" />
10-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
11-
<title>Firedancer</title>
12-
</head>
13-
14-
<body>
15-
<div id="root"></div>
16-
<script type="module" src="/src/main.tsx"></script>
17-
</body>
18-
19-
</html>
41+
<body>
42+
<div id="root"></div>
43+
<script type="module" src="/src/main.tsx"></script>
44+
</body>
45+
</html>

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
"scripts": {
77
"dev": "NODE_OPTIONS=--max-http-header-size=64000 vite",
88
"build": "tsc && vite build",
9+
"build:fr": "tsc && VITE_VALIDATOR_CLIENT=Frankendancer vite build",
10+
"build:fd": "tsc && VITE_VALIDATOR_CLIENT=Firedancer vite build",
911
"build:dev": "tsc && vite build --mode development",
1012
"test": "vitest",
1113
"lint": "prettier --check . && eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",

src/App.tsx

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ import { createRouter, RouterProvider } from "@tanstack/react-router";
44
import "./app.css";
55
import { routeTree } from "./routeTree.gen";
66
import { ConnectionProvider } from "./api/ws/ConnectionProvider";
7-
import { useSetAtom } from "jotai";
8-
import { containerElAtom } from "./atoms";
7+
import { getDefaultStore, useSetAtom } from "jotai";
8+
import { clientAtom, containerElAtom } from "./atoms";
99
import { useCallback } from "react";
1010
import * as colors from "./colors";
1111
import { kebabCase } from "lodash";
12+
import FiredancerLogo from "./assets/firedancer_logo.svg";
13+
import FrankendancerLogo from "./assets/frankendancer_logo.svg";
14+
import { ClientEnum } from "./api/entities";
1215

1316
const router = createRouter({ routeTree });
1417

@@ -19,6 +22,17 @@ declare module "@tanstack/react-router" {
1922
}
2023
}
2124

25+
// set up favicon and title based on client
26+
const store = getDefaultStore();
27+
const client = store.get(clientAtom);
28+
if (client === ClientEnum.Firedancer) {
29+
document.getElementById("favicon")?.setAttribute("href", FiredancerLogo);
30+
document.title = "Firedancer";
31+
} else {
32+
document.getElementById("favicon")?.setAttribute("href", FrankendancerLogo);
33+
document.title = "Frankendancer";
34+
}
35+
2236
export default function App() {
2337
const setContainerEl = useSetAtom(containerElAtom);
2438

src/api/entities.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { z } from "zod";
22

3+
export const clientSchema = z.enum(["Frankendancer", "Firedancer"]);
4+
export const ClientEnum = clientSchema.enum;
5+
36
const summaryTopicSchema = z.object({
47
topic: z.literal("summary"),
58
});

src/api/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { z } from "zod";
22
import type {
3+
clientSchema,
34
identityBalanceSchema,
45
blockEngineStatusSchema,
56
blockEngineUpdateSchema,
@@ -41,6 +42,8 @@ import type {
4142
scheduleStrategySchema,
4243
} from "./entities";
4344

45+
export type Client = z.infer<typeof clientSchema>;
46+
4447
export type Version = z.infer<typeof versionSchema>;
4548

4649
export type Cluster = z.infer<typeof clusterSchema>;

src/assets/frankendancer.svg

Lines changed: 169 additions & 0 deletions
Loading

src/assets/frankendancer_logo.svg

Lines changed: 168 additions & 0 deletions
Loading

src/atoms.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,20 @@ import { merge } from "lodash";
1919
import { getLeaderSlots, getStake } from "./utils";
2020
import { searchLeaderSlotsAtom } from "./features/LeaderSchedule/atoms";
2121
import { selectedSlotAtom } from "./features/Overview/SlotPerformance/atoms";
22+
import { ClientEnum, clientSchema } from "./api/entities";
23+
24+
export const clientAtom = atom(() => {
25+
const parsedClient = clientSchema.safeParse(
26+
(import.meta.env.VITE_VALIDATOR_CLIENT as string)?.trim(),
27+
);
28+
29+
if (parsedClient.error) {
30+
// default
31+
return ClientEnum.Frankendancer;
32+
}
33+
34+
return parsedClient.data;
35+
});
2236

2337
export const containerElAtom = atom<HTMLDivElement | null>();
2438

src/features/Header/IdentityKey.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export default function IdentityKey() {
2626
const isNarrowScreen = useMedia("(min-width: 900px)");
2727

2828
useEffect(() => {
29-
let title = "Firedancer";
29+
let title = document.title;
3030
if (peer?.info?.name) {
3131
title += ` | ${peer.info.name}`;
3232
} else if (identityKey) {

0 commit comments

Comments
 (0)