Here’s What AI-Native Looks Like

fagnerbrack.com ~8 min read
View original
Crawl details
  • best
Summary (TL;DR)
A developer with 20 years of experience built readplace.com, a read-it-later SaaS, solo in 7 months for under A$5,000 (AUD). The system runs 52 Lambdas, 24 DynamoDB tables, 71 queues and 16 Pulumi stacks across staging and prod AWS accounts, with about 13,000 tests and 100% coverage on 38 of 40 packages.

The web crawler tries three transports, falls back to a declared bot and then a BrightData residential proxy. It handles tweets, Apple News, scanned PDFs via 300 DPI OCR and semantic HTML, plus 15 writing systems. Daily canaries hit 20 hostile URLs.

An OAuth 2.1 server and 12 MCP tools let ChatGPT or Claude work the reading list. Clients include a Chrome extension, signed Firefox build, iPhone app and a @read.place email address. Six Claude CI workflows have run over 50,000 times. Commits reach production in 1 to 10 minutes, with 99.9% uptime and no outages.

Here’s What AI-Native Looks Like

How I use AI with 20 years of engineering experience

3 days ago

Upward trajectory built on stable deployment pipelines and testing

I remember the first software I developed in an actual company. It was circa 2006 when I implemented my website for my first client. It used iframes and crazy colors. When I showed the prototype to the client they unexpectedly said they had “given up” on building a website.

That’s how bad it was. 😅

Almost half a million karma on Reddit and thousands of submissions on HackerNews later, I decided to create a SaaS for my hand-made 10 year-old read-later system so everyone could use it too. I called it readplace.com.

Here are the first commits: https://github.com/Readplace/readplace.com/commits/main/?since=2026-02-28&until=2026-02-28

I’ve been using assisted AI for coding since early 2023, but 2026 is when everything changed and I started using it full-time on Readplace. At the time of writing this, readplace.com has more than 3000 commits.

So yes I fully jumped on the AI bandwagon.

But… why??? You sloppy *****!

Creating a platform like this is not an easy feat, and I’m talking only about the engineering part. Most companies budget multiple feature teams at A$1M/year each just to achieve baseline parity. Alternatively, you can go the other way, use the Startup mindset and differentiate from competition, on a bet the big players will take longer to pivot to what you’re doing than your ability to convince a VC to give you a few millions for something you can’t do by yourself.

The core problem here is that any basic reading tool requires significant development effort just to achieve a baseline. It’s almost like a commodity nowadays. Until you can say “and this is what I use for filtering articles that’s different from everybody else” you need to build the whole read-it-later and reader infrastructure.

Good luck… that is, if you're still living in the past!

I still use my local system until I can fully migrate to Readplace, but my local system is dumb as f***. However, it was built from my real use cases and experience, not speculation from a founder that managed to convince some VC to give them money so they can shoot in all directions in the hope they can get enough hits before they meet their maker.

How my local system works? Oh glad you asked!

Well… quite simple honestly (and that’s why it took 10 years to be where it is):

  1. I receive emails from many of my GMail address aliases to my main GMail inbox (I have a legacy Google Workspace lifetime free account), then tag them with the “tbf” filter which means “to be filtered” so I know which ones are true emails and which ones are reading content.
  2. Then I spin up the “read-gmail-links” project that runs a query using GMail API with “is:unread label:tbf” on all emails, it crawls all links from every email to their final redirect and creates a UI that I can click, summarise the content based on my local preferences using Claude, and then give me a filtered list I can read and decide what to share and what not.
  3. After I decide what to share, I manually mark that email as read, it’s a manual copy/paste from the UI to my email with the label “share-to-community”.
  4. Then I manually run another command called “npm run start:add times=100” from “update-submissions-from-gmail” project that sends all those “is:unread label:share-to-community” emails to a dynamoDB table called “ALL_LINKS” in a big JSON array and marks them as read.
  5. That’s all for the reading. Later I have another UI (“links-automator”) that can read those and provide a dropdown with communities to select (HN, linkedin, /r/<subreddits>) + summary (which I may have edited) so I can remember what that was all about. Sharing that summary is the top 1 reason I’ve been banned from most of the subreddits I used to post sporadically in these 10 years.
It still uses “master” branch, so only guess how old this code is
How the links-automator screen looks like

The first version of this system didn’t even use DynamoDB, it was a submissions.json file in Dropbox 🤣🤣🤣

Then came readplace.com.

So yeah in February I jumped on the bandwagon and got a number of Claude 20x subscriptions (now I got some Codex also). With my knowledge of AWS and coding infrastructure + testing and stability guard rails here’s what I managed to achieve in 7 months:

  • THE Web Crawler for Reader View: Every fetch tries three transports, the last one carrying a real Chrome TLS fingerprint, then retries as an honestly declared bot, then goes again through a residential proxy through KYC verified BrightData tunnel. Tweets come in via oembed, Apple News stories get rebuilt from Apple’s own compressed document format, and seven sites have hand-written rescue rules because they otherwise save empty. If a site still wins, the reader offers to capture the page with your own logged-in browser instead.
  • Three canaries hit production every morning: 20 of the most hostile URLs on the web (NYTimes, LinkedIn, X, Apple News, arXiv, five PDFs) saved and parsed end to end through the live stack, plus nightly sweeps for links that failed or are still spinning. A red one opens a ticket, and the rule I wrote down is fix the crawler, never delete the URL to go green.
  • Scanned PDFs parsed as text: Readplace rasterises at 300 DPI, OCR up to 300 pages in parallel, one model pass to clean each page, a second to diff the whole document against the original, a third to turn it into semantic HTML. Fixtures cover 15 writing systems, and a scan where only 27 of 31 pages survive still renders, with the gaps marked.
  • Readplace has its own OAuth 2.1 server: Consent screen, dynamic client registration, PKCE, discovery documents, 180-day refresh tokens rotated on every use. Twelve MCP tools sit on top, so ChatGPT or Claude can work your reading list with no manual API key required.
  • Infra Using Pulumi IaC: 52 Lambdas in production, 71 queues with a dead-letter queue in front of every consumer, 24 DynamoDB tables, 41 alarms generated by the shared component so the 52nd Lambda is monitored by default, and 16 infrastructure stacks across two isolated AWS accounts (staging and prod). No click-ops anywhere, and staging has to pass before prod deploys.
  • Tests: Around 13,000 tests across TypeScript, Swift and Kotlin — More test code than product code, 100% coverage enforced on 38 of 40 packages, 296 committed UI test screenshots with pixel baselines including greyscale e-ink at e-reader size, and 7 UI actions carrying millisecond budgets measured across 20 separate CI machines that block the deploy when one is breached.
  • The reading app itself: The card appears the instant you save and fills in behind you, a TL;DR streams into the reader for everyone, a panel tells you what you already read on this subject, and when you finish it picks the next unread thing out of your own library and says why it's related. Seven lists, EPUB export, server-rendered, no React.
  • Clients: A Chrome extension, a signed Firefox build, an iPhone app on the share sheet of every other app, right-click a link you never opened, one shortcut to swallow every tab in the window, and your own @read.place email address where a model keeps the articles and skip the ads and unsubscribe links. Uploading a Pocket export with no account: untick the rubbish, sign in at the last step, and up to 2,000 links land with your ticks intact.
  • AI in my CI, not just my editor: 6 Claude workflows (code review, auto-applying review feedback, CI-failure fixing, conflict fixing) with more than 50,000 runs between them, plus a 30B vision model on a Mac in my office that stares at UI frames from CI for the broken layouts a pixel diff can’t see.

I made the project Open Source so you can see how I do it: https://github.com/Readplace/readplace.com

Here are the “DevOps” metrics:

  • 99.9% uptime (CloudWatch, Feb to Sep, insert your real number)
  • No outage so far. Bugs happened, none took the system down or hit all users.
  • Commits go straight to production in ~1–10m (sometimes 20m when it invalidates the nx cache).

There have been hundreds of production deployments in 7 months. The Actions history in the repo is public, count them yourself. Oh, and did I tell you? I’m the only employee of the company. Also, I spent less than A$5k (Not U$5k, AUD 5k, do the math).

No fancy agent system. No fancy SaaS that promises to simulate employees. Just me, a CLI, and my brain.

So how the hell do you use AI?

The best way to explain using the output of my /insights command:

The loop I run every time

1. Ground it in evidence

Start from a plan file, a production log, an error-funnel PDF, or a categorized pile of prod errors — never from intuition. The brief is outcome-shaped and tightly scoped.

2. Implement — but don’t commit

An explicit gate: implement this plan without committing. The work runs deep and multi-file (29-, 54-, 56-file changes) while you stay out of its way.

3. Review the diff, correct surgically

I audit the result and fix the one wrong detail precisely — a radio button that should be a dropdown, queues > 0 that should be > 1, identity coupled to a display label, the reserved word "tier".

4. Demand proof, not claims

Before I accept it: screenshots, emulator/simulator pixel diffs, mutation-verified tests, a green workspace gate — and proof that any red check is a pre-existing flake, not your regression.

5. Ship to production, then confirm

The one order — commit and push it all — then watch CI to green, verify the deploy on staging and prod, and file follow-ups. The session ends at "verified live," not "code works."

Operating principles

Delegate big, interrupt rarely

Low messages per session against enormous autonomous Bash volume. I define the boundary and audit the result — you don’t micromanage the route. Often several sessions run at once.

Falsification over assertion

I distrust unverified claims and push back hard: a “passing” check that was a misread piped exit code, a wrong “+19.9%” measurement, a greyscale-contrast claim — all retracted only after I pressed.

Say it plainly

I tolerate long silent execution but not evasive conclusions. When an answer hedged with “both, in different places,” I demanded a straight yes/no before accepting it.

Always the “why”

I ask for the business case, cost annotations, and RCA alongside the change — one whole session was an evidence-backed TypeScript adoption case, reframed until the data supported it.

Delete decisively

Removal is first-class, fully-verified work: share-expiry stripped across 54 files, the feature=audio toggle across 12 — mapped, swept, and shipped green like any feature.

Codify what repeats

Heavy Skills + Workflows and multi-agent triage/deep-read pipelines — I encode a procedure once instead of re-explaining it, and treat implementation as cheap and reversible.

Now imagine a funded company, draining the money from an unfortunate VC, starting today, paying multiple feature teams A$1M a year each to have the capacity build a system that’s stable and predictable. A year of burn before they know if people like it or not.

I shipped it in 7 months. Alone. For less than A$5k.

Seems like years of progress, but I'm counting the clock in months… and this is certainly just the beginning 🤭

If you liked this, you might like Readplace, built for exactly this kind of reading.

Thanks for reading. If you have some feedback, reach out to me on LinkedIn, Reddit or by replying to this post.