diff --git a/asset-manifest.json b/asset-manifest.json index 0f23b40..6b3adec 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,16 +1,16 @@ { "files": { "main.css": "/marketing/static/css/main.67996bb4.css", - "main.js": "/marketing/static/js/main.49c75127.js", + "main.js": "/marketing/static/js/main.71a43a15.js", "static/js/453.07ac58d2.chunk.js": "/marketing/static/js/453.07ac58d2.chunk.js", "static/media/video-bg.jpg": "/marketing/static/media/video-bg.9175b7a55537b6f378d4.jpg", "index.html": "/marketing/index.html", "main.67996bb4.css.map": "/marketing/static/css/main.67996bb4.css.map", - "main.49c75127.js.map": "/marketing/static/js/main.49c75127.js.map", + "main.71a43a15.js.map": "/marketing/static/js/main.71a43a15.js.map", "453.07ac58d2.chunk.js.map": "/marketing/static/js/453.07ac58d2.chunk.js.map" }, "entrypoints": [ "static/css/main.67996bb4.css", - "static/js/main.49c75127.js" + "static/js/main.71a43a15.js" ] } \ No newline at end of file diff --git a/images/user1.jpg b/images/user1.jpg index 413a70b..c6bac6a 100644 Binary files a/images/user1.jpg and b/images/user1.jpg differ diff --git a/images/user2.jpg b/images/user2.jpg index 1a78f2e..6d9e409 100644 Binary files a/images/user2.jpg and b/images/user2.jpg differ diff --git a/images/user3.jpg b/images/user3.jpg index da440b4..539a89d 100644 Binary files a/images/user3.jpg and b/images/user3.jpg differ diff --git a/images/user4.jpg b/images/user4.jpg new file mode 100644 index 0000000..82016cd Binary files /dev/null and b/images/user4.jpg differ diff --git a/index.html b/index.html index 38425e4..cde228c 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -
a||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + \"07ac58d2\" + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"safeqr-marketing-app:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/marketing/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunksafeqr_marketing_app\"] = self[\"webpackChunksafeqr_marketing_app\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","import React, { useState, useEffect } from \"react\";\n\nconst Header: React.FC = () => {\n const [fix, setFix] = useState(false);\n\n useEffect(() => {\n function setFixed() {\n if (window.scrollY > 0) {\n setFix(true);\n return;\n } \n setFix(false);\n }\n window.addEventListener(\"scroll\", setFixed);\n // Cleanup function\n return () => {\n window.removeEventListener(\"scroll\", setFixed);\n };\n }, []);\n\n return (\n \n );\n};\n\nexport default Header;\n","import React from \"react\";\n\nconst Banner: React.FC = () => {\n return (\n \n Safe QR is a mobile app designed for\n scanning QR codes, offering a simple and\n effective QR code scanning service. The app\n is easy to use and provides an interactive\n and intuitive experience for users. With\n Safe QR, you can quickly scan QR codes with\n a peace of mind.\n \n Currently, in the QR code security landscape, there is a gap in comprehensive protection against potential \n threats posed by malicious QR codes. Existing solutions often provide basic functionality, such as scanning QR \n codes to extract website URLs. However, these applications lack robust security measures to defend users against \n various types of malicious content embedded within QR codes.\n \n Our intention with the SafeQR project is to bridge this gap by developing a comprehensive mobile application \n that offers advanced security features for scanning and interacting with QR codes. Unlike existing solutions \n that primarily focus on verifying website URLs, our app aims to take a more proactive and broad approach to QR \n code security.\n \n The application will have the capability to scan QR codes directly using a camera or from saved images.\n \n Designed to function seamlessly on both iOS and Android platforms, ensuring a broad user base can \n benefit from the application's protective features.\n \n To enhance security, the application will open links in a sandboxed environment. This protected mode \n helps isolate and contain potential threats away from the user's device.\n Safe QR is a mobile app designed for scanning QR codes, offering a simple and effective QR code scanning service. The app is \n easy to use and provides an interactive and intuitive experience for users. With Safe QR, you can quickly scan QR codes with \n high-quality results. The security of the connection to the website associated with the QR code by verifying its SSL/TLS certificate. Preview the contents of a URL to assess its relevance and safety before deciding to proceed with opening it. Copy the contents of the URL extracted from a QR code to the device’s clipboard. View the list of saved QR codes in the application's history for reference. Open the scanned QR code in your favourite browser Automatically saved to the application's history for future reference or sharing. Bookmark a scanned QR code for \n easy access and reference during the payload inspection phase.\n Our mission is to pioneer the development of a robust QR code security solution that not only safeguards users from malicious\n activities but also fosters trust and confidence in QR code technology. We aim to achieve this by continuously innovating and \n adapting our solution to evolving threats while promoting collaboration and integration with other QR scanning applications. Frontend Developer System Architect Marketing Specialist, Backend Developer Team Leader, Full Stack Developer Have more Questions ? Quick response, or QR, is a type of barcode that can store a multitude of information. The obvious difference between a QR Code and Barcode is its appearance. A QR Code is always in the shape of a square and contains smaller, even blocks similar to Tetris. A Barcode, on the other hand, has vertical bars in different thicknesses and often accompanied by a serial number. Secure QR codes can be detected as faked or copied due to the loss of information that occurs when the QR code is scanned and re-printed on a counterfeit product or document. Because of its versatility, a QR Code can be programmed to do a multitude of things. It can be split into two formats: Dynamic and Static. A Dynamic QR Code is useful for businesses or nonprofits in their marketing strategy because of its advantages. Though it needs a subscription to work, it is a small price to pay compared to the benefits it offers. Dynamic QR Code solutions are editable, which means if you made a mistake and only noticed it after the QR Codes are printed, you can easily log in to the dashboard and fix them without changing the appearance of the already printed Codes. Static QR Codes are valid for as long as you want and will never expire. The only instance where the Code might “expire” is when the link is changed or deleted, rendering it unscannable. Once generated, a Static Code cannot be edited and its scans cannot be tracked. Dynamic Code, on the other hand, is very flexible and is virtually indestructible. You can update its content, change/add links, and fix typos; even after print. You can also track the number of scans, including where and when. Not at all. You can use your brand or company colors, or whatever color you like. There are 16,777,216 colors using #RRGGBB notation so feel free to play around with the color picker! Inspired by the growing reliance on QR codes for various interactions and the increasing need for heightened \n security in the digital landscape, our motivation is to empower users with a secure and seamless QR code experience. We are driven \n by the desire to mitigate security risks associated with QR code usage and to provide users with peace of mind while engaging in\n digital transactions. Our motivation fuels our commitment to innovation and excellence in developing a solution that addresses \n the evolving challenges of QR code security.\n We'd love to hear from you! Whether you are curious about the features, a free Trial, We're ready to serve you! E-mail Working Hours Mon-Fri 9.00 AM to 5.00PM. a||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + \"07ac58d2\" + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"safeqr-marketing-app:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/marketing/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunksafeqr_marketing_app\"] = self[\"webpackChunksafeqr_marketing_app\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","import React, { useState, useEffect } from \"react\";\n\nconst Header: React.FC = () => {\n const [fix, setFix] = useState(false);\n\n useEffect(() => {\n function setFixed() {\n if (window.scrollY > 0) {\n setFix(true);\n return;\n } \n setFix(false);\n }\n window.addEventListener(\"scroll\", setFixed);\n // Cleanup function\n return () => {\n window.removeEventListener(\"scroll\", setFixed);\n };\n }, []);\n\n return (\n \n );\n};\n\nexport default Header;\n","import React from \"react\";\n\nconst Banner: React.FC = () => {\n return (\n \n Safe QR is a mobile app designed for\n scanning QR codes, offering a simple and\n effective QR code scanning service. The app\n is easy to use and provides an interactive\n and intuitive experience for users. With\n Safe QR, you can quickly scan QR codes with\n a peace of mind.\n \n Currently, in the QR code security landscape, there is a gap in comprehensive protection against potential \n threats posed by malicious QR codes. Existing solutions often provide basic functionality, such as scanning QR \n codes to extract website URLs. However, these applications lack robust security measures to defend users against \n various types of malicious content embedded within QR codes.\n \n Our intention with the SafeQR project is to bridge this gap by developing a comprehensive mobile application \n that offers advanced security features for scanning and interacting with QR codes. Unlike existing solutions \n that primarily focus on verifying website URLs, our app aims to take a more proactive and broad approach to QR \n code security.\n \n The application will have the capability to scan QR codes directly using a camera or from saved images.\n \n Designed to function seamlessly on both iOS and Android platforms, ensuring a broad user base can \n benefit from the application's protective features.\n \n To enhance security, the application will open links in a sandboxed environment. This protected mode \n helps isolate and contain potential threats away from the user's device.\n Safe QR is a mobile app designed for scanning QR codes, offering a simple and effective QR code scanning service. The app is \n easy to use and provides an interactive and intuitive experience for users. With Safe QR, you can quickly scan QR codes with \n high-quality results. The security of the connection to the website associated with the QR code by verifying its SSL/TLS certificate. Preview the contents of a URL to assess its relevance and safety before deciding to proceed with opening it. Copy the contents of the URL extracted from a QR code to the device’s clipboard. View the list of saved QR codes in the application's history for reference. Open the scanned QR code in your favourite browser Automatically saved to the application's history for future reference or sharing. Bookmark a scanned QR code for \n easy access and reference during the payload inspection phase.\n Our mission is to pioneer the development of a robust QR code security solution that not only safeguards users from malicious\n activities but also fosters trust and confidence in QR code technology. We aim to achieve this by continuously innovating and \n adapting our solution to evolving threats while promoting collaboration and integration with other QR scanning applications. Frontend Developer System Architect Marketing Specialist, Backend Developer Team Leader, Full Stack Developer Have more Questions ? Quick response, or QR, is a type of barcode that can store a multitude of information. The obvious difference between a QR Code and Barcode is its appearance. A QR Code is always in the shape of a square and contains smaller, even blocks similar to Tetris. A Barcode, on the other hand, has vertical bars in different thicknesses and often accompanied by a serial number. Secure QR codes can be detected as faked or copied due to the loss of information that occurs when the QR code is scanned and re-printed on a counterfeit product or document. Because of its versatility, a QR Code can be programmed to do a multitude of things. It can be split into two formats: Dynamic and Static. A Dynamic QR Code is useful for businesses or nonprofits in their marketing strategy because of its advantages. Though it needs a subscription to work, it is a small price to pay compared to the benefits it offers. Dynamic QR Code solutions are editable, which means if you made a mistake and only noticed it after the QR Codes are printed, you can easily log in to the dashboard and fix them without changing the appearance of the already printed Codes. Static QR Codes are valid for as long as you want and will never expire. The only instance where the Code might “expire” is when the link is changed or deleted, rendering it unscannable. Once generated, a Static Code cannot be edited and its scans cannot be tracked. Dynamic Code, on the other hand, is very flexible and is virtually indestructible. You can update its content, change/add links, and fix typos; even after print. You can also track the number of scans, including where and when. Not at all. You can use your brand or company colors, or whatever color you like. There are 16,777,216 colors using #RRGGBB notation so feel free to play around with the color picker! Inspired by the growing reliance on QR codes for various interactions and the increasing need for heightened \n security in the digital landscape, our motivation is to empower users with a secure and seamless QR code experience. We are driven \n by the desire to mitigate security risks associated with QR code usage and to provide users with peace of mind while engaging in\n digital transactions. Our motivation fuels our commitment to innovation and excellence in developing a solution that addresses \n the evolving challenges of QR code security.\n We'd love to hear from you! Whether you are curious about the features, a free Trial, We're ready to serve you! E-mail Working Hours Mon-Fri 9.00 AM to 5.00PM.\n Safe QR - Your Secure QR Code Scanner\n
\n
{\" \"}\n {\" \"}\n \n
About
\n \n QR Code Scanning
\n Cross Platform
\n Sandboxing for Safe Browsing
\n Features
\n \n SSL Checking
\n Payload Inspection
\n Copy payload to Clipboard
\n
History of scans
\n Open in selected browser
\n Bookmarking scans
\n Our Team
\n \n
\n Jerin Tan
\n
\n Alex Lim
\n
\n Seng Jin Hui
\n
\n MUHAMMED ISKANDER SHAH
\n Frequently Asked Questions
\n \n What is a QR Code ?
\n How do Secure QR codes work ?
\n What can a QR Code do ?
\n How long are QR Code valid for ? Do they expire ?
\n What does Static and Dynamic QR Code mean ?
\n Does QR Code have to be Black or White ?
\n Download Our App
\n \n Contact us
\n \n \n Safe QR - Your Secure QR Code Scanner\n
\n
{\" \"}\n {\" \"}\n \n
About
\n \n QR Code Scanning
\n Cross Platform
\n Sandboxing for Safe Browsing
\n Features
\n \n SSL Checking
\n Payload Inspection
\n Copy payload to Clipboard
\n
History of scans
\n Open in selected browser
\n Bookmarking scans
\n Our Team
\n \n
\n Jerin Tan
\n
\n Alex Lim
\n
\n Seng Jin Hui
\n
\n Muhammed Iskander Shah
\n Frequently Asked Questions
\n \n What is a QR Code ?
\n How do Secure QR codes work ?
\n What can a QR Code do ?
\n How long are QR Code valid for ? Do they expire ?
\n What does Static and Dynamic QR Code mean ?
\n Does QR Code have to be Black or White ?
\n Download Our App
\n \n Contact us
\n \n