Static single-page site for the Plekto distribution. Deploys to Cloudflare Pages. Pure HTML + CSS + a single Pages Function for email capture; no framework, no build step.
site/
├── index.html Hero + 3 features + footer
├── style.css All styling (slate + amber palette, dark mode aware)
├── thanks/index.html Success page after signup
├── functions/signup.js Cloudflare Pages Function — POST /signup
├── favicon.svg Brand mark for tab icon
├── icon.svg Same, referenced in hero <img>
├── icon_32px.png Legacy PNG favicon fallback
├── icon_256px.png Apple touch icon
└── og-image.png 1200×630 social card
# On GitHub: create a new EMPTY repo at github.com/plekto-dev/site
# (no README, no .gitignore, no license — just the empty repo)Then push this site/ directory to it as the initial commit. From the
emptyos-private repo root:
# Quick one-shot — clone the empty target, copy site/, push
cd /tmp
git clone https://github.com/plekto-dev/site.git
cp -r D:/emptyos/brand/plekto/site/* site/
cd site
git add -A
git commit -m "Initial commit — Plekto landing page"
git push -u origin main(Ongoing updates: edit files in brand/plekto/site/ here, copy to the
plekto-dev/site clone, commit + push. A scripts/sync-site.sh could
automate this — defer until edits feel painful.)
- Cloudflare dashboard → Workers & Pages → Create application → Pages → Connect to Git
- Pick
plekto-dev/siterepo, branchmain - Build settings:
- Build command: (leave blank)
- Build output directory:
/ - Root directory:
/
- Save and Deploy. First build runs in ~30 sec.
- In the new Pages project → Custom domains → Set up a custom domain →
plekto.dev - Cloudflare auto-creates the DNS records since
plekto.devis on the same account.
- Cloudflare dashboard → Workers & Pages → KV → Create namespace
- Name it
plekto-signups(whatever you want — only the binding name matters)
- In the Pages project → Settings → Functions → KV namespace bindings → Add
- Variable name:
SIGNUPS(this MUST match whatfunctions/signup.jsexpects) - Namespace:
plekto-signups(the one you just created) - Save. Next deploy will pick up the binding.
- Visit
https://plekto.dev/ - Enter
test@example.comin the form - Should redirect to
/thanks/ - Verify the entry appeared in KV: dashboard → KV → plekto-signups → search
email:test@example.com
When v0.1 ships and you want to email everyone who signed up:
# Via wrangler CLI (one-time install: npm install -g wrangler)
wrangler kv:key list --namespace-id=<your-ns-id> --prefix=email: > signups.json
# Or via Cloudflare API
curl -H "Authorization: Bearer <your-api-token>" \
"https://api.cloudflare.com/client/v4/accounts/<account-id>/storage/kv/namespaces/<ns-id>/keys?prefix=email:" \
| jq -r '.result[].name' | sed 's/^email://'- Invalid email → redirect to
/?error=invalid(inline message shown) - KV binding missing → redirect to
/?error=server(admin should see log) - Duplicate email → silently OK (the function is idempotent; first signup wins)
- Bot / scraper → no captcha yet. If volume becomes a problem, add Cloudflare Turnstile (free, 1 line). Likely not needed until launch traffic spikes.
Edit files here in brand/plekto/site/. Re-render previews:
python brand/plekto/_render_preview.py # nothing — see scripts in repo(The local Python preview server can be brought up with
python -m http.server 8765 --directory brand/plekto/site for live editing.)
When ready, copy to the plekto-dev/site clone and push.