Featured AI

This Just In: If you’re super precise and patient (and maybe a little insane), you can completely customize your workflow.

I Built the Writing App of My Dreams
The Writing App of My Dreams

First of all, let me take a moment to retract a passage from my book:

Find an app that works for you, and then stick with it, even if it’s not absolutely perfect. Determine your bare minimum feature set and find something that does that. I require a distraction-free environment, Markdown support, local storage with device syncing, and the ability to export to multiple formats.

I wrote that passage believing no app can be truly perfect. You play a game of give and take with every piece of software — you give up your understanding of how it should work and adapt to the way the thing actually works. In most cases, you settle for "good enough."

I decided "good enough" was no longer, well, good enough and started looking into what it would take to create the writing app I've always wanted. Reader, I now think it is possible to achieve perfection!

Why, because I built an app that is rooted in Markdown, syncs with Ghost, saves versions, and answers questions based on my writing!

Stick around to learn about what I built, why I built it, and how you can get your hands on it.

App Architecture Isn't Easy

Anything related to AI is pretty charged, but I'm pretty clear about my stance — LLM's are not a tool to replace writing but they are able to support a writer's workflow. LLM's are also tools that can enable previously impossible or cost-prohibitive workflows.

I wanted to see if I could take my current writing workflow and use an LLM to turn it into a visually appealing personalized app, similar to what Casey Newton did a few months back. That workflow would require Markdown writing, using AI as a developmental editor, and (ideally) publish to Ghost.

I began a Claude Code session and basically asked if this was possible. Claude, unsurprisingly, said of course and started asking questions. Within about a day, I had a fully functional Markdown editor that worked with files on my computer. Pretty great, right? Well, that's when I realized just how deep this rabbit hole could go.

The problem with AI is that it doesn't understand intent, it only processes what it reads and predicts the next outcome. While the Markdown editor was pretty solid, everything else was pretty terrible. Oh, and it had a pretty significant data loss problem because I didn't explicitly tell the AI to build the app in a way that wouldn't overwrite entire files randomly. So, I guess that was on me.

In the many weeks and nearly two-thousand builds since that first Markdown editor, I've gained an insane amount of knowledge about "human interface guidelines," how to articulate features and design, and (most importantly), how to think about the architecture that allows software to function.

Each new feature or fix is essentially a new path that will inevitably prevent or impact a future decision. You obviously don't know what those future decisions are, but you have to think through what trade-offs they will require while building.

For example, saying I wanted the app to publish and edit Ghost posts seems pretty innocuous on the surface. But, go deeper and you realize that Ghost supports a whole host of content types that Markdown has no equivalent for. So, I needed to scope out a process that would take Ghost content from the API, convert it into a customized form of Markdown, and then reconvert it back to a format the Ghost API could read. To say I lost some files in the process of testing this is an understatement.

Building this app required hundreds of highly detailed roadmap items that I sketched out, trying to anticipate every possible use case or decision path. These decisions and their inevitable tweaking cost me hundreds of millions of tokens — not something a normal (or sane?) person will spend time or money on.

That said, I'm pretty proud of what I’ve built with Claude and Apple's Xcode. I've leaned a lot along the way, so much so that I even started the entire build over from scratch to change a fundamental architecture decision after learning more about Apple's core frameworks. The result is truly the unified writing app of my dreams and I can't wait to show it to you!

Introducing em — a Markdown Editor that Puts You in Control

Say hello to em — as in em dash — the greatest punctuation ever invented.

em — Markdown Writer & Editor for iPhone, iPad, and Mac

em is built for writers who have a ton of files who want to be the only one to decide what to do with 'em. It's a full-featured Markdown writing app with support for iCloud libraries and remote Ghost sites.

While em supports 16 native Ghost Koenig cards, publishing, scheduling, and email newsletters, the secret sauce is in em's intelligence features.

Smart Search allows searching your library for more than just words, and instead, search for meaning. Thanks to something super technical called chunk embedding, em indexes your library into small chunks that it can derive context from. This way if you want to search for when did I write about software development? you might get results that are also about building apps.

The beautiful part of all of this is that Smart Search is 100% on-device. It uses the same concept that powers Apple Mail's meaning-based search feature shipping with this year's operating system updates. Pretty cool, right?

Despite the controversy surrounding AI and writing, I wanted to add AI features to em, but I wanted to do it in a completely measured way. AI features are fully disabled by default. Should a user want to enable AI, they pick the libraries it can access, and it starts with Apple's on-device Foundation Models. Granted, these aren't super powerful and have a context limit of 9,000 characters, but they are private and don't require an internet connection.

em's AI Settings

With Apple's Foundation Models and the semantic chunks that power Smart Search, the Ask em feature provides basic answers based completely on the content from your archive. Again, that 9,000 character context limit comes into play and has an impact on the results — I imagine Apple's model will get better over time.

For writers who want more powerful AI tools now, em also supports API connection to Claude, ChatGPT, and Gemini. Keys are saved in Keychain and the AI model only has access to the libraries you explicitly enable. Results to any question, regardless of the model, appear directly in em.

With AI turned on, em adds an Editorial Review tool that evaluates drafts based on a review prompt — the same one I've been using for about a year. The Foundation Model's small context is not big enough to handle the Editorial Review, so writers who don't want to use a third-party LLM can use Apple's Private Cloud Compute through Apple Shortcuts.

All AI conversations are stored as Markdown files in an AI library and can never generate text inside your documents. The feature exists to add support to your writing process, not replace it.

All AI features are completely optional and em is still pretty damn powerful without them.

In addition to what I've already shared, em also includes a complete Version History tracking system. Every change you make across every device is saved so you can revert or restore whenever needed. All Versions are stored in iCloud and are only ever accessible to you. This feature was a direct result of losing all those drafts during the build process.

em's Version History

Oh, and it probably goes without saying that em also supports Apple’s Shortcuts and App Intents for far more than connecting to Private Cloud Compute, because it’s part of my non-negotiable list. Shortcuts can find, append, prepend, create documents, and even publish directly to Ghost. em enables you to build the writing workflow you've always wanted, too.

em is built with a privacy-first mindset. The app has no servers, no backend, and no way for me to ever access your data. Your writing is your writing and you should be the only one who decides what to do with it.

em is Coming to An App Store Near You

em is the result of literally every non-working free hour I've had for weeks and weeks and it's something I'm pretty damn proud of. It truly is the writing app I've always wanted and has the polish and quality that I hold myself to.

I’ve refined every detail — each setting, button, and line of text — so that it feels like a true Mac-assed Mac app (and an iOS-assed iOS app for that matter). It’s a fantastic experience and just feels right on each device.

em is available through Apple’s TestFlight service right now. This means em is fully ready for beta testers and will be available on the App Store in the coming weeks!

em on Apple's TestFlight

Since I have absolutely no idea what the TestFlight feedback process is, I’m limiting initial access to a few invited folks and current paying subscribers.

If you want to know more about em, I’ve also built a full marketing site to explain all of its features and its super clear privacy policy. Check it out at useem.app!


When I wrote my book, I said to "[f]ind an app that works for you, and then stick with it, even if it’s not absolutely perfect." Well, I want to recant that and say it's possible to build the perfect app if you're insanely diligent and maybe (probably) a little crazy. If you're anything like me, em will be the perfect writing app for you.

PS:

Here are a few answers to questions you might be asking:

Why is em always lowercase?

Why not? It looks better that way.

Why is em always bold?

That’s part of my newly adopted house style. When referring to em in my articles, it will always be done in bold.

Will em come to Windows or Android or Linux or insert_platform_here?

em will only be available for Apple devices — it's the ecosystem I use and understanding one development process was hard enough.

Will em support more than just Ghost in the future?

Maybe? It depends on API availability and my patience (and maybe user requests). If Medium opened their API again that would be a no-brainer. Maybe Tony or Scot are reading this...

What's with the icon?

Have you ever tried depicting an em dash by itself? This shit is super hard! I'm fully open to future suggestions and I might do a whole article on all the (really bad) steps it took to get where the icon currently lives.

PS 2

It should go without saying, but this article was written, edited, published, and sent using em. Welcome to the future of my writing flow!

Support Justin

Become a paid supporter for just $2.50/month to support server costs and help keep Justin's writing accessible to everyone.

Lucky (2026-2026)

⭐️⭐️⭐️