← David Wuv1.0 live on the App StoreCase 02 · 2026
Mac app · Solo project

WikiClaw.

WikiClaw verified state: terraria.wiki.gg, 4,847 pages detected, AI mode selected, ready to crawl.

A MediaWiki crawler for the Mac, designed for two readers: the person using it, and the AI that reads the files it makes.

TL;DRAs a solo project, I designed and shipped WikiClaw, a Mac app that's now live on the App Store. It turns a wiki (like a game or fan wiki) into clean files an AI assistant can use. I designed it for two kinds of users at once: the person clicking through the app, and the AI that later reads the files it makes. After launch, I tested how well an AI could use those files, found it struggled to pull the right answers, and shipped an update that fixed it.
Role
Sole designer
Design + AI-assisted build
Status
Live on the App Store
v1.0.1
Stack
Swift · SwiftUI · WKWebView
Claude Code + Xcode
Year
2026
~1 week

Solo project. I designed and specified everything below; AI translated my specs into the Swift build. This case study covers the design work.

A look at the app: set up a crawl, watch it run, and reveal the finished files. Click any screen for a closer look, then page through with the arrows. Each one is covered in detail below.

WikiClaw has two users. One opens the app, clicks through a few screens, and hits Start. The other never sees the interface: it is an AI assistant that reads the files the app makes, to answer questions people ask it later. So I designed for both: the person using the app, and the AI reading what it produces. This case study is about that design work.

§ 01: Mission

One product with two different audiences.

One audience is a person using the app. The other is an AI assistant that reads the files it makes and never sees the interface. I designed for both.

Reader 1 · Human

Opens the app and clicks four buttons.

Needs to know the URL is right, that the crawl is running, and where the files end up. This reader uses the UI, the status, the errors, and the output folder.

reads  →  UI · status · errors · output folder
Reader 2 · AI assistant

Never opens the app. Reads the files it makes.

Needs the information organized so it can find the right answer by meaning, not by clicking. It relies on how each piece is labeled, grouped, and given context.

reads  →  the files · headings · structure · labels
Fig. 1. Most of this case study covers the app the person uses. §3, set on a dark background, covers the harder problem: designing the files so the AI assistant can actually use them.
§ 02: The solution · v1.0

Three interface decisions, and the constraint behind them.

I kept the app simple. You paste a URL, verify it, pick a mode, and hit Start. Three controls. Most of the design work is in what the user does not have to think about: a verification step that catches a wrong link before a long crawl runs, and a single mode choice that replaced a page full of settings.

i.Verify before crawl

WikiClaw only works on MediaWiki sites, and many links labeled "wiki" are other platforms it cannot read. So before anything runs, it checks the link. If it is not a MediaWiki site, it says so right away, instead of starting a crawl that would fail partway through. If it is, it shows the wiki name and page count. The check takes about five seconds and prevents a failed crawl.

The result is the green check, wiki name, and page count below the URL field. Once you see 4,847 pages resolve, you can decide whether to crawl the whole site, and the "Preview a page first" link is there if you do not.

ii.Two modes, not a settings page

There are two main reasons to grab wiki data: feeding it to an AI, or building an archive. They need different output. Feeding it to an AI needs clean, well-labeled text. Building an archive needs the raw pages, images, and history. The first version of WikiClaw put all of this on a settings page with seven toggles, and it tested badly. Users did not want to figure out what "include section anchors" did before starting a crawl.

v1.0 replaced that with one choice: "What's this for?" AI, or Full archive. The crawler is the same either way. Only the files it produces change. The seven toggles became two cards.

The detailed controls are still there. Click into Options and they appear: which pages to include, and ways to crawl only some of them. Most users never touch them, and whatever you do set is remembered, so your choices carry over to the next crawl instead of resetting each time.

WikiClaw with stardewvalleywiki.com verified: mode picker plus Pages to include and Only crawl some pages controls revealed.
Fig. 2. The same screen with Options expanded. The two modes stay primary. The advanced controls (Pages to include, Only crawl some pages) only appear when the user expands Options.

iii.One technical constraint shaped the rest

A week before launch I had to choose how the app would pull pages from a wiki. That one choice set the limits for everything else: how big the app would be, how I could distribute it, and whether it could handle wikis with anti-scraper defenses. I picked Apple's built-in browser engine because it kept the app small and let me ship it to other people, not just run it myself. I compared two other options and documented the tradeoff, but the short version is that I optimized for being able to distribute a real, installable app. The result runs entirely on your Mac: no cloud, no account, no tracking.

Reader 2 · The AI assistant
§ 03: The problem · v1.0.1

After v1.0 shipped, I tested the files with an AI assistant, and it couldn't find the answers.

I shipped v1.0, then tested the files the way they are meant to be used: I loaded a wiki's files into an AI assistant and asked it questions. The answers came back wrong or empty. The problem was how the information was organized. The app saved each wiki the way a person reads it, page by page, section by section. But an AI does not browse; it searches across thousands of small pieces by meaning.

Organized that way, the pieces lost their context: thousands of sections were just labeled Strategy or Overview, indistinguishable from one another. The content was structured for a human, not for how an AI finds things. So I went back and redesigned the information architecture of the output. I found four problems and fixed them.

01.Each piece forgot where it came from.

Every piece of content was just a section body, like the text under a "Strategy" heading. The page name it came from was stored off to the side, where the AI's search never looked. So two "Strategy" sections from two different pages looked identical. The fix: add a short breadcrumb line to each piece, like Bombardier > Strategy > Level 5, so it carries its own context.

02.The stat tables never made it into the searchable content.

The fact boxes on each page (HP, cost, tier, range, damage) are exactly what people look up. But they were not part of what the AI could search, so a question like "what's the HP of a Bombardier?" returned nothing. The fix: turn each fact box into its own readable piece of content.

Source · MediaWiki HTML
Bombardier
Tier4
Cost50 gold
HP120
Range5
Damage30
Upgrade100 gold + 5 nanopods
What the AI reads
# Bombardier: infobox - Tier: 4 - Cost: 50 gold - HP: 120 - Range: 5 - Damage: 30 - Upgrade: 100 gold + 5 nanopods
Fig. 3. Each fact box becomes its own readable piece of content, so the AI can find the stats the same way it finds the prose. This matters for any wiki that is heavy on stats.

03.One size did not fit every AI tool.

Different AI tools want the content broken into different sizes. v1.0 used one fixed size that fit some tools and not others. The fix: offer a few size options so the output matches the tool.

04.Broad questions had nothing to match.

A question like "what's covered in this wiki?" needs a high-level pointer, not five detailed paragraphs about specific units. The fix: add a short summary for each page, with its title, intro, and a list of its sections.

·How I prioritized the four fixes

The four fixes were not equal. Two were high-impact and quick to build. The other two were worth doing but could wait.

Low effort  ⟶  High effort
High impact
Context header
~30 min · big improvement
Fact boxes as their own content
~1 hr · main win for wikis heavy on stats
None
Low impact
Size options
~1 hr · not critical
Page summary
~1 hr · helps broad questions
None
Fig. 4. The context header and the fact box content shipped first as v1.0.1, about 90 minutes of work for the two highest-impact changes. The size options and page summaries come next.
§ 04: The result

Three questions that failed before now return the right answer.

The first real-world test was the Battle Nations wiki: about 1,200 pages, a mix of unit pages (heavy on stats), strategy guides (heavy on prose), and short trivia stubs. The crawl took six minutes at 1 req/sec.

WikiClaw mid-crawl: a checklist with Looking through pages done, Saving each page in progress (2,439 of 4,847), Listing images and Wrapping up pending, the current page, and a red Stop button.
Fig. 5. The running state: a four-step checklist, a page count, the current page, and a Stop button. Stop is the largest and most saturated control on the screen, since it is the main action a user needs during a long crawl.

When the crawl finishes, the output folder opens automatically with the finished files inside, so the user never has to go looking for them.

WikiClaw done state: a green check, the crawl totals (pages, chunks, size), and Reveal in Finder, beside a Finder window showing the clean output files (pages.jsonl, chunks.jsonl, and more).
Fig. 6. The done state. Reveal in Finder is a primary action, since the output files are what the user came for.

I loaded the files into an AI assistant and asked three questions that had failed before:

None of these fixes changed anything for the human reader. They are not visible in the app. They only affect the files the AI reads.

§ 05: The result, shipped

Built in about a week, live on the App Store.

The whole product (Mac app, marketing site, the files it produces) was designed end-to-end in roughly a week, with AI translating my specs into a working build. v1.0 is now live on the Mac App Store, v1.0.1 is in design for the next submission, and the marketing site at wikiclaw.work is collecting waitlist signups.

v0.1
First crawler attempt. Worked on simple wikis, blocked on most others. Threw it out.
Week 1
v0.5
A working command-line version, but wrong shape for an app I could distribute.
Week 1
v0.9
Rebuilt on Apple's browser engine. Verify the link first, plus the two modes. First full Mac build.
Week 2
v1.0
Submitted to the App Store. Marketing site live. Waitlist open.
Week 3
v1.0.1
Output redesign so an AI can actually use the files.
Now
Fig. 7. Five revisions in a week. Two of them got thrown out. v1.0 is live on the App Store.

The App Store screenshots double as marketing: the same cream and purple visual language as the app, with one headline per shot.

App Store screenshot: "A MediaWiki crawler for your Mac. Paste a URL. Get clean files ready for AI or for the archive."App Store screenshot: "Knows it's a wiki before you do. Verifies the URL is MediaWiki and shows the page count, before you start."
Fig. 8. Two of the App Store screenshots. "Knows it's a wiki before you do" states the verify step as one line of copy. Each screenshot covers one feature.

Shipping a Mac app meant designing more than the app. The app, the App Store listing, and the marketing site at wikiclaw.work use the same pitch and the same cream and purple look. Each reaches a different reader.

The WikiClaw app: clean screenshot showing the two modesApp Store hero screenshot: "A MediaWiki crawler for your Mac"Marketing site at wikiclaw.work: "A MediaWiki crawler for your Mac"
Fig. 9. Three surfaces of the same product: the app, the App Store listing, and the marketing site at wikiclaw.work. They use the same headline, the same palette, and the same Welcome.app device frame. I designed them together.

WikiClaw also ships in dark mode. The screens above are light; here is the same app in dark, including the page browser where you can inspect everything the crawl saved.

Light
WikiClaw done state in light mode: a green check, the crawl totals, and Reveal in Finder and Crawl again buttons.
Dark
WikiClaw done state in dark mode: a green check, the crawl totals, and Reveal in Finder and Crawl again buttons.
Fig. 10. The same screen in light and dark. One layout, two palettes.
WikiClaw page browser in dark mode: a list of crawled pages with status, title, size, and time, beside a detail pane showing the selected page with HTML, Markdown, and Infobox views.
Fig. 11. The page browser, in dark mode. You can open any page the crawl saved and read it three ways: the original HTML, the cleaned Markdown, and the structured infobox. It is where the person checks what the AI will read.
§ 06: How this got built

Designed end-to-end as a solo project.

WikiClaw is a solo project. I designed the product, the UX architecture, the information architecture for the AI reader (what goes in each piece of content and why), the App Store screens, and the tradeoffs documented above. For the Swift implementation, I used AI to write what I specified. With an engineer on the project, the design work above would have been the same.

What I designed
  • The product approach: designing for both the human user and the AI assistant that reads the output
  • The UX architecture: verifying the link first, the two modes, and keeping the app eligible for the Mac App Store
  • The output redesign: testing it with an AI and fixing the four problems
  • The fetch-method tradeoff (covered briefly in §02)
  • The visual design, App Store screenshots, and marketing site IA
  • Every tradeoff documented above
What AI handled
  • Translating my specs into compiling Swift / SwiftUI / WKWebView / SwiftData
  • The Xcode project plumbing, entitlements, sandbox configuration
  • The bug-fixing loops: reading stack traces, suggesting fixes
  • The marketing site React / Next.js implementation
  • The boilerplate code
§ 07: What's next

Three things on the roadmap before v2.

Faster crawls. Running a few fetchers in parallel for roughly 2 to 3x the speed, with no change to how it is distributed.

Multi-wiki batch. WikiClaw currently crawls one wiki at a time. Researchers I've talked to want to batch-process a list of wikis overnight. Small UX change (a textarea where the URL field is), larger change underneath.

One-click output profiles. Presets like "Optimize for [tool]" that set the size and formatting in one move, so the user does not have to tune anything by hand.

The longer-term work is harder to put on a roadmap: treating the AI as an audience and designing the files with the same care as the UI. WikiClaw is the first product I've shipped where that was a main part of the work.

§ 08: What I'd do differently

Four things I'd change.

Test the output before the UI. v1.0 was a week on the app with no testing of the files. The check that became §3 should have happened on day one. It would have caught the duplicate "Strategy" problem before it was built in. The output should have been tested before shipping, not at the end.

Talk to someone who had shipped a similar tool. I picked the browser engine based on my own constraints (App Store eligibility, distribution simplicity). It is the right choice, but it took three tries to get there. Twenty minutes with someone who had shipped a similar tool would have saved two of those iterations.

Design the verify step earlier. The verify step is one of the strongest UX decisions in the product, but it was the last thing I built. For a while, the crawl would fail about eighteen minutes into a wrong URL. If I had started with a sketch of the worst-case error path, the verify step would have been the second screen, not the last.

Use the output myself earlier. I caught these problems because I was feeding WikiClaw's files to a Discord bot my gaming guild uses. If I had wired that up in week one instead of week three, I would have caught them before the app was finished.

Sameko Saba, a Discord bot for the designer's gaming guild, answering Bombardier questions using WikiClaw's files as its source.
Fig. 12. Sameko Saba, the Discord bot that reads WikiClaw's files to answer in-game questions. The Bombardier answer (75% armor penetration · range 1 to 3 squares · Level 31 to train · Militia building) comes from the fact box content, the part that v1.0 was missing and §3 fixed. In the follow-up “my notes are blank on that one”, the bot answers only from what it found, and when the wiki does not cover something, it says so instead of inventing an answer.