Skip to main content
Glama
README.md
# svipall-site

The website for [Svipall](https://github.com/ilien-dev/svipall) — a local-first web scraping and
captcha MCP server written in Rust.

This repository is the **website only**. The product lives in its own repository and is never
modified from here; content in `src/data/` was read out of its source and README and is dated where
it needs to be.

## Run it

```bash
npm install
npm run dev        # http://localhost:4321
npm run build      # -> dist/
npm run preview
```

Node 22+ and nothing else. The built site makes **no external request of any kind** — fonts are
self-hosted, there is no CDN, no analytics and no third-party script. That is the product's own rule,
applied to its own page.

## Deploying

Deliberately undecided. `astro.config.mjs` reads both values from the environment, so pointing the
site anywhere is one command:

```bash
SITE_URL=https://ilien-dev.github.io SITE_BASE=/svipall npm run build   # project pages
SITE_URL=https://svipall.dev         SITE_BASE=/         npm run build   # a domain of its own
```

## What is where

| Path | What it is |
|---|---|
| `src/pages/index.astro` | The landing page |
| `src/pages/docs.astro` | The documentation page — tools, walls, CLI, REST, config, FAQ |
| `src/layouts/Base.astro` | Head, fonts, the shared motion grammar, and the direction contract |
| `src/components/` | `WallLattice` and `ArrivalPanel` are the page's mechanism; the rest are sections |
| `src/data/walls.ts` | The twelve `WallKind` values, from `crates/svipall-core/src/classify.rs` |
| `src/data/tools.ts` | The 29 MCP tools and the REST route table, from `crates/svipall-mcp/src/` |
| `src/data/site.ts` | Measured figures with their commands, the tier ladder, the comparison table |
| `src/styles/global.css` | Tokens, layers, type scale, the plate material, the motion grammar |
| `tools/` | Screenshot, contrast-audit and social-card renderers, all driven over CDP |

## Keeping it honest

```bash
npm run build      # must be clean
npm run shots      # desktop + phone captures into .impeccable/review/
npm run audit      # samples every rendered text node's contrast; exits non-zero on a failure
```

`npm run audit` is the one worth running before any change ships: it measures the colour that
actually landed on screen rather than the token that was intended, at 1440px and 390px, on both
pages.

Two content rules this site is held to, both inherited from the product:

1. **Nothing is fabricated.** There are no testimonials, star counts, customer logos or adoption
   figures anywhere, because there are none to report. The measured benchmark numbers do that work,
   and each one carries the command that reproduces it.
2. **The losses are published.** The sites Svipall cannot get past are on the page, by name, with
   the reason — the same weight as the wins.

## Assets

Brand files under `public/brand/` are copied from the product repository. `knot-tile.svg` is
generated. Raster art is documented in `public/img/PROMPT.md`, and every shipping raster is recorded
in `public/img/PROVENANCE.md`.