Building Edonspace From Scratch
How It Started
I had an options trading epub I wanted to turn into a tutorial series for WeChat and X.
Simple enough, right? Extract the content, rewrite it, publish. Three steps. But then I realized — where does the content live? WeChat articles sink to the bottom of timelines. X long-form posts barely get revisited. I needed my own place to aggregate everything.
So “make a tutorial” became “build a site + make tutorials + document the whole process.” Classic scope creep. This time I leaned into it.
Three Tech Decisions
Astro, not Next.js, not Hugo. This is a content site, not a web app. Astro is built for Markdown, outputs static HTML, zero JS runtime. Next.js ships a React runtime just to render an article — unnecessary overhead. Hugo is fast, but Go templates have a learning curve I didn’t want to deal with.
Cloudflare Pages, not Vercel. Global CDN is table stakes. The real differentiator: China access speed. Vercel is noticeably slow from mainland China. Cloudflare performs much better. Free tier is generous enough.
Trilingual from day one. English, Simplified Chinese, Traditional Chinese. If you don’t bake i18n into the architecture on day one, retrofitting it is miserable — routing structure, content directories, hreflang tags, UI strings, everything needs rework.
One surprise: I planned for Astro 5, but create-astro installed Astro 6. The Tailwind integration changed from @astrojs/tailwind to @tailwindcss/vite, and Tailwind CSS 4 uses native CSS @theme configuration instead of tailwind.config.js. Actually a nice upgrade.
From Epub to Tutorials: Things Break
The options book existed as both PDF and epub. I tried the PDF first — scanned version, garbled text extraction. Useless.
Switched to epub. Used ebooklib + BeautifulSoup to parse it. The epub had clean HTML inside, which yielded 10 chapters and 86 images. Batch-converted all images to WebP — roughly half the file size. This part went smoothly.
YouTube transcripts were another story. I had two playlists as supplementary material. Playlist one (美投君, 20 videos) — every single video had transcripts disabled. Twenty videos, zero transcripts.
Playlist two fared better: 16 out of 17 videos had transcripts available. Lesson learned: always have backup sources.
I combined the epub content with the available transcripts and rewrote everything into 3 tutorial articles. Each in 3 languages — 9 files total.
Design Choices
Color palette: deep navy as primary (65%), cool gray as secondary (25%), amber as accent (10%). No gradients, no purple — both are telltale signs of AI-generated sites. Deliberately avoided.
Typography: Space Grotesk for headings — geometric but not sterile. Body text optimized for readability. Skipped Roboto — too generic to be recognizable.
Asymmetric layout. Sticky header with backdrop blur. Restrained animations — one well-choreographed entrance animation beats a page full of hover effects.
Publishing Pipeline
Content done, now it needs to reach people. Installed two Claude Code skills:
- WeWrite — WeChat article formatting and publishing
- x-article-publisher — X long-form publishing
This closes the loop from Markdown source files to multi-platform distribution, all within one workspace.
Looking Back
The project expanded from “extract a book” to “build a site + produce content + set up publishing pipelines.” Took longer than planned. But every expansion was a deliberate choice, not a loss of control.
Some numbers: 10 chapters extracted, 86 images converted, 16/17 transcripts successfully fetched, 9 tutorial files produced, 3 languages covered.
This is the first build log. The site itself is the best demo — the page you’re reading right now was built with the exact toolchain described above.