feat: add disinto.ai landing page to repo (#91)

## Summary
- Move the static landing page from the standalone `disinto-site` directory into `site/` so it lives in the repo
- Includes `index.html`, optimized images (`al76.jpg`, `al76.webp`), and the original magazine cover (`amazing-stories-1942.jpg`)
- Skipped the large `al76.png` (3MB) since the HTML only references the `.jpg` and `.webp` versions

## Test plan
- [ ] Verify `site/index.html` renders correctly when served
- [ ] Confirm images load properly with relative paths

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: openhands <openhands@all-hands.dev>
Reviewed-on: https://codeberg.org/johba/disinto/pulls/91
Co-authored-by: review_bot <review_bot@noreply.codeberg.org>
Co-committed-by: review_bot <review_bot@noreply.codeberg.org>
This commit is contained in:
review_bot 2026-03-17 23:11:40 +01:00 committed by johba
parent afdcdeb78f
commit ee881086d3
6 changed files with 403 additions and 4 deletions

337
site/index.html Normal file
View file

@ -0,0 +1,337 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Disinto — Your AI Dev Team</title>
<meta name="description" content="Open-source autonomous code factory for solo founders. Write issues, set the vision — agents build, review, ship, and operate your startup.">
<style>
:root {
--bg: #0a0a0a;
--fg: #e0e0e0;
--dim: #707070;
--accent: #c8a46e;
--accent-dim: #8a7044;
--surface: #141414;
--border: #222;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: 'SF Mono', 'Cascadia Code', 'Fira Code', 'JetBrains Mono', monospace;
background: var(--bg);
color: var(--fg);
line-height: 1.7;
min-height: 100vh;
}
.container {
max-width: 720px;
margin: 0 auto;
padding: 4rem 2rem;
}
/* Hero */
.hero {
text-align: center;
margin-bottom: 4rem;
}
.hero h1 {
font-size: 3rem;
font-weight: 300;
letter-spacing: 0.3em;
text-transform: uppercase;
color: var(--accent);
margin-bottom: 0.5rem;
}
.hero .tagline {
color: var(--dim);
font-size: 0.9rem;
letter-spacing: 0.1em;
}
/* Origin story */
.origin {
display: flex;
flex-direction: column;
gap: 1.5rem;
align-items: center;
margin-bottom: 4rem;
padding: 2rem;
border: 1px solid var(--border);
background: var(--surface);
}
.origin img {
width: 100%;
max-width: 600px;
opacity: 0.9;
border: 1px solid var(--border);
}
.origin blockquote {
color: var(--dim);
font-size: 0.85rem;
font-style: italic;
line-height: 1.8;
}
.origin blockquote strong {
color: var(--accent);
font-style: normal;
}
.origin .cite {
display: block;
margin-top: 1rem;
color: var(--accent-dim);
font-size: 0.75rem;
font-style: normal;
}
/* What it is */
.section {
margin-bottom: 3rem;
}
.section h2 {
font-size: 0.75rem;
font-weight: 600;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--accent-dim);
margin-bottom: 1.5rem;
padding-bottom: 0.5rem;
border-bottom: 1px solid var(--border);
}
.section p {
color: var(--dim);
font-size: 0.85rem;
margin-bottom: 1rem;
}
.section p strong {
color: var(--fg);
}
/* Agent list */
.agents {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1px;
background: var(--border);
margin-bottom: 3rem;
}
.agent {
background: var(--surface);
padding: 1.5rem;
}
.agent .name {
font-size: 0.8rem;
color: var(--accent);
margin-bottom: 0.25rem;
}
.agent .role {
font-size: 0.75rem;
color: var(--dim);
}
/* Pipeline */
.pipeline {
font-size: 0.8rem;
color: var(--dim);
padding: 1.5rem;
background: var(--surface);
border: 1px solid var(--border);
margin-bottom: 3rem;
overflow-x: auto;
}
.pipeline .step {
color: var(--accent-dim);
}
.pipeline .arrow {
color: var(--border);
margin: 0 0.5rem;
}
/* Footer */
.footer {
text-align: center;
padding-top: 3rem;
border-top: 1px solid var(--border);
font-size: 0.75rem;
color: var(--dim);
}
.footer a {
color: var(--accent-dim);
text-decoration: none;
}
.footer a:hover {
color: var(--accent);
}
.footer .links {
margin-top: 0.75rem;
}
.footer .links a {
margin: 0 1rem;
}
/* Mobile */
@media (max-width: 600px) {
.hero h1 { font-size: 2rem; }
.origin { flex-direction: column; align-items: center; }
.origin img { max-width: 100%; }
.agents { grid-template-columns: 1fr; }
.container { padding: 2rem 1rem; }
}
</style>
</head>
<body>
<div class="container">
<div class="hero">
<h1>Disinto</h1>
<div class="tagline">your AI dev team</div>
</div>
<div class="origin">
<picture>
<source srcset="al76.webp" type="image/webp">
<img src="al76.jpg" alt="Robot AL-76 building a Disinto from scrap">
</picture>
<blockquote>
A mining robot, lost and confused, builds a <strong>Disinto</strong> from
scrap — a device so powerful it vaporizes three-quarters of a mountain
on a single battery. Nobody can figure out how it works.
When ordered to explain, it calmly dismantles the machine into
rubble and flinders.
<span class="cite">— Isaac Asimov, "Robot AL-76 Goes Astray" (1942)</span>
</blockquote>
</div>
<div class="section">
<h2>What it is</h2>
<p>
Disinto is an <strong>open-source framework for solo founders</strong>
who want to ship without hiring a team. Set the vision. Define
your quality gates. Agents derive the backlog, build, review, ship,
and operate — you're the founder, not the developer.
</p>
<p>
Built for <strong>web apps and crypto projects</strong>.
SaaS dashboards, DeFi protocols, token launches — if it has
a repo and a CI pipeline, Disinto can work it.
</p>
<p>
Like AL-76, it works with whatever's available. Point it at a repo,
give it a vision, and it starts building.
</p>
</div>
<div class="agents">
<div class="agent">
<div class="name">dev-agent</div>
<div class="role">Picks up backlog issues, implements in isolated worktrees, opens PRs. Handles CI failures and review feedback autonomously.</div>
</div>
<div class="agent">
<div class="name">review-agent</div>
<div class="role">Reviews PRs against project conventions. Approves, requests changes, or flags for discussion. JSON-structured verdicts.</div>
</div>
<div class="agent">
<div class="name">supervisor</div>
<div class="role">Monitors health — memory, disk, CI, stale processes. Auto-heals what it can, escalates what it can't.</div>
</div>
<div class="agent">
<div class="name">planner</div>
<div class="role">Maintains documentation tree. Compares project state against vision, creates backlog issues for gaps.</div>
</div>
<div class="agent">
<div class="name">gardener</div>
<div class="role">Grooms the backlog. Closes duplicates, promotes tech debt, escalates ambiguous items.</div>
</div>
<div class="agent">
<div class="name">you</div>
<div class="role">Set the vision. Define quality gates. Approve what matters, reject what doesn't. Find market fit.</div>
</div>
</div>
<div class="section">
<h2>The loop</h2>
<div class="pipeline">
<span class="step">vision</span>
<span class="arrow"></span>
<span class="step">backlog</span>
<span class="arrow"></span>
<span class="step">build</span>
<span class="arrow"></span>
<span class="step">review</span>
<span class="arrow"></span>
<span class="step">ship</span>
<span class="arrow"></span>
<span class="step">operate</span>
<span class="arrow"></span>
<span class="step">measure</span>
<span class="arrow"></span>
<span class="step">vision</span>
</div>
</div>
<div class="section">
<h2>How it works</h2>
<p>
Bash orchestration. <strong>Claude</strong> for implementation and review.
<strong>Woodpecker CI</strong> for build verification.
<strong>Codeberg</strong> for git hosting and issue tracking.
Cron jobs, shell scripts, and a lightweight listener daemon —
invoking an LLM only when thinking is needed.
</p>
<p>
Each agent is a pair of bash scripts — a cron-driven poller and an
implementation script. The supervisor runs every 10 minutes.
When something breaks, it fixes it. When it can't fix it, it asks.
</p>
</div>
<div class="section">
<h2>For solo founders</h2>
<p>
You don't need a team. You need a <strong>VISION.md</strong> and a vault.
Disinto turns your product vision into a running development operation.
The <strong>vault</strong> is where you define what gets auto-approved
and what needs your sign-off — deployments, pricing changes, public posts.
Everything else runs without you.
</p>
<p>
<strong>Opinionated over configurable.</strong> Good defaults, few knobs.
Works out of the box for web apps and crypto projects.
</p>
<p>
<strong>Bash over frameworks.</strong> If it can be a shell script, it should be.
Claude is the only dependency that matters.
</p>
</div>
<div class="footer">
<div>Your startup's dev team — built from scrap, powered by a single battery.</div>
<div class="links">
<a href="https://codeberg.org/johba/disinto">source</a>
<a href="https://codeberg.org/johba/disinto/issues">issues</a>
</div>
</div>
</div>
</body>
</html>