Writing the Impossible — A 7-Day Magical Realism Workshop
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
–ink: #1a1208;
–parchment: #f5ede0;
–gold: #b8860b;
–gold-light: #d4a843;
–gold-pale: #f0d890;
}
html { scroll-behavior: smooth; }
body {
background-color: var(–ink);
color: var(–parchment);
font-family: ‘Cormorant Garamond’, serif;
font-weight: 300;
overflow-x: hidden;
}
body::before {
content: ”;
position: fixed;
inset: 0;
background-image: url(“data:image/svg+xml,%3Csvg viewBox=’0 0 256 256′ xmlns=’
http://www.w3.org/2000/svg’%3E%3Cfilter id=’noise’%3E%3CfeTurbulence type=’fractalNoise’ baseFrequency=’0.9′ numOctaves=’4′ stitchTiles=’stitch’/%3E%3C/filter%3E%3Crect width=’100%25′ height=’100%25′ filter=’url(%23noise)’ opacity=’0.04’/%3E%3C/svg%3E”);
pointer-events: none;
z-index: 9999;
opacity: 0.35;
}
/* SCROLL REVEAL — visible by default; JS adds animation only after load */
.reveal { opacity: 1; transform: none; transition: opacity 0.9s ease, transform 0.9s ease; }
.js-ready .reveal { opacity: 0; transform: translateY(28px); }
.js-ready .reveal.visible { opacity: 1; transform: none; }
/* HERO */
.hero {
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
position: relative;
padding: 4rem 2rem 6rem;
background:
radial-gradient(ellipse 80% 60% at 50% 30%, #2e1a06 0%, transparent 70%),
radial-gradient(ellipse 60% 80% at 20% 80%, #1a0e2a 0%, transparent 60%),
radial-gradient(ellipse 50% 70% at 80% 60%, #0e1a0e 0%, transparent 60%),
var(–ink);
overflow: hidden;
}
.orb {
position: absolute;
border-radius: 50%;
filter: blur(80px);
pointer-events: none;
animation: drift 20s ease-in-out infinite alternate;
}
.orb-1 { width: 500px; height: 500px; background: radial-gradient(circle, rgba(184,134,11,0.12) 0%, transparent 70%); top: -100px; left: -100px; animation-duration: 25s; }
.orb-2 { width: 400px; height: 400px; background: radial-gradient(circle, rgba(107,44,44,0.15) 0%, transparent 70%); bottom: -50px; right: -50px; animation-duration: 18s; animation-delay: -8s; }
.orb-3 { width: 300px; height: 300px; background: radial-gradient(circle, rgba(74,92,74,0.12) 0%, transparent 70%); top: 40%; left: 60%; animation-duration: 22s; animation-delay: -5s; }
@keyframes drift {
0% { transform: translate(0,0) scale(1); }
100% { transform: translate(40px,30px) scale(1.1); }
}
.stars { position: absolute; inset: 0; pointer-events: none; }
.star {
position: absolute;
width: 1px; height: 1px;
background: var(–gold-pale);
border-radius: 50%;
animation: twinkle var(–dur,3s) ease-in-out infinite alternate;
animation-delay: var(–delay,0s);
}
@keyframes twinkle {
0% { opacity: 0.1; transform: scale(1); }
100% { opacity: 0.8; transform: scale(1.8); }
}
.hero > * { position: relative; z-index: 1; }
.hero-badge {
font-family: ‘Lato’, sans-serif;
font-size: 0.7rem;
letter-spacing: 0.4em;
color: var(–gold);
text-transform: uppercase;
margin-bottom: 2rem;
}
.hero-title {
font-family: ‘Cinzel’, serif;
font-size: clamp(3rem, 8vw, 7.5rem);
font-weight: 400;
line-height: 0.9;
color: var(–parchment);
margin-bottom: 0.75rem;
}
.hero-title span {
display: block;
font-family: ‘Cormorant Garamond’, serif;
font-style: italic;
font-size: clamp(1.8rem, 4.5vw, 4rem);
color: var(–gold-light);
letter-spacing: 0.04em;
margin-top: 0.5rem;
}
.hero-subtitle {
font-size: clamp(1.1rem, 2.5vw, 1.4rem);
font-style: italic;
color: rgba(245,237,224,0.65);
max-width: 600px;
line-height: 1.8;
margin-bottom: 3rem;
}
.hero-divider {
width: 120px; height: 1px;
background: linear-gradient(90deg, transparent, var(–gold), transparent);
margin: 0 auto 3rem;
}
.hero-meta {
display: flex;
gap: 3rem;
justify-content: center;
flex-wrap: wrap;
margin-bottom: 3.5rem;
}
.meta-item { text-align: center; }
.meta-label {
font-family: ‘Lato’, sans-serif;
font-size: 0.65rem;
letter-spacing: 0.3em;
text-transform: uppercase;
color: var(–gold);
display: block;
margin-bottom: 0.3rem;
}
.meta-value { font-size: 1.15rem; color: var(–parchment); }
.cta-btn {
display: inline-block;
font-family: ‘Cinzel’, serif;
font-size: 0.85rem;
letter-spacing: 0.25em;
text-transform: uppercase;
color: var(–ink);
background: linear-gradient(135deg, var(–gold-light), var(–gold));
padding: 1.1rem 3rem;
text-decoration: none;
position: relative;
overflow: hidden;
transition: all 0.4s ease;
}
.cta-btn::before {
content: ”;
position: absolute; inset: 0;
background: linear-gradient(135deg, var(–gold-pale), var(–gold-light));
opacity: 0;
transition: opacity 0.4s ease;
}
.cta-btn:hover::before { opacity: 1; }
.cta-btn:hover { transform: translateY(-2px); box-shadow: 0 8px 40px rgba(184,134,11,0.4); }
.cta-btn span { position: relative; z-index: 1; }
.scroll-hint {
position: absolute;
bottom: 2.5rem; left: 50%;
transform: translateX(-50%);
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
color: rgba(245,237,224,0.3);
font-family: ‘Lato’, sans-serif;
font-size: 0.6rem;
letter-spacing: 0.3em;
text-transform: uppercase;
z-index: 1;
}
.scroll-line {
width: 1px; height: 50px;
background: linear-gradient(to bottom, rgba(184,134,11,0.6), transparent);
animation: scrollPulse 2s ease-in-out infinite;
}
@keyframes scrollPulse {
0%,100% { opacity: 0.3; }
50% { opacity: 1; }
}
/* SHARED */
section { position: relative; }
.section-inner { max-width: 900px; margin: 0 auto; padding: 6rem 2rem; }
.section-label {
font-family: ‘Lato’, sans-serif;
font-size: 0.65rem;
letter-spacing: 0.4em;
text-transform: uppercase;
color: var(–gold);
margin-bottom: 1.5rem;
display: block;
}
.section-heading {
font-family: ‘Cinzel’, serif;
font-size: clamp(1.8rem, 4vw, 3rem);
font-weight: 400;
color: var(–parchment);
line-height: 1.2;
margin-bottom: 2rem;
}
.section-heading em {
font-family: ‘Cormorant Garamond’, serif;
font-style: italic;
color: var(–gold-light);
}
.body-text {
font-size: clamp(1.05rem, 2vw, 1.2rem);
line-height: 1.9;
color: rgba(245,237,224,0.75);
}
.hr-gold { border: none; border-top: 1px solid rgba(184,134,11,0.15); }
/* ABOUT */
.about-section {
background:
radial-gradient(ellipse 70% 50% at 80% 50%, rgba(107,44,44,0.08) 0%, transparent 70%),
#100d08;
}
.about-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 5rem; align-items: center; }
@media (max-width: 700px) { .about-grid { grid-template-columns: 1fr; gap: 2.5rem; } }
.decorative-frame {
position: relative;
display: flex;
align-items: center;
justify-content: center;
min-height: 280px;
}
.decorative-frame::before {
content: ”;
position: absolute;
width: 260px; height: 260px;
border: 1px solid rgba(184,134,11,0.2);
transform: rotate(45deg);
}
.decorative-frame::after {
content: ”;
position: absolute;
width: 220px; height: 220px;
border: 1px solid rgba(184,134,11,0.1);
transform: rotate(22deg);
}
.frame-center {
width: 180px; height: 180px;
border-radius: 50%;
border: 1px solid rgba(184,134,11,0.3);
display: flex; align-items: center; justify-content: center;
position: relative; z-index: 1;
background: radial-gradient(circle, rgba(184,134,11,0.05) 0%, transparent 70%);
}
.frame-symbol { font-size: 5rem; line-height: 1; filter: drop-shadow(0 0 20px rgba(184,134,11,0.3)); }
/* TECHNIQUES */
.techniques-section { background: var(–ink); }
.techniques-intro { text-align: center; margin-bottom: 4rem; }
.pillars-grid {
display: grid;
grid-template-columns: repeat(3,1fr);
gap: 1px;
background: rgba(184,134,11,0.15);
}
@media (max-width: 700px) { .pillars-grid { grid-template-columns: 1fr; } }
.pillar { background: #0f0c08; padding: 2.5rem 2rem; transition: background 0.4s ease; }
.pillar:hover { background: #17120c; }
.pillar-num { font-family: ‘Cinzel’, serif; font-size: 3.5rem; color: rgba(184,134,11,0.15); line-height: 1; margin-bottom: 0.75rem; }
.pillar-title { font-family: ‘Cinzel’, serif; font-size: 0.9rem; letter-spacing: 0.1em; color: var(–gold-light); margin-bottom: 0.75rem; }
.pillar-text { font-size: 1rem; line-height: 1.75; color: rgba(245,237,224,0.6); }
/* QUOTE */
.quote-block { background: #0d0b08; padding: 5rem 2rem; text-align: center; }
.quote-text {
font-family: ‘Cormorant Garamond’, serif;
font-style: italic;
font-size: clamp(1.4rem, 3.5vw, 2.2rem);
color: rgba(245,237,224,0.75);
max-width: 700px;
margin: 0 auto;
line-height: 1.7;
position: relative;
}
.quote-text::before {
content: ‘\201C’;
font-size: 8rem;
color: rgba(184,134,11,0.1);
position: absolute;
top: -2rem; left: -1rem;
line-height: 1;
}
.quote-attr {
font-family: ‘Lato’, sans-serif;
font-size: 0.65rem;
letter-spacing: 0.3em;
text-transform: uppercase;
color: var(–gold);
margin-top: 2rem;
}
/* 7 DAYS */
.days-section {
background:
radial-gradient(ellipse 80% 60% at 30% 50%, rgba(74,92,74,0.06) 0%, transparent 70%),
#0c0a07;
}
.days-header { text-align: center; margin-bottom: 4rem; }
.days-list { list-style: none; }
.day-item {
display: grid;
grid-template-columns: 80px 1fr;
gap: 2rem;
align-items: start;
padding: 2.5rem 0;
border-bottom: 1px solid rgba(184,134,11,0.1);
transition: padding-left 0.4s ease;
}
.day-item:hover { padding-left: 0.5rem; }
.day-item:last-child { border-bottom: none; }
@media (max-width: 500px) { .day-item { grid-template-columns: 55px 1fr; gap: 1rem; } }
.day-num { font-family: ‘Cinzel’, serif; font-size: 2.2rem; color: rgba(184,134,11,0.25); line-height: 1; padding-top: 0.2rem; }
.day-title { font-family: ‘Cinzel’, serif; font-size: 1.05rem; letter-spacing: 0.05em; color: var(–parchment); margin-bottom: 0.4rem; }
.day-subtitle { font-style: italic; color: var(–gold-light); margin-bottom: 0.6rem; font-size: 1.05rem; }
.day-text { font-size: 1rem; line-height: 1.75; color: rgba(245,237,224,0.55); }
.day-prompt {
margin-top: 0.75rem;
padding: 0.9rem 1.1rem;
border-left: 2px solid rgba(184,134,11,0.3);
background: rgba(184,134,11,0.04);
font-style: italic;
font-size: 0.95rem;
color: rgba(245,237,224,0.5);
line-height: 1.7;
}
.day-prompt-label {
font-family: ‘Lato’, sans-serif;
font-size: 0.55rem;
letter-spacing: 0.3em;
text-transform: uppercase;
color: var(–gold);
display: block;
margin-bottom: 0.4rem;
font-style: normal;
}
/* WHO */
.who-section { background: var(–ink); }
.who-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 4rem; }
@media (max-width: 700px) { .who-grid { grid-template-columns: 1fr; gap: 2.5rem; } }
.who-col h3 { font-family: ‘Cinzel’, serif; font-size: 0.85rem; letter-spacing: 0.25em; text-transform: uppercase; color: var(–gold); margin-bottom: 2rem; }
.who-list { list-style: none; }
.who-list li { padding: 0.75rem 0 0.75rem 1.5rem; border-bottom: 1px solid rgba(184,134,11,0.08); font-size: 1.05rem; line-height: 1.6; color: rgba(245,237,224,0.7); position: relative; }
.who-list li::before { content: ‘✦’; position: absolute; left: 0; color: var(–gold); font-size: 0.5rem; top: 0.95rem; }
/* PRICING */
.pricing-section {
background: radial-gradient(ellipse 80% 70% at 50% 50%, #1e1208 0%, var(–ink) 80%);
padding: 7rem 2rem;
text-align: center;
}
.pricing-card {
max-width: 520px;
margin: 0 auto;
border: 1px solid rgba(184,134,11,0.3);
padding: 4rem 3rem;
position: relative;
background: rgba(0,0,0,0.3);
}
.pricing-card::before { content: ”; position: absolute; top: -1px; left: 15%; right: 15%; height: 2px; background: linear-gradient(90deg, transparent, var(–gold), transparent); }
.pricing-card::after { content: ”; position: absolute; bottom: -1px; left: 15%; right: 15%; height: 2px; background: linear-gradient(90deg, transparent, var(–gold), transparent); }
.pricing-eyebrow { font-family: ‘Lato’, sans-serif; font-size: 0.65rem; letter-spacing: 0.4em; text-transform: uppercase; color: var(–gold); margin-bottom: 1.5rem; }
.pricing-title { font-family: ‘Cinzel’, serif; font-size: clamp(1.4rem,3vw,2rem); font-weight: 400; color: var(–parchment); margin-bottom: 0.75rem; }
.pricing-price { font-family: ‘Cormorant Garamond’, serif; font-size: clamp(3rem,7vw,5rem); font-weight: 300; color: var(–gold-light); line-height: 1; margin: 1.5rem 0; }
.pricing-price sup { font-size: 0.4em; vertical-align: top; margin-top: 0.6em; }
.pricing-desc { font-size: 1rem; line-height: 1.8; color: rgba(245,237,224,0.6); margin-bottom: 2.5rem; }
.pricing-includes { list-style: none; margin-bottom: 3rem; text-align: left; }
.pricing-includes li { padding: 0.6rem 0 0.6rem 1.5rem; font-size: 1rem; color: rgba(245,237,224,0.7); border-bottom: 1px solid rgba(184,134,11,0.08); position: relative; }
.pricing-includes li::before { content: ‘✦’; position: absolute; left: 0; color: var(–gold); font-size: 0.5rem; top: 0.85rem; }
.cta-btn-large {
display: block;
font-family: ‘Cinzel’, serif;
font-size: 0.9rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(–ink);
background: linear-gradient(135deg, var(–gold-light), var(–gold));
padding: 1.3rem 2rem;
text-decoration: none;
position: relative;
overflow: hidden;
transition: all 0.4s ease;
text-align: center;
}
.cta-btn-large::before { content: ”; position: absolute; inset: 0; background: linear-gradient(135deg, var(–gold-pale), var(–gold-light)); opacity: 0; transition: opacity 0.4s; }
.cta-btn-large:hover::before { opacity: 1; }
.cta-btn-large:hover { transform: translateY(-2px); box-shadow: 0 10px 50px rgba(184,134,11,0.5); }
.cta-btn-large span { position: relative; z-index: 1; }
.pricing-note { margin-top: 1.5rem; font-size: 0.85rem; color: rgba(245,237,224,0.35); font-style: italic; }
/* INSTRUCTOR */
.instructor-section { background: #0c0a07; border-top: 1px solid rgba(184,134,11,0.1); }
.instructor-grid { display: grid; grid-template-columns: auto 1fr; gap: 4rem; align-items: start; }
@media (max-width: 650px) { .instructor-grid { grid-template-columns: 1fr; gap: 2rem; } }
.instructor-avatar-wrap { text-align: center; }
.instructor-avatar {
width: 130px; height: 130px;
border-radius: 50%;
background: radial-gradient(circle at 40% 35%, rgba(184,134,11,0.3) 0%, rgba(107,44,44,0.3) 50%, rgba(44,26,14,0.8) 100%);
border: 1px solid rgba(184,134,11,0.3);
display: flex; align-items: center; justify-content: center;
font-size: 3.5rem;
margin-bottom: 0.75rem;
}
.instructor-name-small { font-family: ‘Cinzel’, serif; font-size: 0.75rem; letter-spacing: 0.15em; color: var(–gold); }
.instructor-heading { font-family: ‘Cinzel’, serif; font-size: clamp(1.5rem,3vw,2rem); color: var(–parchment); margin-bottom: 1.5rem; }
.instructor-bio { font-size: 1.05rem; line-height: 1.9; color: rgba(245,237,224,0.65); }
/* FAQ */
.faq-section { background: var(–ink); }
.faq-header { text-align: center; margin-bottom: 4rem; }
.faq-list { max-width: 680px; margin: 0 auto; }
.faq-item { border-bottom: 1px solid rgba(184,134,11,0.12); }
.faq-q {
padding: 1.75rem 2rem 1.75rem 0;
font-family: ‘Cinzel’, serif;
font-size: 0.95rem;
color: var(–parchment);
cursor: pointer;
list-style: none;
display: flex;
justify-content: space-between;
align-items: center;
user-select: none;
}
.faq-q::-webkit-details-marker { display: none; }
.faq-icon { width: 24px; height: 24px; border: 1px solid rgba(184,134,11,0.3); display: flex; align-items: center; justify-content: center; font-size: 1.2rem; color: var(–gold); flex-shrink: 0; transition: transform 0.3s ease; }
details[open] .faq-icon { transform: rotate(45deg); }
.faq-a { padding: 0 0 1.75rem; font-size: 1rem; line-height: 1.85; color: rgba(245,237,224,0.6); }
/* FOOTER */
footer { background: #080604; padding: 4rem 2rem 3rem; text-align: center; border-top: 1px solid rgba(184,134,11,0.1); }
.footer-symbol { font-size: 2.5rem; margin-bottom: 1.5rem; opacity: 0.5; }
.footer-title { font-family: ‘Cinzel’, serif; font-size: 1.1rem; color: var(–gold-light); margin-bottom: 0.5rem; letter-spacing: 0.1em; }
.footer-tagline { font-style: italic; color: rgba(245,237,224,0.35); font-size: 0.9rem; margin-bottom: 2rem; }
.footer-links { display: flex; gap: 2rem; justify-content: center; flex-wrap: wrap; margin-bottom: 2.5rem; }
.footer-links a { font-family: ‘Lato’, sans-serif; font-size: 0.65rem; letter-spacing: 0.25em; text-transform: uppercase; color: rgba(245,237,224,0.35); text-decoration: none; transition: color 0.3s; }
.footer-links a:hover { color: var(–gold); }
.footer-copy { font-family: ‘Lato’, sans-serif; font-size: 0.65rem; letter-spacing: 0.15em; color: rgba(245,237,224,0.2); }
✦ An Asynchronous 7-Day Online Workshop ✦
Writing the
Impossible
A 7-Day Magical Realism Workshop
Learn to write the magic that was always hiding inside the ordinary — grief that fills a room, clocks that lose time, a feeling that becomes the weather.
Claim Your Place →
The Workshop
Magic isn’t outside reality —
it is reality’s deepest layer
Magical realism is one of those things you know when you see it — but harder to put into words. Here’s one way in: it’s a style that blends realistic settings with magical or supernatural elements treated as completely normal. The magic doesn’t explain itself. It doesn’t ask permission. It simply is.
This isn’t Harry Potter. This isn’t Lord of the Rings. The magic in a magical realist story works like a highlighter — it exists to expose an emotional or narrative truth. Think of Kafka’s Metamorphosis: Gregor wakes up as a bug. Nobody asks why. The story isn’t about the transformation. It’s about everything the transformation reveals.
Over seven days, you’ll learn the craft techniques that make this possible on the page — and you’ll write your way into them, one prompt at a time. Work on your own schedule, in your own space, at your own pace.
All You Need to Begin
Your favorite way to write — laptop, pen and paper, a beloved journal, or yes, even a typewriter. An open mind. And some quiet time for yourself each day.
The Craft
Techniques you’ll
learn and practice
Each day introduces a new craft tool — drawn directly from the masters of the form — and puts it immediately to use through prompts and play.
01
The Neutral Tone
How to present the impossible with calm authority — the matter-of-fact voice that makes the magical feel inevitable.
02
Synesthesia
Blending one sense into another — color that is loud, silence with weight — to create magic that the reader feels before they understand it.
03
Juxtaposition
Placing two contrasting elements side by side so that meaning rises from the contrast itself — no explanation needed.
04
Memory & Personal Myth
Excavating your own stories, family lore, and half-remembered things — and finding the magic already living there.
05
Setting & the Ordinary World
Making the familiar feel newly strange — so that the world of your story holds the magical without breaking.
06
Emotional Truth
Turning what is felt into what is physically, impossibly real — because in magical realism, interior life gets to take up space.
Write a paragraph describing an ordinary place where one impossible thing exists — and no one comments on it.
— Day 1 Writing Prompt, Writing the Impossible
-
I
Entering the World of Magical Realism
What this genre is — and what it isn’t
We start by grounding ourselves in the form. Not through heavy theory, but through example — Kafka’s Metamorphosis, the difference between fantasy and magical realism, and why the magic here exists to illuminate truth rather than escape it. You’ll leave with your first piece: a scene in which one impossible thing is present, and no one blinks.
Sample PromptDescribe a place you pass through often. List five ordinary details — then add one that doesn’t quite belong, without explaining it.
-
II
Synesthesia
Making the reader feel the magic before they see it
Named after the neurological condition, synesthesia as a writing device describes one sense in terms of another — colors that are loud, a silence with weight. Drawing from Like Water for Chocolate, you’ll learn how this technique injects strangeness into a grounded world. You’ll practice letting sensory shifts happen naturally, without explanation.
Sample PromptWrite a scene with two characters in an ordinary room. Let one or more senses cross over in unexpected ways. Neither character comments on it.
-
III
Juxtaposition
Meaning from proximity — what lives next to what
Juxtaposition places two contrasting elements beside each other so meaning emerges from their relationship — without naming it. A house kept spotless fills with regret the moment news arrives. A clock that loses a minute every day eventually slows the whole household. The magic doesn’t transform — it attends.
Sample PromptPick a mundane task a character must complete. As they do it, allow one unreal element to exist alongside them. Both things occupy the scene equally.
-
IV
Memory & the Personal Myth
Your own stories are already full of magic
The best magical realism is rooted in real inheritance — family stories that don’t quite make sense, things that happened that nobody explains, the impossible detail everyone just accepts. Today you’ll excavate your own mythology: the half-believed, the inherited, the unexplained. You’ll discover what magic already lives in your specific history.
-
V
Setting & the Ordinary World
Making the familiar feel newly strange
In magical realism, setting is not backdrop — it is participant. The land remembers. Certain rooms behave differently. The street where your character grew up has absorbed everything that happened there. Today you’ll learn to build a world that holds the magical without buckling — a place where the extraordinary is at home.
-
VI
Emotional Truth
When what is felt becomes physically, impossibly real
Interior life in magical realism gets to take up space. Grief that floods a room. Love that leaves a mark on the walls. The body knows things the mind refuses. Today you write from sensation — transforming emotional states into physical phenomena, internal weather into external fact. The feeling doesn’t become metaphor. It becomes real.
-
VII
Bringing It All Together
Finding the whole piece inside the week’s work
On our final day, we look back at everything you’ve written and find what wants to become something more. You’ll revise a piece from the week, apply the full range of techniques, and step back to see the shape of your own magical realism emerging. We close not with an ending, but with an opening — a way forward into the work only you can write.
Who Belongs Here
This workshop is for
writers who feel the pull
This is for you if…
- You’re drawn to the uncanny but don’t yet know how to write it
- You want to write stories from your culture or family that don’t fit a strictly realist mode
- You’re tired of “show don’t tell” and want a different grammar entirely
- You write literary fiction and want to expand what’s possible on the page
- You want to read and write deeply, at your own pace, without performance
- You’re at any level — from very new to long-practiced
- You are, as we say, a typewriter girlie (or any equivalent)
You might wait if…
- You’re looking for genre fantasy worldbuilding or magic systems
- You need live sessions, real-time feedback, or a writing cohort
- You want plot-focused commercial fiction techniques
- You’re not yet ready to sit with ambiguity and open-ended questions
✦ Enrollment ✦
Full Workshop Access
Writing the Impossible:
A 7-Day Magical Realism Workshop
$97
One-time payment. Lifetime access. Begin any time. Work at your own pace.
- 7 in-depth daily lessons delivered straight to you
- 14+ original writing prompts crafted for the form
- Annotated examples from masters of magical realism
- Curated reading list with context and guidance
- Lifetime access — revisit whenever you need it
- Bring your own work-in-progress, or start something brand new
Enroll Now — Secure Checkout via Gumroad →
All major cards accepted · Instant access upon purchase
A note from
your guide
I’ve been teaching writing for a long time, and magical realism is the genre I keep returning to — because it is the only form honest enough to hold everything at once. The things that happened that no one believes. The presences in a room we don’t name. The way love reshapes what is physically possible.
I built this workshop because I kept meeting writers who felt the pull of the genre but didn’t know how to enter it. The lessons here are the ones I wish I’d had. They’re practical, they’re playful, and they will take you somewhere real on the page. I’ll see you in there — typewriter and all.
When does the workshop start? +
The moment you enroll. This is fully self-paced — all seven days of material are available immediately upon purchase. Most people find it nourishing to pace themselves at one day per day, but you’re free to move at whatever rhythm suits your life.
Do I need prior writing experience? +
None at all. The workshop welcomes writers at every stage — those who have never finished a story and those who have published widely. The prompts and lessons are designed to meet you wherever you are.
How much time does each day take? +
Each lesson takes about 20–30 minutes to read through. The writing prompts are open-ended — you might spend 20 minutes or two hours, depending on where they take you. There’s no minimum and no maximum. The workshop bends to your life.
Do I need to have read magical realism before? +
Not at all. The workshop provides everything you need, including short excerpts and context for each referenced work. Curiosity is the only prerequisite. Optional further readings are suggested for those who want to go deeper.
Can I bring a work-in-progress? +
Yes — and it’s encouraged. If you’re working on a novel, short story, or any other narrative, bring your characters and your world into the prompts. The workshop is designed to work with both new writing and existing projects. If you don’t have anything in progress, that’s completely fine too.
The Door Is Open
Your stories are already full
of impossible things.
All you need is the craft to set them free on the page.
Begin Writing the Impossible →
// Starfield
const starsEl = document.getElementById(‘stars’);
for (let i = 0; i < 90; i++) {
const s = document.createElement('div');
s.className = 'star';
s.style.cssText = `left:${Math.random()*100}%;top:${Math.random()*100}%;–dur:${2+Math.random()*4}s;–delay:${-Math.random()*6}s;width:${Math.random()<0.2?2:1}px;height:${Math.random() {
entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add(‘visible’); io.unobserve(e.target); } });
}, { threshold: 0.08 });
document.querySelectorAll(‘.reveal’).forEach(el => io.observe(el));
// Smooth anchor scroll
document.querySelectorAll(‘a[href^=”#”]’).forEach(link => {
link.addEventListener(‘click’, e => {
const t = document.querySelector(link.getAttribute(‘href’));
if (t) { e.preventDefault(); t.scrollIntoView({ behavior: ‘smooth’, block: ‘start’ }); }
});
});