feat(blotter): replace board stats with changelog-backed blotter

Add static blotter snapshot, route /blotter, compact board blotter (Hide/Show All).
Include yarn blotter tooling and AGENTS rules so every changelog version has a
release line. 4chan-style table UI, subplebbit→board and plebchan→5chan in messages.
This commit is contained in:
plebeius
2026-02-22 19:37:49 +08:00
parent a13c72f888
commit 0cb7b1a970
54 changed files with 1180 additions and 430 deletions
@@ -0,0 +1,9 @@
.versionLink {
color: var(--button-desktop-text-color);
text-decoration: var(--button-text-decoration);
text-transform: none;
}
.versionLink:hover {
color: var(--button-desktop-text-color-hover);
}
@@ -0,0 +1,26 @@
import type { BlotterEntry } from '../../lib/utils/blotter-utils';
import styles from './blotter-message.module.css';
const RELEASES_BASE = 'https://github.com/bitsocialhq/5chan/releases/tag/v';
function normalizeMessage(text: string): string {
return text.replace(/subplebbit/gi, 'board').replace(/plebchan/gi, '5chan');
}
const BlotterMessage = ({ entry }: { entry: BlotterEntry }) => {
if (entry.kind === 'release' && entry.version) {
const idx = entry.message.indexOf(': ');
const oneLiner = idx >= 0 ? entry.message.slice(idx + 2) : entry.message;
return (
<>
<a href={`${RELEASES_BASE}${entry.version}`} className={styles.versionLink} target='_blank' rel='noopener noreferrer'>
v{entry.version}
</a>
: {normalizeMessage(oneLiner)}
</>
);
}
return <>{normalizeMessage(entry.message)}</>;
};
export default BlotterMessage;
+1
View File
@@ -0,0 +1 @@
export { default } from './blotter-message';