launching NovaWriter: writing with AI that learns your voice

21 min
21 min read

tl;dr

built a markdown editor with local AI that actually sounds like you. free, open source, native macOS app.

try NovaWriter โ†’


the problem

writing apps are broken.

Notion sends your drafts to their servers. Obsidian charges $10/month for AI that sounds generic. Bear has no AI. Ulysses wants $50/year for basic features.

worse: every AI writing assistant sounds the same. corporate. polished. not you.

you write: "the conference was productive. we hashed out Q4 targets."

AI rewrites: "The meeting was very successful and yielded highly positive results regarding our quarterly objectives."

that's not your voice. that's everyone's voice.


what if AI learned how YOU write?

i built NovaWriter to solve this.

the core idea: AI should enhance your voice, not replace it.

here's how it works:

  1. you write normally in the editor
  2. NovaWriter passively analyzes your style (sentence length, vocabulary, phrases, punctuation)
  3. after ~10,000 words, it creates a personalized AI model
  4. when you ask for help, suggestions actually sound like you

all local. all private. powered by Ollama.


what makes it different

๐Ÿง  memory mode: AI that writes like you

unlike ChatGPT that sounds like everyone else, NovaWriter learns YOUR writing voice.

example:

your writing:

"shipped the MVP last week. users love it. gonna iterate based on feedback."

generic AI (ChatGPT/Claude):

"We successfully launched the minimum viable product. User reception has been overwhelmingly positive. We will now implement improvements based on customer feedback."

NovaWriter (after learning your style):

"shipped the MVP last week. users love it. gonna iterate based on feedback and push v1.1 next sprint."

same meaning. YOUR voice. YOUR style.

โšก flow state tracking

the app measures your typing patterns to detect when you're in deep focus.

tracks:

  • keystrokes per second
  • consistency metrics
  • interruptions (pauses, app switches)
  • focus time

get a "flow score" after each session. optimize for your peak writing hours.

๐Ÿ” research without tab-switching

select any text โ†’ right-click โ†’ "research this"

the AI:

  1. searches DuckDuckGo
  2. fetches top 5 sources
  3. extracts article content
  4. summarizes findings
  5. generates citations
  6. lets you insert into your doc

no more copy-pasting from 10 browser tabs.

๐Ÿ“ markdown that feels good

  • TipTap editor with slash commands
  • bubble menus and shortcuts
  • auto-save every 1.5s
  • zen mode (Cmd+P)
  • native performance

just you and your words.


built with

Frontend: Next.js 13, React, TypeScript, TailwindCSS
Backend: Rust (Tauri v2)
AI: Ollama (local LLMs - phi3, llama3, mistral)
Editor: TipTap
Storage: Local filesystem (~/NovaWrite/)

Bundle Size: 4.2MB
Cold Start: ~67ms
RAM Usage: ~60MB

Electron apps use 300-500MB RAM. NovaWriter uses 60MB.

that's the power of Rust + native webview.


why local-first?

privacy: your words stay on your machine. no cloud. no tracking.

speed: native performance, sub-100ms startup, instant saves.

ownership: your data is yours. no vendor lock-in.

AI without compromises: leverage powerful LLMs without sacrificing privacy.

local-first isn't just compliance. it's a competitive advantage.


features

โœจ Local AI assistant with streaming responses
๐Ÿ“ File management with drag-drop folders
๐ŸŽจ Dark mode that's actually good
๐Ÿ“Š Writing analytics - words, streaks, insights
๐Ÿ”– Quick notes capture (Cmd+Shift+N)
โŒจ๏ธ Command palette for everything (Cmd+K)
๐Ÿ’พ Auto-save that just works
๐ŸŽฏ Distraction-free zen mode
๐Ÿ“ฑ Native performance via Tauri


development journey

Week 1: Basic editor + file management
Week 2: Tauri integration + auto-save
Week 3: Ollama AI integration
Week 4: UI polish + dark mode
Week 5: Analytics + flow tracking
Week 6: Memory mode + research feature

Total: ~120 hours of focused work


the challenges

streaming AI responses

Ollama's streaming API returns newline-delimited JSON. had to parse chunks carefully to avoid breaking on partial objects.

solution: buffer by line, parse each complete JSON response, emit to frontend via Tauri events.

TipTap bubble menu positioning

the bubble menu (formatting toolbar) kept appearing off-screen or flickering.

solution: use Tippy.js with appendTo: document.body and careful lifecycle management. took 3 days to get right.

personalized AI models

creating Ollama modelfiles programmatically was undocumented. had to read their source code.

learned: you can pass system prompts and examples in the modelfile, essentially fine-tuning behavior without actual model retraining.


lessons learned

ship ugly, iterate fast

v1.0 was ugly. basic file tree. no icons. plain text everywhere.

shipped it anyway.

feedback: "i love the speed but the UI looks like a terminal app"

fixed in v1.1. now it's beautiful AND fast.

AI personalization is magic

when the AI suggests text that sounds like YOU, users get it immediately.

generic AI is a commodity. personalized AI is defensible.

local-first is a feature

users LOVE that their data stays local. no sign-up. no sync. just files on disk.

privacy is the feature.


what's next

v1.1 (December 2025):

  • full-text search
  • wiki-style linking [[like this]]
  • PDF/HTML export
  • tags system

v1.2 (January 2026):

  • AI chat sidebar
  • templates
  • version history
  • cloud sync (optional, encrypted)

v2.0 (Q1 2026):

  • mobile apps (iOS/Android)
  • plugin system
  • collaboration features

see full roadmap โ†’


pricing

free. open source. forever.

because good tools shouldn't cost $20/month.

writing is fundamental. everyone should have access to great writing software.

MIT licensed. fork it. make it yours.


download

NovaWriter for macOS โ†’

Requirements: macOS 11+, 4GB RAM
Optional: Ollama for AI features


try the magic

  1. download NovaWriter
  2. install Ollama
  3. write 10,000 words
  4. click "Create Personal Model"
  5. watch AI learn your voice

takes 30 seconds. changes everything.


final thoughts

building NovaWriter reminded me why i love coding.

not for metrics. not for growth.

for the pure joy of making something useful. something i actually want to use every day.

if you're a writer frustrated with existing tools, try NovaWriter.

ship fast. ship often. ship things you'd use.


built by Ali Arain

GitHub ยท Twitter ยท Email


ยฉ 2025 Ali Arain. MIT License.