№ thread
← Atelier
v1.0.0
Mapped
Mappedvanilla

writinglife.kobo.com

writinglife.kobo.com Thread. Authored by weaver-auto. License: open.

Claim this domain · earn 75% open bounty
Forever
Free updatesWhen the author ships a patch, your copy updates automatically. Yours to keep.
1-click
Drift reportsBroken? Hit the report button. Enough reports flag the Thread publicly and alert the author.
Live
Health scorePreflight pass rate shown on every card. You see the real uptime before buying.
Always
Pre-run haltweaver check runs before every recipe — drift detected means zero wasted clicks.
№ 02 — preflight

Drift detection.

These checks run before every recipe. Any failure halts execution and notifies you.

name
kind
probe
input_LogInModel_UserName
selector_exists
#LogInModel_UserName
input_LogInModel_Password
selector_exists
#LogInModel_Password
button_show_hide
button_text
show hide
button_continue
button_text
continue
button_reset_password
button_text
reset password
№ 05 — raw thread

The file.

This is what installs to ~/.webloom/threads/. No magic. Just JSON.

writinglife.kobo.com.thread.json3.8 KB
{
  "domain": "writinglife.kobo.com",
  "name": "writinglife.kobo.com Thread",
  "version": "1.0.0",
  "author": "weaver-auto",
  "license": "open",
  "created_at": 1779181355,
  "seed_url": "https://writinglife.kobo.com/",
  "anti_bot": {
    "verdict": "normal",
    "signals": [],
    "page": {
      "title": "Sign-in | Rakuten Kobo",
      "url": "https://authorize.kobo.com/signin?returnUrl=https%3a%2f%2foauthv2.kobo.com%2fconnect%2fauthorize%2fcallback%3fnonce%3d77af3694-61f4-4895-b2db-4374b56cbbcc%26code_challenge%3dKkN3vnn_zIODsf35e0pxrAoYyBSZpwNeOfWtZTX2UFU%26code_challenge_method%3dS256%26response_type%3dcode%26client_id%3dselfweb%26redirect_uri%3dhttps%253A%252F%252Fwritinglife.kobo.com%252Fredirect%26scope%3dopenid%2520kobo_profile%2520public_api_authenticated%2520public_api_anonymous%26state%3d9f9ovce8fi9e331et3rq6d0jcb",
      "bodyLen": 307,
      "interactiveCount": 41,
      "ready": "complete"
    }
  },
  "framework": {
    "frameworks": [],
    "raw": {
      "frameworks": [],
      "primary": "vanilla",
      "indicators": {
        "has_password_input": true,
        "has_file_input": false,
        "has_label_wrapped_file": false,
        "has_drop_zone": false,
        "iframe_count": 2
      },
      "page": {
        "title": "Sign-in | Rakuten Kobo",
        "url": "https://authorize.kobo.com/signin?returnUrl=https%3a%2f%2foauthv2.kobo.com%2fconnect%2fauthorize%2fcallback%3fnonce%3d77af3694-61f4-4895-b2db-4374b56cbbcc%26code_challenge%3dKkN3vnn_zIODsf35e0pxrAoYyBSZpwNeOfWtZTX2UFU%26code_challenge_method%3dS256%26response_type%3dcode%26client_id%3dselfweb%26redirect_uri%3dhttps%253A%252F%252Fwritinglife.kobo.com%252Fredirect%26scope%3dopenid%2520kobo_profile%2520public_api_authenticated%2520public_api_anonymous%26state%3d9f9ovce8fi9e331et3rq6d0jcb",
        "ready": "complete"
      }
    }
  },
  "fingerprints": {
    "body_class": "",
    "title": "Sign-in | Rakuten Kobo",
    "url": "https://authorize.kobo.com/signin?returnUrl=https%3a%2f%2foauthv2.kobo.com%2fconnect%2fauthorize%2fcallback%3fnonce%3d77af3694-61f4-4895-b2db-4374b56cbbcc%26code_challenge%3dKkN3vnn_zIODsf35e0pxrAoYyBSZpwNeOfWtZTX2UFU%26code_challenge_method%3dS256%26response_type%3dcode%26client_id%3dselfweb%26redirect_uri%3dhttps%253A%252F%252Fwritinglife.kobo.com%252Fredirect%26scope%3dopenid%2520kobo_profile%2520public_api_authenticated%2520public_api_anonymous%26state%3d9f9ovce8fi9e331et3rq6d0jcb",
    "a_declarative_count": 0,
    "a_button_count": 0,
    "forms_count": 2,
    "next_data": false,
    "nuxt": false,
    "react": false,
    "redux": false
  },
  "pacing": {
    "signals": {
      "cloudflare": false,
      "hcaptcha": true,
      "recaptcha": true,
      "akamai": false,
      "datadome": false,
      "kasada": false,
      "perimeter": false
    },
    "profile": "cautious"
  },
  "inputs": [
    {
      "tag": "input",
      "id": "LogInModel_UserName",
      "name": "LogInModel.UserName",
      "type": "text",
      "placeholder": "Email address",
      "aria_label": "Email address",
      "role": null,
      "content_editable": false,
      "fill_strategy": "fast_setter"
    },
    {
      "tag": "input",
      "id": "LogInModel_Password",
      "name": "LogInModel.Password",
      "type": "password",
      "placeholder": "Password",
      "aria_label": "Password",
      "role": null,
      "content_editable": false,
      "fill_strategy": "fast_setter"
    }
  ],
  "buttons": [
    {
      "tag": "button",
      "id": null,
      "text": "Show\n            Hide",
      "aria_label": "Password hidden",
      "click_strategy": "js_dispatch"
    },
    {
      "tag": "button",
      "id": null,
      "text": "Continue",
      "aria_label": null,
      "click_strategy": "js_dispatch"
    },
    {
      "tag": "button",
      "id": null,
      "text": "Reset Password",
      "aria_label": null,
      "click_strategy": "js_dispatch"
    }
  ],
  "priors": {
    "sources": [],
    "candidate_selectors": []
  },
  "preflight": [
    {
      "name": "input_LogInModel_UserName",
      "kind": "selector_exists",
      "probe": "#LogInModel_UserName",
      "expected": "input #LogInModel_UserName"
    },
    {
      "name": "input_LogInModel_Password",
      "kind": "selector_exists",
      "probe": "#LogInModel_Password",
      "expected": "input #LogInModel_Password"
    },
    {
      "name": "button_show_hide",
      "kind": "button_text",
      "probe": "show\n            hide",
      "expected": "button 'show\n            hide'"
    },
    {
      "name": "button_continue",
      "kind": "button_text",
      "probe": "continue",
      "expected": "button 'continue'"
    },
    {
      "name": "button_reset_password",
      "kind": "button_text",
      "probe": "reset password",
      "expected": "button 'reset password'"
    }
  ],
  "states": []
}