{"id":2637,"date":"2026-10-15T18:22:23","date_gmt":"2026-10-15T23:22:23","guid":{"rendered":"https:\/\/instabid.pro\/should-i-diy\/"},"modified":"2026-10-15T18:22:23","modified_gmt":"2026-10-15T23:22:23","slug":"should-i-diy","status":"publish","type":"page","link":"https:\/\/instabid.pro\/es\/should-i-diy\/","title":{"rendered":"Should I DIY?"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2637\" class=\"elementor elementor-2637\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4a5ab3ab e-con-full e-flex e-con e-parent\" data-id=\"4a5ab3ab\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3a8f082d elementor-widget elementor-widget-html\" data-id=\"3a8f082d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>window.IBDIY_SLOTS={\"_note\": \"Real InstaBid contractors with a recorded OK only. Empty = honest zero-state ships. Checked 2026-10-14 against the live signups feed (11 contractor accounts total, 0 qualify). Never add a fake, placeholder or example slot.\", \"areas\": {\"portland-or\": {\"label\": \"Portland, OR\", \"zip3\": [\"970\", \"971\", \"972\"], \"slots\": []}, \"sw-washington\": {\"label\": \"Vancouver, WA\", \"zip3\": [\"986\"], \"slots\": []}}};<\/script><style>\n#ibdiy{--bg:transparent;--surface:#0B1120;--surface-2:#101A2E;--line:#1C2942;\n--gold:#e3b53c;--gold-dim:rgba(227,181,60,.14);--green:#37d39b;--yellow:#f5c94f;--red:#f5837a;\n--text:#edeef4;--mut:#8d95ad;--head:'Geist',-apple-system,sans-serif;--body:'Geist',-apple-system,sans-serif;--mono:'Geist Mono',ui-monospace,monospace;\nmax-width:840px;margin:0 auto;padding:0 22px 40px;color:var(--text);font:17px\/1.6 var(--body)}\n#ibdiy h1,#ibdiy h2,#ibdiy h3{font-weight:700;letter-spacing:-.03em}\n#ibdiy .hero h2{font-size:clamp(32px,6vw,52px);line-height:1.06}\n#ibdiy .ic{display:grid;place-items:center}\n#ibdiy .ic svg{width:30px;height:30px;stroke:var(--gold);fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}\n#ibdiy .prog{margin:0 0 26px}\n#ibdiy .zero{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:20px 22px;margin:14px 0 6px}\n#ibdiy .zero b{display:block;font-size:17px;margin-bottom:6px}\n#ibdiy .zero a{color:var(--gold);font-weight:600;text-decoration:none}\n#ibdiy .endcta{margin:34px 0 8px;padding:26px 24px;border-radius:16px;text-align:center;\n background:linear-gradient(135deg,rgba(74,123,255,.16),rgba(74,123,255,.04)),var(--surface);border:1px solid rgba(74,123,255,.34)}\n#ibdiy .endcta h3{font-size:26px;margin:0 0 8px}#ibdiy .endcta p{color:var(--mut);margin:0 0 18px}\n#ibdiy .disc{color:var(--mut);font-size:14px;line-height:1.6;margin-top:30px}\n#ibdiy .btn{min-height:48px}\n:root{}\n#ibdiy, #ibdiy *{box-sizing:border-box;-webkit-tap-highlight-color:transparent}\n\n\n#ibdiy .wrap{max-width:840px;margin:0 auto;padding:0 20px}\n#ibdiy h1,#ibdiy h2,#ibdiy h3{font-family:var(--head);font-weight:400;letter-spacing:.02em;margin:0;line-height:1.02}\n#ibdiy .mono{font-family:var(--mono);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--mut)}\n\n#ibdiy \/* header *\/\n\n\n\n\n\n\n\/* progress *\/\n.prog{height:3px;background:var(--line);border-radius:99px;overflow:hidden;margin-top:16px}\n#ibdiy .prog i{display:block;height:100%;width:100%;background:var(--gold);transform:scaleX(0);transform-origin:left;transition:transform .45s cubic-bezier(.16,1,.3,1)}\n\n#ibdiy \/* hero *\/\n.hero{padding:54px 0 30px;text-align:center}\n#ibdiy .hero h1{font-size:clamp(44px,9vw,78px)}\n#ibdiy .hero h1 em{color:var(--gold);font-style:normal}\n#ibdiy .hero p{color:var(--mut);max-width:540px;margin:16px auto 0;font-size:17px}\n\n#ibdiy \/* steps *\/\n.step{display:none;padding:8px 0 60px;animation:fade .4s ease both}\n#ibdiy .step.on{display:block}\n#ibdiy @keyframes fade{from{opacity:0;transform:translateY(8px)}#ibdiy to{opacity:1;transform:none}#ibdiy }\n.eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--gold);margin-bottom:10px}\n#ibdiy .step h2{font-size:clamp(28px,5.4vw,40px);margin-bottom:8px}\n#ibdiy .sub{color:var(--mut);margin:0 0 26px}\n\n#ibdiy \/* project grid *\/\n.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px}\n@media(min-width:780px){#ibdiy #projects{grid-template-columns:repeat(5,1fr)}}\n#ibdiy .card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:18px;cursor:pointer;transition:border-color .2s,transform .2s,background .2s;display:flex;flex-direction:column;align-items:flex-start;gap:9px;text-align:left;font:inherit;color:inherit}\n#ibdiy .card:hover,#ibdiy .card:focus-visible{border-color:var(--gold);transform:translateY(-2px);outline:none}\n#ibdiy .card .ic{font-size:21px;line-height:1}\n#ibdiy .card b{font-family:var(--head);font-size:21px;font-weight:400;letter-spacing:.02em;display:block;line-height:1.06}\n#ibdiy .card span{color:var(--mut);font-size:12.5px;line-height:1.35}\n\n#ibdiy \/* questions *\/\n.q{margin-bottom:26px;padding-bottom:22px;border-bottom:1px solid var(--line)}\n#ibdiy .q:last-of-type{border-bottom:0}\n#ibdiy .q p{margin:0 0 12px;font-size:17px;font-weight:500}\n#ibdiy .opts{display:grid;gap:8px}\n#ibdiy .opt{display:flex;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--line);border-radius:11px;padding:13px 15px;cursor:pointer;transition:border-color .18s,background .18s;min-height:44px}\n#ibdiy .opt:hover{border-color:#3d3d3d}\n#ibdiy .opt input{position:absolute;opacity:0;pointer-events:none}\n#ibdiy .dot{width:17px;height:17px;border-radius:50%;border:1.5px solid #4a4a4a;flex:0 0 auto;position:relative;transition:border-color .18s}\n#ibdiy .opt.sel{border-color:var(--gold);background:var(--gold-dim)}\n#ibdiy .opt.sel .dot{border-color:var(--gold)}\n#ibdiy .opt.sel .dot:after{content:\"\";position:absolute;inset:3px;border-radius:50%;background:var(--gold)}\n\n#ibdiy \/* buttons *\/\n.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:var(--body);font-weight:700;font-size:15px;padding:15px 30px;border-radius:11px;border:0;cursor:pointer;min-height:48px;transition:transform .15s,opacity .2s;text-decoration:none}\n#ibdiy .btn:active{transform:scale(.985)}\n#ibdiy .btn-p{background:var(--gold);color:#161208}\n#ibdiy .btn-g{background:transparent;color:var(--text);box-shadow:inset 0 0 0 1px #3a3a3a}\n#ibdiy .btn[disabled]{opacity:.34;cursor:not-allowed}\n#ibdiy .row{display:flex;gap:10px;flex-wrap:wrap;margin-top:26px}\n\n#ibdiy \/* TV vs reality *\/\n.tv{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:6px 0 4px}\n#ibdiy @media(max-width:600px){.tv{grid-template-columns:1fr}#ibdiy }\n.tvc{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:20px}\n#ibdiy .tvc.real{border-color:rgba(200,169,110,.32)}\n#ibdiy .tvc h4{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--mut);margin:0 0 10px;font-weight:400}\n#ibdiy .tvc.real h4{color:var(--gold)}\n#ibdiy .tvc p{margin:0;font-size:15.5px;line-height:1.55}\n#ibdiy .tvc.tvside p{color:var(--mut);font-style:italic}\n\n#ibdiy \/* score *\/\n.scorewrap{text-align:center;padding:14px 0 6px}\n#ibdiy .ring{width:172px;height:172px;margin:0 auto 18px;position:relative}\n#ibdiy .ring svg{transform:rotate(-90deg);width:100%;height:100%}\n#ibdiy .ring circle{fill:none;stroke-width:9;stroke-linecap:round}\n#ibdiy .ring .bgc{stroke:var(--line)}\n#ibdiy .ring .fg{stroke-dasharray:465;stroke-dashoffset:465;transition:stroke-dashoffset 1.15s cubic-bezier(.16,1,.3,1)}\n#ibdiy .ring b{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-family:var(--head);font-size:56px}\n#ibdiy .verdict{font-family:var(--head);font-size:clamp(32px,6.5vw,46px);margin-bottom:6px}\n#ibdiy .vsub{color:var(--mut);max-width:520px;margin:0 auto 4px;font-size:16.5px}\n\n#ibdiy .panel{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:22px;margin-top:18px}\n#ibdiy .panel h3{font-size:21px;margin-bottom:12px;letter-spacing:.03em}\n#ibdiy .panel ul{margin:0;padding-left:19px}\n#ibdiy .panel li{margin-bottom:8px;color:#d4d4d4}\n#ibdiy .panel li:last-child{margin-bottom:0}\n#ibdiy .panel li b{color:var(--text)}\n\n#ibdiy \/* contractors *\/\n.pros{margin-top:26px}\n#ibdiy .zip{display:flex;gap:9px;margin:14px 0 18px;flex-wrap:wrap}\n#ibdiy .zip input{flex:1;min-width:150px;background:var(--surface);border:1px solid var(--line);border-radius:11px;padding:14px 16px;color:var(--text);font:15px var(--body);min-height:48px}\n#ibdiy .zip input:focus{outline:none;border-color:var(--gold)}\n#ibdiy .pcard{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:18px;margin-bottom:11px;display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap}\n#ibdiy .pcard .meta{flex:1;min-width:200px}\n#ibdiy .pcard h4{font-family:var(--head);font-size:23px;font-weight:400;margin:0 0 4px;letter-spacing:.02em}\n#ibdiy .stars{font-family:var(--mono);font-size:12.5px;color:var(--gold)}\n#ibdiy .stars span{color:var(--mut)}\n#ibdiy .badge{display:inline-block;font-family:var(--mono);font-size:10px;letter-spacing:.11em;text-transform:uppercase;color:var(--gold);border:1px solid rgba(200,169,110,.4);border-radius:99px;padding:3px 9px;margin:8px 0 6px}\n#ibdiy .tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}\n#ibdiy .tag{font-size:11.5px;color:var(--mut);background:var(--surface-2);border-radius:99px;padding:4px 10px}\n#ibdiy .asheard{text-align:center;font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--mut);margin-top:18px}\n\n\n\n#ibdiy .disc{color:#6a6a6a;font-size:12px;margin-top:10px;max-width:620px;margin-left:auto;margin-right:auto;line-height:1.5}\n#ibdiy @media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}\n#ibdiy h1,#ibdiy h2,#ibdiy h3,#ibdiy .verdict{font-family:var(--head);font-weight:700;letter-spacing:-.03em}\n#ibdiy .card b{font-weight:600}\n#ibdiy .card b{font-size:17px;letter-spacing:-.01em;line-height:1.25;overflow-wrap:anywhere}\n#ibdiy .hero h2 em{color:var(--gold);font-style:normal}\n#ibdiy .hero{padding:22px 0 26px}\n#ibdiy .card{min-width:0}\n#ibdiy .card b,#ibdiy .card span{white-space:normal;min-width:0}\n<\/style>\n<div id=\"ibdiy\" data-project=\"\">\n<div class=\"prog\"><i id=\"bar\"><\/i><\/div>\n\n  <!-- STEP 1 -->\n  <section class=\"step on\" id=\"s1\">\n    <div class=\"hero\">\n      <h2>Thirty minutes on TV.<br><em>How long in real life?<\/em><\/h2>\n    <\/div>\n    <div class=\"eyebrow\">Step 1 of 4 \u00b7 Pick your project<\/div>\n    <div class=\"grid\" id=\"projects\"><\/div>\n  <\/section>\n\n  <!-- STEP 2 -->\n  <section class=\"step\" id=\"s2\">\n    <div class=\"eyebrow\">Step 2 of 4 \u00b7 <span id=\"p2name\"><\/span><\/div>\n    <h2>A few honest questions.<\/h2>\n    <p class=\"sub\">Nobody's grading you. The more honest you are, the more useful the answer.<\/p>\n    <div id=\"questions\"><\/div>\n    <div class=\"row\">\n      <button class=\"btn btn-p\" id=\"toReality\" disabled>See the reality check \u2192<\/button>\n      <button class=\"btn btn-g\" data-back=\"1\">Back<\/button>\n    <\/div>\n  <\/section>\n\n  <!-- STEP 3 -->\n  <section class=\"step\" id=\"s3\">\n    <div class=\"eyebrow\">Step 3 of 4 \u00b7 The reality check<\/div>\n    <h2 id=\"p3name\"><\/h2>\n    <p class=\"sub\">What the show promised, and what the job actually is.<\/p>\n    <div class=\"tv\">\n      <div class=\"tvc tvside\"><h4>What you saw on TV<\/h4><p id=\"tvsaw\"><\/p><\/div>\n      <div class=\"tvc real\"><h4>The reality<\/h4><p id=\"tvreal\"><\/p><\/div>\n    <\/div>\n    <div class=\"row\">\n      <button class=\"btn btn-p\" id=\"toScore\">Get my score \u2192<\/button>\n      <button class=\"btn btn-g\" data-back=\"2\">Back<\/button>\n    <\/div>\n  <\/section>\n\n  <!-- STEP 4 -->\n  <section class=\"step\" id=\"s4\">\n    <div class=\"eyebrow\">Step 4 of 4 \u00b7 Your read<\/div>\n    <div class=\"scorewrap\">\n      <div class=\"ring\">\n        <svg viewBox=\"0 0 160 160\"><circle class=\"bgc\" cx=\"80\" cy=\"80\" r=\"74\"\/><circle class=\"fg\" id=\"ring\" cx=\"80\" cy=\"80\" r=\"74\"\/><\/svg>\n        <b id=\"scoreNum\">0<\/b>\n      <\/div>\n      <div class=\"verdict\" id=\"verdict\"><\/div>\n      <p class=\"vsub\" id=\"vsub\"><\/p>\n    <\/div>\n\n    <div class=\"panel\" id=\"notesPanel\">\n      <h3 id=\"notesTitle\">What this means for you<\/h3>\n      <ul id=\"notes\"><\/ul>\n    <\/div>\n\n    <div class=\"pros\" id=\"pros\">\n      <h2 style=\"font-size:28px;margin-bottom:6px\" id=\"prosTitle\">Contractors who do this every week<\/h2>\n      <div id=\"prolist\"><\/div>\n    <\/div>\n\n    <div class=\"endcta\">\n      <h3>Get a real bid in two minutes.<\/h3>\n      <p>Tell us about the job and get an itemized number, built from real local prices. Free, no phone call.<\/p>\n      <a class=\"btn btn-p\" id=\"bidcta\" href=\"\/quote\/\">Get my bid &rarr;<\/a>\n    <\/div>\n\n    <div class=\"row\">\n      <button class=\"btn btn-g\" id=\"restart\">Start over<\/button>\n    <\/div>\n  <\/section>\n<p class=\"disc\">This tool gives general guidance based on your answers. It is not a substitute for a licensed professional's assessment, and it does not cover electrical work. For anything involving your electrical system, call a licensed electrician. Permit requirements vary by jurisdiction; check locally before starting.<\/p>\n<\/div>\n<script>\n(function(){\n\"use strict\";\n\n\/* ---------- DATA ---------- *\/\nvar PROJECTS = {\n  bathroom:{name:\"Bathroom Renovation\",icon:\"<svg viewBox=\\\"0 0 24 24\\\" aria-hidden=\\\"true\\\"><path d=\\\"M4 12h16v3a4 4 0 0 1-4 4H8a4 4 0 0 1-4-4z\\\"\/><path d=\\\"M6 12V6a2 2 0 0 1 4 0\\\"\/><path d=\\\"M7 19l-1 2M17 19l1 2\\\"\/><\/svg>\",blurb:\"Tile, fixtures, the works\",\n    tv:\"Complete makeover in one weekend!\",\n    real:\"2\u20134 weeks minimum, permits required, expect to find water damage once the wall is open. Hired out, most run $15K\u201340K.\",\n    risk:[{q:\"Are you moving any plumbing?\",a:[[\"No \u2014 everything stays where it is\",100],[\"Maybe one fixture\",55],[\"Yes, changing the layout\",10]]},\n          {q:\"Do you need permits for this?\",a:[[\"No permits needed\",100],[\"Not sure yet\",50],[\"Yes, permits required\",20]]}],\n    tips:[\"Buy 15% more tile than the calculator says \u2014 cuts and breakage are real.\",\"Waterproof the shower pan properly. This is the one step that ruins the job if rushed.\",\"Have a second working bathroom, or a plan. Three weeks is a long time.\"],\n    warn:[\"Moving plumbing means opening walls and floors \u2014 budget and timeline both roughly double.\",\"Waterproofing failures show up six months later, behind finished tile.\"],\n    hire:[\"The waterproofing and shower pan\",\"Any plumbing relocation\",\"Permit-required work\"]},\n\n  kitchen:{name:\"Kitchen Remodel\",icon:\"<svg viewBox=\\\"0 0 24 24\\\" aria-hidden=\\\"true\\\"><rect x=\\\"4\\\" y=\\\"3\\\" width=\\\"16\\\" height=\\\"18\\\" rx=\\\"2\\\"\/><path d=\\\"M4 10h16M9 6.5h.01M12 6.5h.01M15 6.5h.01M9 14h6\\\"\/><\/svg>\",blurb:\"Cabinets, counters, appliances\",\n    tv:\"Gorgeous transformation in 48 hours!\",\n    real:\"6\u201312 weeks without a working kitchen. Electrical and plumbing permits. Hired out, most run $25K\u201380K.\",\n    risk:[{q:\"Is there gas work involved?\",a:[[\"No gas at all\",100],[\"Gas appliance stays put\",60],[\"Yes, moving or adding gas\",0]]},\n          {q:\"Custom or pre-fab cabinets?\",a:[[\"Pre-fab, stock sizes\",100],[\"Semi-custom\",55],[\"Fully custom\",25]]}],\n    tips:[\"Order cabinets before demo day. Lead times run 6\u201310 weeks and they set the whole schedule.\",\"Set up a temporary kitchen \u2014 microwave, kettle, a folding table. You'll be living there a while.\",\"Template countertops only after cabinets are installed and level.\"],\n    warn:[\"Gas work is not a DIY category. A leak is not a mistake you get to learn from.\",\"Custom cabinets are unforgiving \u2014 a half-inch out of level shows on every door.\"],\n    hire:[\"All gas work, without exception\",\"Countertop templating and install\",\"Any panel or circuit changes\"]},\n\n  deck:{name:\"Deck Building\",icon:\"<svg viewBox=\\\"0 0 24 24\\\" aria-hidden=\\\"true\\\"><path d=\\\"M3 10h18M3 14h18M5 10v10M19 10v10M12 10v10\\\"\/><path d=\\\"M5 10l3-5h8l3 5\\\"\/><\/svg>\",blurb:\"Framing, footings, railing\",\n    tv:\"Simple weekend project with basic tools!\",\n    real:\"Permits required. Elevated decks need engineered footings. Weather delays, HOA approval. Hired out, most run $8K\u201325K.\",\n    risk:[{q:\"Is any part more than 30 inches off the ground?\",a:[[\"Ground level\",100],[\"Slightly raised\",60],[\"Yes, well over 30 inches\",15]]},\n          {q:\"Does your HOA have to approve it?\",a:[[\"No HOA\",100],[\"Yes, already approved\",80],[\"Yes, not submitted yet\",40]]}],\n    tips:[\"Call 811 before you dig. Free, legally required, and it takes one phone call.\",\"Footing depth is set by your frost line \u2014 look up the local number, don't guess.\",\"Ledger flashing is what keeps water out of your rim joist. Do not skip it.\"],\n    warn:[\"Over 30 inches means guardrail codes, engineered footings, and a real inspection.\",\"A ledger board attached wrong is the single most common cause of deck collapse.\"],\n    hire:[\"Ledger attachment and flashing\",\"Engineered footings on elevated decks\",\"Anything the inspector has to sign off on\"]},\n\n  flooring:{name:\"Flooring Installation\",icon:\"<svg viewBox=\\\"0 0 24 24\\\" aria-hidden=\\\"true\\\"><rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"1.5\\\"\/><path d=\\\"M3 9h18M3 15h18M9 3v6M15 9v6M9 15v6\\\"\/><\/svg>\",blurb:\"LVP, laminate, hardwood\",\n    tv:\"Just click and lock \u2014 so easy!\",\n    real:\"Subfloor prep is 80% of the job. Moisture barriers, transition strips, acclimation time, and every piece of furniture in the house has to move.\",\n    risk:[{q:\"What shape is the subfloor in?\",a:[[\"Flat and solid\",100],[\"A few soft spots\",50],[\"Unknown or clearly uneven\",25]]},\n          {q:\"Are you removing existing tile?\",a:[[\"No, bare subfloor\",100],[\"Carpet or vinyl coming up\",75],[\"Yes, tile and thinset\",30]]}],\n    tips:[\"Let the flooring acclimate in the room for 48\u201372 hours before you lay a single plank.\",\"Flat beats level. Chase flatness within tolerance, don't chase perfectly level.\",\"Leave the expansion gap. Floors move. A tight floor buckles.\"],\n    warn:[\"Tile removal is the hardest, dirtiest, slowest part of any flooring job \u2014 plan days, not hours.\",\"Laying over an uneven subfloor telegraphs every dip and voids most warranties.\"],\n    hire:[\"Subfloor leveling and repair\",\"Tile and thinset demolition\",\"Moisture testing on concrete slabs\"]},\n\n  tile:{name:\"Tile\",icon:\"<svg viewBox=\\\"0 0 24 24\\\" aria-hidden=\\\"true\\\"><rect x=\\\"4\\\" y=\\\"4\\\" width=\\\"7\\\" height=\\\"7\\\" rx=\\\"1\\\"\/><rect x=\\\"13\\\" y=\\\"4\\\" width=\\\"7\\\" height=\\\"7\\\" rx=\\\"1\\\"\/><rect x=\\\"4\\\" y=\\\"13\\\" width=\\\"7\\\" height=\\\"7\\\" rx=\\\"1\\\"\/><rect x=\\\"13\\\" y=\\\"13\\\" width=\\\"7\\\" height=\\\"7\\\" rx=\\\"1\\\"\/><\/svg>\",blurb:\"Floors, backsplash, showers\",\n    tv:\"Stick it down, grout it, done by dinner!\",\n    real:\"Layout and a flat, solid base are most of the job. Showers add waterproofing, and that's where tile jobs fail.\",\n    risk:[{q:\"Where is the tile going?\",a:[[\"Backsplash or a small wall\",100],[\"A floor\",60],[\"A shower or tub surround\",15]]},\n          {q:\"What's under it?\",a:[[\"New, flat backer board or a solid slab\",100],[\"Old floor, not sure how flat\",50],[\"Old tile that has to come up first\",25]]}],\n    tips:[\"Dry-lay the first rows before you mix anything. Layout mistakes can't be fixed once the thinset sets.\",\"Check the floor with a long straightedge first. Big tile needs it flat within about 1\/8 inch over 10 feet.\",\"Mix thinset in small batches and back-butter big tiles so there are no hollow spots.\"],\n    warn:[\"Shower waterproofing failures show up months later, behind finished tile.\",\"Tile over a floor that flexes or isn't flat cracks, and the grout goes first.\"],\n    hire:[\"Shower pans and waterproofing\",\"Leveling an uneven subfloor\",\"Large tile on floors (bigger than 15 inches)\"]},\n  plumbing:{name:\"Plumbing Repairs\",icon:\"<svg viewBox=\\\"0 0 24 24\\\" aria-hidden=\\\"true\\\"><path d=\\\"M4 9h7a3 3 0 0 1 3 3v8\\\"\/><path d=\\\"M4 6v6M18 20h-8\\\"\/><path d=\\\"M14 4h4v4\\\"\/><\/svg>\",blurb:\"Fixtures, drains, supply lines\",\n    tv:\"Quick fix with a wrench!\",\n    real:\"Water damage risk is immediate and expensive. Permit requirements and code compliance apply. One wrong move turns a repair into an emergency.\",\n    risk:[{q:\"Main line, or a single fixture?\",a:[[\"One fixture\",100],[\"A branch line\",50],[\"Main line\",0]]},\n          {q:\"How old is the plumbing?\",a:[[\"Modern PEX or copper\",100],[\"Mixed \/ not sure\",55],[\"Older home, cast iron or galvanized\",20]]}],\n    tips:[\"Find the shutoff before you start. Test that it actually closes.\",\"Keep towels and a bucket within arm's reach \u2014 always.\",\"Replace supply lines with braided stainless. They're a few dollars and they don't split.\"],\n    warn:[\"Cast iron and galvanized pipe crack when disturbed. A simple swap becomes a repipe.\",\"Main line work is code-inspected in most jurisdictions and is not a DIY category.\"],\n    hire:[\"Anything on the main line\",\"Older cast iron or galvanized systems\",\"Any work that requires an inspection\"]},\n\n  roofing:{name:\"Roofing Repair\",icon:\"<svg viewBox=\\\"0 0 24 24\\\" aria-hidden=\\\"true\\\"><path d=\\\"M3 11 12 4l9 7\\\"\/><path d=\\\"M5 10v10h14V10\\\"\/><path d=\\\"M10 20v-6h4v6\\\"\/><\/svg>\",blurb:\"Shingles, flashing, leaks\",\n    tv:\"Slap some shingles on and you're done!\",\n    real:\"Fall hazard is the real risk. An improper repair can void your insurance. Expect to find deck rot. Full replacement needs permits.\",\n    risk:[{q:\"Patch, or full replacement?\",a:[[\"Small patch, a few shingles\",85],[\"A section\",45],[\"Full replacement\",0]]},\n          {q:\"How steep is the roof?\",a:[[\"Low, walkable\",90],[\"Moderate\",45],[\"Steep \u2014 hard to stand on\",0]]}],\n    tips:[\"Never work a roof alone, and never in wind or wet.\",\"Match the existing shingle exposure or the patch will telegraph from the street.\",\"Flashing is where leaks actually start \u2014 check it before you blame the shingles.\"],\n    warn:[\"Falls from roofs are the leading cause of serious injury in home improvement. This is not a pride thing.\",\"A DIY repair can void the roof warranty and complicate an insurance claim later.\"],\n    hire:[\"Any steep-pitch work\",\"Full replacements\",\"Anything involving flashing at a wall or chimney\"]},\n\n  painting:{name:\"Painting\",icon:\"<svg viewBox=\\\"0 0 24 24\\\" aria-hidden=\\\"true\\\"><rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"14\\\" height=\\\"6\\\" rx=\\\"1.5\\\"\/><path d=\\\"M17 6h3v5h-8v3\\\"\/><rect x=\\\"10\\\" y=\\\"14\\\" width=\\\"4\\\" height=\\\"7\\\" rx=\\\"1\\\"\/><\/svg>\",blurb:\"Interior or exterior\",\n    tv:\"Transform any room in a day!\",\n    real:\"Prep is 70% of the job \u2014 patching, sanding, taping, priming. Exterior work needs a real weather window.\",\n    risk:[{q:\"Interior or exterior?\",a:[[\"Interior\",100],[\"Exterior, single story\",60],[\"Exterior, two story or higher\",25]]},\n          {q:\"New surface or repaint?\",a:[[\"New construction \/ already primed\",95],[\"Repaint, decent condition\",75],[\"Repaint over damage or peeling\",40]]}],\n    tips:[\"Prep is the job. Painting is the easy part at the end.\",\"Cut in one wall at a time, then roll it while the edge is still wet.\",\"Two thin coats beat one thick coat every single time.\"],\n    warn:[\"Exterior above one story means ladder work \u2014 the risk goes up sharply.\",\"Peeling or damaged surfaces need scraping and priming or the new paint fails within a year.\"],\n    hire:[\"Two-story exterior work\",\"Anything on a home built before 1978 with peeling paint (lead)\",\"Spray finishes on cabinets or trim\"]},\n\n  drywall:{name:\"Drywall\",icon:\"<svg viewBox=\\\"0 0 24 24\\\" aria-hidden=\\\"true\\\"><rect x=\\\"4\\\" y=\\\"3\\\" width=\\\"10\\\" height=\\\"18\\\" rx=\\\"1\\\"\/><path d=\\\"M7 7h.01M11 7h.01M7 17h.01M11 17h.01\\\"\/><path d=\\\"M15 13l5-5 1 1-5 5z\\\"\/><\/svg>\",blurb:\"Patches, hanging, finishing\",\n    tv:\"Screw up a sheet, slap on mud, paint it!\",\n    real:\"Hanging goes fast. Taping and finishing so it doesn't show under paint takes several coats, drying time between each, and a practiced hand.\",\n    risk:[{q:\"How big is the job?\",a:[[\"A patch or two\",100],[\"One wall or a small room\",65],[\"Whole rooms or ceilings\",25]]},\n          {q:\"Any ceilings?\",a:[[\"No ceilings\",100],[\"One small ceiling\",50],[\"Yes, full ceilings\",15]]}],\n    tips:[\"Thin coats, feathered wide. Three thin coats beat one thick one.\",\"Shine a light low across the wall before you paint. It shows every ridge.\",\"Set screws just below the surface without tearing the paper.\"],\n    warn:[\"Ceiling sheets are heavy and awkward overhead. Without a drywall lift or a second person, it's a safety problem.\",\"Houses built before 1980 can have asbestos in the old mud and lead in the paint. Test before you sand or tear out.\"],\n    hire:[\"Ceilings\",\"Smooth walls that have to look perfect under bright light or glossy paint\",\"Any wall with wiring or plumbing to move\"]},\n  hvac:{name:\"HVAC Maintenance\",icon:\"<svg viewBox=\\\"0 0 24 24\\\" aria-hidden=\\\"true\\\"><path d=\\\"M12 3v18M4.2 7.5l15.6 9M4.2 16.5l15.6-9\\\"\/><\/svg>\",blurb:\"Filters and upkeep\",\n    tv:\"Just swap the filter!\",\n    real:\"Filters genuinely are DIY-friendly. But anything past that \u2014 refrigerant, electrical, ductwork \u2014 needs a licensed tech.\",\n    risk:[{q:\"Filter change, or more than that?\",a:[[\"Filter change only\",100],[\"Filter plus a cleaning\",70],[\"Something isn't working right\",10]]},\n          {q:\"How old is the system?\",a:[[\"Under 10 years\",90],[\"10\u201315 years\",60],[\"Over 15 years\",35]]}],\n    tips:[\"Write the date on the new filter with a marker. You will not remember.\",\"Check the arrow \u2014 filters are directional and a backwards one restricts airflow.\",\"Keep two feet clear around the outdoor unit.\"],\n    warn:[\"Refrigerant handling is federally regulated and requires certification.\",\"If the system isn't performing, that's a diagnosis job, not a parts job.\"],\n    hire:[\"Anything involving refrigerant\",\"Electrical at the unit or panel\",\"Ductwork changes and system diagnosis\"]}\n};\n\n\/* ============================================================================\n   SCORING WEIGHTS \u2014 LOCKED. v1, set 2026-08-03.\n\n   \u26a0\ufe0f  These weights decide whether a homeowner is told GREEN or RED.\n       RED outcomes are the moment contractor listings get shown.\n       That means anyone with a revenue interest has a reason \u2014 never a\n       decision, just a drift \u2014 to nudge these toward RED, one\n       let's-be-safe-about-ladders edit at a time.\n\n   THE RULE: these are never changed by anyone with a revenue incentive.\n   \"It converts better\" is NOT a valid reason to change a weight. Ever.\n   Change them only for accuracy, version the change, and say why below.\n\n   CHANGE LOG\n   v1 \u00b7 2026-08-03 \u00b7 initial, from the approved spec.\n   v2 \u00b7 2026-10-16 \u00b7 ACCURACY fix (Deuce; John 10\/16 \"make that decision\"). v1 weights summed to 1.20 (the\n        tolerance question borrowed WEIGHTS.risk), so the project-danger answers sat on top of a full 100% and were\n        capped away: an \"expert\" got \"Go for it\" on a main-line cast-iron repipe or a steep full re-roof. v2 sums to\n        1.00, gives project danger 30%, and any danger answer scored 0 (main line, full replacement, steep roof,\n        refrigerant\u2026) caps the result at 45 = \"Call a professional\". Not a conversion change: interior painting by an\n        experienced homeowner still lands on \"Go for it\". QA: should-i-diy\/qa-2026-10-16\/QA-RUN.txt.\n   ============================================================================ *\/\nvar WEIGHTS = Object.freeze({ exp:.25, tools:.15, time:.10, budget:.10, tol:.10, risk:.30 });\n\nvar UNIVERSAL = [\n  {k:\"exp\",w:WEIGHTS.exp,q:\"What's your experience level with this kind of work?\",\n   a:[[\"Never done anything like it\",10],[\"I've watched a lot of videos\",35],[\"Some real experience\",70],[\"Very experienced\",100]]},\n  {k:\"tools\",w:WEIGHTS.tools,q:\"Do you own the tools this needs?\",\n   a:[[\"None of them\",10],[\"Basic hand tools\",40],[\"Most of what's needed\",75],[\"Professional grade\",100]]},\n  {k:\"time\",w:WEIGHTS.time,q:\"Honestly, how much time do you have?\",\n   a:[[\"One weekend\",20],[\"One to two weeks\",55],[\"A month or more\",85],[\"No deadline at all\",100]]},\n  {k:\"budget\",w:WEIGHTS.budget,q:\"What's your budget range?\",\n   a:[[\"$500 \u2013 $1K\",25],[\"$1K \u2013 $5K\",55],[\"$5K \u2013 $15K\",80],[\"$15K+\",100]]},\n  {k:\"tol\",w:WEIGHTS.tol,q:\"What's your tolerance for imperfection?\",\n   a:[[\"It has to be perfect\",25],[\"Some imperfection is fine\",70],[\"This is a learning experience\",90],[\"It just needs to work\",100]]}\n];\n\nvar SLOTS = window.IBDIY_SLOTS || {areas:{}};\n\n\/* ---------- STATE ---------- *\/\nvar state={project:null,answers:{},risk:{}};\nvar countTimer=null;\nvar $=function(s){return document.querySelector(s)};\nvar steps=[\"s1\",\"s2\",\"s3\",\"s4\"], cur=0;\n\nfunction ev(n,p){ try{ if(window.gtag) window.gtag(\"event\",n,p||{}); }catch(e){} }\nfunction go(i){\n  cur=i;\n  for(var n=0;n<steps.length;n++){ $(\"#\"+steps[n]).classList.toggle(\"on\",n===i); }\n  $(\"#bar\").style.transform=\"scaleX(\"+((i+1)\/steps.length)+\")\";\n  var r=document.getElementById(\"ibdiy\"); if(r) window.scrollTo({top:Math.max(0,r.getBoundingClientRect().top+window.scrollY-90),behavior:\"smooth\"});\n}\n\n\/* ---------- STEP 1 ---------- *\/\nvar g=$(\"#projects\");\nObject.keys(PROJECTS).forEach(function(key){\n  var p=PROJECTS[key];\n  var d=document.createElement(\"button\");\n  d.className=\"card\"; d.type=\"button\";\n  d.innerHTML='<div class=\"ic\">'+p.icon+'<\/div><b>'+p.name+'<\/b><span>'+p.blurb+'<\/span>';\n  d.addEventListener(\"click\",function(){ state.project=key; state.answers={}; state.risk={}; ev(\"diy_project_selected\",{project:key}); buildQuestions(key); go(1); });\n  g.appendChild(d);\n});\n\n\/* ---------- STEP 2 ---------- *\/\nfunction buildQuestions(key){\n  var p=PROJECTS[key];\n  $(\"#p2name\").textContent=p.name;\n  var box=$(\"#questions\"); box.innerHTML=\"\";\n  var all=UNIVERSAL.map(function(u){return{type:\"u\",k:u.k,q:u.q,a:u.a}})\n    .concat(p.risk.map(function(r,i){return{type:\"r\",k:\"r\"+i,q:r.q,a:r.a}}));\n\n  all.forEach(function(item){\n    var wrap=document.createElement(\"div\"); wrap.className=\"q\";\n    var lbl=document.createElement(\"p\"); lbl.textContent=item.q; wrap.appendChild(lbl);\n    var opts=document.createElement(\"div\"); opts.className=\"opts\";\n    item.a.forEach(function(pair){\n      var id=item.k+\"_\"+pair[1]+\"_\"+Math.random().toString(36).slice(2,7);\n      var l=document.createElement(\"label\"); l.className=\"opt\"; l.setAttribute(\"for\",id);\n      l.innerHTML='<input type=\"radio\" name=\"'+item.k+'\" id=\"'+id+'\"><span class=\"dot\"><\/span><span>'+pair[0]+'<\/span>';\n      l.addEventListener(\"click\",function(){\n        var sibs=opts.querySelectorAll(\".opt\");\n        for(var i=0;i<sibs.length;i++) sibs[i].classList.remove(\"sel\");\n        l.classList.add(\"sel\");\n        (item.type===\"u\"?state.answers:state.risk)[item.k]=pair[1];\n        checkDone(all.length);\n      });\n      opts.appendChild(l);\n    });\n    wrap.appendChild(opts); box.appendChild(wrap);\n  });\n  checkDone(all.length);\n}\nfunction checkDone(total){\n  var n=Object.keys(state.answers).length+Object.keys(state.risk).length;\n  $(\"#toReality\").disabled = n<total;\n}\n\n\/* ---------- STEP 3 ---------- *\/\n$(\"#toReality\").addEventListener(\"click\",function(){\n  var p=PROJECTS[state.project];\n  $(\"#p3name\").textContent=p.name;\n  $(\"#tvsaw\").textContent='\"'+p.tv+'\"';\n  $(\"#tvreal\").textContent=p.real;\n  go(2);\n});\n\n\/* ---------- SCORING ----------\n   experience 30% \u00b7 tools 20% \u00b7 time 15% \u00b7 budget 15% \u00b7 project risk 20% *\/\nfunction computeScore(){\n  var s=0;\n  UNIVERSAL.forEach(function(u){ s += (state.answers[u.k]||0) * u.w; });\n  var rk=Object.keys(state.risk), rsum=0;\n  rk.forEach(function(k){ rsum += state.risk[k]; });\n  var ravg = rk.length ? rsum\/rk.length : 0;\n  s += ravg * WEIGHTS.risk;\n  if(rk.some(function(k){ return state.risk[k]===0; })) s=Math.min(s,45);\n  return Math.max(0,Math.min(100,Math.round(s)));\n}\n\n$(\"#toScore\").addEventListener(\"click\",function(){\n  var p=PROJECTS[state.project], score=computeScore();\n  var band = score>=80?\"green\" : score>=50?\"yellow\" : \"red\";\n  var col  = band===\"green\"?\"var(--green)\" : band===\"yellow\"?\"var(--yellow)\" : \"var(--red)\";\n\n  $(\"#verdict\").textContent = band===\"green\" ? \"Go for it.\" : band===\"yellow\" ? \"Proceed with caution.\" : \"Call a professional.\";\n  $(\"#verdict\").style.color = col;\n  $(\"#vsub\").textContent =\n    band===\"green\" ? \"This project matches your skills and your situation. You've got this \u2014 pros are below if you change your mind.\" :\n    band===\"yellow\"? \"This is doable, but it has real risks worth knowing before you start.\" :\n                     \"This one's beyond typical DIY scope \u2014 and that's completely okay. That's why professionals exist.\";\n\n  var notes=$(\"#notes\"); notes.innerHTML=\"\";\n  $(\"#notesTitle\").textContent = band===\"green\" ? \"How to do it right\" : band===\"yellow\" ? \"What to watch for\" : \"Why this one's worth handing off\";\n  var list = band===\"green\" ? p.tips : p.warn.concat([\"Worth hiring out: \"+p.hire.join(\" \u00b7 \")]);\n  list.forEach(function(t){ var li=document.createElement(\"li\"); li.innerHTML=t; notes.appendChild(li); });\n\n  $(\"#prosTitle\").textContent = band===\"green\" ? \"If you'd rather hand it off\" : \"Contractors who do this every week\";\n  $(\"#pros\").style.opacity = band===\"green\" ? \".82\" : \"1\";\n\n  var pl=$(\"#prolist\"); pl.innerHTML=\"\";\n  \/* Honest slots only: a card renders ONLY with consent.on AND a bid_url. Today every area has 0 slots,\n     so everyone sees the zero-state. Never a fake, placeholder or example contractor. *\/\n  var real=[]; Object.keys(SLOTS.areas||{}).forEach(function(k){ (SLOTS.areas[k].slots||[]).forEach(function(s){\n    if(s && s.consent && s.consent.on && s.bid_url && s.name) real.push(s); }); });\n  real.slice(0,5).forEach(function(s){\n    var d=document.createElement(\"div\"); d.className=\"pcard\";\n    d.innerHTML='<div class=\"meta\"><h4><\/h4><\/div><a class=\"btn btn-p\" rel=\"sponsored\">Get a bid<\/a>';\n    d.querySelector(\"h4\").textContent=s.name; d.querySelector(\"a\").href=s.bid_url; pl.appendChild(d); });\n  if(!real.length){ var z=document.createElement(\"div\"); z.className=\"zero\";\n    z.innerHTML='<b>No InstaBid contractors listed near you yet.<\/b><a id=\"getlisted\" href=\"\/pricing\/\">Are you a contractor? Get listed &rarr;<\/a>';\n    pl.appendChild(z);\n    z.querySelector(\"#getlisted\").addEventListener(\"click\",function(){ ev(\"diy_get_listed_click\",{project:state.project}); }); }\n  ev(\"diy_result\",{project:state.project,band:band,score:score});\n\n  go(3);\n  $(\"#ring\").style.stroke=col;\n  var n=0, target=score;\n  if(countTimer){ clearInterval(countTimer); countTimer=null; }   \/* kill any count-up still running from a previous result \u2014 two timers on one element race and land on the wrong number *\/\n  setTimeout(function(){\n    $(\"#ring\").style.strokeDashoffset = 465 - (465*score\/100);\n    countTimer=setInterval(function(){\n      n += Math.max(1,Math.round(target\/28));\n      if(n>=target){ n=target; clearInterval(countTimer); countTimer=null; }\n      $(\"#scoreNum\").textContent=n;\n    },28);\n  },140);\n});\n\n\/* ---------- misc ---------- *\/\ndocument.addEventListener(\"click\",function(e){\n  var b=e.target.closest(\"[data-back]\");\n  if(b) go(parseInt(b.getAttribute(\"data-back\"),10)-1);\n});\n$(\"#restart\").addEventListener(\"click\",function(){\n  if(countTimer){ clearInterval(countTimer); countTimer=null; }\n  state={project:null,answers:{},risk:{}};\n  $(\"#ring\").style.strokeDashoffset=465; $(\"#scoreNum\").textContent=\"0\";\n  go(0);\n});\n$(\"#bar\").style.transform=\"scaleX(.25)\";\n$(\"#bidcta\").addEventListener(\"click\",function(){ ev(\"diy_bid_click\",{project:state.project}); });\nvar pre=(document.getElementById(\"ibdiy\").dataset.project||\"\"); if(pre && PROJECTS[pre]){ var c=[].slice.call(document.querySelectorAll(\"#projects .card\"))[Object.keys(PROJECTS).indexOf(pre)]; if(c) c.click(); }\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":0,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2637","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/instabid.pro\/es\/wp-json\/wp\/v2\/pages\/2637","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/instabid.pro\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/instabid.pro\/es\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/instabid.pro\/es\/wp-json\/wp\/v2\/comments?post=2637"}],"version-history":[{"count":0,"href":"https:\/\/instabid.pro\/es\/wp-json\/wp\/v2\/pages\/2637\/revisions"}],"wp:attachment":[{"href":"https:\/\/instabid.pro\/es\/wp-json\/wp\/v2\/media?parent=2637"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}