PageSourceSearch

https://www.bluetideexteriors.com/about

html bluetideexteriors.com collected 2026-10-08 19:35:52 UTC 67,714 bytes, 572 lines download raw bytes

1<!DOCTYPE html><html lang="en"><head>
1<script>window.__hfAuthOrigin="https://auth.higgsfield.app";// Notifications only: browser permissions and iframe policies enforce access.
2(function () {
3  try {
4    if (window.__hfAccessPatched || window.parent === window) return;
5    window.__hfAccessPatched = true;
6    var viewerOrigin = null;
7    var pending = [];
8    var reported = {};
9    function flush() {
10      if (!viewerOrigin || !pending.length) return;
11      window.parent.postMessage({
12        source: "hf-app-permissions",
13        type: "permission-request",
14        capabilities: pending.slice()
15      }, viewerOrigin);
16      pending = [];
17    }
18    function report(capabilities) {
19      capabilities.forEach(function (capability) {
20        if (!reported[capability]) {
21          reported[capability] = true;
22          pending.push(capability);
23        }
24      });
25      flush();
26    }
27    window.addEventListener("message", function (event) {
28      if (event.source !== window.parent || !/^https?:\/\//.test(event.origin)) return;
29      if (!event.data || event.data.source !== "hf-app-permissions" || event.data.type !== "init") return;
30      viewerOrigin = event.origin;
31      try { flush(); } catch (error) { /* Delivery is best-effort. */ }
32    });
33    function wrap(owner, method, capabilities) {
34      // One unavailable or read-only API must not prevent other wrappers installing.
35      try {
36        if (!owner || typeof owner[method] !== "function") return;
37        var original = owner[method];
38        owner[method] = function () {
39          try {
40            report(typeof capabilities === "function" ? capabilities(arguments) : capabilities);
41          } catch (error) { /* Preserve native results even if reporting fails. */ }
42          return original.apply(this, arguments);
43        };
44      } catch (error) { /* Some browsers expose non-writable methods. */ }
45    }
46    function mediaCapabilities(args) {
47      var constraints = args[0];
48      var capabilities = [];
49      if (constraints && constraints.video) capabilities.push("camera");
50      if (constraints && constraints.audio) capabilities.push("microphone");
51      return capabilities;
52    }
53    wrap(navigator.mediaDevices, "getUserMedia", mediaCapabilities);
54    ["getUserMedia", "webkitGetUserMedia", "mozGetUserMedia"].forEach(function (method) {
55      wrap(navigator, method, mediaCapabilities);
56    });
57    wrap(navigator.mediaDevices, "getDisplayMedia", ["screen"]);
58    wrap(navigator.mediaDevices, "enumerateDevices", ["media-devices"]);
59    wrap(navigator.mediaDevices, "selectAudioOutput", ["speakers"]);
60    ["getCurrentPosition", "watchPosition"].forEach(function (method) {
61      wrap(navigator.geolocation, method, ["location"]);
62    });
63    ["read", "readText"].forEach(function (method) {
64      wrap(navigator.clipboard, method, ["clipboard-read"]);
65    });
66    ["write", "writeText"].forEach(function (method) {
67      wrap(navigator.clipboard, method, ["clipboard-write"]);
68    });
69    wrap(window.Notification, "requestPermission", ["notifications"]);
70    wrap(window.PushManager && window.PushManager.prototype, "subscribe", ["notifications"]);
71    wrap(navigator.bluetooth, "requestDevice", ["bluetooth"]);
72    wrap(navigator.usb, "requestDevice", ["usb"]);
73    wrap(navigator.serial, "requestPort", ["serial"]);
74    wrap(navigator.hid, "requestDevice", ["hid"]);
75    wrap(navigator, "requestMIDIAccess", ["midi"]);
76    ["showOpenFilePicker", "showSaveFilePicker", "showDirectoryPicker"].forEach(function (method) {
77      wrap(window, method, ["files"]);
78    });
79    wrap(window.FileSystemHandle && window.FileSystemHandle.prototype, "requestPermission", ["files"]);
80    wrap(window.Element && window.Element.prototype, "requestFullscreen", ["fullscreen"]);
81    wrap(window.Element && window.Element.prototype, "requestPointerLock", ["pointer-lock"]);
82    wrap(navigator.wakeLock, "request", ["wake-lock"]);
83    wrap(navigator.storage, "persist", ["persistent-storage"]);
84    wrap(navigator.xr, "requestSession", ["xr"]);
85    wrap(window.DeviceMotionEvent, "requestPermission", ["motion"]);
86    wrap(window.DeviceOrientationEvent, "requestPermission", ["motion"]);
87    wrap(window.Sensor && window.Sensor.prototype, "start", ["sensors"]);
88    wrap(window.Document && window.Document.prototype, "requestStorageAccess", ["storage-access"]);
89    wrap(window.Document && window.Document.prototype, "requestStorageAccessFor", ["storage-access"]);
90  } catch (error) {
91    // Instrumentation must not prevent the rest of the SDK loading.
92  }
93})();
94
95/**
96 * Approval client SDK — the browser half of the approval flow (paired with
97 * approve.html), injected into every app page. A real file, imported as text and
98 * bundled at deploy (see injected-sdk.ts + the router wrangler). Runs in the
99 * untrusted app page: plain ES5, idempotent (window.__hfPatched), fully
100 * try/catch-wrapped, installed inline+synchronous at <head> so it's present
101 * before any app code runs.
102 *
103 * There is exactly ONE approval trigger: window.hf.requestGeneration(model,
104 * params, opts). The app calls it on the user's Generate action; the modal is
105 * visible exactly while the returned promise is pending. Approve resolves the
106 * minted single-use intent id, which the app threads to its server function and
107 * the fnf SDK adapter sends as the submit body's confirmation_token; cancel
108 * rejects with a DOMException named AbortError (a user choice, not a failure).
109 * Enforcement is entirely server-side: the outbound spend gate 403s any
110 * POST /jobs/submit that doesn't carry a matching minted approval (see
111 * outbound-worker/src/spend-gate.ts), so an app that skips the call gets a
112 * self-describing failed submit, never a silent spend. This SDK never inspects
113 * request bodies and never opens a modal on its own.
114 */
115(function () {
116  try {
117    if (window.__hfPatched) return;
118    window.__hfPatched = true;
119    var of = window.fetch;
120    if (typeof of !== "function") return;
121    // Approval surface origin (auth.<zone>, serving the consent page at
122    // /approve). Preferred source: the origin the router stamps ahead of this
123    // script (injected-sdk.ts) — apps can be served on CUSTOM DOMAINS, where
124    // deriving from the page host would fabricate a non-existent
125    // auth.<customdomain>. Host derivation stays as the fallback for stale
126    // cached HTML that predates the stamp.
127    var APPROVE =
128      typeof window.__hfAuthOrigin === "string" && window.__hfAuthOrigin.indexOf("https://") === 0
129        ? window.__hfAuthOrigin
130        : "https://auth." + location.host.split(".").slice(1).join(".");
131    window.__hfFetches = window.__hfFetches || [];
132
133    // Single-flight: at most ONE approval modal at a time. A fast double-click (or
134    // an app firing two requests) would otherwise open a second scrim+iframe stacked
135    // on the first — so a second approve() while one is open returns the in-flight
136    // promise instead of opening another modal.
137    var openModal = null;
138
139    // The modal is a cross-origin iframe of auth.<zone>/approve: the app cannot
140    // read or script it, and WHO may frame the page is pinned server-side by its
141    // frame-ancestors. The page itself obtains the authoritative price from fnf
142    // before enabling Generate; app-supplied display prices are intentionally
143    // ignored. The app DOM can still restyle, shrink or overlay this iframe, and
144    // job binding does NOT cover that (a hidden but genuine click on the app's
145    // own job is still a click): the page defends itself — Generate arms only
146    // after a delay and only while the browser vouches that the card is visible
147    // and unoccluded (IntersectionObserver v2); otherwise the commit moves to a
148    // top-level popup the app cannot overlay. See approve-ui/src/redress.ts.
149    function approve(job) {
150      if (openModal) return openModal;
151      openModal = new Promise(function (resolve, reject) {
152        var grant = null;
153        var ready = false;
154        var done = false;
155        var openedAt = Date.now();
156
157        // Three parent layers so the iframe body can stay fully TRANSPARENT and
158        // still show no white edge:
159        //  - scrim: full-screen div carrying the blur (backdrop-filter samples the
160        //    real app behind it) + a dark tint.
161        //  - wrap: a rounded, overflow:hidden div that CLIPS the iframe. The iframe
162        //    overlaps the backdrop-filter scrim, so Chromium backs its layer
163        //    opaquely; the iframe's OWN border-radius doesn't reliably clip that
164        //    layer (leaving white corners), but a parent clip does. So the corners
165        //    outside the radius are clipped away → the blurred scrim shows through,
166        //    no white ring.
167        //  - frame: the iframe, fully transparent, filling wrap. Its page paints
168        //    only the card (edge-to-edge, no radius — wrap provides the rounding).
169        var scrim = document.createElement("div");
170        scrim.style.cssText =
171          "position:fixed;inset:0;z-index:2147483646;background:rgba(0,0,0,0.28);" +
172          "-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)";
173        var wrap = document.createElement("div");
174        // opacity:0 until the page reports its height so the modal fades in at its
175        // final size (no empty-frame flash, no height re-center / layout shift).
176        // Round with clip-path (not just border-radius + overflow): clip-path is
177        // applied in the COMPOSITOR, so it clips the cross-origin iframe's own
178        // layer edge cleanly. border-radius/overflow only clip the shape and leave
179        // the iframe's opaque WHITE base fringing at the rounded corners (the white
180        // peek). background = card color as a second line of defense. Both the wrap
181        // and the iframe carry the clip; keep 24px in sync with the card radius.
182        wrap.style.cssText =
183          "position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);" +
184          "width:min(400px,calc(100vw - 32px));height:188px;border-radius:24px;overflow:hidden;" +
185          "-webkit-clip-path:inset(0 round 24px);clip-path:inset(0 round 24px);" +
186          "background:#23262a;opacity:0;transition:opacity 0.12s ease;z-index:2147483647";
187        var frame = document.createElement("iframe");
188        // referrerPolicy="origin": the page's frame-ancestors admits a registered
189        // CUSTOM DOMAIN only when this origin arrives as the Referer (approve.ts).
190        frame.referrerPolicy = "origin";
191        frame.src = APPROVE + "/approve";
192        frame.allowTransparency = "true";
193        frame.style.cssText =
194          "display:block;width:100%;height:100%;border:0;border-radius:24px;" +
195          "-webkit-clip-path:inset(0 round 24px);clip-path:inset(0 round 24px);background:#23262a";
196        wrap.appendChild(frame);
197        var revealTimer = null;
198
199        function cleanup() {
200          if (done) return;
201          done = true;
202          clearTimeout(revealTimer);
203          window.removeEventListener("message", onMessage);
204          document.removeEventListener("keydown", onKey, true);
205          wrap.remove();
206          scrim.remove();
207        }
208
209        function beacon(outcome) {
210          if (!grant) return;
211          try {
212            var payload = JSON.stringify({
213              grant: grant,
214              outcome: outcome,
215              ms_open: Date.now() - openedAt,
216            });
217            var url = APPROVE + "/approve/outcome";
218            if (navigator.sendBeacon) {
219              navigator.sendBeacon(url, new Blob([payload], { type: "text/plain" }));
220            } else {
221              of(url, { method: "POST", body: payload, mode: "no-cors", keepalive: true }).catch(
222                function () {},
223              );
224            }
225          } catch (e) {}
226        }
227
228        // Dismiss = the same "denied" path as the modal's Cancel button, so the
229        // caller turns it into an AbortError (a cancel, not a failure).
230        function dismiss() {
231          if (done) return;
232          cleanup();
233          beacon("denied");
234          var error = new Error("hf: denied");
235          error.hfReason = "denied";
236          reject(error);
237        }
238
239        function onKey(event) {
240          if (event.key === "Escape" || event.keyCode === 27) dismiss();
241        }
242
243        function sendRequest() {
244          if (!ready || !grant || done) return;
245          frame.contentWindow.postMessage(
246            { source: "hf-approve", type: "request", grant: grant, job: job },
247            APPROVE,
248          );
249        }
250
251        function onMessage(event) {
252          if (event.origin !== APPROVE || event.source !== frame.contentWindow) return;
253          var data = event.data || {};
254          if (data.source !== "hf-approve") return;
255          // Size the clip wrapper to the page's reported card height, and reveal
256          // ONLY once sized — modal fades in at its final height (no shift/flash).
257          if (typeof data.h === "number" && data.h > 0) {
258            wrap.style.height = data.h + "px";
259            clearTimeout(revealTimer);
260            wrap.style.opacity = "1";
261          }
262          if (data.type === "ready") {
263            ready = true;
264            sendRequest();
265            return;
266          }
267          if (data.type === "pending") {
268            // The decision moved to a top-level consent window (the iframe
269            // relays its verdict and reports a closed popup as "denied"). Keep
270            // the iframe alive for it: tearing it down on the 120 s deadline
271            // orphans the popup — Cancel/Generate there could reach nobody.
272            clearTimeout(deadline);
273            deadline = setTimeout(onDeadline, 600000);
274            return;
275          }
276          if (data.type !== "result") return;
277          cleanup();
278          if (data.ok && typeof data.intentId === "string") {
279            resolve(data.intentId);
280            return;
281          }
282          beacon("denied");
283          var error = new Error("hf: " + (data.reason || "denied"));
284          error.hfReason = data.reason || "denied";
285          reject(error);
286        }
287
288        window.addEventListener("message", onMessage);
289        // Close on background (scrim) click and on Escape. The scrim sits behind
290        // the card (wrap), so a click on it is a click OUTSIDE the modal. Escape
291        // is captured on the parent; the page also handles Escape when focus is
292        // inside the iframe (see approve-ui).
293        scrim.addEventListener("click", dismiss);
294        document.addEventListener("keydown", onKey, true);
295        document.documentElement.appendChild(scrim);
296        document.documentElement.appendChild(wrap);
297        // Fallback: reveal at the default height if the page never reports its
298        // size, so the modal is never stuck hidden.
299        revealTimer = setTimeout(function () {
300          wrap.style.opacity = "1";
301        }, 500);
302
303        of("/__auth/approval-grant", { method: "POST" })
304          .then(function (r) {
305            return r
306              .json()
307              .catch(function () {
308                return {};
309              })
310              .then(function (b) {
311                return { s: r.status, b: b };
312              });
313          })
314          .then(function (x) {
315            if (!x.b || !x.b.grant) {
316              cleanup();
317              reject(
318                new Error(
319                  x.s === 401 ? "hf: not signed in" : "hf: approval unavailable (" + x.s + ")",
320                ),
321              );
322              return;
323            }
324            grant = x.b.grant;
325            sendRequest();
326          })
327          .catch(function (error) {
328            cleanup();
329            reject(error);
330          });
331
332        function onDeadline() {
333          if (done) return;
334          cleanup();
335          beacon("timeout");
336          reject(new Error("hf: approval timeout"));
337        }
338        var deadline = setTimeout(onDeadline, 120000);
339      });
340      // Release the single-flight lock once this approval settles, so the next
341      // genuine generation can open a fresh modal.
342      var release = function () {
343        openModal = null;
344      };
345      openModal.then(release, release);
346      return openModal;
347    }
348
349    // Observability-only fetch patch: request log for debugging (__hfFetches +
350    // console). No interception, no body inspection, no classification — the
351    // approval flow is driven solely by window.hf.requestGeneration.
352    window.fetch = function (input, init) {
353      try {
354        var url = typeof input === "string" ? input : (input && input.url) || String(input);
355        var method = (init && init.method) || (input && input.method) || "GET";
356        window.__hfFetches.push({ url: url, method: method, ts: Date.now() });
357        console.log("[hf-fetch]", method, url);
358      } catch (e) {}
359      return of.apply(this, arguments);
360    };
361
362    // Public SDK. The app contract (see the builder instructions and
363    // docs/generation-approval): call this on the Generate action with the SDK
364    // WIRE shape of the exact submission (wire.jobSetType + wire.params — the
365    // approval is bound server-side to the hash of {job_set_type, params} of the
366    // actual submit body), thread the resolved intent id to the server as the
367    // confirmation token, and render a cancel quietly. opts.credits is an
368    // optional display-only estimate shown in the modal. The id is a token:
369    // never logged here, and apps must not log it either.
370    window.hf = {
371      requestGeneration: function (model, params, opts) {
372        // Fail fast on a bad job identity, BEFORE any UI. The approve page
373        // (protocol.ts) silently ignores a request whose job_set_type isn't a
374        // non-empty string or whose params don't survive structured clone —
375        // which would leave the modal stuck on "Waiting for the app…" with no
376        // way to reply. A typed rejection shows the app its own bug instead.
377        if (typeof model !== "string" || !model) {
378          return Promise.reject(
379            new TypeError("hf: requestGeneration(model, params) — model must be a non-empty string"),
380          );
381        }
382        if (typeof structuredClone === "function") {
383          try {
384            structuredClone(params);
385          } catch (e) {
386            return Promise.reject(
387              new TypeError("hf: requestGeneration params must be structured-cloneable (plain JSON)"),
388            );
389          }
390        }
391        return approve({ job_set_type: model, params: params }).then(
392          function (id) {
393            console.log("[hf] approved");
394            return id;
395          },
396          // Cancel → AbortError, per the app contract ("render a quiet cancelled
397          // state"). Other failures (not signed in, unavailable, timeout) bubble
398          // as-is — those ARE failures.
399          function (e) {
400            if (e && e.hfReason === "denied") {
401              console.log("[hf] cancelled");
402              throw new DOMException("Generation cancelled", "AbortError");
403            }
404            throw e;
405          },
406        );
407      },
408    };
409  } catch (e) {}
410})();
411</script>
411<meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/assets/styles-C_L-J-t8.css" data-precedence="default"/><title>About Blue Tide Exteriors | 24 Years of Construction in Shreveport</title><meta name="author" content="Blue Tide Exteriors"/><meta name="robots" content="index, follow"/><meta property="og:type" content="website"/><meta property="og:site_name" content="Blue Tide Exteriors"/><meta name="twitter:card" content="summary_large_image"/><meta property="og:image" content="https://bluetideexteriors.com/images/og-share.jpg"/><meta name="twitter:image" content="https://bluetideexteriors.com/images/og-share.jpg"/><meta name="description" content="Meet Jordan Strader, founder of Blue Tide Exteriors. 24 years in construction, 6 Louisiana licenses, 500+ home flips, 1,000+ real estate transactions, and hundreds of backyard projects across North Louisiana since 2018."/><meta property="og:title" content="About Blue Tide Exteriors | 24 Years of Construction in Shreveport"/><meta property="og:description" content="Meet Jordan Strader, founder of Blue Tide Exteriors. 24 years in construction, 6 Louisiana licenses, 500+ home flips, 1,000+ real estate transactions, and hundreds of backyard projects across North Louisiana since 2018."/><meta property="og:url" content="https://bluetideexteriors.com/about"/><link rel="modulepreload" href="/assets/index-Bl3BsNxA.js"/><link rel="modulepreload" href="/assets/about-BZwSTrEC.js"/><link rel="icon" href="https://bluetideexteriors.com/images/favicon.png"/><link rel="apple-touch-icon" href="/images/apple-touch-icon-new.png"/><link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32-new.png"/><link rel="canonical" href="https://www.bluetideexteriors.com/about"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/>
411<script>(function () {
412  var currentScript = document.currentScript;
413  var styleNonce = currentScript && currentScript.nonce ? currentScript.nonce : "";
414
415  // 1. Re-inject persisted runtime themes (defineTheme'd in a prior session).
416  var themes = {};
417  try { themes = JSON.parse(localStorage.getItem("hf:quanta:runtime-themes") || "{}"); } catch (e) {}
418  for (var name in themes) {
419    if (!Object.prototype.hasOwnProperty.call(themes, name)) continue;
420    var decls = "";
421    for (var key in themes[name]) {
422      if (!Object.prototype.hasOwnProperty.call(themes[name], key)) continue;
423      decls += "  --hf-color-" + key + ": " + themes[name][key] + ";\n";
424    }
425    var style = document.createElement("style");
426    style.id = "hf-runtime-theme-" + name;
427    // :where(...) keeps specificity at (0,0,0) so consumer .my-class
428    // overrides win. Runtime themes win the cascade tie not by specificity
429    // but by being UNLAYERED while theme/color.css is wrapped in
430    // @layer quanta-theme — unlayered always beats layered per CSS spec.
431    // See define-theme.ts → injectStyleTag for the rationale.
432    if (styleNonce) style.nonce = styleNonce;
433    style.textContent = ":where([data-theme=\"" + name + "\"]) {\n" + decls + "}";
434    document.head.appendChild(style);
435  }
436
437  // 2. Apply override if pinned, otherwise resolve managed theme.
438  var override = null;
439  try { override = localStorage.getItem("hf:quanta:theme-override"); } catch (e) {}
440  var html = document.documentElement;
441  if (override) {
442    html.setAttribute("data-theme", override);
443
444    // 3a. Anti-FOUC fallback for runtime themes. The Tailwind stylesheet
445    // may load after first paint (esp. in dev where Vite injects CSS via
446    // JS) — without this, body would flash with browser defaults before
447    // the cascade resolves. Inline html bg+color from the override's
448    // tokens covers that window; once the proper class on <body> arrives,
449    // it paints over and the inline html style becomes invisible.
450    var ot = themes[override];
451    if (ot) {
452      if (ot["background-primary"]) html.style.backgroundColor = ot["background-primary"];
453      if (ot["text-primary"]) html.style.color = ot["text-primary"];
454    }
455  } else {
456    var pref = "auto";
457    try { pref = localStorage.getItem("hf:quanta:theme-pref") || "auto"; } catch (e) {}
458    // Package default is DARK. Render light ONLY when:
459    //   - user explicitly chose pref="light", OR
460    //   - pref="auto" and OS explicitly signals prefers-color-scheme: light
461    // Any other signal (dark, none, matchMedia missing) resolves to dark.
462    var light = pref === "light" || (pref === "auto" && matchMedia("(prefers-color-scheme: light)").matches);
463    var dark = !light;
464    html.setAttribute("data-theme", "default" + "-" + (dark ? "dark" : "light"));
465
466    // 3b. Anti-FOUC for managed themes. Setting color-scheme tells the
467    // browser to use dark/light system defaults for the canvas (page
468    // background, native form controls) — no white flash before the
469    // proper theme/color.css block sets the same property inside its
470    // :where(...) block.
471    html.style.colorScheme = dark ? "dark" : "light";
472  }
473})();</script>
473<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400;1,500&amp;family=Inter:wght@200;300;400;500;600;700&amp;display=swap" rel="stylesheet"/>
473<script type="application/ld+json">{
474          "@context": "https://schema.org",
475          "@type": ["GeneralContractor", "LocalBusiness"],
476          "@id": "https://www.bluetideexteriors.com/#business",
477          "name": "Blue Tide Exteriors, LLC",
478          "url": "https://www.bluetideexteriors.com",
479          "logo": "https://www.bluetideexteriors.com/images/logo-new-square.png",
480          "image": ["https://www.bluetideexteriors.com/images/og-share.jpg"],
481          "description": "Design-build outdoor living contractor serving Shreveport, Bossier City & North Louisiana. Patios, pergolas, screen enclosures, sunrooms, outdoor kitchens, fire features, shotcrete & vinyl liner pools. 6 Louisiana licenses. Lifetime Workmanship Warranty.",
482          "priceRange": "$$$",
483          "foundingDate": "2018",
484          "founder": {
485            "@type": "Person",
486            "name": "Jordan Strader"
487          },
488          "address": {
489            "@type": "PostalAddress",
490            "streetAddress": "1780 E Bert Kouns Industrial Loop Ste 907",
491            "addressLocality": "Shreveport",
492            "addressRegion": "LA",
493            "postalCode": "71105",
494            "addressCountry": "US"
495          },
496          "geo": { "@type": "GeoCoordinates", "latitude": "32.4344315", "longitude": "-93.7106004" },
497          "hasMap": "https://www.google.com/maps?cid=13248166682269152656",
498          "telephone": "+13182428225",
499          "openingHoursSpecification": [
500            {
501              "@type": "OpeningHoursSpecification",
502              "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
503              "opens": "08:00",
504              "closes": "17:00"
505            },
506            {
507              "@type": "OpeningHoursSpecification",
508              "dayOfWeek": "Saturday",
509              "opens": "08:00",
510              "closes": "17:00"
511            }
512          ],
513          "areaServed": [
514            { "@type": "City", "name": "Shreveport", "address": { "@type": "PostalAddress", "addressRegion": "LA", "addressCountry": "US" } },
515            { "@type": "City", "name": "Bossier City", "address": { "@type": "PostalAddress", "addressRegion": "LA", "addressCountry": "US" } },
516            { "@type": "City", "name": "Benton", "address": { "@type": "PostalAddress", "addressRegion": "LA", "addressCountry": "US" } },
517            { "@type": "City", "name": "Haughton", "address": { "@type": "PostalAddress", "addressRegion": "LA", "addressCountry": "US" } },
518            { "@type": "City", "name": "Blanchard", "address": { "@type": "PostalAddress", "addressRegion": "LA", "addressCountry": "US" } },
519            { "@type": "City", "name": "Stonewall", "address": { "@type": "PostalAddress", "addressRegion": "LA", "addressCountry": "US" } },
520            { "@type": "City", "name": "Keithville", "address": { "@type": "PostalAddress", "addressRegion": "LA", "addressCountry": "US" } },
521            { "@type": "City", "name": "Greenwood", "address": { "@type": "PostalAddress", "addressRegion": "LA", "addressCountry": "US" } },
522            { "@type": "City", "name": "Minden", "address": { "@type": "PostalAddress", "addressRegion": "LA", "addressCountry": "US" } },
523            { "@type": "City", "name": "Mansfield", "address": { "@type": "PostalAddress", "addressRegion": "LA", "addressCountry": "US" } }
524          ],
525          "hasOfferCatalog": {
526            "@type": "OfferCatalog",
527            "name": "Outdoor Living Services",
528            "itemListElement": [
529              { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Patio and Decking Construction" } },
530              { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Pergola and Pavilion Construction" } },
531              { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Screen Enclosure and Patio Enclosure Construction" } },
532              { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Sunroom Construction" } },
533              { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Outdoor Kitchen Construction" } },
534              { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Fire Feature Construction" } },
535              { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Shotcrete / Gunite Swimming Pool Construction" } },
536              { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Vinyl Liner Swimming Pool Installation" } },
537              { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Roofing" } },
538              { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Siding Installation" } }
539            ]
540          },
541          "memberOf": [
542            { "@type": "Organization", "name": "Better Business Bureau" },
543            { "@type": "Organization", "name": "National Association of Home Builders" },
544            { "@type": "Organization", "name": "Home Builders Association of Northwest Louisiana" }
545          ],
546          "hasCredential": [
547            { "@type": "EducationalOccupationalCredential", "name": "Louisiana Residential Swimming Pool License", "credentialID": "00138" },
548            { "@type": "EducationalOccupationalCredential", "name": "Louisiana Commercial Swimming Pool License", "credentialID": "74493" },
549            { "@type": "EducationalOccupationalCredential", "name": "Louisiana Home Improvement License", "credentialID": "HI.561286" },
550            { "@type": "EducationalOccupationalCredential", "name": "Louisiana Qualifying Party", "credentialID": "QP.8977026" }
551          ],
552          "sameAs": [
553            "https://www.youtube.com/@Bluetideexteriors",
554            "https://www.instagram.com/bluetideexteriors/",
555            "https://www.facebook.com/bluetideexteriors",
556            "https://www.bbb.org/us/la/shreveport/profile/home-improvement/blue-tide-exteriors-llc-1015-90074118"
557          ],
558          "makesOffer": {
559            "@type": "Offer",
560            "name": "Free 25-Minute Virtual Design Consultation",
561            "description": "Includes 3D rendering, phased design plan PDF, and free estimate. No pressure, no obligation.",
562            "price": "0",
563            "priceCurrency": "USD"
564          }
565        }</script>
565<script type="application/ld+json">{
566          "@context": "https://schema.org",
567          "@type": "BreadcrumbList",
568          "itemListElement": [
569            { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.bluetideexteriors.com/" }
570          ]
571        }</script>
571</head><body><!--$--><div class="min-h-screen bg-champagne font-body"><nav class="fixed top-0 left-0 right-0 z-50 bg-charcoal border-b border-gold/20"><div class="max-w-7xl mx-auto px-3 sm:px-4 lg:px-6 xl:px-10 h-16 sm:h-20 lg:h-24 flex items-center justify-between gap-2"><a href="/" class="flex items-center gap-2 sm:gap-3 flex-shrink-0 min-w-0"><span class="font-display text-sm sm:text-lg lg:text-2xl font-medium tracking-wide text-white whitespace-nowrap">Blue Tide <span class="text-gold italic">Exteriors</span></span></a><div class="hidden lg:flex items-center gap-5 xl:gap-7 text-sm font-heading text-white flex-1 justify-center"><a href="/" class="hover:text-gold transition-colors whitespace-nowrap">Home</a><a href="/design-services" class="hover:text-gold transition-colors whitespace-nowrap">Design</a><div class="relative"><button class="hover:text-gold transition-colors whitespace-nowrap flex items-center gap-1 text-white">Services <span class="text-xs">▾</span></button></div><a href="/about" class="hover:text-gold transition-colors whitespace-nowrap">About</a><a href="/gallery" class="hover:text-gold transition-colors whitespace-nowrap">Gallery</a><a href="/financing" class="hover:text-gold transition-colors whitespace-nowrap">Financing</a><a href="/custom-spaces" class="hover:text-gold transition-colors whitespace-nowrap">ADU&#x27;s</a></div><div class="flex items-center gap-2 sm:gap-3 lg:gap-4 flex-shrink-0"><a href="https://app.builddesignai.com" target="_blank" rel="noopener noreferrer" class="inline-block bg-gold text-charcoal text-xs xl:text-sm font-heading px-4 xl:px-5 py-2 xl:py-3 hover:bg-gold-light transition-colors whitespace-nowrap">Design/Estimator</a><a href="tel:+13182428225" class="hidden lg:flex items-center gap-2 text-sm font-heading text-white hover:text-gold transition-colors whitespace-nowrap">(318) 242-8225</a><button class="lg:hidden flex flex-col gap-1.5 p-2" aria-label="Menu"><span class="block w-6 h-px bg-white"></span><span class="block w-6 h-px bg-white"></span><span class="block w-6 h-px bg-white"></span></button></div></div></nav><div class="bg-charcoal py-6"><div class="max-w-7xl mx-auto px-6 sm:px-10"><div class="flex flex-wrap items-center justify-center gap-x-8 gap-y-3 text-xs font-heading tracking-wider text-white/50"><span>BBB A+ ACCREDITED</span><span class="text-white/20">·</span><span>GOOGLE 4.9★</span><span class="text-white/20">·</span><span>BEST OF HOUZZ 2023</span><span class="text-white/20">·</span><span>NAHB MEMBER</span><span class="text-white/20">·</span><span>$2M INSURED</span><span class="text-white/20">·</span><span>LIFETIME WARRANTY</span></div></div></div><section class="relative pt-24 pb-20 sm:pt-32 sm:pb-28 overflow-hidden"><div class="absolute inset-0 bg-cover bg-center" style="background-image:url(&#x27;/images/about-hero-v2.jpg&#x27;)"></div><div class="absolute inset-0 bg-gradient-to-r from-charcoal/90 via-charcoal/70 to-charcoal/20"></div><div class="relative z-10 max-w-7xl mx-auto px-6 sm:px-10"><div class="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center"><div class="max-w-2xl"><p class="font-heading text-xs text-white mb-6 tracking-[0.25em] drop-shadow-lg">The Blue Tide Story</p><h1 class="font-display text-white font-light leading-[1.05] drop-shadow-xl" style="font-size:clamp(2.5rem, 7vw, 5.5rem)">24 Years of Building.<br/><span class="italic text-gold-light">One Mission.</span></h1><p class="mt-8 text-lg font-light text-white leading-relaxed max-w-lg drop-shadow-lg">From a 16-year-old with a lawn mower to one of North Louisiana&#x27;s most trusted outdoor living contractors. This is the story of Blue Tide.</p></div><div class="flex justify-center lg:justify-end"><div class="relative"><img src="/images/jordan-portrait.jpg" alt="Jordan Strader, Founder of Blue Tide Exteriors" class="w-64 h-64 sm:w-80 sm:h-80 object-cover border-2 border-gold/40 shadow-2xl" loading="lazy"/><div class="absolute -bottom-4 left-1/2 -translate-x-1/2 bg-charcoal px-6 py-2 border border-gold/30"><p class="font-heading text-xs text-gold tracking-[0.2em] whitespace-nowrap">JORDAN STRADER · FOUNDER</p></div></div></div></div></div></section><section class="py-24 sm:py-32"><div class="max-w-7xl mx-auto px-6 sm:px-10"><div class="grid grid-cols-1 lg:grid-cols-2 gap-16 items-start"><div><p class="font-heading text-xs text-gold mb-4 tracking-[0.25em]">Meet the Owner</p><h2 class="font-display text-4xl sm:text-5xl font-light text-charcoal leading-tight mb-8">Jordan Strader</h2><div class="space-y-6 text-slate-grey font-light text-lg leading-relaxed"><p>Jordan Strader&#x27;s entrepreneurial journey began at 16, when he launched his own lawn mowing and landscaping business. For the next 12 years, he built it into a thriving operation while simultaneously breaking into construction at age 19 in 2002 — learning the trades, managing crews, and developing the hands-on expertise that would become the foundation of everything he does today.</p><p>At 26, after 12 years of landscaping, Jordan made the decision to move out of landscaping and into full-time construction. He also dove into real estate investing, flipping over 500 homes and completing more than 1,000 real estate transactions. That depth of experience — seeing thousands of properties, understanding how homes are built, and knowing what adds real value — shaped his approach to every project that followed.</p><p>In 2018, Jordan moved from Florida to Louisiana and founded Blue Tide Exteriors with a focused mission: design and build extraordinary outdoor living space
571s. Since then, he has performed hundreds of backyard projects — pools, patios, outdoor kitchens, pergolas, fire features, and screen enclosures — across the Shreveport-Bossier area and surrounding communities.</p><p>Today, Jordan holds <span class="text-charcoal font-medium">six Louisiana state licenses</span> — Home Builder, General Contractor, Residential Swimming Pools, Commercial Swimming Pools, Home Improvement, and Qualifying Party. He carries $2 million in general liability insurance and backs every project with a Lifetime Workmanship Warranty.</p><p>A family man at heart, Jordan has been married for over 20 years and is a proud father of two. He lives on a small hobby farm with 20 chickens and a cat. When he&#x27;s not building, you&#x27;ll find him outdoors — fishing, hunting, or on the water. For Jordan, outdoor living isn&#x27;t just something he builds for others. It&#x27;s a way of life.</p></div></div><div class="space-y-8"><div class="bg-white border border-border-light p-10"><h3 class="font-heading text-xs text-gold mb-6 tracking-wider">BY THE NUMBERS</h3><div class="grid grid-cols-2 gap-8"><div class="border-l border-gold/40 pl-5"><div class="font-display text-4xl font-light text-charcoal">24</div><div class="font-heading text-xs text-slate-light mt-1 tracking-wider">YEARS IN CONSTRUCTION</div></div><div class="border-l border-gold/40 pl-5"><div class="font-display text-4xl font-light text-charcoal">6</div><div class="font-heading text-xs text-slate-light mt-1 tracking-wider">LA STATE LICENSES</div></div><div class="border-l border-gold/40 pl-5"><div class="font-display text-4xl font-light text-charcoal">500+</div><div class="font-heading text-xs text-slate-light mt-1 tracking-wider">HOME REHABS</div></div><div class="border-l border-gold/40 pl-5"><div class="font-display text-4xl font-light text-charcoal">1,000+</div><div class="font-heading text-xs text-slate-light mt-1 tracking-wider">REAL ESTATE TRANSACTIONS</div></div><div class="border-l border-gold/40 pl-5"><div class="font-display text-4xl font-light text-charcoal">$2M</div><div class="font-heading text-xs text-slate-light mt-1 tracking-wider">LIABILITY INSURANCE</div></div><div class="border-l border-gold/40 pl-5"><div class="font-display text-4xl font-light text-charcoal">2018</div><div class="font-heading text-xs text-slate-light mt-1 tracking-wider">FOUNDED IN LOUISIANA</div></div></div></div><div class="bg-charcoal text-white p-10"><h3 class="font-heading text-xs text-gold mb-6 tracking-wider">WHY BLUE TIDE?</h3><p class="text-white/70 font-light leading-relaxed italic">&quot;We have an affinity for the water, and the color blue resonates with us deeply. Tides, with their rhythmic rise and fall, symbolize the steadiness and resilience characteristic of a dedicated small business.&quot;</p><p class="mt-4 text-white/50 font-light text-sm">— Jordan Strader, Founder</p></div></div></div></div></section><section class="py-24 sm:py-32 bg-champagne-dark"><div class="max-w-7xl mx-auto px-6 sm:px-10"><div class="text-center max-w-3xl mx-auto mb-20"><p class="font-heading text-xs text-gold mb-4 tracking-[0.25em]">Licensed &amp; Insured</p><h2 class="font-display text-4xl sm:text-6xl font-light text-charcoal leading-tight">Six Louisiana Licenses.<br/><span class="italic">Zero Shortcuts.</span></h2><p class="mt-6 text-lg font-light text-slate-grey leading-relaxed">Blue Tide Exteriors is licensed, bonded, and insured in Louisiana. We carry $2 million in general liability insurance on every project.</p></div><div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-px bg-border-light"><div class="bg-champagne p-8"><div class="font-display text-2xl font-light text-gold mb-2">#00138</div><div class="font-heading text-xs text-charcoal tracking-wider">RESIDENTIAL SWIMMING POOLS</div></div><div class="bg-champagne p-8"><div class="font-display text-2xl font-light text-gold mb-2">#74493</div><div class="font-heading text-xs text-charcoal tracking-wider">COMMERCIAL SWIMMING POOLS</div></div><div class="bg-champagne p-8"><div class="font-display text-2xl font-light text-gold mb-2">HI.561286</div><div class="font-heading text-xs text-charcoal tracking-wider">HOME IMPROVEMENT</div></div><div class="bg-champagne p-8"><div class="font-display text-2xl font-light text-gold mb-2">QP.8977026</div><div class="font-heading text-xs text-charcoal tracking-wider">QUALIFYING PARTY</div></div></div></div></section><section class="py-24 sm:py-32"><div class="max-w-7xl mx-auto px-6 sm:px-10"><div class="text-center max-w-3xl mx-auto mb-20"><p class="font-heading text-xs text-gold mb-4 tracking-[0.25em]">Recognition</p><h2 class="font-display text-4xl sm:text-6xl font-light text-charcoal leading-tight">Awards &amp;<br/><span class="italic">Accreditations</span></h2></div><div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-px bg-border-light"><div class="bg-champagne p-8 flex items-center gap-4"><span class="text-gold text-lg">
571★</span><span class="text-sm font-light text-slate-grey">BBB A+ Accredited Business</span></div><div class="bg-champagne p-8 flex items-center gap-4"><span class="text-gold text-lg">★</span><span class="text-sm font-light text-slate-grey">Best of Houzz 2023 — Service</span></div><div class="bg-champagne p-8 flex items-center gap-4"><span class="text-gold text-lg">★</span><span class="text-sm font-light text-slate-grey">ABC Supply Pro Account</span></div><div class="bg-champagne p-8 flex items-center gap-4"><span class="text-gold text-lg">★</span><span class="text-sm font-light text-slate-grey">NAHB Member</span></div><div class="bg-champagne p-8 flex items-center gap-4"><span class="text-gold text-lg">★</span><span class="text-sm font-light text-slate-grey">HBA of Northwest Louisiana Member</span></div></div></div></section><section class="py-20 bg-charcoal text-white"><div class="max-w-7xl mx-auto px-6 sm:px-10"><div class="text-center mb-12"><p class="font-heading text-xs text-gold mb-4 tracking-[0.25em]">Trusted Partners</p><h2 class="font-display text-3xl sm:text-4xl font-light leading-tight">Materials &amp; Vendor <span class="italic text-gold-light">Relationships</span></h2></div><div class="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-6"><div class="text-center py-4 border border-white/10"><span class="text-sm font-light text-white/60">Renaissance Patio Products (Official Dealer)</span></div><div class="text-center py-4 border border-white/10"><span class="text-sm font-light text-white/60">Hydro Dynamic Pools (Vinyl Liner Panels)</span></div><div class="text-center py-4 border border-white/10"><span class="text-sm font-light text-white/60">Eze-Breeze (3-Season Systems)</span></div><div class="text-center py-4 border border-white/10"><span class="text-sm font-light text-white/60">ABC Supply (Roofing, Siding, Gutters, Decking)</span></div><div class="text-center py-4 border border-white/10"><span class="text-sm font-light text-white/60">Universal Screens / US Motions (Retractable Screens)</span></div><div class="text-center py-4 border border-white/10"><span class="text-sm font-light text-white/60">Sherwin-Williams</span></div><div class="text-center py-4 border border-white/10"><span class="text-sm font-light text-white/60">Spectrum Paint</span></div><div class="text-center py-4 border border-white/10"><span class="text-sm font-light text-white/60">Spell Brothers</span></div><div class="text-center py-4 border border-white/10"><span class="text-sm font-light text-white/60">Custom Building Products</span></div></div></div></section><section class="py-24 sm:py-32"><div class="max-w-7xl mx-auto px-6 sm:px-10"><div class="text-center max-w-3xl mx-auto mb-20"><p class="font-heading text-xs text-gold mb-4 tracking-[0.25em]">Our Commitment</p><h2 class="font-display text-4xl sm:text-6xl font-light text-charcoal leading-tight">Built on <span class="italic">Trust</span></h2><p class="mt-6 text-lg font-light text-slate-grey leading-relaxed">We&#x27;ve seen firsthand what frustrates homeowners — missed follow-ups, poor communication, and customer service that falls short. That&#x27;s why we&#x27;ve built our business around doing better.</p></div><div class="grid grid-cols-1 md:grid-cols-3 gap-px bg-border-light"><div class="bg-champagne p-10"><h3 class="font-heading text-sm text-charcoal mb-4 tracking-wider">EXPERIENCE</h3><p class="text-sm font-light text-slate-grey leading-relaxed">24 years of hands-on construction experience. 500+ home rehabs. 1,000+ real estate transactions. Hundreds of backyard projects and counting. We&#x27;ve seen every problem and solved most of them.</p></div><div class="bg-champagne p-10"><h3 class="font-heading text-sm text-charcoal mb-4 tracking-wider">EXPERTISE</h3><p class="text-sm font-light text-slate-grey leading-relaxed">Six Louisiana state licenses covering pools, home building, general contracting, home improvement, and public works. Official dealer for Renaissance Patio, Hydro Dynamic Pools, and Eze-Breeze.</p></div><div class="bg-champagne p-10"><h3 class="font-heading text-sm text-charcoal mb-4 tracking-wider">TRUST</h3><p class="text-sm font-light text-slate-grey leading-relaxed">BBB A+ accredited. $2M liability insurance. Lifetime Workmanship Warranty. Best of Houzz 2023. We stand behind every project.</p></div></div></div></section><section class="py-24 sm:py-32 bg-champagne"><div class="max-w-7xl mx-auto px-6 sm:px-10"><div class="text-center mb-16"><p class="font-heading text-xs text-gold mb-4 tracking-[0.25em]">Insights &amp; Resources</p><h2 class="font-display text-4xl sm:text-5xl font-light text-charcoal leading-tight">From the <span class="italic">Blue Tide Blog</span></h2></div><div class="grid grid-cols-1 md:grid-cols-3 gap-8"><a href="/blog/shotcrete-vs-vinyl-pools" class="group"><div class="relative h-56 overflow-hidden"><img src="/images/hero-pool.jpg" alt="Shotcrete vs. Vinyl Liner Pools" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-700" loading="lazy"/><div class="absolute inset-0 bg-gradient-to-t from-charcoal/60 to-transparent"></div></div><div class="bg-white border border-border-light p-6"><p class="font-heading text-xs text-gold mb-3 tracking-wider">POOL CONSTRUCTION</p><h3 class="font-display text-lg font-light text-charcoal group-hover:text-gold transition-colors">Shotcrete vs. Vinyl Liner Pools</h3></div></a><a href="/blog/outdoor-living-design-process" class="group"><div class="relative h-56 overflow-hidden"><img src="/images/outdoor-kitchen.jpg" alt="The Outdoor Living Design Process" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-700" loading="lazy"/><div class="absolute inset-0 bg-gradient-to-t from-charcoal/60 to-transparent"></div></div><div class="bg-white border border-border-light p-6"><p class="font-heading text-xs text-gold mb-3 tracking-wider">DESIGN</p><h3 class="font-display text-lg font-light text-charcoal group-hover:text-gold transition-colors">The Outdoor Living Design Process</h3></div></a><a href="/blog/pool-budgeting-and-financing" class="group"><div class="relative h-56 overflow-hidden"><img src="/images/vinyl-pool-hero.jpg" alt="How to Plan Your Pool Investment in 2026" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-700" loading="lazy"/><div class="absolute inset-0 bg-gradient-to-t from-charcoal/60 to-transparent"></div></div><div class="bg-white border border-border-light p-6"><p class="font-heading text-xs text-gold mb-3 tracking-wider">INVESTMENT</p><h3 class="font-display text-lg font-light text-charcoal group-hover:text-gold transition-colors">How to Plan Your Pool Investment in 2026</h3></div></a></div><div class="mt-12 text-center"><a href="/blog" class="inline-flex items-center border border-charcoal/30 hover:border-charcoal hover:bg-charcoal hover:text-champagne text-charcoal font-heading text-xs px-10 py-4 transition-all">View All Articles →</a></div></div></section><section class="py-24 sm:py-32 bg-ocean-deep text-white"><div class="max-w-5xl mx-auto px-6 sm:px-10"><div class="text-center mb-12"><p class="font-heading text-xs text-gold mb-4 tracking-[0.25em]">Get Started</p><h2 class="font-display text-4xl sm:text-6xl font-light leading-tight">Let&#x27;s Explore What Your<br/><span class="italic text-gold-light">Backyard Could Become</span></h2></div><form class="p-10 sm:p-12 bg-white"><div class="grid grid-cols-1 sm:grid-cols-2 gap-5"><div><label class="block text-xs font-heading text-slate-grey mb-2 tracking-wider">FULL NAME *</label><input type="text" required="" placeholder="John Smith" class="w-full px-4 py-3 border border-border-light focus:border-gold focus:outline-none text-charcoal font-light bg-champagne/50" name="name"/></div><div><label class="block text-xs font-heading text-slate-grey mb-2 tracking-wider">PHONE *</label><input type="tel" required="" placeholder="(318) 555-0000" class="w-full px-4 py-3 border border-border-light focus:border-gold focus:outline-none text-charcoal font-light bg-champagne/50" name="phone"/></div></div><div class="mt-5"><label class="block text-xs font-heading text-slate-grey mb-2 tracking-wider">EMAIL *</label><input type="email" required="" placeholder="[email protected]" class="w-full px-4 py-3 border border-border-light focus:border-gold focus:outline-none text-charcoal font-light bg-champagne/50" name="email"/></div><button type="submit" class="w-full mt-8 bg-charcoal hover:bg-charcoal-light text-champagne font-heading text-xs py-5 tracking-wider transition-colors disabled:opacity-50">BOOK FREE 25-MINUTE GOOGLE MEET →</button><p class="mt-4 text-center text-xs text-slate-light font-light">By submitting, you agree to be contacted by Blue Tide Exteriors about your project. We never share your information. No spam, no pressure.</p></form></div></section><section class="py-20 bg-champagne"><div class="max-w-5xl mx-auto px-6 sm:px-10"><div class="text-center mb-12"><p class="font-heading text-xs text-gold mb-4 tracking-[0.25em]">WITH EVERY JOB</p><h2 class="font-display text-3xl sm:text-4xl font-light text-charcoal">Thoughtful planning,<br/><span class="italic text-gold">part of every build</span></h2><p class="mt-4 text-slate-grey font-light max-w-2xl mx-auto">With every Blue Tide job: free renderings, free site plans, free architectural drawings, and free permit submissions.</p></div><div class="grid grid-cols-2 lg:grid-cols-4 gap-4"><a href="/estimator" class="bg-white border border-border-light p-6 text-center hover:border-gold transition-colors"><p class="font-heading text-xs text-gold mb-2 tracking-wider">COST ESTIMATOR</p><p class="text-xs text-slate-grey font-light">Real cost ranges in 2 minutes</p></a><a href="/site-plan" class="bg-white border border-border-light p-6 text-center hover:border-gold transition-colors"><p class="font-heading text-xs text-gold mb-2 tracking-wider">SITE PLANS WITH EVERY JOB</p><p class="text-xs text-slate-grey font-light">With every Blue Tide job: free renderings, free site plans, free architectural drawings, and free permit submissions.</p></a><a href="/financing" class="bg-white border border-border-light p-6 text-center hover:border-gold transition-colors"><p class="font-heading text-xs text-gold mb-2 tracking-wider">FINANCING CALCULATOR</p><p class="text-xs text-slate-grey font-light">Up to $250K, monthly payment options</p></a><a href="/free-estimate" class="bg-white border border-border-light p-6 text-center hover:border-gold transition-colors"><p class="font-heading text-xs text-gold mb-2 tracking-wider">DESIGN CONSULTATION</p><p class="text-xs text-slate-grey font-light">Free 25-minute Google Meet</p></a></div></div></section><section class="py-20 bg-charcoal text-white relative overflow-hidden"><div class="max-w-4xl mx-auto px-6 sm:px-10 text-center"><p class="font-heading text-xs text-gold mb-4 tracking-[0.25em]">Our Promise</p><h2 class="font-display text-4xl sm:text-6xl font-light leading-tight">Lifetime Workmanship<br/><span class="italic text-gold-light">Warranty</span></h2><p class="mt-8 text-lg font-light text-white/60 max-w-2xl mx-auto leading-relaxed">We stand behind every pool, patio, kitchen, and pergola we build — for life. Not a prorated 10-year warranty. Not a &quot;good luck&quot; handshake. A real, written Lifetime Workmanship Warranty from a company founded in 2018 with 24 years of combined construction experience.</p><div class="mt-10 flex flex-wrap justify-center gap-x-8 gap-y-3 text-xs font-heading tracking-wider text-white/50"><span>Licensed</span><span>·</span><span>
571Bonded</span><span>·</span><span>Insured</span></div></div></section><section class="py-24 sm:py-32 bg-champagne"><div class="max-w-7xl mx-auto px-6 sm:px-10"><div class="text-center max-w-3xl mx-auto mb-20"><p class="font-heading text-xs text-gold mb-4 tracking-[0.25em]">Real Reviews from Google</p><h2 class="font-display text-4xl sm:text-6xl font-light text-charcoal leading-tight">What Our<br/><span class="italic">Clients Say</span></h2><p class="mt-4 text-sm text-slate-light"><a href="https://www.google.com/maps?cid=13248166682269152656" target="_blank" rel="noopener noreferrer" class="text-gold hover:underline">Read all reviews on Google →</a></p></div><div class="grid grid-cols-1 md:grid-cols-3 gap-px bg-border-light"><div class="bg-champagne p-12 flex flex-col"><div class="text-gold text-lg mb-6">★★★★★</div><p class="text-slate-grey font-light leading-relaxed italic flex-grow">“<!-- -->They replaced our patio cover which we lost in the big ice storm. It took us a year and a half to find someone to fix it. It was Blue Tide Exteriors. It took them 2 days and it is so pretty. They worked with our budget. They did a great job.<!-- -->”</p><div class="mt-8 pt-6 border-t border-border-light"><div class="font-display text-lg text-charcoal">Mickey W.</div><div class="font-heading text-xs text-slate-light mt-1 tracking-wider">Keithville, LA</div></div></div><div class="bg-champagne p-12 flex flex-col"><div class="text-gold text-lg mb-6">★★★★★</div><p class="text-slate-grey font-light leading-relaxed italic flex-grow">“<!-- -->Blue tide did an amazing job on my front deck! Great customer service — they went the extra mile to make sure my deck was perfect.<!-- -->”</p><div class="mt-8 pt-6 border-t border-border-light"><div class="font-display text-lg text-charcoal">John D.</div><div class="font-heading text-xs text-slate-light mt-1 tracking-wider">Shreveport, LA</div></div></div><div class="bg-champagne p-12 flex flex-col"><div class="text-gold text-lg mb-6">★★★★★</div><p class="text-slate-grey font-light leading-relaxed italic flex-grow">“<!-- -->So appreciative of Jordan and his team. Super efficient and very reasonable for the work required.<!-- -->”</p><div class="mt-8 pt-6 border-t border-border-light"><div class="font-display text-lg text-charcoal">Michelle V.</div><div class="font-heading text-xs text-slate-light mt-1 tracking-wider">Benton, LA</div></div></div></div><div class="mt-12 text-center"><a href="/reviews" class="inline-flex items-center text-sm font-heading text-gold hover:text-charcoal transition-colors tracking-wider">Read More Reviews →</a></div></div></section><footer class="bg-charcoal text-white/60 py-12 sm:py-16"><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-10"><div class="mb-10 pb-8 border-b border-white/10"><div class="flex items-center gap-3 mb-4"><span class="font-display text-lg sm:text-xl lg:text-2xl font-medium text-white whitespace-nowrap">Blue Tide <span class="text-gold italic">Exteriors</span></span></div><p class="text-sm font-light leading-relaxed text-white/40 max-w-md">Design-build exterior construction serving Shreveport, Bossier City, and 22 surrounding towns in North Louisiana &amp; East Texas since 2018.</p><div class="flex gap-4 mt-5"><a href="https://instagram.com/bluetideexteriors" target="_blank" rel="noopener noreferrer" class="font-heading text-xs text-white/40 hover:text-gold transition-colors tracking-wider">INSTAGRAM</a><span class="text-white/20">·</span><a href="https://youtube.com/@Bluetideexteriors" target="_blank" rel="noopener noreferrer" class="font-heading text-xs text-white/40 hover:text-gold transition-colors tracking-wider">YOUTUBE</a><span class="text-white/20">·</span><a href="https://facebook.com/bluetideexteriors" target="_blank" rel="noopener noreferrer" class="font-heading text-xs text-white/40 hover:text-gold transition-colors tracking-wider">FACEBOOK</a></div></div><div class="mb-10 pb-8 border-b border-white/10 grid grid-cols-1 sm:grid-cols-2 gap-4"><a href="https://app.builddesignai.com" target="_blank" rel="noopener noreferrer" class="block border border-gold/30 bg-gold/5 p-6 rounded-lg hover:border-gold/60 transition-colors group"><div class="text-2xl mb-2"><span class="text-gold">◆</span></div><h4 class="font-heading text-xs text-gold tracking-wider mb-1">DESIGNBUILDAI</h4><p class="text-sm font-light text-white/60">Design your backyard and get real cost estimates in one tool. Style, features, build levels, mandatory costs — all in one place.</p><span class="mt-3 inline-block font-heading text-xs text-gold group-hover:text-gold-light transition-colors">Start Designing →</span></a><a href="/site-plan" class="block border border-gold/30 bg-gold/5 p-6 rounded-lg hover:border-gold/60 transition-colors group"><div class="text-2xl mb-2"><span class="text-gold">◇</span></div><h4 class="font-heading text-xs text-gold tracking-wider mb-1">Site plans with every job</h4><p class="text-sm font-light text-white/60">With every Blue Tide job: free renderings, free site plans, free architectural drawings, and free permit submissions.</p><span class="mt-3 inline-block font-heading text-xs text-gold group-hover:text-gold-light transition-colors">See what’s included →</span></a></div><div class="grid grid-cols-2 md:grid-cols-4 gap-8"><div><h4 class="font-heading text-xs text-white mb-4 tracking-wider">CONTACT</h4><ul class="space-y-2 text-xs sm:text-sm font-light text-white/40"><li><a href="https://www.google.com/maps/search/?api=1&amp;query=Blue+Tide+Exteriors+1780+E+Bert+Kouns+Industrial+Loop+Ste+907+Shreveport+LA+71105" target="_blank" rel="noopener noreferrer" class="hover:text-gold transition-colors">1780 E Bert Kouns Industrial Loop Ste 907</a></li><li><a href="https://www.google.com/maps/search/?api=1&amp;query=Blue+Tide+Exteriors+1780+E+Bert+Kouns+Industrial+Loop+Ste+907+Shreveport+LA+71105" target="_blank" rel="noopener noreferrer" class="hover:text-gold transition-colors">Shreveport, LA 71105</a></li><li><a href="tel:+13182428225" class="hover:text-gold transition-colors">(318) 242-8225</a></li><li><a href="/free-estimate" class="text-gold hover:text-gold-light transition-colors">
571Book free 25-minute Google Meet</a></li><li class="pt-2 text-[11px]">Mon–Fri 8AM–5PM · Sat 8AM–5PM</li></ul></div><div><h4 class="font-heading text-xs text-white mb-4 tracking-wider">OUR SERVICES</h4><ul class="space-y-1.5 text-xs sm:text-sm font-light text-white/40"><li><a href="/patios" class="hover:text-gold transition-colors">Patios &amp; Decking</a></li><li><a href="/pergolas-pavilions" class="hover:text-gold transition-colors">Pergolas &amp; Pavilions</a></li><li><a href="/screen-enclosures" class="hover:text-gold transition-colors">Screen Enclosures</a></li><li><a href="/sunrooms" class="hover:text-gold transition-colors">Sunrooms</a></li><li><a href="/outdoor-kitchens" class="hover:text-gold transition-colors">Outdoor Kitchens</a></li><li><a href="/fire-features" class="hover:text-gold transition-colors">Fire Features</a></li><li><a href="/eze-breeze" class="hover:text-gold transition-colors">Eze-Breeze 3-Season</a></li><li><a href="/retractable-screens" class="hover:text-gold transition-colors">Retractable Screens</a></li><li><a href="/water-features" class="hover:text-gold transition-colors">Water Features</a></li><li><a href="/shotcrete-pools" class="hover:text-gold transition-colors">Shotcrete/Gunite Pools</a></li><li><a href="/vinyl-liner-pools" class="hover:text-gold transition-colors">Vinyl Liner Pools</a></li><li><a href="/concrete" class="hover:text-gold transition-colors">Concrete</a></li><li><a href="/roofing" class="hover:text-gold transition-colors">Roofing</a></li><li><a href="/siding" class="hover:text-gold transition-colors">Siding</a></li><li><a href="/commercial" class="hover:text-gold transition-colors">Commercial</a></li><li><a href="/financing" class="hover:text-gold transition-colors">Financing</a></li><li><a href="/warranty" class="hover:text-gold transition-colors">Warranty</a></li><li><a href="/reviews" class="hover:text-gold transition-colors">Reviews</a></li><li><a href="/contact" class="hover:text-gold transition-colors">Contact</a></li><li><a href="/blog" class="hover:text-gold transition-colors">Blog</a></li></ul></div><div><h4 class="font-heading text-xs text-white mb-4 tracking-wider">SERVICE AREAS</h4><ul class="grid grid-cols-2 gap-x-2 gap-y-1.5 text-xs sm:text-sm font-light text-white/40"><li><a href="/cities/shreveport" class="hover:text-gold transition-colors">Shreveport</a></li><li><a href="/cities/bossier-city" class="hover:text-gold transition-colors">Bossier City</a></li><li><a href="/cities/mansfield" class="hover:text-gold transition-colors">Mansfield</a></li><li><a href="/cities/minden" class="hover:text-gold transition-colors">Minden</a></li><li><a href="/cities/haughton" class="hover:text-gold transition-colors">Haughton</a></li><li><a href="/cities/benton" class="hover:text-gold transition-colors">Benton</a></li><li><a href="/cities/stonewall" class="hover:text-gold transition-colors">Stonewall</a></li><li><a href="/cities/keithville" class="hover:text-gold transition-colors">Keithville</a></li><li><a href="/cities/blanchard" class="hover:text-gold transition-colors">Blanchard</a></li><li><a href="/cities/greenwood" class="hover:text-gold transition-colors">Greenwood</a></li><li><a href="/cities/marshall" class="hover:text-gold transition-colors">Marshall, TX</a></li><li><a href="/cities/carthage" class="hover:text-gold transition-colors">Carthage, TX</a></li><li><a href="/cities/keachi" class="hover:text-gold transition-colors">Keachi</a></li><li><a href="/cities/mooringsport" class="hover:text-gold transition-colors">Mooringsport</a></li><li><a href="/cities/oil-city" class="hover:text-gold transition-colors">Oil City</a></li><li><a href="/cities/grand-cane" class="hover:text-gold transition-colors">Grand Cane</a></li><li><a href="/cities/spring-ridge" class="hover:text-gold transition-colors">Spring Ridge</a></li><li><a href="/cities/bethany" class="hover:text-gold transition-colors">Bethany</a></li><li><a href="/cities/princeton" class="hover:text-gold transition-colors">Princeton</a></li><li><a href="/cities/elm-grove" class="hover:text-gold transition-colors">Elm Grove</a></li><li><a href="/cities/waskom" class="hover:text-gold transition-colors">Waskom, TX</a></li><li><a href="/cities/frierson" class="hover:text-gold transition-colors">Frierson</a></li></ul></div><div><h4 class="font-heading text-xs text-white mb-4 tracking-wider">LICENSES</h4><ul class="space-y-1.5 text-xs sm:text-sm font-light text-white/40"><li>LA License #00138 · #74493</li><li>HI.561286 · QP.8977026</li><li>$2M General Liability Insurance</li><li>BBB A+ Accredited</li><li>NAHB &amp; HBA NW Louisiana Member</li><li>Houzz Best of 2023</li></ul></div></div><div class="mt-10 pt-6 border-t border-white/10 flex flex-col sm:flex-row items-center justify-between gap-3 text-[11px] text-white/30 font-light"><p>© <!-- -->2026<!-- --> Blue Tide Exteriors, LLC. All rights reserved.</p><a href="/privacy" class="hover:text-gold transition-colors">Privacy Policy</a><p>Licensed · Bonded · Insured · Serving North Louisiana &amp; East Texas Since 2018</p></div></div></footer></div>
571<script>(function(a,f){let l;try{l=JSON.parse(sessionStorage.getItem(a)||"{}")}catch{return}const n=l?.[f||history.state?.__TSR_key];let c=!1;for(const t in n){const e=n[t],o=e?.scrollX,s=e?.scrollY;if(Number.isFinite(o)&&Number.isFinite(s)){if(t==="window")scrollTo(o,s),c=!0;else if(t)try{const r=document.querySelector(t);r&&(r.scrollLeft=o,r.scrollTop=s)}catch{}}}if(c)return;const i=location.hash.slice(1);if(i){const t=history.state?.__hashScrollIntoViewOptions??!0;if(t){const e=document.getElementById(i);e&&e.scrollIntoView(t)}return}scrollTo(0,0)})("tsr-scroll-restoration-v1_3");document.currentScript.remove()</script>
571<!--/$-->
571<script class="$tsr" id="$tsr-stream-barrier">(self.$R=self.$R||{})["tsr"]=[];self.$_TSR={h(){this.hydrated=!0,this.c()},e(){this.streamEnded=!0,this.c()},c(){this.hydrated&&this.streamEnded&&(delete self.$_TSR,delete self.$R.tsr)},p(e){this.initialized?e():this.buffer.push(e)},buffer:[]};$_TSR.router=($R=>$R[0]={manifest:$R[1]={routes:$R[2]={__root__:$R[3]={preloads:$R[4]=["/assets/index-Bl3BsNxA.js"],scripts:$R[5]=[$R[6]={attrs:$R[7]={type:"module",async:!0,src:"/assets/index-Bl3BsNxA.js"}}]},"/about":$R[8]={preloads:$R[9]=["/assets/about-BZwSTrEC.js"]}}},matches:$R[10]=[$R[11]={i:"__root__�",u:1791488151903,s:"success",ssr:!0},$R[12]={i:"�about�about",u:1791488151903,s:"success",ssr:!0}],lastMatchId:"�about�about"})($R["tsr"]);$_TSR.e();document.currentScript.remove()</script>
571<script type="module" async="" src="/assets/index-Bl3BsNxA.js"></script>
571<a href="tel:+13182428225" class="fixed bottom-6 right-6 z-50 flex items-center gap-2 bg-[#c5a572] px-5 py-3 rounded-full text-[#0f1623] font-heading text-sm font-medium shadow-2xl hover:bg-[#d4b882] transition-all hover:scale-105" aria-label="Call Blue Tide Exteriors"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-6-6 19.79 19.79 0 01-3.07-8.67A2 2 0 014.11 2h3a2 2 0 012 1.72c.127.96.36 1.9.7 2.81a2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.91.34 1.85.573 2.81.7A2 2 0 0122 16.92z"></path></svg><span class="hidden sm:inline">Call (318) 242-8225</span><span class="sm:hidden">Call</span></a>
571<script src="https://link.msgsndr.com/js/external-tracking.js" data-tracking-id="tk_debca0aa016e4c7d8104c8a55df82b52"></script>
571<video id="callie-video" autoPlay="" playsInline="" style="position:fixed;bottom:16px;right:16px;width:280px;max-width:42vw;border-radius:16px;z-index:9999;background:#000"></video>
571<script type="module" src="/callie.js"></script>
571<script>(function(){var t=setInterval(function(){var w=document.getElementById('hf-watermark');if(w){w.remove();clearInterval(t)}},50);setTimeout(function(){clearInterval(t)},3000)})()</script>
571<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"3bb1edbabb394d9288fd0e662ba9ca7e","r":1,"spa":2}' crossorigin="anonymous"></script>
571
572</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.