Bastion

Stay focused.
Break the loop.

Bastion is a browser extension that adds friction where autopilot takes over - speed bumps, time budgets, grayscale filters. Not hard blocks. Just enough resistance to break compulsive habits.

For Chrome, Edge, and other Chromium browsers

A different approach to focus

Most blockers treat you like you can't be trusted. Bastion treats you like someone who set a boundary and needs a gentle reminder to respect it.

Friction, not punishment

Speed bumps and time budgets instead of hard locks. You always have a way through - but you have to be intentional about it.

Graduated responses

Different habits need different tools. A compulsive checker needs a speed bump. A time sink needs a budget. Layer them independently per site.

Calm, not hostile

When Bastion steps in, it feels like a gentle wall - a reminder of a boundary you set for yourself. No shame, no sirens.

Four tools, one goal

Each site gets its own combination of controls. Use one, use all four - whatever fits the habit you're working on.

Time Limit

Cap your time

Set a rolling time budget - like 30 minutes per 2 hours. When you hit the limit, Bastion blocks the site until enough time rolls off the window. You decide how much is enough.

Example 30 min per 2-hour window on reddit.com
Speed Bump

Pause before loading

A countdown page before the site loads. Pure friction - no blocking. Just enough of a pause to ask yourself "do I actually need this right now?"

Example 10-second countdown before news.ycombinator.com
Degradation

Make it less appealing

Apply a grayscale filter based on time of day or time spent on the site. Everything still works - it just stops being as fun. A subtle nudge that the fun part is over.

Example Grayscale on instagram.com after 9 PM

Getting started

Installation

Chrome Web Store listing coming soon. For now, you can install from source.

  1. Clone the repository and run npm install && npm run build
  2. Open edge://extensions or chrome://extensions
  3. Enable Developer mode
  4. Click Load unpacked and select the dist/ folder
  5. Pin Bastion to your toolbar

Adding & configuring sites

Click the Bastion icon in your toolbar, then the gear icon to open Settings. Click + Add Site, type a domain pattern (like reddit.com), and start adding controls.

Domain patterns match the domain and all its subdomains - reddit.com also covers www.reddit.com and old.reddit.com. Each site is configured independently with its own set of controls.

Control types in detail

Time Limit

Configure max time (how long you can spend) and window (the rolling period it's measured over). When you hit the limit, Bastion redirects to a blocked page that shows when access resets. Time tracking uses a 1-minute heartbeat, so usage is accurate to the minute.

Nav Frequency

Configure max visits and window. Each fresh arrival at the domain - from a new tab or a different site - counts as one visit. Clicking around within the site does not. Particularly useful for sites where the problem is how often you go there, not how long you stay.

Speed Bump

Configure the delay in seconds. A countdown page appears before the site loads. After the countdown finishes, click Proceed to continue. There is no limit on how many times you can proceed - the friction is the point.

Degradation

Choose a trigger type: time of day (e.g. after 9 PM) or cumulative time on site (e.g. after 10 minutes today). Currently applies a grayscale filter. The site remains fully functional - just less visually stimulating.

Bypass system

Any control except degradation can have an optional bypass policy. Configure how many bypasses you get per time window and how long each bypass lasts. When a control blocks you, the blocked page shows a bypass button with the remaining count.

Bypasses are a release valve, not a backdoor. They exist because perfection isn't the goal - staying on track is. If you need to check something urgently, the option is there. But you have to actively choose it.

Import & export

The Settings page has export and import buttons. Export your full configuration as a JSON file or a shareable encoded string. Import supports both formats, with the option to replace your existing config entirely or merge (incoming sites win on domain conflicts).

This is useful for backing up your setup, moving to a new machine, or sharing a configuration with someone else.