feat: crustacean character + repo readme

- Hero: minimal top-down crab silhouette in amber line-art, joins
  the staggered hero rise sequence; subtle hover scale on the group
- Favicon: crab silhouette replaces letter mark
- Footer: 'cleanup crab on the OpenClaw seafloor' replaces
  'quiet member of the OpenClaw family'
- Add README pointing to the openclaw/clawsweeper bot source
This commit is contained in:
Peter Steinberger 2026-04-30 02:37:01 +01:00
parent 1b5de389de
commit c614e56d2a
No known key found for this signature in database
3 changed files with 96 additions and 7 deletions

49
README.md Normal file
View File

@ -0,0 +1,49 @@
# clawsweeper.bot
The landing page for **[ClawSweeper](https://github.com/openclaw/clawsweeper)** —
the cleanup crab of OpenClaw. ClawSweeper scans every open issue and pull
request weekly, writes one durable review comment per item, and proposes a
close only when the evidence is strong.
<https://clawsweeper.bot>
## What's here
A single-page editorial site. Static HTML and CSS — no build step, no
JavaScript runtime, no analytics. Deploys directly to Vercel.
| File | Purpose |
|----------------|----------------------------------------------------------|
| `index.html` | Page markup |
| `style.css` | Abyssal archival theme, hairline rules, hero motion |
| `vercel.json` | Clean URLs, security headers, cache policy |
| `package.json` | Tiny manifest with a `python3 -m http.server` dev script |
## Local preview
```bash
pnpm dev
# or
python3 -m http.server 4321
```
Then open <http://localhost:4321>.
## Deploy
This repo is wired to a Vercel project under the `amantus` team. Production
deploys flow from `main`; nothing else is needed.
```bash
vercel --prod --scope amantus
```
## Sibling repos
- **ClawSweeper** (the bot itself) — <https://github.com/openclaw/clawsweeper>
- **OpenClaw**<https://github.com/openclaw/openclaw> · <https://openclaw.ai>
- **ClawHub**<https://github.com/openclaw/clawhub> · <https://clawhub.ai>
## License
MIT — see [`LICENSE`](./LICENSE).

View File

@ -13,7 +13,7 @@
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="ClawSweeper">
<meta name="twitter:description" content="The conservative maintenance bot for OpenClaw repositories.">
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' fill='%230a0e12'/%3E%3Ctext x='50%25' y='50%25' dy='.36em' text-anchor='middle' font-family='Georgia,serif' font-size='22' font-style='italic' fill='%23d4a574'%3EC%3C/text%3E%3C/svg%3E">
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' fill='%230a0e12'/%3E%3Cg fill='none' stroke='%23d4a574' stroke-width='1.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cellipse cx='16' cy='17' rx='6' ry='3.4'/%3E%3Cline x1='14' y1='12.5' x2='14' y2='15'/%3E%3Cline x1='18' y1='12.5' x2='18' y2='15'/%3E%3Ccircle cx='14' cy='11.5' r='0.9' fill='%23d4a574'/%3E%3Ccircle cx='18' cy='11.5' r='0.9' fill='%23d4a574'/%3E%3Cpath d='M10 17 L5 14.5 L7 18.5 Z'/%3E%3Cpath d='M22 17 L27 14.5 L25 18.5 Z'/%3E%3Cline x1='13' y1='20' x2='11' y2='24'/%3E%3Cline x1='16' y1='20.5' x2='16' y2='25'/%3E%3Cline x1='19' y1='20' x2='21' y2='24'/%3E%3C/g%3E%3C/svg%3E">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght,SOFT@0,9..144,300..700,30..100;1,9..144,300..700,30..100&family=Newsreader:ital,opsz,wght@0,6..72,300..600;1,6..72,300..600&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
@ -32,6 +32,25 @@
<main>
<header class="hero">
<svg class="crab-mark" viewBox="0 0 96 64" aria-hidden="true" focusable="false">
<g fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
<ellipse cx="48" cy="36" rx="14" ry="7.5"/>
<line x1="44" y1="26" x2="44" y2="32"/>
<line x1="52" y1="26" x2="52" y2="32"/>
<circle cx="44" cy="24.5" r="1.4" fill="currentColor" stroke="none"/>
<circle cx="52" cy="24.5" r="1.4" fill="currentColor" stroke="none"/>
<line x1="34" y1="36" x2="22" y2="30"/>
<path d="M22 30 L9 22 L13 33 Z"/>
<line x1="62" y1="36" x2="74" y2="30"/>
<path d="M74 30 L87 22 L83 33 Z"/>
<line x1="40" y1="42" x2="35" y2="52"/>
<line x1="44" y1="43" x2="42" y2="54"/>
<line x1="48" y1="44" x2="48" y2="55"/>
<line x1="52" y1="43" x2="54" y2="54"/>
<line x1="56" y1="42" x2="61" y2="52"/>
</g>
</svg>
<div class="plate" aria-hidden="true">
<span>Sweeper Log</span>
<span class="plate-sep">·</span>
@ -170,7 +189,7 @@
<hr class="rule rule-major">
<div class="foot-row">
<p class="foot-mark">
<em>ClawSweeper</em>a quiet member of the OpenClaw family.
<em>ClawSweeper</em>the cleanup crab on the OpenClaw seafloor.
</p>
<nav class="foot-links" aria-label="External links">
<a href="https://github.com/openclaw/clawsweeper">GitHub</a>

View File

@ -114,6 +114,25 @@ main {
padding: clamp(1.5rem, 3vw, 2.5rem) 0 clamp(2.5rem, 5vw, 4rem);
}
.crab-mark {
display: block;
width: auto;
height: clamp(34px, 4vw, 44px);
color: var(--amber);
margin-bottom: clamp(1.5rem, 3vw, 2.25rem);
opacity: 0.92;
overflow: visible;
}
.crab-mark > g {
transform-origin: 48px 38px;
transition: transform 700ms cubic-bezier(.2,.7,.2,1);
}
.hero:hover .crab-mark > g {
transform: scaleX(1.04) translateY(-1px);
}
.plate {
display: inline-flex;
align-items: center;
@ -533,6 +552,7 @@ main {
/* ===== page-load motion ===================================== */
@media (prefers-reduced-motion: no-preference) {
.crab-mark,
.plate,
.title,
.lede,
@ -543,11 +563,12 @@ main {
animation: rise 1100ms cubic-bezier(.2,.7,.2,1) forwards;
}
.plate { animation-delay: 0ms; }
.title { animation-delay: 110ms; }
.lede { animation-delay: 280ms; }
.sub { animation-delay: 440ms; }
.hero-meta { animation-delay: 600ms; }
.crab-mark { animation-delay: 0ms; }
.plate { animation-delay: 90ms; }
.title { animation-delay: 220ms; }
.lede { animation-delay: 380ms; }
.sub { animation-delay: 540ms; }
.hero-meta { animation-delay: 700ms; }
@keyframes rise {
to {