What if you could upload a novel and get a full editorial-grade analysis — character maps, engagement curves, structural weaknesses — in minutes?
I built Story Miner to do exactly that. It's a web app that combines deterministic text analysis with LLM-powered narrative intelligence to give writers and editors deep insight into their stories.
Here's a walkthrough of what it does and how it's built.
The Verdict — Strengths & Weaknesses at a Glance
The first thing you see is a high-level report: what works, what doesn't, and actionable takeaways for the author.
This is generated by feeding episode-level summaries through an LLM pipeline that identifies narrative patterns, then synthesizes them into a structured report.
Engagement Map — Where Readers Stay (and Where They Leave)
This tab maps narrative structure (Setup → Development → Crisis → Climax → Resolution) alongside an engagement timeline that tracks sentiment, dialogue ratio, and pacing across every episode.
The engagement scores use a hybrid approach: deterministic metrics (sentence length variance, dialogue density, vocabulary richness) combined with LLM-assessed emotional intensity. This gives a much more reliable signal than either approach alone.
Character Craft — Relationship Graphs & Emotion Analysis
Every character gets profiled: role classification (protagonist/supporting/antagonist), emotion distribution, co-appearance frequency, and an interactive relationship graph.
The relationship graph uses force-directed layout to show character clustering — you can immediately see which characters form tight groups and which are isolated.
4-Language Support — Instant Switching
The entire analysis can be viewed in Korean, English, Japanese, and Chinese. Switch languages from the header and all analysis content re-renders in the selected language.
This isn't just UI translation — the LLM analysis results are stored per-language, so the narrative insights themselves are generated natively in each language.
Tech Stack
| Layer | Tech |
|---|---|
| Frontend | Next.js 16, Tailwind CSS, shadcn/ui, Recharts |
| Backend | FastAPI, SQLite |
| AI | Claude (narrative analysis), deterministic NLP pipeline |
| Hosting | Cloudflare Workers (web), Railway (API) |
| Build | OpenNext for Cloudflare, Turbopack |
The Hybrid Analysis Pipeline
The key architectural decision was splitting analysis into two phases:
Deterministic phase — keyword extraction (TF-IDF), character counting, co-occurrence matrices, topic modeling, sentiment scoring, style profiling. Fast, reproducible, and cheap.
LLM phase — episode-by-episode narrative analysis, overall structure detection, character relationship inference, and the final editorial report. Expensive but insightful.
The deterministic data feeds into the LLM prompts as context, grounding the AI analysis in measurable textual features. This prevents hallucination about pacing ("the middle section drags") when the engagement metrics actually show it's fine.
Per-Language Result Storage
Analysis results are stored with language-qualified keys (report:en, report:ja, etc.) in SQLite. The API tries the requested language first, then falls back to the default. This means you can analyze once and view in multiple languages without re-running the pipeline.
Try It
novelcat.io — The demo includes a pre-analyzed sample (The Godfather screenplay) with all 4 languages ready. No signup required.
The whole project is still in early stages (v0.1.0), but I'd love feedback on the analysis quality and what features would be most useful for writers.
Built with Claude Code in a weekend sprint. The AI wrote most of the code, I steered the product decisions.




Top comments (0)