Skip to content

jadeqwang/akrasia

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

akrasia

A small pause between you and the algorithmic feeds.

akrasia demo: intent prompt → in-session HUD → soft override

A Chrome extension that adds two things to X, Reddit, and YouTube's feed surfaces: a refilling time budget, and an interstitial that asks what you're here to do. Nothing is ever hard-blocked — overrides exist, on purpose, but they cost a deliberate moment.

Named for the Greek akrasia: acting against one's better judgment.

What it does

  • Intent prompt on the first visit of a session (after 10+ min away): "What are you here to do?" — type at least 10 characters before entering.

    intent prompt
  • Time budget per site: 30 min/day by default, refilling at 1 min per 4 min elapsed when you're not on the site.

  • HUD in the bottom-right corner shows remaining budget and current session length, unobtrusively.

    HUD overlay on a faux X feed
  • Soft lock when the budget reaches zero: you can override by typing a reason (≥20 chars) and waiting 15 seconds. Override grants +5 min.

    soft-lock page with override flow
  • History of past intents, overrides, and how your actual time compared to your stated expectation.

  • All settings, sites, and thresholds are configurable.

Default coverage:

  • x.com / twitter.com — all paths
  • reddit.com and subdomains — all paths
  • youtube.com — only /, /feed/*, /shorts/* (direct video links like /watch?v=… pass through freely)

Design notes

A few choices that are load-bearing:

  • Soft, not hard. Friction over prohibition. The point isn't to make these sites inaccessible; it's to surface the moment of intent so visits become deliberate rather than reflexive. Hard blocks train you to circumvent them; mild friction stays effective for longer.
  • Override always exists. With a cost. Typing a sentence and waiting 15 seconds is cheap if the visit is genuinely needed and just expensive enough that reflexive use loses to alternatives.
  • 6-hour delay on loosening. Tightening the rules applies immediately. Loosening (raising a budget, lowering a delay, removing a site) goes into a queue that takes effect 6 hours later. You can cancel a pending change at any time — the delay isn't to prevent loosening, it's to keep impulse changes from sticking.
  • No "disable for an hour" button. The popup only shows status. To turn the extension off you go to chrome://extensions/ — enough friction to be a deliberate act, not a reflex.
  • All local. No network calls, no telemetry, no analytics. Your intents and override reasons live in chrome.storage.local and never leave the browser.

Install (from source)

The extension isn't on the Chrome Web Store. Install it as an unpacked extension:

  1. Clone or download this repository.
  2. Open chrome://extensions/.
  3. Toggle Developer mode (top-right).
  4. Click Load unpacked and select the akrasia/ folder.
  5. Pin the akrasia icon to the toolbar for quick access to per-site budget status.

It also works on Brave, Edge, Arc, and other Chromium-based browsers via the same flow.

Configure

Right-click the toolbar icon → Options, or visit chrome://extensions/, find akrasia, and click "Extension options."

You can edit:

  • The list of covered sites, their hostnames, and path patterns
  • Per-site daily budget (minutes) and refill ratio
  • Session gap (how long away counts as "new session")
  • Intent prompt minimum length
  • Override minimum reason length, wait time, and grant amount
  • The loosening delay (default 6h; can be reduced or set to 0)
  • Whether to show the HUD overlay

Path patterns are either the literal string all or a comma-separated list like /, /feed/*, /shorts/*. A trailing /* matches any path beneath that prefix.

To add a site that isn't on the default list, add a new entry on the options page. Note: extending coverage to sites outside the default host permissions will require updating manifest.json's host_permissions and content_scripts.matches and reloading the extension.

Privacy

Everything is local. No analytics, no telemetry, no remote configuration. The extension never makes a network request. Your history (intents, override reasons, completed sessions) lives in chrome.storage.local and is visible to you on the History page; you can clear it from there.

The extension reads page URLs (via webNavigation and content scripts on the covered hosts) only to decide whether to intercept the navigation or update the HUD. It does not read page content.

Project layout

akrasia/
├── manifest.json         # MV3 manifest, host permissions, content scripts
├── background.js         # service worker: budget tick, navigation interception, message handlers
├── content/hud.js        # in-page corner overlay
├── icons/                # 16/48/128 toolbar icons
├── screenshots/          # README assets
└── pages/
    ├── shared.css        # styling shared by all extension pages
    ├── interstitial.*    # intent prompt at session start
    ├── lock.*            # soft-lock page with override flow
    ├── options.*         # settings editor with delayed loosening
    ├── history.*         # past intents and overrides
    └── popup.*           # toolbar status popup

Contributing

Issues and pull requests welcome. Possible directions:

  • Per-day vs. per-rolling-window budget choice
  • Weekly trend view in the history page
  • Move from webNavigation redirect to declarativeNetRequest to eliminate the brief flash on intercept
  • Firefox port (manifest tweaks; the rest is mostly portable)

If you fork it to tune the design for yourself, that's the intended use as much as anything.

License

MIT. See LICENSE.

About

Chrome extension that adds intent prompts and refilling time budgets to X/reddit/YouTube

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors