โA simple Safari extension to easily hide websites before showing your screen in public.โ
Situation:
Out in public, around coworkers, or with kids nearby โ some websites you'd rather wait before pulling up on screen.
Solution:
Checkpoint is a lightweight Safari extension that's easier to manage than Parental Controls. Just add a site to your list and whenever you visit it, Checkpoint blocks it first until you enter your code.
Ask AI for "a Safari Extension", then "build it simply" โ and see what comes back. A good way to explore how AI interprets a vague brief and scaffolds a working starting point.
Found out that keeping steps simple is key. Build a little, test a lot โ iteration and patience get you further than trying to do everything at once.
Since this is a simple app, I'll teach you how to build your own version. A great first project for anyone curious about Safari extensions.
3 STEPS ยท FOLLOW IN ORDER
Claude Code is Anthropic's CLI for Claude โ an AI coding agent that runs in your terminal and builds real projects from a prompt. You'll need a Mac with Xcode installed. Install Claude Code with npm, then authenticate with your Anthropic account.
Create a new folder, open it in Terminal, launch Claude Code, and paste the prompt below. Claude will build the full extension โ manifest, content script, popup UI, PIN hashing, and session locking โ ready to wrap in Xcode for Safari.
Build a Safari Web Extension for Mac (Manifest V3, packaged via Xcode) that PIN-gates specific websites. Core behavior: - On first install, prompt the user to set a 4-digit numeric passcode (confirmed twice). Store it as a SHA-256 hash in chrome.storage.local. - The extension has a popup where the user maintains a list of locked hostnames (e.g. twitter.com). Entries match both the bare domain and any subdomain (www.twitter.com). - When navigating to a locked host, inject a full-screen overlay at document_start (before page content renders) that blocks interaction with the underlying page. The overlay shows a 4-digit PIN pad. - The overlay must work with keyboard input (digits 0โ9, backspace) as well as clicks. Trap all key events so the page underneath cannot receive them. - On correct PIN entry, dismiss the overlay and unlock that host for the current browser session. - On incorrect entry, shake the input indicator and show an error briefly, then reset. - Session + tab-aware re-locking: a host stays unlocked while at least one tab that unlocked it is still open. When the last such tab closes, the host re-locks. Everything resets when the browser quits. - Skip the overlay inside iframes. - Use Shadow DOM for the overlay to isolate it from page styles. Popup UI: - If no passcode is set yet, show the setup screen. Otherwise show the site list. - Site list: text input to add a hostname (strip protocol/path, validate it contains a dot), a remove button per entry, and a "Change passcode" button that returns to the setup screen.
Open the project folder in Xcode. Run the Safari Web Extension target on your Mac. Once built, enable the extension in Safari Settings โ Extensions. Lock a site, test the PIN pad, and make it yours.