# How to Vibe Code Your Own GoodLinks (and Stop Paying for It)

> The Better Way to Save and Read Articles

- Site: https://goodlinks.app
- Category: Productivity
- Platforms: iOS app, macOS app
- Verdict: **Serious undertaking** (45/100 vibecodeable)
- Estimated effort: 4-6 weeks of evening coding

## Verdict

Build a personal macOS and iOS subset with Swift and SwiftUI, but expect steep challenges with native share extensions and robust article DOM parsing.

Cloning GoodLinks for personal use means building a native Swift and SwiftUI application targeting macOS and iOS. While SwiftUI makes local data lists, tagging, and reader themes straightforward to scaffold, you will hit real friction writing native Safari and Share Sheet extensions in Swift, managing offline CloudKit syncing edge cases, and reliably cleaning messy article HTML DOMs without breaking on dynamic sites.

### What you can't replicate

- The exact polish and years of edge-case refinement of the official native app
- Seamless integration into the broader Apple power-user ecosystem via native AppleScript and Shortcut intents out of the box

## What it does

Read-it-later and article organization app for Apple platforms that extracts core text, provides customizable reading environments, highlighting, note-taking, full-text search, and iCloud synchronization without proprietary server accounts.

### Core features

- Article text extraction and readability parsing
- Clean reader mode with custom fonts, sizing, and color themes
- Highlighting and color-coded note-taking
- Centralized notebook and tag organization
- Full-text search across titles, descriptions, and article contents
- iCloud sync across devices via CloudKit
- Share Sheet and Safari extensions
- Markdown export for tools like Obsidian
- One-tap article summaries

## The business

### Pricing

- Universal Purchase: $9.99 — One-time purchase on the App Store including 1 year of feature updates.
- Annual Feature Upgrade: Optional yearly fee — Optional recurring fee for new features after the first year; previously unlocked features are kept forever.

Founded 2020.
Team size: 1 person.

## The hard parts

- Robust DOM readability parsing and ad stripping across diverse website layouts
- Building reliable native Safari extensions and iOS Share Sheet extensions in Swift
- Handling CloudKit record conflict resolution and offline-first queue syncing
- Deep macOS/iOS system integration including Shortcuts, AppleScript, and widgets

## How to vibe code GoodLinks

### Prerequisites

- Mac: Required for building iOS and macOS native applications using Xcode.
- Xcode (Free): Official IDE for Swift, SwiftUI development, and compiling native Apple platform extensions.
- Apple Developer Account ($99/yr): Required for configuring CloudKit containers and provisioning native system extensions on physical devices.

### Recommended AI tools

- Claude Code: Agentic terminal coding tool capable of scaffolding Swift data models, view hierarchies, and parsing logic iteratively.
- Cursor: Ideal AI-native editor for inspecting SwiftUI layout diffs and tweaking UI components visually.

### Stack

- Frontend: SwiftUI (iOS 16+ / macOS 13+)
- Backend: CloudKit (iCloud Sync)
- Database: SwiftData / CoreData with CloudKit container
- Auth: Apple iCloud Account (CloudKit identity)
- Payments: StoreKit 2 (for optional local IAP)
- Other: SwiftSoup (HTML parsing for article extraction), Share Extension / Safari Extension targets

### Hosting

- Cloudflare (Optional auxiliary read-it-later proxy endpoint if cloud-side HTML extraction is needed): $0/mo

### Build guide

1. **Project Scaffolding & SwiftData Local Schema** — Initialize a multiplatform iOS and macOS SwiftUI app container using Xcode, configuring SwiftData models for Articles, Highlights, Notes, and Tags.

```
Create a multiplatform Swift/SwiftUI app skeleton targeting iOS 16+ and macOS 13+. Set up SwiftData models for `Article` (id, url, title, author, contentHtml, plainTextContent, excerpt, publishedDate, addedDate, readingPosition, isStarred, isArchived, tags), `Highlight` (id, articleId, text, note, color, createdAt), and `Tag` (id, name). Configure the App entry point to initialize the SwiftData model container with CloudKit synchronization enabled using a shared iCloud container identifier.
```

2. **Article Readability Extraction Pipeline** — Implement a local or extension-based HTML parsing service using SwiftSoup to clean web DOMs, stripping advertisements, scripts, and navigation clutter.

```
Implement an article extraction utility in Swift using SwiftSoup. Write a function that takes a raw HTML string from a URL fetch, strips out script tags, styles, ads, navbars, and footers, and extracts the primary semantic container and article title. Clean the resulting HTML to render inside a customizable SwiftUI WebView or text view with adjustable font size, line spacing, and theme colors (Light, Sepia, Dark, Night).
```

3. **Reader UI & Highlighting Engine** — Build the immersive reading view supporting text selection, color-coded highlights, and attached user notes.

```
Build a SwiftUI Reader View for articles that renders clean HTML or attributed text. Implement text selection handling that allows users to tap selected text and trigger a floating menu to add a highlight with customizable colors (yellow, green, blue, pink, purple) and attach optional Markdown-compatible text notes. Store these highlights in SwiftData linked to the parent article entity and display them in a unified Notebook sidebar view.
```

4. **Share Sheet and Safari Extensions** — Create native Share Sheet and Safari Web Extensions to capture web pages directly into the app from any browser or app.

```
Add a macOS/iOS Share Extension target to the project. Implement an extension view controller or SwiftUI view that parses incoming URLs and page metadata from the system share sheet, extracts the article content, and inserts a new `Article` record directly into the shared App Group container so the main application accesses it instantly via SwiftData/CloudKit.
```

5. **Organization, Search, and Markdown Export** — Implement full-text search across article attributes, tag management, and customizable Markdown export functionality.

```
Add full-text search capabilities across article titles, authors, descriptions, and extracted content using SwiftData predicates. Build a tag management interface to filter articles by tags and starred status. Implement a Markdown export service that formats article metadata, highlights, and notes into customized Markdown templates for copying to the clipboard or sharing to external apps like Obsidian.
```

### Cost vs paying

**Starting costs (one-time):**

- Apple Developer Account: $99/yr
- AI Coding Assistant (1 month): $20
- Total: ~$119 one-time

**Ongoing costs (monthly):**

- Apple Developer Account renewal: $8.25/mo amortized
- Total: ~$8.25/mo

- Paying for the SaaS instead: $0/mo ($9.99 one-time)
- Build time: 40-60 hours
- AI tool credits: $20/mo (Claude Pro / Cursor)
- Break-even: N/A (Build for personal utility and learning)

## Sources

- [GoodLinks Official Website](https://goodlinks.app)
- [GoodLinks App Store Listing](https://apps.apple.com/app/goodlinks/id1474335294)
- [GoodLinks Press Kit](https://goodlinks.app/press)