Status: ARCHIVED (2026-05-17). This repository is preserved as a reference implementation; production code lives elsewhere.
The production claim portal for Migrating Oracle Databases to Azure Cloud (KinetiStack Press, 2026) is deployed at:
- Reader URL: https://kinetistack.co/access
- Function endpoint:
https://kinetistackllc.com/api/submit - Repository (production code): https://github.com/KinetiStack/kinetistack-landing
The portal was integrated into the existing KinetiStack marketing site (kinetistack-landing) as a /access subpath, reusing the site's existing contact-form infrastructure: the same Azure AD app registration (KinetiStack Contact Form, App ID ab524d02-1816-4b22-b043-6291eefc9f33) and the same Cloudflare Pages project. Email notifications go via Microsoft Graph sendMail to publishing@kinetistack.co.
This repository was the original handoff target — a standalone Cloudflare Pages project at access.kinetistack.co with its own Azure AD app, its own Teams channel, and client-secret auth. The website team made the architecturally-correct call to consolidate into the existing landing site instead. This code is preserved here because:
- It documents the portable, self-contained pattern that any author shipping a similar book-companion gating flow can fork and deploy in ~30 minutes.
- It's a working reference implementation of the Cloudflare Pages Function + Microsoft Graph
sendMail+ Teams Incoming Webhook hybrid pattern. - If the production deployment ever needs to be split out from the marketing site for blast-radius or rate-limit reasons, this is the starting point.
.
├── index.html Reader-facing claim form
├── functions/api/submit.ts Cloudflare Pages Function (TypeScript)
├── wrangler.toml Cloudflare config (local dev)
├── .dev.vars.sample Env var template for `wrangler pages dev`
├── .gitignore
└── README.md (this file)
- Create a new Cloudflare Pages project pointing at this repo.
- Set the six environment variables (
GRAPH_*,TEAMS_WEBHOOK_URL,ADMIN_EMAIL) per the original handoff brief atcompanion/SETUP.md§4 in the publishing project. - Add a custom domain (e.g.,
access.kinetistack.co). - Update the book back-matter URL accordingly.
Total revival effort: ~30 minutes.
publishing@kinetistack.co
— KinetiStack Press · May 2026