11 · Client Intake & Questionnaire

← Docs home · Task: get a prospective author to tell you what book they have, what they want done, and what gaps they want filled — by email or web form — before any work starts.

This is the front door of the service. The goal is one clear intake artifact that:

  1. captures the source + license (so you know it’s even runnable),
  2. lets them pick from the real enhancement menu (the things the pipeline actually produces — see 01 · What You Get), and
  3. has room for the gaps they specifically want filled.

There are two delivery paths; use whichever fits the lead:


The questionnaire (canonical question set)

Both the email and the web form draw from this single list. Keep them in sync — edit here first, then mirror into the form.

A · About you and the book

  1. Your name, role, and institution/organization.
  2. Best email (and any other preferred contact).
  3. Book title, author(s), and edition.
  4. Source license — CC BY · CC BY-SA · CC BY-NC · CC BY-NC-SA · public domain · all-rights-reserved · not sure. (This is the gate — a non-commercial license limits paid distribution.)
  5. Where the source lives (URL, OpenStax/OpenIntro page) — or upload the PDF/DOCX directly on the form.

B · Scope

  1. What do you want enhanced — the whole book · specific chapters · specific sections? (List them.)
  2. Approximate size — number of chapters / sections / pages.
  3. Who’s the audience — high school · community college · university? Course name.
  4. Any deadline or term you’re targeting.

C · What you want done (the enhancement menu)

Check all that apply — these map 1:1 to what bookSHelf produces.

D · Gaps to fill (the important part)

  1. What’s missing or weak in the current book? (e.g. no solutions, dated examples, no visuals, not accessible, no real-world applications.)
  2. Where do your students get stuck most?
  3. Any topics, examples, or chapters you wish existed but aren’t in the source?
  4. Content to add, cut, or reorder?

E · Logistics

  1. Budget range (or “not sure yet”).
  2. Branding / look-and-feel preferences (or “use the bookSHelf house style”).
  3. How will the result be distributed — free/open, course-only, commercial? (Ties back to the license question.)
  4. Preferred update cadence and contact method.
  5. Anything else you want me to know?

Email template

Replace INTAKE_EMAIL with your intake address (default: shuff57@gmail.com) and send. The mailto: link at the bottom opens a pre-filled draft.

Subject: bookSHelf — let's scope your book

Hi [name],

Thanks for your interest in bookSHelf. I turn open textbooks into polished,
interactive web editions — worked solutions, animated figures, narrated video,
slide decks, an accessible EPUB, and hosting. To scope your project, could you
answer a few questions? Short answers are fine.

ABOUT THE BOOK
1. Your name, role, and institution
2. Book title, author(s), edition
3. Source license (CC BY / BY-SA / BY-NC / BY-NC-SA / public domain / other / not sure)
4. Where the source lives (URL), or upload the PDF/DOCX on the form

SCOPE
5. Whole book, specific chapters, or specific sections? (list them)
6. Approx size (chapters / pages) and your audience (course + level)
7. Any deadline

WHAT YOU WANT (check any)
[ ] Remaster/rewrite   [ ] Worked solutions   [ ] Interactive practice
[ ] Animated figures   [ ] Narrated videos    [ ] Slide decks
[ ] Accessibility      [ ] EPUB               [ ] AI tutor
[ ] Calculator-tool replacement                [ ] Hosting

GAPS TO FILL
8. What's missing or weak in the current book?
9. Where do students get stuck?
10. Topics/examples you wish existed?

LOGISTICS
11. Budget range, how you plan to distribute it, and best way to reach you

Reply whenever — I'll follow up with a scoped plan and a sample section.

Best,
[your name]

One-click mailto: (drop into a page or your email signature)

<a href="mailto:?subject=bookSHelf%20%E2%80%94%20let%27s%20scope%20your%20book&body=Hi%2C%0A%0AThanks%20for%20your%20interest%20in%20bookSHelf.%20A%20few%20questions%20to%20scope%20your%20project%3A%0A%0A1.%20Your%20name%2C%20role%2C%20institution%0A2.%20Book%20title%2C%20author%28s%29%2C%20edition%0A3.%20Source%20license%0A4.%20Where%20the%20source%20lives%20%2B%20format%0A5.%20Whole%20book%20or%20specific%20chapters%2Fsections%3F%0A6.%20Audience%20and%20deadline%0A7.%20What%20you%20want%20%28remaster%2C%20solutions%2C%20figures%2C%20video%2C%20slides%2C%20a11y%2C%20EPUB%2C%20tutor%2C%20hosting%29%0A8.%20What%27s%20missing%2Fweak%20in%20the%20current%20book%3F%0A9.%20Where%20do%20students%20get%20stuck%3F%0A10.%20Budget%20%2B%20how%20you%27ll%20distribute%20it%0A%0AThanks%21">
  Email me about my book
</a>

Web form

Status: built — native, on-brand, owned. A house-styled form lives on the site and stores each submission to the D1 database you already run. No third party; the lead data never leaves your infrastructure.

Piece File Role
Form page docs/getstarted.html Public form (/getstarted, also getstarted.oerbookshelf.app), house theme, dark-mode aware. Posts multipart to /api/intake (so it can carry a file).
Handler functions/api/intake.js POST /api/intake — accepts JSON or multipart; validates, stores to D1, streams any uploaded source doc to private R2, optional email alert. Honeypot + per-IP/day cap (default 20).
Schema migrations/0005_intake_submissions.sql, migrations/0006_intake_source_file.sql The intake_submissions table + the source-file columns.
Admin viewer functions/admin/intake.js GET /admin/intake — Cloudflare Access-gated. Cards newest-first, CSV export (?format=csv), and gated file download (?file=<id>).

Source-document upload (PDF / DOCX)

The form has an optional file field: a prospect can upload the source book directly instead of (or alongside) a link. Mechanics:

Make it live (one-time)

  1. Create the private upload bucket:
    npx wrangler r2 bucket create bookshelf-intake
    
  2. Apply the migrations to the live DB:
    npx wrangler d1 execute bookshelf-ai --file=migrations/0005_intake_submissions.sql --remote
    npx wrangler d1 execute bookshelf-ai --file=migrations/0006_intake_source_file.sql --remote
    
  3. Deploy to production (ships getstarted.html + the new Functions; wrangler.toml already binds INTAKE_FILES). The production branch is desktop--branch preview only updates the staging alias:
    wrangler pages deploy docs --project-name bookshelf --branch desktop --commit-dirty=true
    
    Also create the upload bucket once: wrangler r2 bucket create bookshelf-intake.
  4. Protect the admin route — add /admin/intake to the same Cloudflare Access application that already guards /admin/slides (see docs/ops/admin-access.md). It reuses the same Cf-Access-Authenticated-User-Email check. This also gates the file download.

That’s the whole thing — submissions (and any uploaded source doc) now land in D1 + R2, and you read them at /admin/intake (or wrangler d1 execute … "SELECT * FROM intake_submissions").

Optional: get emailed on each lead (dormant until you opt in)

The handler already contains the email-alert code; it’s a no-op until two secrets exist, so nothing breaks in the meantime. To turn it on, create a free Resend account, verify a sending domain, then:

npx wrangler pages secret put RESEND_API_KEY      --project-name bookshelf
npx wrangler pages secret put INTAKE_NOTIFY_EMAIL --project-name bookshelf   # where alerts go
# optional, must be a Resend-verified address:
npx wrangler pages secret put INTAKE_FROM_EMAIL   --project-name bookshelf

No code change — the next submission emails you. Other tunables (plain vars, not secrets): INTAKE_DAILY_LIMIT (per-IP/day cap).

Surfacing it

The landing page (docs/index.html) links to docs/getstarted.html from the nav (“Add Book”), the hero CTA, and the footer. The form is also reachable at getstarted.oerbookshelf.app. Optionally add a link from the What You Get pitch. A separate lightweight contact form (name / email / message) lives at /contact (docs/contact.htmlfunctions/api/contact.jscontact_messages), linked from the homepage nav and footer.


Intake checklist (operator)

[ ] License confirmed compatible with intended distribution   (question A4 + E17)
[ ] Source obtained in a usable format                        (A5 / A6)
[ ] Scope agreed: chapters/sections + deadline                (B)
[ ] Enhancement menu selected                                 (C)
[ ] Gaps captured as concrete, addressable items              (D)
[ ] Sample section delivered before full commitment
[ ] Plan + price sent