Block distraction from your iPhone. Permanently. A free, open-source Mac app and browser extension.
See the codeBlock distraction from your iPhone. Permanently. A free Mac app, a browser extension and the site, all open source. https://attentionawareness.com
The product is three parts: the site, the browser extension and the Mac app. All three live here. The Mac app ships from the site.
apps/webThe site. A landing page, the download for the Mac app, the manual guide, the
profile builder, the blog and the open numbers page. It also signs the configuration profile: POST /api/sign is what
the Mac app asks for the profile it installs. TanStack Start on Cloudflare
Workers; the founding stack decisions are in
docs/adr/0001-stack.md.
apps/extensionA Chromium extension that hides the addictive feeds on YouTube, Instagram and X with CSS, plus custom CSS of your own per domain. It is free. It is in the Chrome Web Store. See apps/extension/README.md.
apps/macThe Mac app. Native Swift and SwiftUI, macOS 14 and later, Apple silicon. It supervises a connected iPhone on iOS 27 or earlier over USB without erasing it, and installs the restrictions. It is free, with no account and no key. It is not part of the pnpm workspace: Xcode builds it. See apps/mac/README.md.
| Layer | Choice |
|---|---|
| Monorepo | pnpm workspaces + Turborepo, Node 24, TypeScript 7 |
| Web | TanStack Start (React 19 + Compiler) on Cloudflare Workers |
| Extension | Chromium MV3, React 19 popup, three Vite builds |
| Styling | StyleX tokens (near-black on off-white in light, white on black in dark, 4px radius) + Base UI components + Storybook |
| i18n | Paraglide v2 (English + Turkish catalogs) |
| Analytics | PostHog EU (replay + heatmaps) and OpenPanel (/op proxy) |
| Errors | Sentry |
| Logging | evlog wide events to an Axiom drain |
| Lint/format | oxlint (@nkzw/oxlint-config, type-aware) + oxfmt, no ESLint/Prettier |
Prereqs: pnpm 11 (corepack), Node 24 (nvm use).
pnpm install
pnpm dev # mprocs: web + storybook
pnpm dev serves the app on https://aa.localhost through
portless. The proxy is a one-time setup:
sudo pnpm exec portless proxy start --https.
| Command | What it does |
|---|---|
pnpm lint | oxlint, type-aware |
pnpm format:check | oxfmt, the CI check |
pnpm typecheck | tsc --noEmit per package |
Fonts. Suisse Intl is licensed and not in the repo. Without
packages/ui/fonts/*.woff2 the site falls back to Inter and everything else
works. pnpm fonts fetches them from a private bucket; see
scripts/fetch-fonts.sh.
Signing secrets. Signing is off until they exist, and /api/sign answers 503. To sign locally, copy .dev.vars.example to
.dev.vars at the repo root and fill in the three values.
Deploy. pnpm --filter @attentionawareness/web deploy builds and ships to
Cloudflare Workers; a push to main does the same from CI. Agent rules, the
repo layout and the full workflow live in AGENTS.md.
There are two licenses in this repo.
apps/mac, is under the GNU Affero General
Public License, version 3 (AGPL-3.0-only). See
apps/mac/LICENSE and
apps/mac/THIRD_PARTY_NOTICES.md.Files in the site and the packages that are not ours are listed, with their licenses, in THIRD-PARTY-NOTICES.md.
Made by Mert Duzgun. https://mertbuilds.com
Block distraction from your iPhone. Permanently. A free, open-source Mac app and browser extension.
See the codeBlock distraction from your iPhone. Permanently. A free Mac app, a browser extension and the site, all open source. https://attentionawareness.com
The product is three parts: the site, the browser extension and the Mac app. All three live here. The Mac app ships from the site.
apps/webThe site. A landing page, the download for the Mac app, the manual guide, the
profile builder, the blog and the open numbers page. It also signs the configuration profile: POST /api/sign is what
the Mac app asks for the profile it installs. TanStack Start on Cloudflare
Workers; the founding stack decisions are in
docs/adr/0001-stack.md.
apps/extensionA Chromium extension that hides the addictive feeds on YouTube, Instagram and X with CSS, plus custom CSS of your own per domain. It is free. It is in the Chrome Web Store. See apps/extension/README.md.
apps/macThe Mac app. Native Swift and SwiftUI, macOS 14 and later, Apple silicon. It supervises a connected iPhone on iOS 27 or earlier over USB without erasing it, and installs the restrictions. It is free, with no account and no key. It is not part of the pnpm workspace: Xcode builds it. See apps/mac/README.md.
| Layer | Choice |
|---|---|
| Monorepo | pnpm workspaces + Turborepo, Node 24, TypeScript 7 |
| Web | TanStack Start (React 19 + Compiler) on Cloudflare Workers |
| Extension | Chromium MV3, React 19 popup, three Vite builds |
| Styling | StyleX tokens (near-black on off-white in light, white on black in dark, 4px radius) + Base UI components + Storybook |
| i18n | Paraglide v2 (English + Turkish catalogs) |
| Analytics | PostHog EU (replay + heatmaps) and OpenPanel (/op proxy) |
| Errors | Sentry |
| Logging | evlog wide events to an Axiom drain |
| Lint/format | oxlint (@nkzw/oxlint-config, type-aware) + oxfmt, no ESLint/Prettier |
Prereqs: pnpm 11 (corepack), Node 24 (nvm use).
pnpm install
pnpm dev # mprocs: web + storybook
pnpm dev serves the app on https://aa.localhost through
portless. The proxy is a one-time setup:
sudo pnpm exec portless proxy start --https.
| Command | What it does |
|---|---|
pnpm lint | oxlint, type-aware |
pnpm format:check | oxfmt, the CI check |
pnpm typecheck | tsc --noEmit per package |
Fonts. Suisse Intl is licensed and not in the repo. Without
packages/ui/fonts/*.woff2 the site falls back to Inter and everything else
works. pnpm fonts fetches them from a private bucket; see
scripts/fetch-fonts.sh.
Signing secrets. Signing is off until they exist, and /api/sign answers 503. To sign locally, copy .dev.vars.example to
.dev.vars at the repo root and fill in the three values.
Deploy. pnpm --filter @attentionawareness/web deploy builds and ships to
Cloudflare Workers; a push to main does the same from CI. Agent rules, the
repo layout and the full workflow live in AGENTS.md.
There are two licenses in this repo.
apps/mac, is under the GNU Affero General
Public License, version 3 (AGPL-3.0-only). See
apps/mac/LICENSE and
apps/mac/THIRD_PARTY_NOTICES.md.Files in the site and the packages that are not ours are listed, with their licenses, in THIRD-PARTY-NOTICES.md.
Made by Mert Duzgun. https://mertbuilds.com