[{"data":1,"prerenderedAt":522},["ShallowReactive",2],{"docs-navigation-flat":3,"\u002Fdocs\u002Finternals\u002Fboolean-search":71,"\u002Fdocs\u002Finternals\u002Fboolean-search-surround":519},[4,17,53],{"title":5,"path":6,"stem":7,"children":8,"icon":11},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Quick start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","docs\u002F1.getting-started\u002F2.quick-start","i-lucide-zap",{"title":18,"path":19,"stem":20,"children":21,"page":52},"Product","\u002Fdocs\u002Fproduct","docs\u002F2.product",[22,27,32,37,42,47],{"title":23,"path":24,"stem":25,"icon":26},"Workspaces","\u002Fdocs\u002Fproduct\u002Fworkspaces","docs\u002F2.product\u002F1.workspaces","i-lucide-users",{"title":28,"path":29,"stem":30,"icon":31},"Searches and stages","\u002Fdocs\u002Fproduct\u002Fsearches-and-stages","docs\u002F2.product\u002F2.searches-and-stages","i-lucide-git-branch",{"title":33,"path":34,"stem":35,"icon":36},"LinkedIn extension","\u002Fdocs\u002Fproduct\u002Flinkedin-extension","docs\u002F2.product\u002F3.linkedin-extension","i-lucide-panel-right",{"title":38,"path":39,"stem":40,"icon":41},"Dashboard","\u002Fdocs\u002Fproduct\u002Fdashboard","docs\u002F2.product\u002F4.dashboard","i-lucide-layout-dashboard",{"title":43,"path":44,"stem":45,"icon":46},"Billing","\u002Fdocs\u002Fproduct\u002Fbilling","docs\u002F2.product\u002F5.billing","i-lucide-credit-card",{"title":48,"path":49,"stem":50,"icon":51},"Boolean search","\u002Fdocs\u002Fproduct\u002Fboolean-search","docs\u002F2.product\u002F6.boolean-search","i-lucide-binary",false,{"title":54,"path":55,"stem":56,"children":57,"page":52},"Internals","\u002Fdocs\u002Finternals","docs\u002F3.internals",[58,63,68],{"title":59,"path":60,"stem":61,"icon":62},"App map","\u002Fdocs\u002Finternals\u002Fapp-map","docs\u002F3.internals\u002F1.app-map","i-lucide-map",{"title":64,"path":65,"stem":66,"icon":67},"Extension","\u002Fdocs\u002Finternals\u002Fextension","docs\u002F3.internals\u002F2.extension","i-lucide-puzzle",{"title":48,"path":69,"stem":70,"icon":51},"\u002Fdocs\u002Finternals\u002Fboolean-search","docs\u002F3.internals\u002F3.boolean-search",{"id":72,"title":48,"body":73,"description":512,"extension":513,"links":514,"meta":515,"navigation":516,"path":69,"seo":517,"stem":70,"__hash__":518},"docs\u002Fdocs\u002F3.internals\u002F3.boolean-search.md",{"type":74,"value":75,"toc":496},"minimark",[76,85,90,93,116,128,134,138,270,274,297,329,336,340,347,391,397,404,451,465,469,493],[77,78,81],"callout",{"color":79,"icon":80},"warning","i-lucide-construction",[82,83,84],"p",{},"Living notes for builders. Product UX may still change.",[86,87,89],"h2",{"id":88},"purpose","Purpose",[82,91,92],{},"Chip-based builder that turns titles \u002F must-have \u002F nice-to-have \u002F locations \u002F exclude into:",[94,95,96,105],"ul",{},[97,98,99,100,104],"li",{},"a ",[101,102,103],"strong",{},"LinkedIn"," Boolean string",[97,106,99,107,110,111,115],{},[101,108,109],{},"Google X-ray"," string (",[112,113,114],"code",{},"site:linkedin.com\u002Fin"," …)",[82,117,118,119,123,124,127],{},"No operators to memorize. X-ray output is meant to be pasted into Google Search; the ",[120,121,122],"a",{"href":65},"Chrome extension"," then lists visible ",[112,125,126],{},"\u002Fin\u002F"," profiles on the SERP.",[82,129,130,131,133],{},"Product overview: ",[120,132,48],{"href":49},".",[86,135,137],{"id":136},"code-map","Code map",[139,140,141,154],"table",{},[142,143,144],"thead",{},[145,146,147,151],"tr",{},[148,149,150],"th",{},"Piece",[148,152,153],{},"Path",[155,156,157,173,183,197,210,223,233,247,260],"tbody",{},[145,158,159,163],{},[160,161,162],"td",{},"Pure generator + normalize\u002Fquote",[160,164,165,168,169,172],{},[112,166,167],{},"shared\u002Fboolean\u002Fgenerate.ts"," (+ ",[112,170,171],{},"generate.test.ts",")",[145,174,175,178],{},[160,176,177],{},"Builder UI",[160,179,180],{},[112,181,182],{},"app\u002Fcomponents\u002Fboolean\u002FBooleanBuilder.vue",[145,184,185,188],{},[160,186,187],{},"Public page (guest local history)",[160,189,190,193,194],{},[112,191,192],{},"app\u002Fpages\u002Fboolean.vue"," → ",[112,195,196],{},"\u002Fboolean",[145,198,199,202],{},[160,200,201],{},"Dashboard generator",[160,203,204,193,207],{},[112,205,206],{},"app\u002Fpages\u002Fapp\u002Fboolean\u002Findex.vue",[112,208,209],{},"\u002Fapp\u002Fboolean",[145,211,212,215],{},[160,213,214],{},"Dashboard history (Profiles-style table)",[160,216,217,193,220],{},[112,218,219],{},"app\u002Fpages\u002Fapp\u002Fboolean\u002Fhistory.vue",[112,221,222],{},"\u002Fapp\u002Fboolean\u002Fhistory",[145,224,225,228],{},[160,226,227],{},"Workspace CRUD composable",[160,229,230],{},[112,231,232],{},"app\u002Fcomposables\u002FuseBooleanSearches.ts",[145,234,235,242],{},[160,236,237,238,241],{},"Guest ",[112,239,240],{},"localStorage"," history",[160,243,244],{},[112,245,246],{},"app\u002Fcomposables\u002FuseLocalBooleanSearches.ts",[145,248,249,252],{},[160,250,251],{},"Table + RLS",[160,253,254,168,257,172],{},[112,255,256],{},"supabase\u002Fmigrations\u002F20260814120000_boolean_searches.sql",[112,258,259],{},"20260816120000_boolean_searches_always_writable.sql",[145,261,262,265],{},[160,263,264],{},"pgTAP",[160,266,267],{},[112,268,269],{},"supabase\u002Ftests\u002Fdatabase\u002F08_boolean_searches.test.sql",[86,271,273],{"id":272},"generator-contract","Generator contract",[82,275,276,279,280,283,284,283,287,283,290,283,293,296],{},[112,277,278],{},"BooleanInput",": ",[112,281,282],{},"titles",", ",[112,285,286],{},"mustHave",[112,288,289],{},"niceToHave",[112,291,292],{},"locations",[112,294,295],{},"exclude"," (string arrays).",[82,298,299,302,303,306,307,310,311,314,315,283,318,283,321,324,325,328],{},[112,300,301],{},"generateBoolean(input)"," returns normalized ",[112,304,305],{},"input"," plus ",[112,308,309],{},"linkedin"," and ",[112,312,313],{},"xray"," strings. Defaults seed exclude with noise terms (",[112,316,317],{},"recruiter",[112,319,320],{},"intern",[112,322,323],{},"staffing","). LinkedIn strings soft-warn around ~900 characters (",[112,326,327],{},"LINKEDIN_WARN_CHARS",").",[82,330,331,332,335],{},"Keep generation in ",[112,333,334],{},"shared\u002F"," so web and tests stay aligned; do not duplicate quote\u002Fnormalize rules in Vue components.",[86,337,339],{"id":338},"persistence","Persistence",[341,342,344,345,172],"h3",{"id":343},"guests-boolean","Guests (",[112,346,196],{},[94,348,349,358,376,382],{},[97,350,351,352,354,355],{},"History in ",[112,353,240],{}," key ",[112,356,357],{},"modri:boolean-searches",[97,359,360,363,364,367,368,371,372,375],{},[101,361,362],{},"Save to workspace"," writes a pending draft to ",[112,365,366],{},"sessionStorage"," (",[112,369,370],{},"modri:boolean-pending-draft",") and sends the user to ",[112,373,374],{},"\u002Fsignup?next=\u002Fapp\u002Fboolean"," (or login)",[97,377,378,379,381],{},"After auth, ",[112,380,209],{}," restores the draft, inserts once into workspace history, and clears the draft",[97,383,384,385,283,388],{},"Helpers: ",[112,386,387],{},"shared\u002Fboolean\u002FpendingDraft.ts",[112,389,390],{},"app\u002Fcomposables\u002FuseBooleanPendingDraft.ts",[341,392,394,395,172],{"id":393},"workspace-appboolean","Workspace (",[112,396,209],{},[82,398,399,400,403],{},"Table ",[112,401,402],{},"public.boolean_searches",":",[94,405,406,426,433,440],{},[97,407,408,283,411,283,414,283,417,419,420,283,423],{},[112,409,410],{},"workspace_id",[112,412,413],{},"created_by",[112,415,416],{},"title",[112,418,305],{}," (jsonb), ",[112,421,422],{},"linkedin_string",[112,424,425],{},"xray_string",[97,427,428,429,432],{},"Members can ",[101,430,431],{},"read"," all rows in the workspace",[97,434,435,436,439],{},"Authors can ",[101,437,438],{},"insert\u002Fupdate\u002Fdelete"," their own rows without a Team billing write gate",[97,441,442,443,446,447,450],{},"Forever free: Boolean history is exempt from ",[112,444,445],{},"workspace_can_write"," \u002F ",[112,448,449],{},"enforce_workspace_can_write"," (contacts and other Team surfaces stay gated)",[82,452,453,454,457,458,460,461,464],{},"UI supports scope ",[101,455,456],{},"Mine \u002F Team"," on ",[112,459,222],{},", restore into the generator via ",[112,462,463],{},"?restore=\u003Cid>",", copy LinkedIn or X-ray string, delete own rows.",[86,466,468],{"id":467},"loop-with-google-extension","Loop with Google extension",[470,471,472,480,487],"ol",{},[97,473,474,475,477,478,172],{},"Build \u002F restore a Boolean on ",[112,476,209],{}," (or public ",[112,479,196],{},[97,481,482,483,486],{},"Copy ",[101,484,485],{},"X-ray"," → open Google Search → run query",[97,488,489,490,492],{},"Extension Google content script scrapes visible ",[112,491,126],{}," links on the current page and shows status\u002Fposition from the active workspace",[82,494,495],{},"Do not scrape LinkedIn Search or upload SERP HTML — only visible Google results on the current page.",{"title":497,"searchDepth":498,"depth":499,"links":500},"",1,2,[501,502,503,504,511],{"id":88,"depth":499,"text":89},{"id":136,"depth":499,"text":137},{"id":272,"depth":499,"text":273},{"id":338,"depth":499,"text":339,"children":505},[506,509],{"id":343,"depth":507,"text":508},3,"Guests (\u002Fboolean)",{"id":393,"depth":507,"text":510},"Workspace (\u002Fapp\u002Fboolean)",{"id":467,"depth":499,"text":468},"Generator, public vs workspace history, and how X-ray ties to the Google extension.","md",null,{},{"icon":51},{"title":48,"description":512},"25b4YZPHD-EqZT78jARPdntIHB_UtjzGvIaiaaS2xZM",[520,514],{"title":64,"path":65,"stem":66,"description":521,"icon":67,"children":-1},"WXT Chrome extension — LinkedIn profile panel, Google SERP overlay, shared contact layer.",1786987724635]