commit 7b4bb9601759844e8887c63451fb5167dde976ae Author: SJCoetz Date: Thu Jun 18 12:22:31 2026 +0200 Initial Website diff --git a/brand-mark.svg b/brand-mark.svg new file mode 100644 index 0000000..c202f8a --- /dev/null +++ b/brand-mark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/brand-spec.md b/brand-spec.md new file mode 100644 index 0000000..fcaeafc --- /dev/null +++ b/brand-spec.md @@ -0,0 +1,39 @@ +# Stackless — Brand Specification + +Extracted from the supplied brand identity sheet (`mqjbdjo3...jpg`) via pixel sampling. + +## Palette (extracted hex from image) + +| Token | Hex | Approx OKLch | Role | +|---|---|---|---| +| `--bg` | `#F4F2EC` | `oklch(96% 0.008 95)` | Paper / page | +| `--surface` | `#FFFFFF` | `oklch(100% 0 0)` | Cards / panels | +| `--ink` | `#212A40` | `oklch(28% 0.04 265)` | Primary navy text | +| `--ink-2` | `#1C2439` | `oklch(24% 0.04 265)` | Deepest neutral | +| `--muted` | `#6E7387` | `oklch(56% 0.015 265)` | Secondary text | +| `--border` | `#E5E2D8` | `oklch(91% 0.012 95)` | Hairline dividers | +| `--accent` | `#1DB897` | `oklch(70% 0.13 175)` | Teal — primary brand | +| `--accent-2` | `#F76857` | `oklch(72% 0.16 28)` | Coral — CTA accent | + +## Typography + +- Display: **Inter Tight** at heavy weight (600/700) with `-0.02em` tracking, all lowercase +- Body: **Inter** at 400/500, normal tracking +- Mono: **JetBrains Mono** for numerals / metadata +- Headlines are short and tight; the wordmark itself is lowercase, so brand copy follows suit + +## Posture + +- Hairline borders (1px), no shadows except on dropdowns/modals +- Generous whitespace — the brand sheet itself breathes +- Teal as the dominant brand surface (section markers, code-like chips, key numbers) +- Coral is the *single* CTA color across the site — used at most twice per screen, always the click target +- One decisive flourish per screen (a display headline or a code-style label, never both) +- No gradients on backgrounds, no emoji icons, no left-border "card with accent stripe" — these break the brand's quiet confidence + +## Layout grammar + +- Section rhythm: alternating wide / tight +- Cards use 16–20px radius, no shadow +- Stat blocks use tabular monospaced numerals +- Buttons: filled coral (primary), outline teal (secondary), ghost (tertiary) diff --git a/contact.html b/contact.html new file mode 100644 index 0000000..23fdc8c --- /dev/null +++ b/contact.html @@ -0,0 +1,555 @@ + + + + + +Start a project — Stackless + + + + + + + + + +
+ +
+ +
+
+
+ Start a project +

Tell us what's eating your week.

+

Three short steps, no marketing fluff. You'll get a fixed quote — or a polite "not a fit" — within one business day. Most replies go out within four hours.

+
+ +
+ +
+ + +
+ + Please fix the highlighted fields before continuing. +
+ + +
+
+

What do you need built?

+

Pick one or more — we'll route the right team for the mix.

+
+ +
+ +
+ + + + + + +
+
Pick at least one service.
+
+ +
+ + +
+ +
+ + +
+
+ + +
+
+

Who's it for?

+

Just enough to make a useful reply. We never sell or share what you write here.

+
+ +
+ + +
+ +
+ + + We reply from hello@stackless.app. +
+ +
+ + +
+ +
+ + +
+
+ + +
+
+

What's the actual problem?

+

The more specific, the better your quote. Two sentences is fine.

+
+ +
+ + +
+ +
+ + + Comma-separated. Helps us skip the discovery questions. +
+ +
+ + +
+
+ +
+ +
+ + +
+
+
+ + +
+
+ +
+

Got it — we're on it.

+

You'll get a reply from a real human (probably Gerhard or Mapula) within four working hours. If you'd rather skip the queue, mail us directly.

+
+ Ref · #SL-— +
+
+ + + +
+
+
+ + + + + + + + + diff --git a/contact.html.artifact.json b/contact.html.artifact.json new file mode 100644 index 0000000..b948c22 --- /dev/null +++ b/contact.html.artifact.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "kind": "html", + "title": "contact.html", + "entry": "contact.html", + "renderer": "html", + "status": "complete", + "exports": [ + "html", + "pdf", + "zip" + ], + "createdAt": "2026-06-18T09:54:49.091Z", + "updatedAt": "2026-06-18T09:54:49.091Z", + "metadata": { + "inferred": true, + "reconciled": true + } +} \ No newline at end of file diff --git a/contact.js b/contact.js new file mode 100644 index 0000000..e479326 --- /dev/null +++ b/contact.js @@ -0,0 +1,106 @@ +// Stackless — contact form behaviour: step nav, validation, submit state +(function () { + var form = document.getElementById('contactForm'); + if (!form) return; + + var steps = Array.prototype.slice.call(form.querySelectorAll('.step')); + var dots = Array.prototype.slice.call(document.querySelectorAll('.progress .dot')); + var prevBtn = document.getElementById('prevBtn'); + var nextBtn = document.getElementById('nextBtn'); + var submitBtn = document.getElementById('submitBtn'); + var successEl = document.getElementById('formSuccess'); + var errBanner = document.getElementById('errBanner'); + + var current = 0; + + function paint() { + steps.forEach(function (s, i) { s.classList.toggle('is-active', i === current); }); + dots.forEach(function (d, i) { + d.classList.toggle('is-on', i === current); + d.classList.toggle('is-done', i < current); + }); + prevBtn.disabled = current === 0; + if (current === steps.length - 1) { + nextBtn.style.display = 'none'; + submitBtn.style.display = 'inline-flex'; + } else { + nextBtn.style.display = 'inline-flex'; + submitBtn.style.display = 'none'; + } + } + + function validateStep(idx) { + var step = steps[idx]; + var fields = step.querySelectorAll('input[required], select[required], textarea[required]'); + var ok = true; + fields.forEach(function (el) { + var bad = !el.checkValidity(); + el.classList.toggle('is-invalid', bad); + el.parentElement.classList.toggle('is-invalid', bad); + if (bad) ok = false; + }); + // Custom: at least one service checkbox picked if on step 1 + if (idx === 0) { + var any = step.querySelectorAll('input[name="services"]:checked').length; + var servicesErr = document.getElementById('servicesErr'); + if (any === 0) { + ok = false; + servicesErr.style.display = 'block'; + } else { + servicesErr.style.display = 'none'; + } + } + return ok; + } + + function goto(i) { + if (i > current && !validateStep(current)) { + errBanner.style.display = 'flex'; + return; + } + errBanner.style.display = 'none'; + current = Math.max(0, Math.min(steps.length - 1, i)); + paint(); + // scroll the active step into view (only on mobile-ish where steps stack) + var active = steps[current]; + if (active && window.innerWidth < 720) { + active.scrollIntoView({ behavior: 'smooth', block: 'start' }); + } + } + + // live-clear invalid state as the user fixes it + form.addEventListener('input', function (e) { + var t = e.target; + if (t.classList && t.classList.contains('is-invalid') && t.checkValidity()) { + t.classList.remove('is-invalid'); + if (t.parentElement) t.parentElement.classList.remove('is-invalid'); + } + if (t.name === 'services') { + var any = form.querySelectorAll('input[name="services"]:checked').length; + var servicesErr = document.getElementById('servicesErr'); + if (any > 0 && servicesErr) servicesErr.style.display = 'none'; + } + }); + + prevBtn.addEventListener('click', function () { goto(current - 1); }); + nextBtn.addEventListener('click', function () { goto(current + 1); }); + + // Submit (no real backend — show the success state, log the payload) + form.addEventListener('submit', function (e) { + e.preventDefault(); + if (!validateStep(current)) { errBanner.style.display = 'flex'; return; } + var data = {}; + new FormData(form).forEach(function (v, k) { data[k] = v; }); + console.log('[Stackless] contact submission:', data); + + submitBtn.disabled = true; + submitBtn.textContent = 'Sending…'; + setTimeout(function () { + form.style.display = 'none'; + successEl.style.display = 'block'; + successEl.scrollIntoView({ behavior: 'smooth', block: 'start' }); + }, 700); + }); + + paint(); +})(); diff --git a/header.js b/header.js new file mode 100644 index 0000000..aa03699 --- /dev/null +++ b/header.js @@ -0,0 +1,18 @@ +// Stackless — shared header behaviour (mobile menu + current page highlight) +(function () { + var btn = document.getElementById('menuBtn'); + var nav = document.getElementById('nav'); + if (btn && nav) { + btn.addEventListener('click', function () { nav.classList.toggle('is-open'); }); + nav.addEventListener('click', function (e) { + if (e.target.tagName === 'A') nav.classList.remove('is-open'); + }); + } + // Mark current nav item + var here = (location.pathname.split('/').pop() || 'index.html').toLowerCase(); + document.querySelectorAll('.nav a').forEach(function (a) { + var href = (a.getAttribute('href') || '').toLowerCase(); + if (!href || href.startsWith('#')) return; + if (href === here) a.classList.add('is-current'); + }); +})(); diff --git a/index.html b/index.html new file mode 100644 index 0000000..72b41ad --- /dev/null +++ b/index.html @@ -0,0 +1,1093 @@ + + + + + +Stackless — Build, automate, integrate. We handle it for you. + + + + + + + + +
+ +
+ + +
+
+ Now booking Q3 builds +

Build less.
Ship more.

+

+ Stackless is the on-call studio for small and medium businesses. We build your website, install AI agents that do the busywork, and wire up the tools you already pay for — so your team can stop wrestling with software and get back to the work that actually moves the business. +

+ +
+ + + Most builds ship in 10–14 working days + + + + Fixed quote within one business day + + + + Cape Town · Johannesburg studio + +
+ + + +
+
+ + +
+
+
Trusted by operators at
+
+ + + + + + +
+
+
+ + +
+
+
+ What we ship +

Six things we do, end to end.

+

Pick one, or layer them. Every engagement is a fixed quote with weekly demos — no retainers you can't get out of, no hidden scope creep.

+
+
+
+ / 01 +
+ +
+

Website builds & upgrades

+

Marketing sites, ecommerce, internal portals — designed, built and hosted. You get a real CMS, not a black box.

+
    +
  • Brand & UX
  • +
  • Webflow · Next.js · Shopify
  • +
  • Hosting + analytics included
  • +
+
+ +
+ / 02 +
+ +
+

AI agents, installed

+

Trained on your docs, wired into your inbox and CRM. They draft, route, escalate and reply — under the rules you set.

+
    +
  • Sales & support agents
  • +
  • Voice + chat
  • +
  • Human escalation paths
  • +
+
+ +
+ / 03 +
+ +
+

Rent-an-AI-Agent

+

A dedicated agent on a monthly retainer. Trained once, refined forever. Pause or swap any month.

+
    +
  • From R9 800 / month
  • +
  • Weekly refinement calls
  • +
  • Cancel any time
  • +
+
+ +
+ / 04 +
+ +
+

Outreach & lead-gen automation

+

Cold and warm pipelines that don't sound like a bot. Personalisation tokens pulled from live data, not scraped fluff.

+
    +
  • Email + LinkedIn + WhatsApp
  • +
  • Reply detection & routing
  • +
  • CRM hand-off
  • +
+
+ +
+ / 05 +
+ +
+

Workflow integrations

+

Xero ↔ Shopify, HubSpot ↔ Slack, WhatsApp ↔ your inbox. The plumbing between the tools you already pay for, made reliable.

+
    +
  • n8n · Make · Zapier
  • +
  • Custom APIs when needed
  • +
  • Error alerts + retries
  • +
+
+ +
+ / 06 +
+ +
+

Apps, dashboards & internal tools

+

Custom web apps your team actually opens on Monday morning. Field-ops tools, ops dashboards, customer portals.

+
    +
  • React + Postgres
  • +
  • Role-based access
  • +
  • Mobile-responsive by default
  • +
+
+
+
+
+ + +
+
+
+ How it works +

Three steps. No mystery.

+

We start with a 30-minute call, send a fixed quote the next day, and demo something real every Friday until it's shipped.

+
+
+
+
01
+

Tell us what's broken

+

A short call. We map what's slowing you down — a missing site, a lead pipeline, an inbox that eats your mornings — and what would actually move the needle.

+ ~ 30 min call +
+
+
02
+

Get a fixed quote

+

You receive a one-page quote by the next business day: scope, deliverables, timeline, price. No retainer, no surprise hours, no fine print.

+ ~ 1 day turnaround +
+
+
03
+

Watch it ship weekly

+

Every Friday you get a Loom showing what's live that week. You sign off in Slack, not in a 90-minute status meeting.

+ 10–14 day builds +
+
+
+
+ + +
+
+
+ Why Stackless +

The studio you call when your last agency ghosted you.

+

We've been the people who fix what other people built. Most of our work comes from teams who tried once, got burned, and want a partner who actually answers the phone.

+
+
+
+ 01 +
+

You always know who's building

+

Two named humans, plus the agent they supervise. No black-box dev shop, no junior team learning on your dime.

+
+
+
+ 02 +
+

Fixed quotes, real demos

+

We send a price and a deadline, then show you something live every Friday. If we miss it, the next build's on us.

+
+
+
+ 03 +
+

You own everything we build

+

Code, content, accounts, agent prompts — all yours. We hand over the keys on day one. Walk away whenever you want.

+
+
+
+ 04 +
+

Built for small teams, not enterprises

+

We work with 5 to 200-person businesses. No procurement theatre, no 200-slide decks — just a call, a quote, and a build.

+
+
+
+
+
+ + +
+
+
+ Pricing +

Honest tiers. No surprise invoices.

+

Project pricing for one-off builds, monthly retainers for ongoing work. All prices in South African Rand, excl. VAT.

+
+
+
+ Project +
R18kstarting
+

One-off website build or single integration.

+
    +
  • Fixed quote, fixed deadline
  • +
  • Weekly demos
  • +
  • 30 days of post-launch support
  • +
  • You own everything
  • +
+ Get a quote +
+ + + +
+ Studio +
R48k/ month
+

Ongoing builds, agents, and integrations in one retainer.

+
    +
  • Up to 3 active workstreams
  • +
  • Dedicated lead + agent
  • +
  • Priority response, same day
  • +
  • Quarterly roadmap reviews
  • +
+ Book a discovery call +
+
+
+
+ + +
+
+
+

You've got a business to run. Let us take the software off your plate.

+

Tell us what's eating your week. We'll come back with a fixed quote and a real plan — usually within one business day.

+
+
+ Start a project → + or email hello@stackless.app +
+
+
+ + + + + + + + diff --git a/index.html.artifact.json b/index.html.artifact.json new file mode 100644 index 0000000..d2b4bf5 --- /dev/null +++ b/index.html.artifact.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "kind": "html", + "title": "index.html", + "entry": "index.html", + "renderer": "html", + "status": "complete", + "exports": [ + "html", + "pdf", + "zip" + ], + "createdAt": "2026-06-18T09:55:12.947Z", + "updatedAt": "2026-06-18T09:55:12.947Z", + "metadata": { + "inferred": true, + "reconciled": true + } +} \ No newline at end of file diff --git a/mqjbdjo3-telegram-cloud-photo-size-4-5882029034558918341-y.jpg b/mqjbdjo3-telegram-cloud-photo-size-4-5882029034558918341-y.jpg new file mode 100644 index 0000000..8bbd6c1 Binary files /dev/null and b/mqjbdjo3-telegram-cloud-photo-size-4-5882029034558918341-y.jpg differ diff --git a/pricing.html b/pricing.html new file mode 100644 index 0000000..fc329ac --- /dev/null +++ b/pricing.html @@ -0,0 +1,610 @@ + + + + + +Pricing — Stackless + + + + + + + + + +
+ +
+ +
+
+
+ Pricing +

Three ways to work with us.

+

One-off projects for a single deliverable, a monthly retainer for an AI agent that lives in your business, or a studio engagement for ongoing builds. Prices are in South African Rand, exclusive of VAT, and exclude third-party software licences (we'll flag those up front).

+
+ + +
+
+
+
+ +
+
+
+
+ Project +
R18 000starting
+
one-off · fixed quote
+

A single website, integration, or app build. Best when you know exactly what you need and just want it shipped.

+
    +
  • Discovery call & written scope
  • +
  • Weekly demo every Friday
  • +
  • 30 days post-launch support
  • +
  • All code, content & accounts handed over
  • +
  • Dedicated account lead
  • +
  • Monthly refinement call
  • +
+ Get a quote +
+ + + +
+ Studio +
R48 000/ month
+
billed monthly · 90-day minimum
+

Ongoing builds, integrations, and agents — all in one retainer. Best for businesses that ship software or product changes every month.

+
    +
  • Up to 3 active workstreams
  • +
  • Dedicated lead + on-call engineer
  • +
  • Same-day response, 4-hour SLA on P1
  • +
  • Up to 2 deployed AI agents
  • +
  • Quarterly roadmap review
  • +
  • Discounted project add-ons
  • +
+ Book a discovery call +
+
+ + +
+
+

Common add-ons.

+

Drop these onto any plan. We bill at the same hourly rate every time — no project premium.

+
+
+
+

Voice agent

+
from R2 400 / month
+

AI that picks up the phone, routes calls, books appointments, and only hands to a human when the rule says so.

+
+
+

WhatsApp Business setup

+
R4 800 once-off
+

Verified WhatsApp Business account, template library, agent integration, and 14-day on-boarding.

+
+
+

Reporting dashboard

+
from R14 000
+

A live dashboard pulling from Xero, Shopify, HubSpot or whatever stack you use. Email-digest on Mondays.

+
+
+

Knowledge base agent

+
from R3 200 / month
+

Trained on your docs, SOPs and past tickets. Answers customer questions and surfaces the right human when it's stuck.

+
+
+

Migration sprint

+
from R28 000
+

Two-week sprint to move you off a platform you've outgrown — Webflow → Next.js, old CRM → HubSpot, etc.

+
+
+

Security review

+
R9 600 once-off
+

Independent review of your stack, agent prompts, and access controls. Written report with prioritised fixes.

+
+
+
+ + +
+
+ Compare +

What's in each plan.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProjectRent-an-AI-AgentStudio
Web & app buildsOne-off—Up to 3 active
Deployed AI agents—1Up to 2
Workflow integrationsUp to 2Up to 4Unlimited
Weekly refinement call
Dedicated lead
Response SLANext business daySame business day4-hour P1, same-day P2
CancellationEnd of projectAny month90-day minimum, then any month
+
+
+ + +
+
+ Frequently asked +

The questions we hear most.

+
+
+
+ +
+

Two named humans do the building, the architecture, and the reviews. AI handles the repeatable parts inside your workflows — drafting emails, qualifying leads, routing tickets — under rules we set up together and you approve. If the AI ever makes a call you're uncomfortable with, a human reviews it before it ships.

+
+
+
+ +
+

Most Rent-an-AI-Agent clients spend an extra R1 500–R4 000 a month on LLM API usage and a chat/SMS provider. We pass those costs through at cost with no markup, and we cap usage so a surprise bill is impossible. Larger clients on the Studio plan can negotiate committed-use discounts.

+
+
+
+ +
+

Yes. Code lives in your GitHub from day one. Content lives in your CMS. Agent prompts live in a workspace we share with you and you keep. Hosting and domain accounts are yours. If you fire us tomorrow, the only thing you lose is our weekly demo.

+
+
+
+ +
+

Your build is yours to run. Anything broken that was our fault, we fix free. Anything new you want built, we send a fixed quote. If you'd rather have us on call, the Rent-an-AI-Agent and Studio retainers both cover ongoing support, refinement and small new builds.

+
+
+
+ +
+

Project builds ship in 10–14 working days. The first AI agent is in production within a week of kick-off, then refined over the next 4 weeks. Studio engagements usually have something live in week 2 and a clear roadmap by week 4.

+
+
+
+ +
+

We work with clients across the UK, EU and the rest of Africa. Pricing switches to GBP/EUR/USD at the same ballpark converted, and we adjust SLAs to your timezone. Most client calls run on 09:00–11:00 SAST, which is a friendly hour for London and Lagos.

+
+
+
+
+
+
+ + + + + + + + diff --git a/pricing.html.artifact.json b/pricing.html.artifact.json new file mode 100644 index 0000000..03b8fc3 --- /dev/null +++ b/pricing.html.artifact.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "kind": "html", + "title": "pricing.html", + "entry": "pricing.html", + "renderer": "html", + "status": "complete", + "exports": [ + "html", + "pdf", + "zip" + ], + "createdAt": "2026-06-18T09:53:38.037Z", + "updatedAt": "2026-06-18T09:53:38.037Z", + "metadata": { + "inferred": true, + "reconciled": true + } +} \ No newline at end of file diff --git a/shared.css b/shared.css new file mode 100644 index 0000000..fca2777 --- /dev/null +++ b/shared.css @@ -0,0 +1,180 @@ +/* ============================================================ + Stackless — shared brand + chrome (used by pricing.html, + contact.html, and any future sub-pages). Mirrors the tokens + and layout primitives from index.html so the whole site + stays visually consistent. + ============================================================ */ +:root { + --bg: #F4F2EC; + --surface: #FFFFFF; + --ink: #212A40; + --ink-2: #1C2439; + --muted: #6E7387; + --border: #E5E2D8; + --accent: #1DB897; + --accent-2: #F76857; + + --font-display: 'Inter Tight', -apple-system, BlinkMacSystemFont, system-ui, sans-serif; + --font-body: 'Inter', -apple-system, BlinkMacSystemFont, system-ui, sans-serif; + --font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace; + + --r-sm: 8px; + --r-md: 14px; + --r-lg: 22px; + --shadow-pop: 0 14px 40px -18px rgba(28, 36, 57, 0.28); +} + +* { box-sizing: border-box; margin: 0; padding: 0; } +html { scroll-behavior: smooth; } +body { + background: var(--bg); color: var(--ink); + font: 16px/1.55 var(--font-body); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +a { color: inherit; text-decoration: none; } +img, svg { display: block; max-width: 100%; } +button { font: inherit; cursor: pointer; } +::selection { background: var(--accent); color: var(--ink-2); } + +.wrap { width: 100%; max-width: 1180px; margin: 0 auto; padding: 0 24px; } + +/* header */ +.header { + position: sticky; top: 0; z-index: 50; + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + background: rgba(244, 242, 236, 0.78); + border-bottom: 1px solid var(--border); +} +.header__row { + display: flex; align-items: center; justify-content: space-between; + height: 68px; +} +.brand { + display: inline-flex; align-items: center; gap: 10px; + font: 600 19px/1 var(--font-display); + letter-spacing: -0.02em; + color: var(--ink-2); +} +.brand__mark { width: 26px; height: 26px; display: grid; place-items: center; } +.nav { display: flex; align-items: center; gap: 4px; } +.nav a { + padding: 8px 14px; border-radius: 999px; + font-size: 14.5px; font-weight: 500; color: var(--ink); + transition: background 0.15s, color 0.15s; +} +.nav a:hover { background: rgba(33, 42, 64, 0.06); } +.nav a.is-current { background: rgba(33, 42, 64, 0.08); } +.nav__cta { + margin-left: 12px; background: var(--accent-2); color: #fff !important; + padding: 9px 16px; +} +.nav__cta:hover { background: #e25645 !important; } +.menu-btn { display: none; background: transparent; border: 0; padding: 8px; } + +/* buttons */ +.btn { + display: inline-flex; align-items: center; gap: 10px; + padding: 14px 22px; + border-radius: 999px; + font: 500 15px/1 var(--font-body); + letter-spacing: -0.005em; + border: 1px solid transparent; + transition: transform 0.12s, background 0.15s, border-color 0.15s, color 0.15s; +} +.btn:active { transform: translateY(1px); } +.btn--primary { background: var(--accent-2); color: #fff; } +.btn--primary:hover { background: #e25645; } +.btn--ghost { background: transparent; color: var(--ink); border-color: var(--ink); } +.btn--ghost:hover { background: var(--ink); color: #fff; } +.btn--accent { background: var(--accent); color: var(--ink-2); } +.btn--accent:hover { background: #1aa888; } +.btn--sm { padding: 10px 16px; font-size: 14px; } +.btn .arrow { transition: transform 0.15s; } +.btn:hover .arrow { transform: translateX(3px); } + +/* section primitives */ +.section { padding: 100px 0 30px; } +.section__head { max-width: 720px; margin: 0 auto 56px; text-align: center; } +.section__kicker { + display: inline-flex; align-items: center; gap: 8px; + font: 500 12.5px/1 var(--font-mono); + text-transform: uppercase; + letter-spacing: 0.12em; + color: var(--accent); + margin-bottom: 18px; +} +.section__kicker::before { + content: ""; display: block; width: 22px; height: 1px; background: var(--accent); +} +.section h1, .section h2 { + font: 600 clamp(34px, 4.2vw, 54px)/1.08 var(--font-display); + letter-spacing: -0.03em; + color: var(--ink-2); +} +.section__sub { + margin: 16px auto 0; + font-size: 17px; + color: var(--muted); + max-width: 58ch; +} + +/* footer (compact) */ +footer { + border-top: 1px solid var(--border); + padding: 56px 0 36px; + margin-top: 100px; +} +.foot { + display: grid; + grid-template-columns: 1.5fr repeat(3, 1fr); + gap: 40px; + margin-bottom: 40px; +} +.foot__brand p { + margin-top: 12px; + font-size: 14px; + color: var(--muted); + max-width: 32ch; +} +.foot h5 { + font: 500 12px/1 var(--font-mono); + text-transform: uppercase; + letter-spacing: 0.1em; + color: var(--ink-2); + margin-bottom: 14px; +} +.foot ul { list-style: none; } +.foot li { padding: 4px 0; font-size: 14px; color: var(--muted); } +.foot li a:hover { color: var(--ink-2); } +.foot__legal { + display: flex; justify-content: space-between; align-items: center; + padding-top: 24px; + border-top: 1px solid var(--border); + font: 500 12.5px/1.4 var(--font-mono); + color: var(--muted); + letter-spacing: 0.02em; +} + +/* responsive */ +@media (max-width: 960px) { + .foot { grid-template-columns: 1fr 1fr; } +} +@media (max-width: 680px) { + .nav { display: none; } + .menu-btn { display: inline-flex; } + .nav.is-open { + display: flex; + position: absolute; top: 68px; left: 0; right: 0; + flex-direction: column; + background: var(--surface); + border-bottom: 1px solid var(--border); + padding: 16px; + gap: 4px; + } + .nav.is-open a { padding: 12px 14px; } + .nav.is-open .nav__cta { margin-left: 0; margin-top: 8px; text-align: center; } + .foot { grid-template-columns: 1fr; gap: 28px; } + .foot__legal { flex-direction: column; gap: 8px; align-items: flex-start; } +} diff --git a/stackless-site.html b/stackless-site.html new file mode 100644 index 0000000..b371295 --- /dev/null +++ b/stackless-site.html @@ -0,0 +1,466 @@ + + + + + + +Stackless — Build, automate, integrate. We handle it for you. + + + + + + + + +
+ +
+ +
+
+ Now booking Q3 builds +

Build less.
Ship more.

+

Stackless is the on-call studio for small and medium businesses. We build your website, install AI agents that do the busywork, and wire up the tools you already pay for — so your team can stop wrestling with software and get back to the work that actually moves the business.

+ +
+ Most builds ship in 10–14 working days + Fixed quote within one business day + Cape Town · Johannesburg studio +
+ + +
+
+ +
+
+
Trusted by operators at
+
+ + + + + + +
+
+
+ +
+
+
+ What we ship +

Six things we do, end to end.

+

Pick one, or layer them. Every engagement is a fixed quote with weekly demos — no retainers you can't get out of, no hidden scope creep.

+
+
+
+ / 01 +
+

Website builds & upgrades

+

Marketing sites, ecommerce, internal portals — designed, built and hosted. You get a real CMS, not a black box.

+
  • Brand & UX
  • Webflow · Next.js · Shopify
  • Hosting + analytics included
+
+
+ / 02 +
+

AI agents, installed

+

Trained on your docs, wired into your inbox and CRM. They draft, route, escalate and reply — under the rules you set.

+
  • Sales & support agents
  • Voice + chat
  • Human escalation paths
+
+
+ / 03 +
+

Rent-an-AI-Agent

+

A dedicated agent on a monthly retainer. Trained once, refined forever. Pause or swap any month.

+
  • From R9 800 / month
  • Weekly refinement calls
  • Cancel any time
+
+
+ / 04 +
+

Outreach & lead-gen automation

+

Cold and warm pipelines that don't sound like a bot. Personalisation tokens pulled from live data, not scraped fluff.

+
  • Email + LinkedIn + WhatsApp
  • Reply detection & routing
  • CRM hand-off
+
+
+ / 05 +
+

Workflow integrations

+

Xero ↔ Shopify, HubSpot ↔ Slack, WhatsApp ↔ your inbox. The plumbing between the tools you already pay for, made reliable.

+
  • n8n · Make · Zapier
  • Custom APIs when needed
  • Error alerts + retries
+
+
+ / 06 +
+

Apps, dashboards & internal tools

+

Custom web apps your team actually opens on Monday morning. Field-ops tools, ops dashboards, customer portals.

+
  • React + Postgres
  • Role-based access
  • Mobile-responsive by default
+
+
+
+
+ +
+
+
+ How it works +

Three steps. No mystery.

+

We start with a 30-minute call, send a fixed quote the next day, and demo something real every Friday until it's shipped.

+
+
+
01

Tell us what's broken

A short call. We map what's slowing you down — a missing site, a lead pipeline, an inbox that eats your mornings — and what would actually move the needle.

~ 30 min call
+
02

Get a fixed quote

You receive a one-page quote by the next business day: scope, deliverables, timeline, price. No retainer, no surprise hours, no fine print.

~ 1 day turnaround
+
03

Watch it ship weekly

Every Friday you get a Loom showing what's live that week. You sign off in Slack, not in a 90-minute status meeting.

10–14 day builds
+
+
+
+ +
+
+
+ Why Stackless +

The studio you call when your last agency ghosted you.

+

We've been the people who fix what other people built. Most of our work comes from teams who tried once, got burned, and want a partner who actually answers the phone.

+
+
+
01

You always know who's building

Two named humans, plus the agent they supervise. No black-box dev shop, no junior team learning on your dime.

+
02

Fixed quotes, real demos

We send a price and a deadline, then show you something live every Friday. If we miss it, the next build's on us.

+
03

You own everything we build

Code, content, accounts, agent prompts — all yours. We hand over the keys on day one. Walk away whenever you want.

+
04

Built for small teams, not enterprises

We work with 5 to 200-person businesses. No procurement theatre, no 200-slide decks — just a call, a quote, and a build.

+
+
+
+ +
+
+
+ Pricing +

Honest tiers. No surprise invoices.

+

Project pricing for one-off builds, monthly retainers for ongoing work. All prices in South African Rand, excl. VAT.

+
+
+
+ Project +
R18kstarting
+

One-off website build or single integration.

+
  • Fixed quote, fixed deadline
  • Weekly demos
  • 30 days of post-launch support
  • You own everything
+ Get a quote +
+ +
+ Studio +
R48k/ month
+

Ongoing builds, agents, and integrations in one retainer.

+
  • Up to 3 active workstreams
  • Dedicated lead + agent
  • Priority response, same day
  • Quarterly roadmap reviews
+ Book a discovery call +
+
+
+
+ +
+
+
+

You've got a business to run. Let us take the software off your plate.

+

Tell us what's eating your week. We'll come back with a fixed quote and a real plan — usually within one business day.

+
+
+ Start a project → + or email hello@stackless.app +
+
+
+ + + + + + + diff --git a/stackless-site.html.artifact.json b/stackless-site.html.artifact.json new file mode 100644 index 0000000..9583856 --- /dev/null +++ b/stackless-site.html.artifact.json @@ -0,0 +1,21 @@ +{ + "version": 1, + "kind": "html", + "title": "Stackless — marketing site (3 pages)", + "entry": "stackless-site.html", + "renderer": "html", + "status": "complete", + "exports": [ + "html", + "pdf", + "zip" + ], + "primary": true, + "createdAt": "2026-06-18T09:57:16.514Z", + "updatedAt": "2026-06-18T09:57:16.523Z", + "metadata": { + "identifier": "stackless-site", + "artifactType": "text/html", + "inferred": false + } +} \ No newline at end of file