This book is meant to feel like a conversation between two people who care about the same things. Let’s make it feel that way.
One of the beautiful things about reading is that it’s your journey. No two readers experience a book the same way. This page lets you customize how The Normal Map speaks to you.
Your Name
When I wrote this book, I imagined sitting across from you, sharing what I’ve learned. If you share your name, the book can greet you personally throughout your reading.
Code
prefs =window.NormalMapPersonalization.getPreferences()// Name inputviewof readerName = Inputs.text({label:"What should I call you?",placeholder:"Your name (optional)",value: prefs.name||"",width:"100%"})// Update when name changesnameWatcher = {if (readerName !== prefs.name) {window.NormalMapPersonalization.setReaderName(readerName); }return readerName;}
Practice Length Preference
Everyone’s capacity for practice is different. Some days you have an hour, some days you have five minutes. Choose a default that fits your typical available time, and practice durations throughout the book will adjust accordingly.
Code
viewof practiceLength = Inputs.radio( ["short","medium","long"], {label:"Preferred practice length",value: prefs.practiceLength||"medium" })// Descriptions for each optionpracticeLengthInfo = {const descriptions = {short:"5-10 minute practices. Perfect for busy days or when building a new habit.",medium:"15-30 minute practices. The standard recommendation for most practices.",long:"30-60 minute practices. For deep dives when you have dedicated time." };return descriptions[practiceLength];}// Display the descriptionhtml`<p style="color: var(--color-text-muted); font-style: italic; margin-top: 0.5em;">${practiceLengthInfo}</p>`
Start with “short” if you’re new to practice. It’s better to do 5 minutes consistently than 30 minutes occasionally. As practices become natural, you can increase the duration.
The Somatic Triad works at any timescale—even a single conscious breath creates coherence.
Your preferences are stored locally in your browser. They’re never sent anywhere—this is entirely private.
If you’d like to start fresh or clear your data:
Code
// Clear data buttonviewof clearButton = Inputs.button("Clear All Personalization Data", {reduce: () => {if (confirm("This will reset all your preferences and reading progress. Continue?")) {window.NormalMapPersonalization.clearPersonalization(); } }})
How Personalization Works
The book adapts to you, but the real adaptation happens in the other direction—your nervous system finding its own coherence through practice.
When you set your preferences here:
Greetings change - The book acknowledges you by name in various places
Practice durations adjust - Time recommendations scale to your preference
Progress is remembered - When you return, the book knows where you left off
The 40-day challenge tracks - If you take it on, your streak is preserved
All of this happens locally in your browser. No accounts, no cloud storage, no data collection. Just you and the book.
For Your Journey
As you personalize your experience, consider:
What name do you use when talking to yourself kindly?
How much time do you realistically have for practice most days?
Are you setting yourself up for consistency or ambition?
What would “good enough” look like for your practice?