1<!DOCTYPE html> 2<html lang="en"> 3 <head> 4
4<script> 5 (function () { 6 var proto = XMLHttpRequest.prototype; 7 var open = proto.open, setRequestHeader = proto.setRequestHeader, send = proto.send; 8 var TOKEN_KEY = 'base44_access_token'; 9 var storedTokenHeader = function () { 10 try { return 'Bearer ' + localStorage.getItem(TOKEN_KEY); } catch (e) { return null; } 11 }; 12 var forgetStoredToken = function () { 13 try { localStorage.removeItem(TOKEN_KEY); localStorage.removeItem('token'); } catch (e) {} 14 }; 15 16 proto.open = function (method, url) { 17 this.__b44IsAuthCheck = /\/entities\/User\/me(\?|$)/.test(url); 18 return open.apply(this, arguments); 19 }; 20 21 proto.setRequestHeader = function (name, value) { 22 if (this.__b44IsAuthCheck && name.toLowerCase() === 'authorization' && value === storedTokenHeader()) { 23 this.__b44SentToken = value; 24 } 25 return setRequestHeader.call(this, name, value); 26 }; 27 28 proto.send = function () { 29 this.addEventListener('loadend', function () { 30 var rejectedTokenStillStored = this.status === 401 && this.__b44SentToken === storedTokenHeader(); 31 if (rejectedTokenStillStored) forgetStoredToken(); 32 }); 33 return send.apply(this, arguments); 34 }; 35})(); 36 </script>
36 37
37<script> 38 self["MonacoEnvironment"] = (function (paths) { 39 return { 40 globalAPI: false, 41 getWorkerUrl : function (moduleId, label) { 42 var result = paths[label]; 43 if (/^((http:)|(https:)|(file:)|(\/\/))/.test(result)) { 44 var currentUrl = String(window.location); 45 var currentOrigin = currentUrl.substr(0, currentUrl.length - window.location.hash.length - window.location.search.length - window.location.pathname.length); 46 if (result.substring(0, currentOrigin.length) !== currentOrigin) { 47 var js = '/*' + label + '*/importScripts("' + result + '");'; 48 var blob = new Blob([js], { type: 'application/javascript' }); 49 return URL.createObjectURL(blob); 50 } 51 } 52 return result; 53 } 54 }; 55 })({ 56 "editorWorkerService": "/monacoeditorwork/editor.worker.bundle.js", 57 "typescript": "/monacoeditorwork/ts.worker.bundle.js", 58 "json": "/monacoeditorwork/json.worker.bundle.js", 59 "css": "/monacoeditorwork/css.worker.bundle.js", 60 "html": "/monacoeditorwork/html.worker.bundle.js", 61 "javascript": "/monacoeditorwork/ts.worker.bundle.js", 62 "less": "/monacoeditorwork/css.worker.bundle.js", 63 "scss": "/monacoeditorwork/css.worker.bundle.js", 64 "handlebars": "/monacoeditorwork/html.worker.bundle.js", 65 "razor": "/monacoeditorwork/html.worker.bundle.js" 66}); 67 </script>
67 68 <!-- Runtime config â must execute before the Vite module scripts read 69 window.__APP_CONFIG__. `defer` keeps that order (deferred classic 70 scripts and module scripts run in document order after parsing) while 71 unblocking the HTML parser, so asset preloads start immediately 72 instead of stalling ~160ms (p75) on this API round trip. 73 Back on the .js path: Render's extension-keyed edge cache rule twice 74 pinned a wrong body under this URL despite `no-store` (2026-08-20 and 75 2026-08-24); Render has since removed that cache rule for us, so the 76 suffix is safe again. If poisoning recurs: bump the `?v=` cache key, 77 or switch the src to the extension-less /api/frontend-config route 78 (kept serving as an escape hatch). --> 79
79<script defer="" src="/api/frontend-config.js?v=3"> 80 </script>
80 81 <!-- Usercentrics CMP --> 82
82<script type="application/javascript"> 83 var isBypassEnabled = document.cookie.split(';').some(function(cookie) { 84 return cookie.trim().indexOf('no_cmp=') === 0; 85 }); 86 var UC_UI_SUPPRESS_CMP_DISPLAY = isBypassEnabled; 87 </script>
87 88
88<script async="" src="https://accounts.google.com/gsi/client"> 89 </script>
89 90 <meta charset="utf-8"/> 91 <!-- Platform favicon: a real multi-size ICO (16/32/48) of the current sun 92 mark, served from public/. This is the ONLY rel="icon" link, and it 93 must stay that way â App.js rewrites the first match for backoffice. 94 Crawlers and link scrapers read this tag (and probe /favicon.ico 95 directly) with no JS, so the brand has to be correct statically. --> 96 <link href="https://media.base44.com/images/public/6a2f05cf41b9f873838b40cb/84f7454e4_logo.png" rel="icon" sizes="any"/> 97
97<script> 98 // Pre-paint theme stamp for the demo Appearance (demo-appearance-themes) 99 // cohort: on a hard load the theme is applied by React (DemoThemeApplier) 100 // only after auth resolves, so the document boots light â a white flash, 101 // then light route skeletons (the FOUC this removes). DemoThemeApplier 102 // persists 'demo-display-theme-applied' only while the feature is active, 103 // so every other cohort (flag-off, native, backoffice, runtime apps) 104 // never sets it and this stays a no-op. React stays the source of truth 105 // after mount: DemoThemeApplier 106 // re-applies or clears these exact attributes. Keys must stay byte-identical 107 // with components/settings/useDemoTheme.ts â BOOT_STAMP_CONTRACT there is 108 // asserted against this file by useDemoTheme.spec.ts, so update both. 109 // 110 // Kill-switch caveat: the marker is written while the feature is active and 111 // only cleared once /me resolves. On the FIRST load after a user loses the 112 // flag â or after the kill switch is flipped mid-incident â this still 113 // stamps dark, then React settles to light: one darkâlight flash, which 114 // self-heals from the next load on. Flipping the switch does not repaint 115 // already-open tabs pre-paint; it collapses them on their next load. 116 try { 117 if (localStorage.getItem('demo-display-theme-applied') === '1') { 118 var demoTheme = localStorage.getItem('demo-display-theme'); 119 var demoDark = demoTheme === 'dark' || 120 (demoTheme === 'system' && window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches); 121 if (demoDark) { 122 var demoRoot = document.documentElement; 123 demoRoot.setAttribute('data-ds', 'base44'); 124 demoRoot.setAttribute('data-theme', 'dark'); 125 demoRoot.classList.add('dark'); 126 // Kill the pre-CSS white document flash; the app paints over it. 127 demoRoot.style.backgroundColor = '#09090b'; 128 } 129 } 130 } catch (e) {} 131 </script>
131 132 <meta content="width=device-width, initial-scale=1.0, viewport-fit=cover" name="viewport"/> 133 <meta content="#000000" name="theme-color"/> 134 <meta content="An industrial-grade digital forge for Screen Mulisha, enabling custom apparel orders, real-time print status tracking, and expert design consultation for high-volume textile production." name="description"/> 135 <meta content="yes" name="mobile-web-app-capable"/> 136 <meta content="black" name="apple-mobile-web-app-status-bar-style"/> 137 <meta content="Screen Mulisha" name="apple-mobile-web-app-title"/> 138 <link href="https://media.base44.com/images/public/6a2f05cf41b9f873838b40cb/84f7454e4_logo.png" rel="apple-touch-icon" sizes="180x180"/> 139 <link href="https://diligent-ink-press-flow.base44.app/manifest.json" rel="manifest"/> 140 <title> 141 About | Screen Mulisha 142 </title> 143 <!-- Open Graph / Facebook --> 144 <meta content="website" property="og:type"/> 145 <meta content="https://diligent-ink-press-flow.base44.app/about" property="og:url"/> 146 <meta content="About | Screen Mulisha" property="og:title"/> 147 <meta content="Screen Mulisha" property="og:site_name"/> 148 <meta content="An industrial-grade digital forge for Screen Mulisha, enabling custom apparel orders, real-time print status tracking, and expert design consultation for high-volume textile production." property="og:description"/> 149 <meta content="https://media.base44.com/images/public/6a2f05cf41b9f873838b40cb/84f7454e4_logo.png/v1/fill/w_1200,h_630/84f7454e4_logo.png" property="og:image"/> 150 <meta content="1200" property="og:image:width"/> 151 <meta content="630" property="og:image:height"/> 152 <meta content="Base44 link preview" property="og:image:alt"/> 153 <!-- Twitter --> 154 <meta content="summary_large_image" name="twitter:card"/> 155 <meta content="https://diligent-ink-press-flow.base44.app/about" name="twitter:url"/> 156 <meta content="About | Screen Mulisha" name="twitter:title"/> 157 <meta content="An industrial-grade digital forge for Screen Mulisha, enabling custom apparel orders, real-time print status tracking, and expert design consultation for high-volume textile production." name="twitter:description"/> 158 <meta content="https://media.base44.com/images/public/6a2f05cf41b9f873838b40cb/84f7454e4_logo.png/v1/fill/w_1200,h_630/84f7454e4_logo.png" name="twitter:image"/> 159 <meta content="Base44 link preview" name="twitter:image:alt"/> 160
160<script crossorigin="" src="/static/index-D96eRrlv.js" type="module"> 161 </script>
161 162 <link crossorigin="" href="/static/rolldown-runtime-C0FnF6B9.js" rel="modulepreload"/> 163 <link crossorigin="" href="/static/runtime-QtgwY_nV.js" rel="modulepreload"/> 164 <link crossorigin="" href="/static/backend-CC2lXJt_.js" rel="modulepreload"/> 165 <link crossorigin="" href="/static/vendor-react-Ccu8BlQU.js" rel="modulepreload"/> 166 <link crossorigin="" href="/static/preload-helper-BZ1Pz5am.js" rel="modulepreload"/> 167 <link crossorigin="" href="/static/vendor-data-D4IPhVFk.js" rel="modulepreload"/> 168 <link crossorigin="" href="/static/errorReporting-C8KVtz7O.js" rel="modulepreload"/> 169 <link crossorigin="" href="/static/i18n-pkgydE_c.js" rel="modulepreload"/> 170 <link crossorigin="" href="/static/vendor-utils-C8Ev1Z53.js" rel="modulepreload"/> 171 <link crossorigin="" href="/static/mixpanelUtils-CtEUaRBr.js" rel="modulepreload"/> 172 <link crossorigin="" href="/static/bridge-Cq_Szqk4.js" rel="modulepreload"/> 173 <link crossorigin="" href="/static/axiosClient-DnVO32-R.js" rel="modulepreload"/> 174 <link crossorigin="" href="/static/domainValidation-FMKryCR2.js" rel="modulepreload"/> 175 <link crossorigin="" href="/static/vendor-ui-C97dD7rv.js" rel="modulepreload"/> 176 <link crossorigin="" href="/static/base-DLGBKAFy.js" rel="modulepreload"/> 177 <link crossorigin="" href="/static/AuthAPI-C4-6oDY6.js" rel="modulepreload"/> 178 <link crossorigin="" href="/static/useDesignSystem-CehPfIkU.js" rel="modulepreload"/> 179 <link crossorigin="" href="/static/logoutReturnPath-HjtsxsFd.js" rel="modulepreload"/> 180 <link crossorigin="" href="/static/AuthContext-BwFq1txD.js" rel="modulepreload"/> 181 <link crossorigin="" href="/static/dist-XEn2s_wS.js" rel="modulepreload"/> 182 <link crossorigin="" href="/static/featureFlags-DkMoeXMw.js" rel="modulepreload"/> 183 <link crossorigin="" href="/static/useHideNativeBottomTabs-C_i-vpDp.js" rel="modulepreload"/> 184 <link crossorigin="" href="/static/native-mobile-app-DhQk5gto.js" rel="modulepreload"/> 185 <link crossorigin="" href="/static/prop-types-D9WxI36-.js" rel="modulepreload"/> 186 <link crossorigin="" href="/static/esm-BcdKrTNz.js" rel="modulepreload"/> 187 <link crossorigin="" href="/static/use-mobile-CaU875wk.js" rel="modulepreload"/> 188 <link crossorigin="" href="/static/create-zustand-store-BANj7DdM.js" rel="modulepreload"/> 189 <link crossorigin="" href="/static/persist-to-storage-BFlqrUp_.js" rel="modulepreload"/> 190 <link crossorigin="" href="/static/actions.middleware-D_eRWZoy.js" rel="modulepreload"/> 191 <link crossorigin="" href="/static/WorkspaceAPI-NXczXWIe.js" rel="modulepreload"/> 192 <link crossorigin="" href="/static/useWorkspaceUnlockState-CC8XdN-l.js" rel="modulepreload"/> 193 <link crossorigin="" href="/static/WorkspaceContext-SU9dVSL0.js" rel="modulepreload"/> 194 <link crossorigin="" href="/static/usePlatform-C2eTT50O.js" rel="modulepreload"/> 195 <link crossorigin="" href="/static/react-BanELCRV.js" rel="modulepreload"/> 196 <link crossorigin="" href="/static/useFeatureFlags-BRZVRkZF.js" rel="modulepreload"/> 197 <link crossorigin="" href="/static/utils-CrD3uvwO.js" rel="modulepreload"/> 198 <link crossorigin="" href="/static/toast-8IacIur2.js" rel="modulepreload"/> 199 <link crossorigin="" href="/static/index-BGSEU5bQ.css" rel="stylesheet"/> 200
200<script id="base44-runtime-tailwind-config"> 201 window.tailwind = window.tailwind || {}; window.tailwind.config = { darkMode: 'class' }; 202 </script>
202 203
203<script id="base44-runtime-tailwind-cdn" src="https://cdn.tailwindcss.com"> 204 </script>
204 205
205<script> 206 (function () { 207 var titles = {"/": "Screen Mulisha", "/services": "Services | Screen Mulisha", "/portfolio": "Portfolio | Screen Mulisha", "/about": "About | Screen Mulisha", "/contact": "Contact | Screen Mulisha", "/home": "Screen Mulisha"}; 208 // PascalCase boundaries -> "-", mirroring _PASCAL_BOUNDARY_RE without lookbehind 209 // (old Safari fails to PARSE a lookbehind, taking the whole script down). 210 var dashed = function (s) { 211 return s.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/([A-Z])([A-Z][a-z])/g, "$1-$2"); 212 }; 213 var decode = function (s) { 214 // A %2F inside ONE segment must not become a structural separator: /blog/foo%2Fbar is a 215 // dynamic slug, and letting it split would match a static /blog/foo/bar and write ITS title. 216 try { var d = decodeURIComponent(s); return d.indexOf("/") < 0 ? d : s; } catch (e) { return s; } 217 }; 218 var segments = function (path) { return path.split("/").filter(Boolean).map(decode); }; 219 var norm = function (path) { 220 var parts = segments(path).map(function (s) { return dashed(s).toLowerCase(); }); 221 return parts.length ? "/" + parts.join("/") : "/"; 222 }; 223 var lastPath = location.pathname, written = document.title, on = true; 224 var sync = function () { 225 // Path only: a hash/query change is the same page, and the SDK strips its own auth 226 // params with replaceState -- neither must clobber a server-rendered title in place. 227 if (!on || location.pathname === lastPath) return; 228 lastPath = location.pathname; 229 if (document.title !== written) { on = false; return; } 230 // Write ONLY a title the map proves. An unmapped path is a dynamic route (/blog/:slug) the 231 // map cannot carry, and writing a placeholder there is destructive, not merely vague: the 232 // prerender worker runs no setUserAgent, so its capture browser reads as human and executes 233 // this script, and coordinator.js's settle wait explicitly tolerates a full navigation -- 234 // a redirect landing on an unmapped path would bake the placeholder into the stored 235 // snapshot. Leaving the title alone degrades to today's behavior instead. 236 // Exact lookup only. A dash-stripped retry here would let a genuinely different /set-up 237 // claim /setup: the map carries a dash-free key only where a PascalCase boundary put the 238 // dashes there, and the client cannot tell the two apart. The map emits every reachable 239 // shape per segment instead (_client_url_variants). 240 var title = titles[norm(location.pathname)]; 241 if (title === undefined) return; 242 document.title = title; 243 // Re-read: the setter stores verbatim but the getter strips and collapses whitespace, so 244 // keeping the assigned string would make the next sync() read our own write as the app's. 245 written = document.title; 246 }; 247 var wrap = function (fn) { 248 // The history entry is already pushed by the time sync() runs, so a throw here would 249 // surface inside the host app's router and break navigation. This is injected into apps 250 // we cannot test, so it swallows rather than trusting the trace. 251 return function () { 252 var r = fn.apply(this, arguments); 253 try { sync(); } catch (e) {} 254 return r; 255 }; 256 }; 257 history.pushState = wrap(history.pushState); 258 history.replaceState = wrap(history.replaceState); 259 window.addEventListener("popstate", sync); 260})(); 261 </script>
261 262 <link href="https://diligent-ink-press-flow.base44.app/about" rel="canonical"/> 263
263<script data-seo-source="builder" type="application/ld+json"> 264 {"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://diligent-ink-press-flow.base44.app/"}, {"@type": "ListItem", "position": 2, "name": "about", "item": "https://diligent-ink-press-flow.base44.app/about"}]} 265 </script>
265 266 </head> 267 <body> 268 <noscript> 269 You need to enable JavaScript to run this app. 270 </noscript> 271 <div id="root"> 272 <div data-seo-source="builder" id="seo-snapshot" style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;"> 273 <main> 274 <header> 275 <h1> 276 About | Screen Mulisha 277 </h1> 278 <p> 279 An industrial-grade digital forge for Screen Mulisha, enabling custom apparel orders, real-time print status tracking, and expert design consultation for high-volume textile production. 280 </p> 281 </header> 282 <nav aria-label="Pages"> 283 <h2> 284 Pages 285 </h2> 286 <ul> 287 <li> 288 <a href="/"> 289 Home 290 </a> 291 </li> 292 <li> 293 <a href="/services"> 294 Services Page 295 </a> 296 </li> 297 <li> 298 <a href="/portfolio"> 299 Portfolio 300 </a> 301 </li> 302 <li> 303 <a href="/about"> 304 About 305 </a> 306 </li> 307 <li> 308 <a href="/contact"> 309 Contact 310 </a> 311 </li> 312 </ul> 313 </nav> 314 </main> 315 </div> 316 </div> 317 </body> 318</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.