Heaven Hudson

Young Author • Entrepreneur • Future Teacher

Drafted at 11. Published at 12.

When Character Becomes a Calling

A first book by a peer for her peers - simple reflections that turn everyday moments into practice for courage, kindness, and faith.

Growing in Character — book cover by Heaven Hudson

At just twelve years old, Heaven Hudson wrote her debut, Growing in Character—a gentle guide to choosing who you become in the moments that matter. Short reflections and simple prompts help kids practice courage, kindness, and faith in everyday life.

  • Made for classrooms, book clubs, and family reading
  • Short chapters → real conversations → small wins
  • Beautifully simple; written by a peer for her peers
“Character grows one small choice at a time.”

What I Create

Projects & Portfolio

I love creating, serving, and inspiring - here’s what I’ve built so far.

Book cover

📚 Author

Published Growing in Character at age 12. I write to inspire courage, kindness, and faith in kids like me.

Crochet / plastic canvas bags

👜 Entrepreneur

Started decorated shopping bags at 6; now I design crochet/plastic canvas purses. Proceeds help a school & orphanage in Zimbabwe.

Sample artwork

🎨 Artist

Art helps me share beauty, joy, and faith. I’m building a gallery to showcase and sell my pieces.

Service & missions

🌍 Service & Missions

From free clinics to mission trips in Zimbabwe & Ghana, serving others is where I grow the most.

Impact in Their Words

What readers, mentors, and partners say about Heaven’s work and character.

“At the free clinic, Heaven welcomed families with dignity and calm. She learned fast, anticipated needs, and made everyone feel seen.”
Clinic director portrait
Dr. Elena Ruiz
Clinic Director • Community Health
“On our mission trip she organized activities for younger kids and lifted the team with quiet, consistent leadership. Heaven serves with joy.”
Mission leader portrait
Sarah Mensah
Mission Trip Leader • Ghana
“My daughter finished Growing in Character and asked to read it again. Warm, practical, and surprisingly wise for a first-time author.”
Parent portrait
Daniel Okoye
Parent & Reader
“From decorated bags to crochet craftsmanship, Heaven builds with care and purpose. She sets goals and finishes—qualities I love seeing in a student.”
Teacher portrait
Mrs. Alvarez
Teacher & Mentor
(() => { const wrap = document.querySelector('#impact

Mission & Vision Timeline

A throughline from childhood to calling—how small acts grew into service, authorship, and leadership.

Age 6
First Spark
Decorated shopping bags on a table

Decorated Shopping Bags

Hand-decorated shopping bags at Eve’s Cupboard. Learned pricing, customers, and the joy of making something people love.

Age 9–11
Craft → Cause
Crochet/plastic canvas purse

Crochet / Plastic Canvas Bags

Designed & sold purses to support a school + orphanage in Zimbabwe. Profit → purpose became a habit.

Age 10–12
Service
Community health clinic volunteers

Clinics & Mission Trips

Volunteered at free health clinics and served on mission trips (Zimbabwe, Ghana)—learned empathy, calm, and initiative.

Age 12
Authorship
Child reading a book

Published First Book

Growing in Character—writing to encourage courage, kindness, and faith in kids like me.

Age 13+
Next
Student sharing a lesson

Teach & Compete

Build teaching guides for kids, enter National History Day, grow Golden Threadz, and publish book #2.

/* Tiny IntersectionObserver to reveal nodes on scroll (works in Carrd Pro) */ (function(){ var nodes = document.querySelectorAll('#hhTimeline .tl-node'); if (!('IntersectionObserver' in window) || !nodes.length) { nodes.forEach(n => n.classList.add('in')); return; } var io = new IntersectionObserver((entries)=> { entries.forEach(e => { if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } }); }, { threshold: .2 }); nodes.forEach(n => io.observe(n)); })();

Featured In

Third-party recognition that amplifies Heaven’s work — local papers, church newsletters, community expos, podcasts, and more.

Greater New York Conference United Camp Meeting children’s gathering
Greater New York Conference • United Camp Meeting
“Children United in Mission: We Will Go!” — Invited talk (Ages birth–14), Sept 13, 2025
Community newsletter feature
Community Newsletter
“At only 12, she’s a published author lifting kids into courage and kindness.”
Local radio interview
City Radio • Spotlight
“A young voice with an old soul — Heaven writes for a generation.”
School paper highlight
School Times
“Student author turns values into page-turners.”
Community newsletter feature duplicate
Community Newsletter
“At only 12, she’s a published author lifting kids into courage and kindness.”
Church Newsletter logoNewsletter

“Faith & Service” Feature

Profile on Heaven’s early projects and her first book, Growing in Character.

Grace Fellowship • 2025
Family Podcast emblemPodcast

Interview: Writing with Courage

Thirty-minute conversation on values, process, and serving young readers.

Kind Kids Podcast • 2025
City Expo bannerExpo

Community Youth Expo

Showcased book concepts and crochet bags in the entrepreneurship lane.

Downtown Civic Center • 2024
School paper mastheadSchool Paper

Student Author Spotlight

Editorial piece on publishing at 12 and mentoring younger students.

School Times • 2025

Academics & Achievements

Honors, competitions, scholarly projects, and the milestones ahead.

HonorsCompetitionsProjectsCourseworkExams
Honor2025

Young Author Distinction

Published Growing in Character at age 12; invited readings and discussions with K–8 audiences.

WritingLiteracyMentorship
Project2025–26

National History Day (NHD)

Research + exhibit (topic TBD). Building primary/secondary source skills and historical argumentation.

ResearchWritingPresentation
Planned
Competition2024

Community Science Fair — Ribbon

Built a simple experiment on plant growth variables; presented process and findings to judges.

STEMMethodCommunication
CourseworkOngoing

Integrated Humanities Seminar

Close reading, annotated essays, and Socratic dialogues across history, ethics, and children’s lit.

ReadingWritingCritical Thinking
Project2023–25

Character Education Mini-Lessons

Designed short lessons (virtues, choices) paired with activities; piloted in small groups.

CurriculumEducationLeadership
ExamFuture

PSAT / SAT Pathway

Foundations: vocabulary, grammar, data literacy, and algebra fluency. Tracking practice benchmarks.

MathVerbalStrategy
In Progress
Honor2024

Reading Challenge — Top Finisher

Completed multi-genre reading goals; maintained summaries and reflections in a logbook.

DisciplineReflection

Reflections & Insights

Snapshots of what I’m learning, creating, and discovering - faith, history, art, and entrepreneurship.

Faith

Courage looks small and quiet.

Apologizing first, listening longer, and loving people who can’t repay me—that’s the kind of strength I want.

History

Primary sources argue back.

Letters and diaries make history breathe; they challenge my assumptions in ways summaries never do.

Art

A sketch is a prayer on paper.

Every drawing is how I listen—to beauty, to silence, to the details God leaves for me to notice.

Entrepreneurship

Every sale carries a story.

From decorated bags to teaching guides, I’ve learned that sharing ideas is really sharing pieces of myself.

Writing

Stories are tiny leadership.

A story asks a reader to imagine better and then act a little braver. That’s leadership, line by line.

document.addEventListener('DOMContentLoaded', function () { const wrap = document.querySelector('#reflectWrap'); if (!wrap) return; const track = wrap.querySelector('.rf-track'); const cards = [...wrap.querySelectorAll('.rf-card')]; const dots = [...wrap.querySelectorAll('.rf-dots button')]; const prev = wrap.querySelector('.rf-prev'); const next = wrap.querySelector('.rf-next'); /* 1) Show everything immediately (fixes blank state if observer doesn’t fire) */ cards.forEach(c => c.classList.add('is-visible')); /* 2) Progressive reveal while sliding (observer rooted to the horizontal scroller) */ if ('IntersectionObserver' in window && track) { const io = new IntersectionObserver((entries) => { entries.forEach(e => { if (e.isIntersecting) e.target.classList.add('is-visible'); }); }, { root: track, threshold: 0.15 }); cards.forEach(c => io.observe(c)); } /* 3) Carousel controls (no anchors, no page jump) */ let current = 0; const setActiveDot = (i) => { dots.forEach((d, idx) => d.classList.toggle('is-active', idx === i)); }; const slideTo = (index) => { const i = Math.max(0, Math.min(index, cards.length - 1)); const left = cards[i].offsetLeft - track.offsetLeft; track.scrollTo({ left, behavior: 'smooth' }); current = i; setActiveDot(i); }; dots.forEach((btn, i) => btn.addEventListener('click', () => slideTo(i))); if (prev) prev.addEventListener('click', () => slideTo(current - 1)); if (next) next.addEventListener('click', () => slideTo(current + 1)); /* Keep dots in sync when user drags the carousel */ track.addEventListener('scroll', () => { if (track._raf) return; track._raf = requestAnimationFrame(() => { const center = track.scrollLeft + track.clientWidth / 2; let best = 0, bestDist = Infinity; cards.forEach((c, i) => { const mid = c.offsetLeft + c.offsetWidth / 2; const d = Math.abs(mid - center); if (d < bestDist) { best = i; bestDist = d; } }); current = best; setActiveDot(best); track._raf = null; }); }); /* Set initial active dot */ setActiveDot(0); }); // Reveal on view if ('IntersectionObserver' in window) { const io = new IntersectionObserver(entries => { entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('is-visible'); io.unobserve(e.target); } }); }, {threshold: 0.18}); cards.forEach(c => io.observe(c)); } else { cards.forEach(c => c.classList.add('is-visible')); } // Helpers const slideTo = (index) => { const clamped = Math.max(0, Math.min(index, cards.length - 1)); const target = cards[clamped]; const left = target.offsetLeft - track.offsetLeft; track.scrollTo({ left, behavior: 'smooth' }); setActiveDot(clamped); current = clamped; }; const setActiveDot = (idx) => { dots.forEach((d,i) => d.classList.toggle('is-active', i === idx)); }; // Find nearest slide on scroll to keep dots in sync const nearestIndex = () => { const center = track.scrollLeft + track.clientWidth / 2; let best = 0, bestDist = Infinity; cards.forEach((c,i) => { const mid = c.offsetLeft + c.offsetWidth/2; const d = Math.abs(mid - center); if (d < bestDist) { best = i; bestDist = d; } }); return best; }; let current = 0; setActiveDot(0); // Dots click dots.forEach((btn, i) => { btn.addEventListener('click', () => slideTo(i)); }); // Arrows click prev.addEventListener('click', () => slideTo(current - 1)); next.addEventListener('click', () => slideTo(current + 1)); // Update on manual scroll track.addEventListener('scroll', () => { // throttle with rAF if (track._raf) return; track._raf = requestAnimationFrame(() => { current = nearestIndex(); setActiveDot(current); track._raf = null; }); }); });

Join the Journey

Be part of a life that serves—through story, craft, and care. Get quiet updates, small wins, and next steps.

No spam. Just occasional notes and next steps. Unsubscribe anytime.
0 path selected

Kindness Prompt

Press the button to get a tiny mission for today.

Share
(() => { const wrap = document.querySelector('#journeyCTA'); if (!wrap || wrap.dataset.jc === '1') return; wrap.dataset.jc = '1'; const form = wrap.querySelector('#jcForm'); const okBox = wrap.querySelector('.jc-success'); const errBox = wrap.querySelector('.jc-error'); // Demo submit (swap to real provider) form.addEventListener('submit', async (e) => { e.preventDefault(); okBox.hidden = true; errBox.hidden = true; // Example if you wire Formspree/Mailchimp: // const res = await fetch(form.action, { method: form.method || 'POST', body: new FormData(form) }); // if (res.ok) { okBox.hidden = false; form.reset(); } else { errBox.hidden = false; } setTimeout(() => { okBox.hidden = false; form.reset(); }, 250); }, { passive:false }); // Pledges with localStorage const chips = Array.from(wrap.querySelectorAll('.jc-chip')); const countStrong = wrap.querySelector('.jc-chip-count strong'); const countWrap = wrap.querySelector('.jc-chip-count'); const storeKey = 'hh-pledges'; function loadState(){ try{ return JSON.parse(localStorage.getItem(storeKey)||'{}'); }catch{ return {}; } } function saveState(s){ try{ localStorage.setItem(storeKey, JSON.stringify(s)); }catch{} } function updateCount(){ const n = chips.filter(c => c.classList.contains('active')).length; countStrong.textContent = n.toString(); // keep trailing text updated ("path(s) selected") countWrap.innerHTML = ''+n+'' + (n===1 ? ' path selected' : ' paths selected'); } let state = loadState(); chips.forEach(ch => { const key = ch.dataset.key; if (state[key]) ch.classList.add('active'); ch.addEventListener('click', () => { ch.classList.toggle('active'); state[key] = ch.classList.contains('active'); saveState(state); updateCount(); }); }); updateCount(); // Kindness prompt + Copy/Share const ideas = [ "Write a 3-line thank-you text to someone who won’t expect it.", "Offer to carry a neighbor’s groceries to their door.", "Leave a sticky note with one encouraging sentence in a shared space.", "Pick up five pieces of litter on your walk.", "Ask someone, “What’s one good thing from your week?” and listen.", "Hold the door for two more people than usual today.", "Donate a book you loved to a free library or school bin.", "Send a voice memo prayer/blessing to a friend." ]; const promptBtn = wrap.querySelector('#jcPromptBtn'); const promptText = wrap.querySelector('.jc-prompt-text'); const copyBtn = wrap.querySelector('#jcCopy'); const shareA = wrap.querySelector('#jcShare'); function showPrompt(){ const next = ideas[Math.floor(Math.random()*ideas.length)]; promptText.textContent = next; shareA.href = 'https://twitter.com/intent/tweet?text=' + encodeURIComponent(next + ' — via HeavenHudson.com'); // micro pop if (promptText.animate) { promptText.animate( [{opacity:.5, transform:'translateY(3px)'},{opacity:1, transform:'translateY(0)'}], {duration:180, easing:'ease-out'} ); } } promptBtn.addEventListener('click', ()=>{ showPrompt(); promptBtn.blur(); }); copyBtn.addEventListener('click', async () => { try{ await navigator.clipboard.writeText(promptText.textContent.trim()); const old = copyBtn.textContent; copyBtn.textContent = 'Copied!'; setTimeout(()=> copyBtn.textContent = old, 900); }catch{} }); // Seed one on load showPrompt(); })();

Let's Stay Connected

© 2024–(function(s){ s.parentNode.textContent = new Date().getFullYear(); })(document.currentScript); Heaven Hudson. All rights reserved.

Contact · Privacy

Thank you

Thank you for your support.