disinto/site/index.html
openhands b1b49e7261 fix: Add WebP variant for factory-fixes-itself.jpg (#309)
Add factory-fixes-itself.webp (107K vs 169K JPG, 37% smaller) and
wrap the image in a <picture><source> element matching the existing
al76 pattern. The original JPG is kept as fallback.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 22:55:32 +00:00

547 lines
14 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Disinto — From Vision to Market Fit</title>
<meta name="description" content="Open-source autonomous startup engine for solo founders. Write the vision, define quality gates — agents build, ship, operate, and find market fit.">
<link rel="icon" href="favicon.ico" sizes="32x32">
<link rel="icon" href="favicon-192.png" sizes="192x192" type="image/png">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="canonical" href="https://disinto.ai/">
<meta property="og:title" content="Disinto — From Vision to Market Fit">
<meta property="og:description" content="Open-source autonomous startup engine for solo founders. Write the vision, define quality gates — agents build, ship, operate, and find market fit.">
<meta property="og:image" content="https://disinto.ai/og-image.jpg">
<meta property="og:url" content="https://disinto.ai/">
<meta property="og:type" content="website">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Disinto — From Vision to Market Fit">
<meta name="twitter:description" content="Open-source autonomous startup engine for solo founders.">
<meta name="twitter:image" content="https://disinto.ai/og-image.jpg">
<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: 2rem;
}
.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: 1.4rem;
letter-spacing: 0.15em;
}
/* Pitch */
.pitch {
text-align: center;
margin-bottom: 4rem;
padding: 0 1rem;
}
.pitch p {
color: var(--fg);
font-size: 0.95rem;
line-height: 1.9;
}
.pitch p strong {
color: var(--accent);
}
/* 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;
}
/* Sections */
.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);
}
/* Value blocks */
.values {
display: grid;
grid-template-columns: 1fr;
gap: 1px;
background: var(--border);
margin-bottom: 3rem;
}
.value {
background: var(--surface);
padding: 1.5rem;
}
.value .headline {
font-size: 0.85rem;
color: var(--accent);
margin-bottom: 0.5rem;
}
.value .detail {
font-size: 0.8rem;
color: var(--dim);
line-height: 1.7;
}
.value .detail strong {
color: var(--fg);
}
/* 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;
text-align: center;
}
.pipeline .step {
color: var(--accent-dim);
}
.pipeline .arrow {
color: var(--border);
margin: 0 0.5rem;
}
/* Proof */
.proof {
padding: 1.5rem;
background: var(--surface);
border: 1px solid var(--border);
margin-bottom: 3rem;
font-size: 0.8rem;
color: var(--dim);
}
.proof .number {
color: var(--accent);
font-size: 1.4rem;
font-weight: 300;
}
.proof .label {
color: var(--dim);
font-size: 0.75rem;
margin-bottom: 1rem;
}
.proof-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1rem;
text-align: center;
margin-bottom: 1rem;
}
.proof .context {
font-size: 0.75rem;
color: var(--dim);
text-align: center;
font-style: italic;
}
/* Concrete example */
.example {
margin-bottom: 3rem;
padding: 2rem;
border: 1px solid var(--border);
background: var(--surface);
}
.example 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);
}
.example img {
width: 100%;
border: 1px solid var(--border);
margin-bottom: 1.5rem;
opacity: 0.9;
}
.example p {
color: var(--dim);
font-size: 0.85rem;
line-height: 1.8;
}
.example p strong {
color: var(--fg);
}
/* Benefits */
.benefits {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 1px;
background: var(--border);
margin-bottom: 3rem;
}
.benefit {
background: var(--surface);
padding: 1.2rem;
}
.benefit .name {
font-size: 0.75rem;
color: var(--accent-dim);
margin-bottom: 0.5rem;
text-transform: uppercase;
letter-spacing: 0.1em;
}
.benefit .desc {
font-size: 0.75rem;
color: var(--dim);
line-height: 1.7;
}
.benefit .desc strong {
color: var(--fg);
}
/* CTA */
.cta {
text-align: center;
margin-bottom: 3rem;
padding: 2rem;
border: 1px solid var(--accent-dim);
background: var(--surface);
}
.cta p {
color: var(--dim);
font-size: 0.85rem;
margin-bottom: 1.5rem;
}
.cta .cta-links {
display: flex;
justify-content: center;
gap: 2rem;
flex-wrap: wrap;
}
.cta .cta-links a {
color: var(--accent);
text-decoration: none;
font-size: 0.85rem;
padding: 0.5rem 1rem;
border: 1px solid var(--accent-dim);
transition: border-color 0.2s;
}
.cta .cta-links a:hover {
border-color: var(--accent);
}
/* 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;
}
.footer .under-hood {
margin-top: 1.5rem;
font-size: 0.7rem;
color: var(--border);
}
/* Mobile */
@media (max-width: 600px) {
.hero h1 { font-size: 2rem; }
.origin { flex-direction: column; align-items: center; }
.origin img { max-width: 100%; }
.benefits { grid-template-columns: 1fr; }
.proof-grid { grid-template-columns: 1fr; }
.container { padding: 2rem 1rem; }
}
</style>
</head>
<body>
<div class="container">
<div class="hero">
<h1>Disinto</h1>
<div class="tagline">from vision to market fit</div>
</div>
<div class="pitch">
<p>
<strong>Set the vision. Define quality gates.</strong><br>
Agents derive the backlog, build, review, ship, and operate.<br>
You're the founder, not the developer.
</p>
</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="values">
<div class="value">
<div class="headline">Write the vision, not the code</div>
<div class="detail">
Describe what you want built. Agents figure out what's missing,
break it into tasks, and start working. You wake up to
<strong>progress, not process</strong>.
</div>
</div>
<div class="value">
<div class="headline">Nothing ships without your gates</div>
<div class="detail">
You define the boundaries — what gets auto-approved and what
needs your eyes. Agents work within them.
<strong>You steer. They row.</strong>
</div>
</div>
<div class="value">
<div class="headline">Decisions, not busywork</div>
<div class="detail">
The work organizes itself. Duplicates get closed, priorities
get surfaced, gaps get found. Your job is
<strong>direction</strong> — not tickets, not triage, not grooming.
</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">learn</span>
<span class="arrow"></span>
<span class="step">vision</span>
</div>
</div>
<div class="example">
<h2>The factory fixed itself</h2>
<picture>
<source srcset="factory-fixes-itself.webp" type="image/webp">
<img src="factory-fixes-itself.jpg" alt="Screenshot: factory files a bug, fixes it, reviews it, and merges — 14 minutes">
</picture>
<p>
We filed a bug about the review lifecycle. <strong>14 minutes later</strong>,
the dev-agent picked it up, built a fix, the review-agent approved it, and it
merged into main. The factory fixed a bug in its own code while we watched.
</p>
</div>
<div class="proof">
<div class="proof-grid">
<div>
<div class="number">219</div>
<div class="label">commits in 6 days</div>
</div>
<div>
<div class="number">50</div>
<div class="label">issues closed</div>
</div>
<div>
<div class="number">2</div>
<div class="label">repos managed</div>
</div>
</div>
<div class="context">
Disinto building itself — and a DeFi protocol — on a single 8GB VPS. As of March 2026.
</div>
</div>
<div class="section">
<h2>One VPS, one repo, one battery</h2>
<p>
<strong>Bash scripts and Claude.</strong> No Kubernetes, no microservices,
no SaaS dependencies. Runs on an 8GB VPS.
Point it at a <strong>Codeberg repo</strong> with a
<strong>Woodpecker CI</strong> pipeline and it starts building.
</p>
<p>
<strong>Built for web apps and crypto projects.</strong>
SaaS dashboards, DeFi protocols, token launches — if it has
a repo and tests, Disinto can work it.
</p>
</div>
<div class="benefits">
<div class="benefit">
<div class="name">Runs on a single VPS</div>
<div class="desc">No cloud bills that scale with usage. <strong>One 8GB machine</strong> runs the whole factory. Your costs stay flat.</div>
</div>
<div class="benefit">
<div class="name">No vendor lock-in</div>
<div class="desc">Open source, bash scripts, standard git. <strong>You own every piece.</strong> Move it, fork it, read every line.</div>
</div>
<div class="benefit">
<div class="name">Self-improving</div>
<div class="desc">Every bug it fixes teaches it a pattern. Every review sharpens the next one. <strong>The factory gets better as it runs.</strong></div>
</div>
</div>
<div class="cta">
<p>The code is public. The factory is running. See for yourself.</p>
<div class="cta-links">
<a href="https://codeberg.org/johba/disinto">Browse the source</a>
<a href="https://codeberg.org/johba/disinto/issues">Watch it work</a>
</div>
</div>
<div class="footer">
<div>Built from scrap, powered by a single battery.</div>
<div class="links">
<a href="https://codeberg.org/johba/disinto">codeberg.org/johba/disinto</a>
</div>
<div class="under-hood">
Under the hood: dev, review, planner, gardener, supervisor, vault — six agents orchestrated by cron and bash.
</div>
</div>
</div>
</body>
</html>