<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Green Light — QA for AI-forward teams</title>
<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@0,9..144,300;0,9..144,400;0,9..144,500;0,9..144,600;0,9..144,700;1,9..144,400&family=JetBrains+Mono:wght@400;500;600&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
<style>
:root {
--bg: #0b0f0c;
--bg-elev: #10150f;
--ink: #e8ebe3;
--ink-dim: #9aa394;
--ink-faint: #5b6457;
--line: #1f2720;
--line-bright: #2a3429;
--signal: #7af47a;
--signal-deep: #2dbb52;
--signal-glow: rgba(122, 244, 122, 0.18);
--amber: #f4c74a;
--red: #f25757;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
background: var(--bg);
color: var(--ink);
font-family: 'Inter', sans-serif;
font-size: 16px;
line-height: 1.5;
overflow-x: hidden;
-webkit-font-smoothing: antialiased;
}
/* Ambient grain + subtle signal glow behind hero */
body::before {
content: "";
position: fixed;
inset: 0;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.5'/%3E%3C/svg%3E");
opacity: 0.04;
pointer-events: none;
z-index: 1;
mix-blend-mode: overlay;
}
.mono { font-family: 'JetBrains Mono', monospace; font-feature-settings: "ss01","ss02"; }
.serif { font-family: 'Fraunces', serif; }
/* ------- Top bar ------- */
.topbar {
position: sticky;
top: 0;
z-index: 50;
backdrop-filter: blur(14px);
background: rgba(11, 15, 12, 0.72);
border-bottom: 1px solid var(--line);
}
.topbar-inner {
max-width: 1280px;
margin: 0 auto;
padding: 14px 32px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 32px;
}
.brand {
display: flex;
align-items: center;
gap: 10px;
font-family: 'Fraunces', serif;
font-weight: 500;
font-size: 20px;
letter-spacing: -0.01em;
}
.brand-dot {
width: 10px; height: 10px;
border-radius: 50%;
background: var(--signal);
box-shadow: 0 0 12px var(--signal-glow), 0 0 0 3px rgba(122,244,122,0.08);
animation: pulse 2.4s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.6; transform: scale(0.9); }
}
.nav {
display: flex;
gap: 32px;
font-size: 13px;
color: var(--ink-dim);
}
.nav a {
color: inherit;
text-decoration: none;
transition: color .2s;
}
.nav a:hover { color: var(--ink); }
.topbar .cta {
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
font-weight: 500;
letter-spacing: 0.04em;
color: var(--bg);
background: var(--signal);
padding: 10px 18px;
border-radius: 4px;
text-decoration: none;
text-transform: uppercase;
transition: background .2s, transform .2s;
}
.topbar .cta:hover { background: #a8f8a8; transform: translateY(-1px); }
@media (max-width: 780px) {
.nav { display: none; }
}
/* ------- Hero ------- */
.hero {
position: relative;
max-width: 1280px;
margin: 0 auto;
padding: 80px 32px 60px;
overflow: hidden;
}
.hero::before {
content: "";
position: absolute;
top: -100px;
right: -80px;
width: 520px;
height: 520px;
border-radius: 50%;
background: radial-gradient(circle, rgba(122,244,122,0.12) 0%, transparent 62%);
pointer-events: none;
}
.status-strip {
display: flex;
align-items: center;
gap: 12px;
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.14em;
color: var(--ink-dim);
margin-bottom: 32px;
}
.status-strip .dot {
width: 6px; height: 6px;
border-radius: 50%;
background: var(--signal);
box-shadow: 0 0 8px var(--signal);
}
.status-strip .sep {
width: 1px; height: 10px; background: var(--line-bright);
}
h1.headline {
font-family: 'Fraunces', serif;
font-weight: 400;
font-size: clamp(48px, 8vw, 104px);
line-height: 0.96;
letter-spacing: -0.03em;
margin-bottom: 36px;
position: relative;
z-index: 2;
}
h1.headline em {
font-style: italic;
font-weight: 300;
color: var(--signal);
}
h1.headline .underlined {
display: inline-block;
position: relative;
}
h1.headline .underlined::after {
content: "";
position: absolute;
left: 0; right: 0;
bottom: 0.08em;
height: 3px;
background: var(--signal);
opacity: 0.6;
}
.hero-grid {
display: grid;
grid-template-columns: 1.2fr 1fr;
gap: 64px;
align-items: start;
margin-top: 48px;
}
@media (max-width: 960px) {
.hero-grid { grid-template-columns: 1fr; gap: 40px; }
}
.lede {
font-size: 19px;
line-height: 1.55;
color: var(--ink-dim);
max-width: 54ch;
}
.lede strong { color: var(--ink); font-weight: 500; }
.hero-ctas {
margin-top: 32px;
display: flex;
gap: 14px;
flex-wrap: wrap;
}
.btn {
font-family: 'JetBrains Mono', monospace;
font-size: 13px;
font-weight: 500;
letter-spacing: 0.04em;
text-transform: uppercase;
padding: 14px 22px;
border-radius: 4px;
text-decoration: none;
transition: all .2s;
display: inline-flex;
align-items: center;
gap: 10px;
cursor: pointer;
border: none;
}
.btn-primary {
background: var(--signal);
color: var(--bg);
}
.btn-primary:hover { background: #a8f8a8; transform: translateY(-1px); }
.btn-primary::after {
content: "→";
font-size: 14px;
}
.btn-ghost {
background: transparent;
color: var(--ink);
border: 1px solid var(--line-bright);
}
.btn-ghost:hover { border-color: var(--signal); color: var(--signal); }
/* Ticket card in hero */
.ticket-panel {
background: var(--bg-elev);
border: 1px solid var(--line);
border-radius: 8px;
padding: 20px;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
position: relative;
}
.ticket-panel-head {
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 14px;
border-bottom: 1px solid var(--line);
color: var(--ink-faint);
text-transform: uppercase;
letter-spacing: 0.1em;
}
.ticket-panel-head .live {
display: flex; align-items: center; gap: 6px;
color: var(--signal);
}
.ticket-panel-head .live::before {
content: ""; width: 6px; height: 6px; border-radius: 50%;
background: var(--signal); box-shadow: 0 0 6px var(--signal);
animation: pulse 2s infinite;
}
.ticket-row {
display: grid;
grid-template-columns: 60px 1fr 90px;
gap: 12px;
padding: 12px 0;
border-bottom: 1px dashed var(--line);
align-items: center;
font-size: 12px;
}
.ticket-row:last-child { border-bottom: none; }
.ticket-row .id { color: var(--ink-faint); }
.ticket-row .title { color: var(--ink); }
.ticket-row .state {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 10px;
text-transform: uppercase;
letter-spacing: 0.1em;
padding: 4px 8px;
border-radius: 3px;
justify-self: end;
}
.state.pass { background: rgba(122,244,122,0.12); color: var(--signal); }
.state.pass::before { content:""; width:5px; height:5px; border-radius:50%; background: var(--signal); }
.state.fail { background: rgba(242,87,87,0.12); color: var(--red); }
.state.fail::before { content:""; width:5px; height:5px; border-radius:50%; background: var(--red); }
.state.run { background: rgba(244,199,74,0.12); color: var(--amber); }
.state.run::before {
content:""; width:5px; height:5px; border-radius:50%; background: var(--amber);
animation: pulse 1.2s infinite;
}
/* ------- Marquee / ticker ------- */
.ticker {
border-top: 1px solid var(--line);
border-bottom: 1px solid var(--line);
overflow: hidden;
padding: 14px 0;
background: var(--bg-elev);
}
.ticker-track {
display: flex;
gap: 64px;
animation: scroll 38s linear infinite;
width: max-content;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--ink-dim);
white-space: nowrap;
}
.ticker-track span {
display: inline-flex; align-items: center; gap: 10px;
}
.ticker-track span::before {
content: "◆";
color: var(--signal);
font-size: 8px;
}
@keyframes scroll {
0% { transform: translateX(0); }
100% { transform: translateX(-50%); }
}
/* ------- Sections ------- */
section.block {
max-width: 1280px;
margin: 0 auto;
padding: 120px 32px;
position: relative;
}
.eyebrow {
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.18em;
color: var(--signal);
margin-bottom: 20px;
display: flex;
align-items: center;
gap: 10px;
}
.eyebrow::before {
content: "";
width: 24px; height: 1px;
background: var(--signal);
}
h2 {
font-family: 'Fraunces', serif;
font-weight: 400;
font-size: clamp(36px, 5vw, 60px);
line-height: 1.02;
letter-spacing: -0.025em;
margin-bottom: 20px;
max-width: 20ch;
}
h2 em { font-style: italic; color: var(--signal); font-weight: 300; }
.section-sub {
font-size: 18px;
color: var(--ink-dim);
max-width: 56ch;
line-height: 1.55;
margin-bottom: 56px;
}
/* ------- The Problem (split diptych) ------- */
.diptych {
display: grid;
grid-template-columns: 1fr 1fr;
border: 1px solid var(--line);
border-radius: 8px;
overflow: hidden;
}
@media (max-width: 780px) { .diptych { grid-template-columns: 1fr; } }
.diptych > div {
padding: 44px 36px;
position: relative;
}
.diptych > div:first-child {
border-right: 1px solid var(--line);
background: rgba(242,87,87,0.03);
}
@media (max-width: 780px) {
.diptych > div:first-child { border-right: none; border-bottom: 1px solid var(--line); }
}
.diptych > div:last-child {
background: rgba(122,244,122,0.03);
}
.diptych-label {
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.14em;
margin-bottom: 20px;
display: flex;
align-items: center;
gap: 8px;
}
.diptych > div:first-child .diptych-label { color: var(--red); }
.diptych > div:last-child .diptych-label { color: var(--signal); }
.diptych-label::before {
content: "";
width: 8px; height: 8px; border-radius: 50%;
}
.diptych > div:first-child .diptych-label::before { background: var(--red); }
.diptych > div:last-child .diptych-label::before {
background: var(--signal); box-shadow: 0 0 8px var(--signal);
}
.diptych h3 {
font-family: 'Fraunces', serif;
font-weight: 400;
font-size: 28px;
line-height: 1.15;
margin-bottom: 18px;
letter-spacing: -0.02em;
}
.diptych p {
color: var(--ink-dim);
font-size: 15px;
line-height: 1.6;
}
.big-num {
font-family: 'Fraunces', serif;
font-weight: 300;
font-size: 72px;
line-height: 1;
letter-spacing: -0.03em;
margin-bottom: 8px;
display: block;
}
.diptych > div:first-child .big-num { color: var(--red); }
.diptych > div:last-child .big-num { color: var(--signal); }
/* ------- Services: tile grid with numbers ------- */
.services {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1px;
background: var(--line);
border: 1px solid var(--line);
border-radius: 8px;
overflow: hidden;
}
@media (max-width: 960px) { .services { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 640px) { .services { grid-template-columns: 1fr; } }
.service {
background: var(--bg);
padding: 36px 32px;
display: flex;
flex-direction: column;
gap: 16px;
min-height: 240px;
transition: background .3s;
position: relative;
}
.service:hover { background: var(--bg-elev); }
.service:hover .service-num { color: var(--signal); }
.service-head {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 12px;
}
.service-num {
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
color: var(--ink-faint);
letter-spacing: 0.1em;
transition: color .3s;
}
.service-icon {
width: 28px; height: 28px;
display: flex; align-items: center; justify-content: center;
color: var(--signal);
}
.service h4 {
font-family: 'Fraunces', serif;
font-weight: 500;
font-size: 22px;
line-height: 1.2;
letter-spacing: -0.015em;
}
.service p {
color: var(--ink-dim);
font-size: 14px;
line-height: 1.55;
}
/* ------- The Process (horizontal stepper) ------- */
.process {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 32px;
position: relative;
}
@media (max-width: 960px) { .process { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .process { grid-template-columns: 1fr; } }
.step {
position: relative;
}
.step-num {
font-family: 'Fraunces', serif;
font-weight: 300;
font-size: 80px;
line-height: 1;
letter-spacing: -0.04em;
color: var(--signal);
opacity: 0.9;
margin-bottom: 12px;
}
.step-label {
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.14em;
color: var(--ink-faint);
margin-bottom: 12px;
}
.step h5 {
font-family: 'Fraunces', serif;
font-weight: 500;
font-size: 22px;
margin-bottom: 10px;
letter-spacing: -0.015em;
}
.step p {
color: var(--ink-dim);
font-size: 14px;
line-height: 1.55;
}
/* ------- Pricing ------- */
.pricing {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
@media (max-width: 960px) { .pricing { grid-template-columns: 1fr; } }
.plan {
background: var(--bg-elev);
border: 1px solid var(--line);
border-radius: 8px;
padding: 36px 32px;
display: flex;
flex-direction: column;
position: relative;
transition: border-color .3s;
}
.plan:hover { border-color: var(--line-bright); }
.plan.featured {
border-color: var(--signal);
background: linear-gradient(180deg, rgba(122,244,122,0.06), var(--bg-elev) 60%);
}
.plan.featured::before {
content: "Most chosen";
position: absolute;
top: -12px;
left: 32px;
background: var(--signal);
color: var(--bg);
font-family: 'JetBrains Mono', monospace;
font-size: 10px;
letter-spacing: 0.1em;
text-transform: uppercase;
padding: 5px 10px;
border-radius: 3px;
font-weight: 600;
}
.plan-name {
font-family: 'Fraunces', serif;
font-weight: 500;
font-size: 24px;
margin-bottom: 6px;
letter-spacing: -0.015em;
}
.plan-tag {
font-size: 13px;
color: var(--ink-dim);
margin-bottom: 24px;
}
.price {
display: flex;
align-items: baseline;
gap: 6px;
margin-bottom: 8px;
}
.price-num {
font-family: 'Fraunces', serif;
font-weight: 300;
font-size: 52px;
line-height: 1;
letter-spacing: -0.03em;
}
.price-unit {
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
color: var(--ink-dim);
text-transform: uppercase;
letter-spacing: 0.08em;
}
.price-sub {
font-size: 12px;
color: var(--ink-faint);
margin-bottom: 28px;
padding-bottom: 28px;
border-bottom: 1px solid var(--line);
}
.plan ul {
list-style: none;
display: flex;
flex-direction: column;
gap: 12px;
margin-bottom: 32px;
flex: 1;
}
.plan li {
font-size: 14px;
color: var(--ink);
display: flex;
gap: 10px;
align-items: flex-start;
line-height: 1.45;
}
.plan li::before {
content: "✓";
color: var(--signal);
font-weight: 600;
flex-shrink: 0;
}
.plan .btn {
width: 100%;
justify-content: center;
}
/* ------- FAQ ------- */
.faq {
max-width: 820px;
margin: 0 auto;
}
.faq-item {
border-bottom: 1px solid var(--line);
padding: 28px 0;
}
.faq-q {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 20px;
cursor: pointer;
list-style: none;
font-family: 'Fraunces', serif;
font-size: 20px;
font-weight: 500;
letter-spacing: -0.01em;
transition: color .2s;
}
.faq-q::-webkit-details-marker { display: none; }
.faq-q:hover { color: var(--signal); }
.faq-q::after {
content: "+";
font-family: 'JetBrains Mono', monospace;
font-size: 24px;
color: var(--signal);
flex-shrink: 0;
transition: transform .25s;
line-height: 1;
}
details[open] .faq-q::after { transform: rotate(45deg); }
.faq-a {
color: var(--ink-dim);
font-size: 15px;
line-height: 1.65;
margin-top: 14px;
max-width: 70ch;
}
/* ------- CTA ------- */
.cta-block {
max-width: 1280px;
margin: 40px auto 0;
padding: 0 32px 120px;
}
.cta-inner {
background: linear-gradient(135deg, var(--bg-elev) 0%, rgba(122,244,122,0.04) 100%);
border: 1px solid var(--line-bright);
border-radius: 12px;
padding: 72px 56px;
text-align: center;
position: relative;
overflow: hidden;
}
.cta-inner::before {
content: "";
position: absolute;
top: -40%; left: 50%;
transform: translateX(-50%);
width: 600px; height: 600px;
background: radial-gradient(circle, rgba(122,244,122,0.08), transparent 65%);
pointer-events: none;
}
.cta-inner h2 {
margin: 0 auto 24px;
max-width: 18ch;
position: relative;
}
.cta-inner p {
color: var(--ink-dim);
font-size: 17px;
max-width: 48ch;
margin: 0 auto 36px;
position: relative;
}
.cta-inner .btn { position: relative; }
/* ------- Footer ------- */
footer {
border-top: 1px solid var(--line);
padding: 40px 32px;
max-width: 1280px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
color: var(--ink-faint);
flex-wrap: wrap;
gap: 16px;
}
footer .brand { font-size: 16px; color: var(--ink); }
footer a { color: var(--ink-dim); text-decoration: none; margin-left: 24px; }
footer a:hover { color: var(--signal); }
/* Entrance animations */
@keyframes fadeUp {
from { opacity: 0; transform: translateY(18px); }
to { opacity: 1; transform: translateY(0); }
}
.hero .status-strip { animation: fadeUp .6s ease-out both; animation-delay: .05s; }
.hero h1.headline { animation: fadeUp .8s ease-out both; animation-delay: .15s; }
.hero .lede { animation: fadeUp .8s ease-out both; animation-delay: .35s; }
.hero .hero-ctas { animation: fadeUp .8s ease-out both; animation-delay: .5s; }
.hero .ticket-panel { animation: fadeUp .9s ease-out both; animation-delay: .5s; }
</style>
</head>
<body>
<!-- Top bar -->
<header class="topbar">
<div class="topbar-inner">
<div class="brand">
<span class="brand-dot"></span>
Green Light
</div>
<nav class="nav">
<a href="#services">Services</a>
<a href="#process">Process</a>
<a href="#pricing">Pricing</a>
<a href="#faq">FAQ</a>
</nav>
<a href="#cta" class="cta">Book a pilot</a>
</div>
</header>
<!-- Hero -->
<section class="hero">
<div class="status-strip">
<span class="dot"></span>
<span>QA, on demand</span>
<span class="sep"></span>
<span>For AI-forward engineering teams</span>
<span class="sep"></span>
<span>Human-verified</span>
</div>
<h1 class="headline">
Your AI ships code faster than you can <em>verify</em> it.<br>
We're <span class="underlined">the green light</span>.
</h1>
<div class="hero-grid">
<div>
<p class="lede">
Green Light is a dedicated manual QA partner for teams moving at AI speed. Real testers run your tickets through thoughtful, exploratory black-box testing — the kind of scrutiny that catches what automation misses. <strong>We clear your queue. You ship with confidence.</strong>
</p>
<div class="hero-ctas">
<a href="#cta" class="btn btn-primary">Start a 2-week pilot</a>
<a href="#process" class="btn btn-ghost">See how it works</a>
</div>
</div>
<!-- Live ticket panel -->
<div class="ticket-panel">
<div class="ticket-panel-head">
<span>Ticket queue · today</span>
<span class="live">Live</span>
</div>
<div class="ticket-row">
<span class="id mono">#4821</span>
<span class="title">Checkout flow — Apple Pay edge case</span>
<span class="state pass mono">Verified</span>
</div>
<div class="ticket-row">
<span class="id mono">#4819</span>
<span class="title">Onboarding — email validation regex</span>
<span class="state pass mono">Verified</span>
</div>
<div class="ticket-row">
<span class="id mono">#4817</span>
<span class="title">Dashboard — date picker timezone drift</span>
<span class="state fail mono">Bug filed</span>
</div>
<div class="ticket-row">
<span class="id mono">#4816</span>
<span class="title">API — rate limit retry behavior</span>
<span class="state run mono">In review</span>
</div>
<div class="ticket-row">
<span class="id mono">#4814</span>
<span class="title">Mobile — offline state persistence</span>
<span class="state pass mono">Verified</span>
</div>
</div>
</div>
</section>
<!-- Ticker -->
<div class="ticker">
<div class="ticker-track">
<span>Exploratory Testing</span>
<span>Regression Sweeps</span>
<span>Release Gating</span>
<span>Bug Repro & Triage</span>
<span>Cross-browser QA</span>
<span>Mobile Testing</span>
<span>Accessibility Audits</span>
<span>Test Plan Authoring</span>
<span>Exploratory Testing</span>
<span>Regression Sweeps</span>
<span>Release Gating</span>
<span>Bug Repro & Triage</span>
<span>Cross-browser QA</span>
<span>Mobile Testing</span>
<span>Accessibility Audits</span>
<span>Test Plan Authoring</span>
</div>
</div>
<!-- Problem diptych -->
<section class="block">
<div class="eyebrow">The bottleneck</div>
<h2>Shipping velocity collapsed into a <em>testing queue</em>.</h2>
<p class="section-sub">
AI-assisted development flipped the constraint. Engineers produce ten times the tickets. Founders become full-time QAs. Releases slow to the pace of whoever has time to click through the app tonight.
</p>
<div class="diptych">
<div>
<div class="diptych-label">Without Green Light</div>
<span class="big-num">12 days</span>
<h3>Average time a finished ticket waits for human verification.</h3>
<p>Founders triage at 11pm. Engineers context-switch out of flow. Shippable work sits in review columns, quietly losing momentum and compounding into release risk.</p>
</div>
<div>
<div class="diptych-label">With Green Light</div>
<span class="big-num">< 24h</span>
<h3>Turnaround from ticket-ready to green-lit.</h3>
<p>A dedicated QA lead runs your tickets daily. Clean passes are merged. Repro'd bugs come back with video, steps, and environment — ready to fix, not re-investigate.</p>
</div>
</div>
</section>
<!-- Services -->
<section class="block" id="services">
<div class="eyebrow">What we do</div>
<h2>Manual QA, done with <em>intent</em>.</h2>
<p class="section-sub">
We're not a tooling company. We're not selling you another dashboard. We're skilled human testers who treat your product like our own and tell you plainly whether it's ready to ship.
</p>
<div class="services">
<div class="service">
<div class="service-head">
<svg class="service-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg>
<span class="service-num">01</span>
</div>
<h4>Exploratory testing</h4>
<p>Real users poking your product with curiosity and intent — the kind of testing that finds the bugs no automated suite was ever asked to look for.</p>
</div>
<div class="service">
<div class="service-head">
<svg class="service-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M9 11l3 3L22 4"/><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"/></svg>
<span class="service-num">02</span>
</div>
<h4>Ticket verification</h4>
<p>Each completed PR or ticket gets run against its acceptance criteria by a human, documented, and either green-lit or sent back with a clean bug report.</p>
</div>
<div class="service">
<div class="service-head">
<svg class="service-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M12 2v4"/><path d="M12 18v4"/><path d="M4.93 4.93l2.83 2.83"/><path d="M16.24 16.24l2.83 2.83"/><path d="M2 12h4"/><path d="M18 12h4"/><circle cx="12" cy="12" r="3"/></svg>
<span class="service-num">03</span>
</div>
<h4>Regression sweeps</h4>
<p>Before every release, we run a tailored sweep across your critical paths. Core flows stay green while you're busy shipping new surface area.</p>
</div>
<div class="service">
<div class="service-head">
<svg class="service-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="3" y="4" width="18" height="12" rx="1"/><path d="M8 20h8"/><path d="M12 16v4"/></svg>
<span class="service-num">04</span>
</div>
<h4>Cross-device coverage</h4>
<p>Safari, Chrome, Firefox. iOS and Android. Slow networks and weird screen sizes. We own the matrix so you don't have to.</p>
</div>
<div class="service">
<div class="service-head">
<svg class="service-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
<span class="service-num">05</span>
</div>
<h4>Release gating</h4>
<p>A human signs off on every release candidate. Clear pass/fail, reasons when it's fail, and receipts for everything we tested.</p>
</div>
<div class="service">
<div class="service-head">
<svg class="service-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><path d="M14 2v6h6"/><path d="M9 13h6"/><path d="M9 17h6"/></svg>
<span class="service-num">06</span>
</div>
<h4>Bug reports worth reading</h4>
<p>Steps to reproduce, environment, expected vs. actual, console logs, a video. Every bug filed is a bug an engineer can fix without DM'ing anyone.</p>
</div>
</div>
</section>
<!-- Process -->
<section class="block" id="process">
<div class="eyebrow">The process</div>
<h2>Plug in once. <em>Offload</em> the queue forever.</h2>
<p class="section-sub">
We embed with your team in days — not quarters. Here's the full arc, from kickoff to green-lit releases.
</p>
<div class="process">
<div class="step">
<div class="step-num">01</div>
<div class="step-label">Week 1</div>
<h5>Intake</h5>
<p>A kickoff call, access to your issue tracker and staging, a walkthrough of your product. We write the first pass of your test plan.</p>
</div>
<div class="step">
<div class="step-num">02</div>
<div class="step-label">Week 1–2</div>
<h5>Calibrate</h5>
<p>We run a pilot on live tickets. You tell us what matters, what's noise, and what "good enough" looks like for your team.</p>
</div>
<div class="step">
<div class="step-num">03</div>
<div class="step-label">Ongoing</div>
<h5>Operate</h5>
<p>Daily ticket review in your tracker. Regression sweeps before releases. A standing QA presence in your Slack without the headcount.</p>
</div>
<div class="step">
<div class="step-num">04</div>
<div class="step-label">Monthly</div>
<h5>Report</h5>
<p>Coverage map, bug metrics, flaky areas, and a straight recommendation on where your quality budget is best spent next month.</p>
</div>
</div>
</section>
<!-- Pricing -->
<section class="block" id="pricing">
<div class="eyebrow">Pricing</div>
<h2>Plans that scale with your <em>ticket volume</em>.</h2>
<p class="section-sub">
Flat monthly pricing. No per-bug billing, no surprise overages. Cancel or change tiers month to month.
</p>
<div class="pricing">
<div class="plan">
<div class="plan-name">Signal</div>
<div class="plan-tag">Solo founders and small teams.</div>
<div class="price">
<span class="price-num">$2,400</span>
<span class="price-unit">/ mo</span>
</div>
<div class="price-sub">Up to 30 tickets verified per month</div>
<ul>
<li>Dedicated QA lead</li>
<li>Daily ticket verification</li>
<li>Pre-release regression sweep</li>
<li>Shared Slack channel</li>
<li>Monthly report</li>
</ul>
<a href="#cta" class="btn btn-ghost">Start pilot</a>
</div>
<div class="plan featured">
<div class="plan-name">Beacon</div>
<div class="plan-tag">Shipping teams with steady velocity.</div>
<div class="price">
<span class="price-num">$5,800</span>
<span class="price-unit">/ mo</span>
</div>
<div class="price-sub">Up to 100 tickets verified per month</div>
<ul>
<li>Everything in Signal</li>
<li>Full cross-device matrix</li>
<li>Weekly regression sweeps</li>
<li>Accessibility baseline audit</li>
<li>Release-gating sign-off</li>
<li>Same-day triage</li>
</ul>
<a href="#cta" class="btn btn-primary">Start pilot</a>
</div>
<div class="plan">
<div class="plan-name">Lighthouse</div>
<div class="plan-tag">Multi-product teams & scaleups.</div>
<div class="price">
<span class="price-num">Custom</span>
</div>
<div class="price-sub">Unlimited tickets, dedicated pod</div>
<ul>
<li>Everything in Beacon</li>
<li>Dedicated testing pod (2–4 people)</li>
<li>Custom test plan authoring</li>
<li>Continuous regression + release gating</li>
<li>Quarterly strategy review</li>
<li>SLAs on turnaround</li>
</ul>
<a href="#cta" class="btn btn-ghost">Talk to us</a>
</div>
</div>
</section>
<!-- FAQ -->
<section class="block" id="faq">
<div class="eyebrow">Common questions</div>
<h2>Before you <em>ask</em>.</h2>
<div class="faq">
<details class="faq-item">
<summary class="faq-q">Why manual QA when we have automated tests and AI code review?</summary>
<p class="faq-a">Automated tests verify what you thought to test. AI reviews the code it wrote. Neither of them sits down with your product the way a real user will, notices the weird 0.5-second flash on slow networks, or finds the two-step path that causes your Stripe webhook to double-fire. Manual black-box testing complements your automated suite — it doesn't replace it.</p>
</details>
<details class="faq-item">
<summary class="faq-q">How do you fit into our stack?</summary>
<p class="faq-a">We work inside your existing tools — Linear, Jira, GitHub, Shortcut, whatever you use. You don't adopt a new process; we show up in yours. Your engineers tag a ticket as ready for QA, we pick it up, run it, and either verify it or file a repro'd bug right there.</p>
</details>
<details class="faq-item">
<summary class="faq-q">Are your testers in-house or outsourced?</summary>
<p class="faq-a">Every tester on Green Light is a vetted full-time employee. No sub-contractors, no marketplace labor, no 3am handoffs. You get the same faces on your product every day.</p>
</details>
<details class="faq-item">
<summary class="faq-q">What's the pilot?</summary>
<p class="faq-a">Two weeks, flat fee, full access to a Green Light tester working your real backlog. You see exactly what the service feels like before committing to a plan. If it doesn't click, you walk — no lock-in.</p>
</details>
<details class="faq-item">
<summary class="faq-q">Do you handle sensitive or regulated products?</summary>
<p class="faq-a">Yes. We sign NDAs up front and can work under custom access controls, dedicated staging environments, and on-prem where required. Talk to us about your specific compliance needs on the intake call.</p>
</details>
<details class="faq-item">
<summary class="faq-q">What does a bug report actually look like?</summary>
<p class="faq-a">Title, clear repro steps, environment (browser, OS, device, network), expected vs. actual behavior, a screen recording, console logs where relevant, and a severity assessment. Formatted for your tracker, ready for an engineer to pick up without a back-and-forth.</p>
</details>
</div>
</section>
<!-- CTA -->
<section class="cta-block" id="cta">
<div class="cta-inner">
<div class="eyebrow" style="justify-content: center;">Ready to ship</div>
<h2>Green-light your next release.</h2>
<p>Tell us about your product. We'll spin up a two-week pilot inside your tracker and show you — not tell you — what human QA looks like when it's done right.</p>
<a href="mailto:hello@greenlight.qa" class="btn btn-primary">Book the pilot</a>
</div>
</section>
<footer>
<div class="brand"><span class="brand-dot"></span> Green Light</div>
<div>
<a href="#">Privacy</a>
<a href="#">Terms</a>
<a href="mailto:hello@greenlight.qa">Contact</a>
</div>
<div>© 2026 Green Light QA Co.</div>
</footer>
</body>
</html>