Make Boomer Heater more dead

This commit is contained in:
Dorian
2026-05-06 19:28:51 +01:00
parent d6f8fd7686
commit 243cd0daf3
2 changed files with 29 additions and 11 deletions

View File

@@ -6,7 +6,7 @@
<path d="M116 142c-18-28 18-36 0-64M160 142c-18-28 18-36 0-64M204 142c-18-28 18-36 0-64" fill="none" stroke="#ff8a4f" stroke-width="8" stroke-linecap="round"/>
<path d="M90 180h140" stroke="#475569" stroke-width="10" stroke-linecap="round"/>
<circle cx="224" cy="58" r="9" fill="#6a7aa0"/>
<text x="160" y="205" text-anchor="middle" fill="#6a7aa0" font-family="monospace" font-size="15" font-weight="700">NO HASHES. JUST GAY.</text>
<text x="160" y="205" text-anchor="middle" fill="#6a7aa0" font-family="monospace" font-size="15" font-weight="700">NO HASHES. JUST GHEI.</text>
</g>
<defs><filter id="g"><feDropShadow dx="0" dy="8" stdDeviation="8" flood-color="#000" flood-opacity=".55"/></filter></defs>
</svg>

Before

Width:  |  Height:  |  Size: 939 B

After

Width:  |  Height:  |  Size: 940 B

View File

@@ -5,6 +5,8 @@ import { ROASTS, STATUS_LINES, STALE_LINES } from "../strings";
const props = defineProps<{ miner: MinerStat; bestWork: number | undefined }>();
const isBoomerHeater = computed(() => props.miner.nickname === "Boomer Heater");
const slug = computed(() => {
// Map nickname → roast key
const map: Record<string, string> = {
@@ -16,10 +18,15 @@ const slug = computed(() => {
return map[props.miner.nickname] ?? "unknown";
});
const roast = computed(() => ROASTS[slug.value] ?? ROASTS["unknown"]);
const roast = computed(() =>
isBoomerHeater.value ? "The dumb shit your fiat friends have." : (ROASTS[slug.value] ?? ROASTS["unknown"]),
);
const statusLabel = computed(() => STATUS_LINES[props.miner.status]);
const displayStatusLabel = computed(() => isBoomerHeater.value ? "dead" : statusLabel.value);
const statusMarker = computed(() => isBoomerHeater.value ? "☠" : "");
const statusGlow = computed(() => {
if (isBoomerHeater.value) return "glow-red";
switch (props.miner.status) {
case "hashing": return "glow-green";
case "stale": return "glow-amber";
@@ -28,6 +35,7 @@ const statusGlow = computed(() => {
});
const lastShareLabel = computed(() => {
if (isBoomerHeater.value) return "Nothing";
const s = props.miner.lastShareAgeS;
if (s === null) return "no shares yet";
if (s < 60) return `${s.toFixed(0)}s ago`;
@@ -36,10 +44,14 @@ const lastShareLabel = computed(() => {
});
const lifetimeShares = computed(() => props.miner.diffAcceptedCount);
const acceptedWork = computed(() => formatBig(props.miner.diffAcceptedSum));
const bestWork = computed(() => props.bestWork && props.bestWork > 0 ? formatBig(props.bestWork) : "collecting");
const acceptedWork = computed(() => isBoomerHeater.value ? "Zero. Obviously." : formatBig(props.miner.diffAcceptedSum));
const bestWork = computed(() => {
if (isBoomerHeater.value) return "Fuck all";
return props.bestWork && props.bestWork > 0 ? formatBig(props.bestWork) : "collecting";
});
const staleNote = computed(() => {
if (isBoomerHeater.value) return "warming a room while contributing nothing to civilization.";
if (props.miner.status !== "stale") return "";
const idx = Math.floor(Math.random() * STALE_LINES.length);
return STALE_LINES[idx];
@@ -59,8 +71,9 @@ function formatBig(n: number): string {
<header>
<div class="nickname glow-magenta">{{ miner.nickname }}</div>
<div :class="['status', statusGlow]">
<span class="dot pulse" />
{{ statusLabel }}
<span v-if="statusMarker" class="dead-mark">{{ statusMarker }}</span>
<span v-else class="dot pulse" />
{{ displayStatusLabel }}
</div>
</header>
@@ -71,7 +84,7 @@ function formatBig(n: number): string {
<div class="stat">
<div class="label">hashrate</div>
<div class="value glow-cyan">
{{ miner.hashrateThs.toFixed(2) }}
{{ isBoomerHeater ? "No hashes" : miner.hashrateThs.toFixed(2) }}
<span class="unit">Th/s</span>
</div>
</div>
@@ -81,7 +94,7 @@ function formatBig(n: number): string {
</div>
<div class="stat">
<div class="label">tickets bought</div>
<div class="value">{{ lifetimeShares.toLocaleString() }}</div>
<div class="value">{{ isBoomerHeater ? "None" : lifetimeShares.toLocaleString() }}</div>
</div>
<div class="stat">
<div class="label">best calc</div>
@@ -94,12 +107,12 @@ function formatBig(n: number): string {
<div class="stat">
<div class="label">reject %</div>
<div :class="['value', miner.rejectPct > 5 ? 'glow-red' : '']">
{{ miner.rejectPct.toFixed(2) }}%
{{ isBoomerHeater ? "not even rejected" : `${miner.rejectPct.toFixed(2)}%` }}
</div>
</div>
<div class="stat">
<div class="label">vdiff</div>
<div class="value">{{ miner.vdiff.toLocaleString() }}</div>
<div class="value">{{ isBoomerHeater ? "Fiat" : miner.vdiff.toLocaleString() }}</div>
</div>
</div>
@@ -108,7 +121,7 @@ function formatBig(n: number): string {
<span class="loc muted">@{{ miner.location }}</span>
</footer>
<div v-if="miner.status === 'stale'" class="stale-banner">
<div v-if="miner.status === 'stale' || isBoomerHeater" class="stale-banner">
{{ staleNote }}
</div>
</div>
@@ -157,6 +170,11 @@ header {
background: currentColor;
box-shadow: 0 0 8px currentColor;
}
.dead-mark {
font-size: 13px;
line-height: 1;
text-shadow: 0 0 8px currentColor;
}
.model {
font-size: 12px;
color: var(--fg-1);