breezykermo.tngl.sh/abartleby at main · Tangled
breezykermo.tngl.sh
abartleby
Star
Fork
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
i would prefer not to
Star
Fork
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Rust
95.7%
Nix
4.3%
Shell
0.1%
main
No tags found
13
Code
Clone this repository
Use permalink
HTTPS
https://tangled.org/breezykermo.tngl.sh/abartleby<br>https://tangled.org/did:plc:iy7uvtkole4fggi56hk3ih3l<br>getComputedStyle(s).display !== 'none').textContent)"<br>class="px-3 py-2 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200"<br>title="Copy to clipboard"
SSH
git@tangled.org:breezykermo.tngl.sh/abartleby<br>git@tangled.org:did:plc:iy7uvtkole4fggi56hk3ih3l<br>getComputedStyle(s).display !== 'none').textContent)"<br>class="px-3 py-2 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200"<br>title="Copy to clipboard"
For self-hosted knots, clone URLs may differ based on your setup.
Download tar.gz
Download .zip
.abacus
2 hours ago
.beads
1 hour ago
src
1 hour ago
.env.example
2 hours ago
.envrc
1 hour ago
.gitignore
1 hour ago
Cargo.lock
1 hour ago
Cargo.toml
1 hour ago
README.md
50 minutes ago
flake.lock
1 hour ago
flake.nix
1 hour ago
Commits<br>13
:nail_care: readme
c0e21549
breezykermo.tngl.sh
48 minutes ago
main
:lipstick: readme
c3e52eef
breezykermo.tngl.sh
53 minutes ago
-> abartleby
a964aa21
breezykermo.tngl.sh
58 minutes ago
Allow --local-always for watch
e6651e79
breezykermo.tngl.sh
1 hour ago
Branches
main
48 minutes ago
Default
README.md
abartleby#
Melville's Bartleby answered every request with "I would prefer not to," and<br>the visa bureaucracy, ever faithful to his spirit, has been doing the same ever<br>since. abartleby is that clerk's deviant subspecies. The name starts with the<br>German Abart — an aberration, an anomalous mutation — and its adjective<br>abartig, deviant and abnormal and atrocious (just the sort of imp a visa<br>office would love to swat off its portal). Meanwhile, the Irish Abarta is the<br>trickster who offers himself as a servant while quietly serving his own agenda,<br>and Abhartach, from the same mythic tradition, is the one who refuses to stay<br>dead.
abartleby is a small CLI tool that watches the authenticated<br>appointment-schedule page on ais.usvisa-info.com and pings you by desktop<br>notification and Discord webhook the second a slot opens up. Where the clerk<br>prefers not to, this one prefers to. It just keeps checking the page, no<br>complaints, as many times as you want, for as long as the bureaucracy keeps<br>stonewalling you. Sorry, Bartleby.
This is a read-only diagnostic monitor . It tells you a slot opened; that is<br>where its ambition ends. It never books, reschedules, cancels, or clicks<br>anything on the site for you — it would prefer not to. You do the booking<br>yourself, by hand, once alerted.
The problem it solves#
US visa appointment slots — particularly for exchange-visitor (J1) and other<br>non-immigrant visa classes at consulates with heavy backlogs — open up<br>unpredictably and get taken within seconds. Refreshing the schedule page by hand<br>every few minutes, all day, for weeks, is the kind of penance that turns<br>otherwise reasonable people into Bartlebys of their own: staring at a wall,<br>preferring not to. Someone should do the refreshing who has no soul to grind<br>down.
That someone is abartleby. It automates only the checking part: it signs in<br>with your own credentials, reads the schedule page, parses the per-consulate<br>earliest-date table, and pings you the instant availability changes. See the<br>original problem description<br>for the full backstory.
What it does#
check — runs a single poll: signs in, reads the schedule page, parses<br>availability, compares against the last seen state, and notifies on change.<br>Exit code 10 means slots are currently available; 0 means none; 1 is an<br>error. (Yes, 10 for the good news — the bureaucracy has never once given you<br>a straight answer either.)
watch — polls tirelessly at a clamped interval (minimum 5 minutes, default<br>10m, with up to 60s of jitter so it doesn't tick like a metronome and give<br>itself away). It shrugs off individual cycle failures and keeps going; if five<br>cycles fail in a row it stops sulking quietly and sends a Discord warning.
The notification body contains only the list of consulates and their earliest<br>available dates, plus a link to the schedule page. Nothing else — no small talk,<br>no sales pitch, no "I would prefer not to."
Why it is safe (no accidental side effects)#
For all its scheming, the trickster keeps his hands where you can see them. The<br>only HTTP requests the tool ever makes are:
Endpoint<br>Method<br>Purpose
/users/sign_in<br>GET<br>fetch the login page and its CSRF token
/users/sign_in<br>POST<br>authenticate (the login form you would submit by...