← back to Crankd
add Jill persona stub + ElevenLabs wrapper + onboarding script + consent release template
e09786c30ee18fc49676df5c718ae7df3865e82e · 2026-05-13 10:13:49 -0700 · Steve Abrams
Files touched
A lib/elevenlabs.jsA personas/consent-release-template.txtA personas/index.jsonA personas/jill.jsonA personas/scripts/jill-recording-script.mdA personas/scripts/voice-cloning-onboarding.txt
Diff
commit e09786c30ee18fc49676df5c718ae7df3865e82e
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed May 13 10:13:49 2026 -0700
add Jill persona stub + ElevenLabs wrapper + onboarding script + consent release template
---
lib/elevenlabs.js | 51 ++++++++
personas/consent-release-template.txt | 133 +++++++++++++++++++
personas/index.json | 11 ++
personas/jill.json | 27 ++++
personas/scripts/jill-recording-script.md | 52 ++++++++
personas/scripts/voice-cloning-onboarding.txt | 179 ++++++++++++++++++++++++++
6 files changed, 453 insertions(+)
diff --git a/lib/elevenlabs.js b/lib/elevenlabs.js
new file mode 100644
index 0000000..ec32f95
--- /dev/null
+++ b/lib/elevenlabs.js
@@ -0,0 +1,51 @@
+'use strict';
+
+const fs = require('fs');
+const path = require('path');
+
+const PERSONAS_DIR = path.join(__dirname, '..', 'personas');
+
+function loadPersona(slug) {
+ const idxPath = path.join(PERSONAS_DIR, 'index.json');
+ if (!fs.existsSync(idxPath)) throw new Error('personas/index.json missing');
+ const idx = JSON.parse(fs.readFileSync(idxPath, 'utf8'));
+ const meta = idx.personas[slug];
+ if (!meta) throw new Error(`unknown persona: ${slug}`);
+ const file = path.join(PERSONAS_DIR, meta.file);
+ return JSON.parse(fs.readFileSync(file, 'utf8'));
+}
+
+function listPersonas() {
+ const idx = JSON.parse(fs.readFileSync(path.join(PERSONAS_DIR, 'index.json'), 'utf8'));
+ return Object.entries(idx.personas).map(([slug, meta]) => ({ slug, ...meta }));
+}
+
+async function tts({ persona, text }) {
+ const p = loadPersona(persona);
+ if (!p.elevenlabs.voice_id) {
+ throw new Error(`persona '${persona}' has no voice_id yet — record samples + run PVC submission first`);
+ }
+ const key = process.env.ELEVENLABS_API_KEY;
+ if (!key) throw new Error('ELEVENLABS_API_KEY not set');
+
+ const url = `https://api.elevenlabs.io/v1/text-to-speech/${p.elevenlabs.voice_id}`;
+ const body = {
+ text,
+ model_id: p.elevenlabs.model_id || 'eleven_turbo_v2_5',
+ voice_settings: {
+ stability: p.elevenlabs.stability ?? 0.45,
+ similarity_boost: p.elevenlabs.similarity_boost ?? 0.75,
+ style: p.elevenlabs.style ?? 0.15,
+ use_speaker_boost: p.elevenlabs.use_speaker_boost ?? true,
+ },
+ };
+ const r = await fetch(url, {
+ method: 'POST',
+ headers: { 'xi-api-key': key, 'content-type': 'application/json', accept: 'audio/mpeg' },
+ body: JSON.stringify(body),
+ });
+ if (!r.ok) throw new Error(`elevenlabs ${r.status}: ${await r.text()}`);
+ return Buffer.from(await r.arrayBuffer());
+}
+
+module.exports = { loadPersona, listPersonas, tts };
diff --git a/personas/consent-release-template.txt b/personas/consent-release-template.txt
new file mode 100644
index 0000000..c23f1d8
--- /dev/null
+++ b/personas/consent-release-template.txt
@@ -0,0 +1,133 @@
+================================================================================
+VOICE RECORDING & LIKENESS RELEASE
+Template — REVIEW WITH AN ATTORNEY BEFORE USE
+================================================================================
+
+TEMPLATE NOTICE: This document is a starting point, not legal advice. Voice
+cloning rights vary by state (California, Tennessee, New York and others
+have right-of-publicity statutes that interact with this in non-obvious
+ways). Have a licensed attorney review and adapt this before signing it
+with a real contractor or employee.
+
+================================================================================
+
+VOICE RECORDING, LIKENESS, AND DIGITAL VOICE CLONE RELEASE
+
+This Release is entered into as of ______________ ("Effective Date"), by
+and between:
+
+ CONTRIBUTOR:
+ Full legal name: _______________________________________
+ Address: _______________________________________
+ Email: _______________________________________
+ Phone: _______________________________________
+
+ COMPANY:
+ Designer Wallcoverings, by Steve Abrams
+ 15442 Ventura Bl #102, Sherman Oaks CA 91403
+ steve@designerwallcoverings.com
+
+1. PURPOSE
+ Contributor will provide voice recordings ("Voice Samples") to Company.
+ Company intends to use the Voice Samples to create a digital synthetic
+ voice ("Voice Clone") via a third-party voice-cloning service (currently
+ ElevenLabs, Inc.) for use in Company products and services, including
+ but not limited to the application currently known as "CRankd".
+
+2. GRANT OF RIGHTS
+ Contributor grants Company a worldwide, royalty-free, sublicensable,
+ transferable license to:
+ (a) record, reproduce, and store the Voice Samples;
+ (b) submit the Voice Samples to ElevenLabs (and successor or alternate
+ voice-cloning vendors selected by Company) for the purpose of
+ creating, training, and maintaining the Voice Clone;
+ (c) use the Voice Clone to generate synthetic speech in Company
+ products, marketing, demos, and customer-facing features; and
+ (d) modify, derive, and combine the Voice Clone with other audio.
+
+ This license is exclusive with respect to commercial use of the Voice
+ Clone by Company; Contributor retains the right to use their own
+ natural voice for any purpose.
+
+3. NAME AND LIKENESS
+ Contributor grants Company the right to associate the Voice Clone with
+ a stage name or persona name chosen by Company (e.g., "Jill"), which
+ may or may not be Contributor's legal name. Company will NOT publicly
+ identify Contributor by legal name in connection with the Voice Clone
+ without Contributor's separate written consent.
+
+4. COMPENSATION
+ Compensation for the rights granted herein is set forth in the
+ accompanying Statement of Work / employment agreement, and is
+ acknowledged by Contributor as sufficient consideration. If no separate
+ compensation document exists, the parties will sign one before any use
+ of the Voice Clone in a commercial product.
+
+5. PROHIBITED USES (CONTRIBUTOR PROTECTIONS)
+ Company will NOT use the Voice Clone to:
+ (a) impersonate Contributor in any context that could reasonably
+ deceive Contributor's friends, family, employer, financial
+ institutions, or government agencies;
+ (b) make political endorsements or political statements;
+ (c) generate sexually explicit content;
+ (d) generate content that targets, harasses, or defames any
+ identifiable individual;
+ (e) place outbound calls to recipients who have not provided prior
+ express opt-in consent, in violation of the Telephone Consumer
+ Protection Act (TCPA) or comparable state law;
+ (f) be used in any application that violates the FCC's February 8, 2024
+ declaratory ruling regarding AI-generated voices in robocalls.
+
+6. CONTRIBUTOR REPRESENTATIONS
+ Contributor represents that:
+ (a) the voice in the Voice Samples is Contributor's own natural voice;
+ (b) Contributor is at least eighteen (18) years of age;
+ (c) Contributor has the full legal right to grant the rights herein and
+ is not bound by any conflicting agreement (e.g., union/SAG-AFTRA
+ contract, prior exclusive voice deal); and
+ (d) Contributor's Voice Samples do not infringe any third-party rights.
+
+7. REVOCATION & DELETION
+ Contributor may, at any time, request that Company:
+ (a) cease creating new audio using the Voice Clone, and/or
+ (b) delete the Voice Clone from ElevenLabs and Company's systems.
+
+ Company will honor the request within thirty (30) days of receipt at
+ the revocation email address listed below. Audio already published or
+ distributed prior to the request is not subject to recall, but Company
+ will not create new audio after the cease date.
+
+ Revocation email: ___________________________________________
+
+8. TERM
+ This Release is effective from the Effective Date and continues until
+ terminated by either party with 30 days' written notice, or by
+ Contributor exercising the revocation right in Section 7.
+
+9. GOVERNING LAW & VENUE
+ This Release is governed by the laws of the State of California,
+ without regard to its conflict-of-laws principles. Any dispute will be
+ resolved exclusively in the state or federal courts located in Los
+ Angeles County, California.
+
+10. ENTIRE AGREEMENT
+ This Release, together with any signed Statement of Work, constitutes
+ the entire agreement between the parties regarding the Voice Samples
+ and Voice Clone, and supersedes any prior understandings.
+
+CONTRIBUTOR SIGNATURE:
+
+ Signature: _______________________________________
+ Print name: _______________________________________
+ Date: _______________________________________
+
+COMPANY SIGNATURE:
+
+ Signature: _______________________________________
+ Print name: Steve Abrams
+ Title: Owner, Designer Wallcoverings
+ Date: _______________________________________
+
+================================================================================
+END
+================================================================================
diff --git a/personas/index.json b/personas/index.json
new file mode 100644
index 0000000..8450c6e
--- /dev/null
+++ b/personas/index.json
@@ -0,0 +1,11 @@
+{
+ "version": 1,
+ "default_persona": "jill",
+ "personas": {
+ "jill": {
+ "file": "jill.json",
+ "status": "pending_recording",
+ "elevenlabs_voice_id": null
+ }
+ }
+}
diff --git a/personas/jill.json b/personas/jill.json
new file mode 100644
index 0000000..b06da51
--- /dev/null
+++ b/personas/jill.json
@@ -0,0 +1,27 @@
+{
+ "name": "Jill",
+ "slug": "jill",
+ "status": "pending_recording",
+ "elevenlabs": {
+ "voice_id": null,
+ "model_id": "eleven_turbo_v2_5",
+ "clone_type": "PVC",
+ "stability": 0.45,
+ "similarity_boost": 0.75,
+ "style": 0.15,
+ "use_speaker_boost": true
+ },
+ "persona_notes": {
+ "tone": "warm, slightly amused, never mean",
+ "pace": "conversational — pauses on punctuation",
+ "use_cases": ["fake-call escape", "opt-in friend pranks", "scheduled wake-up"]
+ },
+ "consent": {
+ "release_signed_at": null,
+ "release_signed_by": null,
+ "verification_statement_recorded_at": null,
+ "recording_minutes": 0,
+ "revocation_email": null
+ },
+ "created_at": "2026-05-13"
+}
diff --git a/personas/scripts/jill-recording-script.md b/personas/scripts/jill-recording-script.md
new file mode 100644
index 0000000..759e0a6
--- /dev/null
+++ b/personas/scripts/jill-recording-script.md
@@ -0,0 +1,52 @@
+# Jill's voice cloning script (~3 minutes at calm pace)
+
+Read everything below in your normal speaking voice — the same way you'd narrate
+a demo video for an investor. Don't perform; don't smile-talk; don't whisper.
+Pause briefly at paragraph breaks. If you stumble, just pause and pick up
+where you left off — we'll trim later.
+
+Recording requirements:
+- Quiet room. AC off if possible.
+- Phone or AirPods 2-3 inches from mouth, OR USB mic at standard distance.
+- One single-speaker take. Don't clap, don't slate, don't restart.
+- Aim for 2 min 30 sec to 3 min 30 sec total.
+
+================================================================================
+
+Hi, this is Jill. I'm recording this voice sample so my voice can be used to
+narrate calls, reminders, and friendly messages inside the CRankd platform
+built by Steve Abrams.
+
+The quick brown fox jumps over the lazy dog. She sells seashells by the
+seashore. How much wood would a woodchuck chuck if a woodchuck could chuck
+wood? The rain in Spain falls mainly on the plain. Pack my box with five
+dozen liquor jugs.
+
+CRankd is an opt-in calling service — every person on the other end of the
+line has already agreed to hear from us. The job of this voice is to feel
+warm, slightly amused, and never mean. Think "friend calling to give you an
+excuse to leave a meeting" — not "robot reading a script."
+
+Every call this voice will make starts the same way: a quick disclosure that
+the voice is A I generated, that the recipient opted in, and that they can
+press one to continue or two to stop forever. Listen for the cadence — calm,
+clear, a little playful. That energy needs to come through in the cloned
+voice too, otherwise the calls will feel hollow.
+
+Here are some numbers for prosody training: one, two, three, four, five,
+six, seven, eight, nine, ten. Twenty thousand. One hundred thousand. One
+million, two million, ten million. Three thousand four hundred and
+ninety-two. The meeting is Tuesday, January twenty-second, at three
+forty-five.
+
+A few sentences with question marks and emphasis: Did you really need an
+excuse to leave that meeting? Yes, you really did. Was the call helpful? Of
+course it was helpful — that's why you scheduled it. Now go enjoy the rest
+of your day, and remember: you can stop these any time by pressing two.
+
+When this voice calls someone, I want them to feel like a friend is on the
+line. Not a polished marketing voice. Not a phone tree. Not a robocaller.
+Just a real, warm voice walking them through whatever they signed up for.
+Calm, confident, occasionally funny, never robotic.
+
+That's the voice we're cloning. Thanks for capturing it.
diff --git a/personas/scripts/voice-cloning-onboarding.txt b/personas/scripts/voice-cloning-onboarding.txt
new file mode 100644
index 0000000..329847a
--- /dev/null
+++ b/personas/scripts/voice-cloning-onboarding.txt
@@ -0,0 +1,179 @@
+================================================================================
+CRANKD — VOICE CLONING ONBOARDING SCRIPT
+For: new employees and contractors providing voice samples for ElevenLabs PVC
+================================================================================
+
+INSTRUCTIONS FOR THE SPEAKER
+- Record in a quiet room. No fans, no AC hum, no music, no second voice.
+- Use a USB condenser mic or your iPhone Voice Memos app held ~6 inches away.
+- Speak naturally. Don't perform. Don't read like a newscaster.
+- If you misspeak, pause 2 seconds and re-read that sentence — don't restart.
+- Total target length: 30 to 45 minutes of clean audio.
+- Save the file as WAV or high-bitrate MP3 (192 kbps or higher), MONO.
+- Hand the file to Steve. Do not upload it anywhere yourself.
+
+DO NOT SKIP SECTIONS. ElevenLabs needs phonetic variety to make a good clone.
+
+================================================================================
+SECTION 1 — ELEVENLABS VERIFICATION STATEMENT (required, read first, verbatim)
+================================================================================
+
+NOTE: ElevenLabs occasionally updates the exact wording of their PVC consent
+statement. Before recording, log in to elevenlabs.io, start the Professional
+Voice Cloning submission flow, and COPY THE CURRENT STATEMENT VERBATIM from
+their dashboard. The template below is the canonical shape — use it only if
+ElevenLabs' UI is down or as a sanity check against their current text.
+
+ "I, [SPEAKER FULL LEGAL NAME], confirm that the voice in this recording is
+ my own. I am over the age of eighteen. I am providing these voice samples
+ to ElevenLabs for the purpose of creating a Professional Voice Clone of my
+ voice. I have read, understood, and agreed to the ElevenLabs Terms of
+ Service and Privacy Policy. Today's date is [SPEAK THE DATE: MONTH, DAY,
+ YEAR]."
+
+Pause for two seconds before continuing.
+
+================================================================================
+SECTION 2 — PHONETIC RANGE PASSAGE (≈ 3 minutes)
+================================================================================
+
+Read each paragraph at a natural conversational pace. Pause briefly between
+paragraphs.
+
+The rainbow is a division of white light into many beautiful colors. These
+take the shape of a long round arch, with its path high above, and its two
+ends apparently beyond the horizon. There is, according to legend, a boiling
+pot of gold at one end. People look, but no one ever finds it.
+
+When the sunlight strikes raindrops in the air, they act as a prism and form
+a rainbow. The rainbow is a division of white light into many beautiful
+colors. Throughout the centuries people have explained the rainbow in
+various ways. Some have accepted it as a miracle without physical
+explanation.
+
+To the Hebrews it was a token that there would be no more universal floods.
+The Greeks used to imagine that it was a sign from the gods to foretell war
+or heavy rain. The Norsemen considered the rainbow as a bridge over which
+the gods passed from earth to their home in the sky.
+
+Others have tried to explain the phenomenon physically. Aristotle thought
+that the rainbow was caused by reflection of the sun's rays by the rain.
+Since then physicists have found that it is not reflection, but refraction
+by the raindrops, which causes the rainbows.
+
+================================================================================
+SECTION 3 — NUMBERS, DATES, NAMES (≈ 2 minutes)
+================================================================================
+
+Read clearly. These train the clone on tricky pronunciation.
+
+The meeting is scheduled for Tuesday, January twenty-second, twenty
+twenty-six, at three forty-five in the afternoon. Please confirm by replying
+to this message or calling six-one-nine, five-five-five, zero-one-four-two.
+
+The invoice total is one thousand, two hundred and forty-seven dollars and
+ninety-three cents. The order shipped on March fifteenth and should arrive
+by April second.
+
+My name is Jill. I live in Sherman Oaks, California. I work with Steve
+Abrams at Designer Wallcoverings. I can be reached at jill at example dot
+com, or by phone at the number on file.
+
+Common words people get wrong: schedule, almond, caramel, Worcestershire,
+quinoa, route, pecan, syrup, salmon, often, espresso, sherbet, library,
+Wednesday, February, candidate, mischievous.
+
+================================================================================
+SECTION 4 — EMOTIONAL & PACING RANGE (≈ 4 minutes)
+================================================================================
+
+Read each line in the indicated tone. Don't overdo it. Subtle is better.
+
+(Calm and reassuring)
+Hi there. I just wanted to call and let you know everything is fine. There
+is nothing to worry about. Take your time and call me back whenever you can.
+
+(Mildly excited, smiling while you talk)
+You are not going to believe this, but I just heard the best news. I had to
+call you the second I found out. Are you sitting down? Okay, here it goes.
+
+(Apologetic, slower)
+I am so sorry to bother you with this. I know you are busy, and I know this
+is probably the last thing you want to hear right now. But I think you
+should know.
+
+(Confidently delivering information)
+The order has been confirmed. Your sample will ship today, and you should
+receive a tracking number by end of business. If anything changes, I will
+let you know right away.
+
+(Casually asking a question)
+Hey, quick question for you. Do you remember if we said three o'clock or
+three thirty? I just want to make sure I have it right before I head out.
+
+(Slightly tired, but warm)
+It has been a long day, but I wanted to say thank you. Honestly. I really
+appreciate everything you did this week. Get some rest.
+
+(Pretending to read off a list, neutral)
+Apples, oranges, bananas, pears, peaches, blueberries, raspberries,
+strawberries, watermelon, cantaloupe, grapes, plums, mangoes, pineapples,
+kiwis.
+
+(Quick, energetic — like leaving a fast voicemail)
+Hi, it's Jill. Sorry I missed you. Give me a call back when you get a
+chance. Talk soon. Bye.
+
+================================================================================
+SECTION 5 — FREE-FORM CONVERSATIONAL (≈ 5 minutes)
+================================================================================
+
+Improvise. Stay in your natural voice. Suggested topics — pick three and
+talk for about ninety seconds each:
+
+ - Describe your favorite meal and how you would explain it to someone who
+ has never had it.
+ - Tell the story of how you got your first job.
+ - Describe the route from your front door to the nearest coffee shop, as
+ if you were giving directions to a friend.
+ - Talk about something you learned recently that surprised you.
+ - Describe a movie or show you watched last week, without spoilers.
+ - Explain to a ten-year-old how Wi-Fi works.
+
+Speak naturally. Use "um" and "you know" if that's how you really talk —
+the clone will sound more human for it. Do not perform.
+
+================================================================================
+SECTION 6 — CRANKD-SPECIFIC LINES (≈ 2 minutes)
+================================================================================
+
+These are sample lines the clone is most likely to need to say. Read them
+once each in a natural, friendly tone.
+
+"Heads up — this is an A I generated voice call from Steve. You opted in
+to receive this. Press one to continue, two to stop these forever, or
+hang up at any time."
+
+"Hey, sorry to bug you. I know you said you might need a fake reason to
+leave the meeting — that's me. Just nod a few times and say 'okay, I'll
+be right there'."
+
+"Hi, this is Jill calling. Steve asked me to give you a quick wake-up
+call. You said seven-thirty. It is now seven-thirty. Time to get up."
+
+"This is a friendly reminder that your dinner reservation is in fifteen
+minutes. Have a great time tonight."
+
+"You asked me to call you in five minutes if you needed an excuse to
+leave. This is that call. You're welcome. Bye."
+
+================================================================================
+END OF SCRIPT — TOTAL TARGET 30 TO 45 MINUTES
+================================================================================
+
+After recording:
+ 1. Save as WAV or 192+ kbps MP3, mono.
+ 2. Listen back once to confirm no background noise / dropouts.
+ 3. Send the file to Steve via the agreed channel.
+ 4. Do NOT upload to ElevenLabs yourself. Steve handles submission so the
+ consent paperwork stays attached to the cloned voice.
← 64becec initial scaffold — crankd v0.1 (opt-in AI-voice calls, compl
·
back to Crankd
·
gitignore: exclude .bak/.pre-* snapshot artifacts 25ee12d →