PageSourceSearch

https://sourcix.ai/login

html sourcix.ai collected 2026-10-05 12:40:13 UTC 14,503 bytes, 247 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3 <head>
4  
4<script>
5   (function(){var o=Storage.prototype.removeItem;Storage.prototype.removeItem=function(k){k==='base44_access_token'&&(document.cookie='base44_logout_signal=true;path=/;max-age=60;SameSite=Lax');return o.call(this,k)}})();
6  </script>
6
7  
7<script>
8   self["MonacoEnvironment"] = (function (paths) {
9          return {
10            globalAPI: false,
11            getWorkerUrl : function (moduleId, label) {
12              var result =  paths[label];
13              if (/^((http:)|(https:)|(file:)|(\/\/))/.test(result)) {
14                var currentUrl = String(window.location);
15                var currentOrigin = currentUrl.substr(0, currentUrl.length - window.location.hash.length - window.location.search.length - window.location.pathname.length);
16                if (result.substring(0, currentOrigin.length) !== currentOrigin) {
17                  var js = '/*' + label + '*/importScripts("' + result + '");';
18                  var blob = new Blob([js], { type: 'application/javascript' });
19                  return URL.createObjectURL(blob);
20                }
21              }
22              return result;
23            }
24          };
25        })({
26  "editorWorkerService": "/monacoeditorwork/editor.worker.bundle.js",
27  "typescript": "/monacoeditorwork/ts.worker.bundle.js",
28  "json": "/monacoeditorwork/json.worker.bundle.js",
29  "css": "/monacoeditorwork/css.worker.bundle.js",
30  "html": "/monacoeditorwork/html.worker.bundle.js",
31  "javascript": "/monacoeditorwork/ts.worker.bundle.js",
32  "less": "/monacoeditorwork/css.worker.bundle.js",
33  "scss": "/monacoeditorwork/css.worker.bundle.js",
34  "handlebars": "/monacoeditorwork/html.worker.bundle.js",
35  "razor": "/monacoeditorwork/html.worker.bundle.js"
36});
37  </script>
37
38  <!-- Runtime config — must execute before the Vite module scripts read
39         window.__APP_CONFIG__. `defer` keeps that order (deferred classic
40         scripts and module scripts run in document order after parsing) while
41         unblocking the HTML parser, so asset preloads start immediately
42         instead of stalling ~160ms (p75) on this API round trip.
43         Back on the .js path: Render's extension-keyed edge cache rule twice
44         pinned a wrong body under this URL despite `no-store` (2026-08-20 and
45         2026-08-24); Render has since removed that cache rule for us, so the
46         suffix is safe again. If poisoning recurs: bump the `?v=` cache key,
47         or switch the src to the extension-less /api/frontend-config route
48         (kept serving as an escape hatch). -->
49  
49<script defer="" src="/api/frontend-config.js?v=3">
50  </script>
50
51  <!-- Usercentrics CMP -->
52  
52<script type="application/javascript">
53   var isBypassEnabled = document.cookie.split(';').some(function(cookie) {
54        return cookie.trim().indexOf('no_cmp=') === 0;
55      });
56      var UC_UI_SUPPRESS_CMP_DISPLAY = isBypassEnabled;
57  </script>
57
58  
58<script async="" src="https://accounts.google.com/gsi/client">
59  </script>
59
60  <meta charset="utf-8"/>
61  <!-- Platform favicon: a real multi-size ICO (16/32/48) of the current sun
62         mark, served from public/. This is the ONLY rel="icon" link, and it
63         must stay that way — App.js rewrites the first match for backoffice.
64         Crawlers and link scrapers read this tag (and probe /favicon.ico
65         directly) with no JS, so the brand has to be correct statically. -->
66  <link href="https://media.base44.com/images/public/6a06070e11ba1acb9b52af8a/5dd445d95_Stickers15.png" rel="icon" sizes="any"/>
67  
67<script>
68   // Pre-paint theme stamp for the demo Appearance (demo-appearance-themes)
69      // cohort: on a hard load the theme is applied by React (DemoThemeApplier)
70      // only after auth resolves, so the document boots light — a white flash,
71      // then light route skeletons (the FOUC this removes). DemoThemeApplier
72      // persists 'demo-display-theme-applied' only while the feature is active,
73      // so every other cohort (flag-off, native, backoffice, runtime apps)
74      // never sets it and this stays a no-op. React stays the source of truth
75      // after mount: DemoThemeApplier
76      // re-applies or clears these exact attributes. Keys must stay byte-identical
77      // with components/settings/useDemoTheme.ts — BOOT_STAMP_CONTRACT there is
78      // asserted against this file by useDemoTheme.spec.ts, so update both.
79      //
80      // Kill-switch caveat: the marker is written while the feature is active and
81      // only cleared once /me resolves. On the FIRST load after a user loses the
82      // flag — or after the kill switch is flipped mid-incident — this still
83      // stamps dark, then React settles to light: one dark→light flash, which
84      // self-heals from the next load on. Flipping the switch does not repaint
85      // already-open tabs pre-paint; it collapses them on their next load.
86      try {
87        if (localStorage.getItem('demo-display-theme-applied') === '1') {
88          var demoTheme = localStorage.getItem('demo-display-theme');
89          var demoDark = demoTheme === 'dark' ||
90            (demoTheme === 'system' && window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches);
91          if (demoDark) {
92            var demoRoot = document.documentElement;
93            demoRoot.setAttribute('data-ds', 'base44');
94            demoRoot.setAttribute('data-theme', 'dark');
95            demoRoot.classList.add('dark');
96            // Kill the pre-CSS white document flash; the app paints over it.
97            demoRoot.style.backgroundColor = '#09090b';
98          }
99        }
100      } catch (e) {}
101  </script>
101
102  <meta content="width=device-width, initial-scale=1.0, viewport-fit=cover" name="viewport"/>
103  <meta content="#000000" name="theme-color"/>
104  <meta content="How AI Transforms Manufacturing Procurement
105
106" name="description"/>
107  <meta content="yes" name="mobile-web-app-capable"/>
108  <meta content="black" name="apple-mobile-web-app-status-bar-style"/>
109  <meta content="SOURCIX From MVP to Scale" name="apple-mobile-web-app-title"/>
110  <link href="https://media.base44.com/images/public/6a06070e11ba1acb9b52af8a/5dd445d95_Stickers15.png" rel="apple-touch-icon" sizes="180x180"/>
111  <link href="https://sourcix.ai/manifest.json" rel="manifest"/>
112  <title>
113   SOURCIX From MVP to Scale
114  </title>
115  <!-- Open Graph / Facebook -->
116  <meta content="website" property="og:type"/>
117  <meta content="https://sourcix.ai/login" property="og:url"/>
118  <meta content="SOURCIX From MVP to Scale" property="og:title"/>
119  <meta content="SOURCIX From MVP to Scale" property="og:site_name"/>
120  <meta content="How AI Transforms Manufacturing Procurement
121
122" property="og:description"/>
123  <meta content="https://media.base44.com/images/public/6a06070e11ba1acb9b52af8a/5dd445d95_Stickers15.png/v1/fill/w_1200,h_630/5dd445d95_Stickers15.png" property="og:image"/>
124  <meta content="1200" property="og:image:width"/>
125  <meta content="630" property="og:image:height"/>
126  <meta content="Base44 link preview" property="og:image:alt"/>
127  <!-- Twitter -->
128  <meta content="summary_large_image" name="twitter:card"/>
129  <meta content="https://sourcix.ai/login" name="twitter:url"/>
130  <meta content="SOURCIX From MVP to Scale" name="twitter:title"/>
131  <meta content="How AI Transforms Manufacturing Procurement
132
133" name="twitter:description"/>
134  <meta content="https://media.base44.com/images/public/6a06070e11ba1acb9b52af8a/5dd445d95_Stickers15.png/v1/fill/w_1200,h_630/5dd445d95_Stickers15.png" name="twitter:image"/>
135  <meta content="Base44 link preview" name="twitter:image:alt"/>
136  
136<script crossorigin="" src="/static/index-DeildSFC.js" type="module">
137  </script>
137
138  <link crossorigin="" href="/static/rolldown-runtime-C0FnF6B9.js" rel="modulepreload"/>
139  <link crossorigin="" href="/static/runtime-QtgwY_nV.js" rel="modulepreload"/>
140  <link crossorigin="" href="/static/backend-Co7f9UUV.js" rel="modulepreload"/>
141  <link crossorigin="" href="/static/vendor-react-DpRoP2jP.js" rel="modulepreload"/>
142  <link crossorigin="" href="/static/preload-helper-BZ1Pz5am.js" rel="modulepreload"/>
143  <link crossorigin="" href="/static/vendor-data-cHhjBKlt.js" rel="modulepreload"/>
144  <link crossorigin="" href="/static/errorReporting-BHzbHGqq.js" rel="modulepreload"/>
145  <link crossorigin="" href="/static/i18n-B9IBBcMV.js" rel="modulepreload"/>
146  <link crossorigin="" href="/static/vendor-utils-C8Ev1Z53.js" rel="modulepreload"/>
147  <link crossorigin="" href="/static/mixpanelUtils-BHCI5-pb.js" rel="modulepreload"/>
148  <link crossorigin="" href="/static/bridge-Cq_Szqk4.js" rel="modulepreload"/>
149  <link crossorigin="" href="/static/axiosClient-4tN52KXT.js" rel="modulepreload"/>
150  <link crossorigin="" href="/static/domainValidation-FMKryCR2.js" rel="modulepreload"/>
151  <link crossorigin="" href="/static/vendor-ui-CBFRGyVc.js" rel="modulepreload"/>
152  <link crossorigin="" href="/static/base-B-E759Gv.js" rel="modulepreload"/>
153  <link crossorigin="" href="/static/AuthAPI-CnMB8Mzr.js" rel="modulepreload"/>
154  <link crossorigin="" href="/static/useDesignSystem-6Kcl9LIZ.js" rel="modulepreload"/>
155  <link crossorigin="" href="/static/logoutReturnPath-HjtsxsFd.js" rel="modulepreload"/>
156  <link crossorigin="" href="/static/AuthContext-hk-QjXlh.js" rel="modulepreload"/>
157  <link crossorigin="" href="/static/dist-XEn2s_wS.js" rel="modulepreload"/>
158  <link crossorigin="" href="/static/featureFlags-DsDLQ-lg.js" rel="modulepreload"/>
159  <link crossorigin="" href="/static/useHideNativeBottomTabs-1BpAstUW.js" rel="modulepreload"/>
160  <link crossorigin="" href="/static/native-mobile-app-J-txITCo.js" rel="modulepreload"/>
161  <link crossorigin="" href="/static/prop-types-D9WxI36-.js" rel="modulepreload"/>
162  <link crossorigin="" href="/static/esm-BblLZPXW.js" rel="modulepreload"/>
163  <link crossorigin="" href="/static/use-mobile-DhrgWcQS.js" rel="modulepreload"/>
164  <link crossorigin="" href="/static/create-zustand-store-BXwVBFFR.js" rel="modulepreload"/>
165  <link crossorigin="" href="/static/persist-to-storage-DzFg7MJu.js" rel="modulepreload"/>
166  <link crossorigin="" href="/static/actions.middleware-D_eRWZoy.js" rel="modulepreload"/>
167  <link crossorigin="" href="/static/WorkspaceAPI-Dytg1HPi.js" rel="modulepreload"/>
168  <link crossorigin="" href="/static/useWorkspaceUnlockState-Cg67Ec9B.js" rel="modulepreload"/>
169  <link crossorigin="" href="/static/WorkspaceContext-C8nzq2ly.js" rel="modulepreload"/>
170  <link crossorigin="" href="/static/usePlatform-CeQ0MESx.js" rel="modulepreload"/>
171  <link crossorigin="" href="/static/react-Cwiv9L0_.js" rel="modulepreload"/>
172  <link crossorigin="" href="/static/useFeatureFlags-BDagn1Q8.js" rel="modulepreload"/>
173  <link crossorigin="" href="/static/utils-CrD3uvwO.js" rel="modulepreload"/>
174  <link crossorigin="" href="/static/toast-3RODJaEC.js" rel="modulepreload"/>
175  <link crossorigin="" href="/static/index-BeiE1dWC.css" rel="stylesheet"/>
176  
176<script id="base44-runtime-tailwind-config">
177   window.tailwind = window.tailwind || {}; window.tailwind.config = { darkMode: 'class' };
178  </script>
178
179  
179<script id="base44-runtime-tailwind-cdn" src="https://cdn.tailwindcss.com">
180  </script>
180
181  
181<script>
182   (function () {
183  var titles = {"/presentation": "SOURCIX From MVP to Scale"};
184  // PascalCase boundaries -> "-", mirroring _PASCAL_BOUNDARY_RE without lookbehind
185  // (old Safari fails to PARSE a lookbehind, taking the whole script down).
186  var dashed = function (s) {
187    return s.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/([A-Z])([A-Z][a-z])/g, "$1-$2");
188  };
189  var decode = function (s) {
190    // A %2F inside ONE segment must not become a structural separator: /blog/foo%2Fbar is a
191    // dynamic slug, and letting it split would match a static /blog/foo/bar and write ITS title.
192    try { var d = decodeURIComponent(s); return d.indexOf("/") < 0 ? d : s; } catch (e) { return s; }
193  };
194  var segments = function (path) { return path.split("/").filter(Boolean).map(decode); };
195  var norm = function (path) {
196    var parts = segments(path).map(function (s) { return dashed(s).toLowerCase(); });
197    return parts.length ? "/" + parts.join("/") : "/";
198  };
199  var lastPath = location.pathname, written = document.title, on = true;
200  var sync = function () {
201    // Path only: a hash/query change is the same page, and the SDK strips its own auth
202    // params with replaceState -- neither must clobber a server-rendered title in place.
203    if (!on || location.pathname === lastPath) return;
204    lastPath = location.pathname;
205    if (document.title !== written) { on = false; return; }
206    // Write ONLY a title the map proves. An unmapped path is a dynamic route (/blog/:slug) the
207    // map cannot carry, and writing a placeholder there is destructive, not merely vague: the
208    // prerender worker runs no setUserAgent, so its capture browser reads as human and executes
209    // this script, and coordinator.js's settle wait explicitly tolerates a full navigation --
210    // a redirect landing on an unmapped path would bake the placeholder into the stored
211    // snapshot. Leaving the title alone degrades to today's behavior instead.
212    // Exact lookup only. A dash-stripped retry here would let a genuinely different /set-up
213    // claim /setup: the map carries a dash-free key only where a PascalCase boundary put the
214    // dashes there, and the client cannot tell the two apart. The map emits every reachable
215    // shape per segment instead (_client_url_variants).
216    var title = titles[norm(location.pathname)];
217    if (title === undefined) return;
218    document.title = title;
219    // Re-read: the setter stores verbatim but the getter strips and collapses whitespace, so
220    // keeping the assigned string would make the next sync() read our own write as the app's.
221    written = document.title;
222  };
223  var wrap = function (fn) {
224    // The history entry is already pushed by the time sync() runs, so a throw here would
225    // surface inside the host app's router and break navigation. This is injected into apps
226    // we cannot test, so it swallows rather than trusting the trace.
227    return function () {
228      var r = fn.apply(this, arguments);
229      try { sync(); } catch (e) {}
230      return r;
231    };
232  };
233  history.pushState = wrap(history.pushState);
234  history.replaceState = wrap(history.replaceState);
235  window.addEventListener("popstate", sync);
236})();
237  </script>
237
238  <meta content="noindex, nofollow" name="robots"/>
239 </head>
240 <body>
241  <noscript>
242   You need to enable JavaScript to run this app.
243  </noscript>
244  <div id="root">
245  </div>
246 </body>
247</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.