rename container folders
25
mih_ui/web/.well-known/apple-app-site-association
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"applinks": {
|
||||
"apps": [],
|
||||
"details": [
|
||||
{
|
||||
"appIDs": [
|
||||
"B88N73P46W.za.co.mzansiinnovationhub.mih"
|
||||
],
|
||||
"paths": [
|
||||
"*"
|
||||
],
|
||||
"components": [
|
||||
{
|
||||
"/": "/*"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"webcredentials": {
|
||||
"apps": [
|
||||
"B88N73P46W.za.co.mzansiinnovationhub.mih"
|
||||
]
|
||||
}
|
||||
}
|
||||
15
mih_ui/web/.well-known/assetlinks.json
Normal file
@@ -0,0 +1,15 @@
|
||||
[
|
||||
{
|
||||
"relation": [
|
||||
"delegate_permission/common.handle_all_urls",
|
||||
"delegate_permission/common.get_login_creds"
|
||||
],
|
||||
"target": {
|
||||
"namespace": "android_app",
|
||||
"package_name": "za.co.mzansiinnovationhub.mih",
|
||||
"sha256_cert_fingerprints": [
|
||||
"51:4C:93:E3:11:85:C5:7A:46:A9:C4:88:B7:E4:96:7F:41:11:80:4C:A4:2D:2D:55:30:C2:0B:A6:20:25:1E:98"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
2
mih_ui/web/app-ads.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
google.com, pub-4781880856775334, DIRECT, f08c47fec0942fa0
|
||||
facebook.com, 772289761950104, DIRECT, c3e20eee3f780d68
|
||||
BIN
mih_ui/web/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
mih_ui/web/favicon.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
1
mih_ui/web/google5430e48350b861fe.html
Normal file
@@ -0,0 +1 @@
|
||||
google-site-verification: google5430e48350b861fe.html
|
||||
BIN
mih_ui/web/icons/Icon-192.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
mih_ui/web/icons/Icon-512.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
mih_ui/web/icons/Icon-maskable-192.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
mih_ui/web/icons/Icon-maskable-512.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
mih_ui/web/icons/android-chrome-192x192.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
mih_ui/web/icons/android-chrome-512x512.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
mih_ui/web/icons/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
mih_ui/web/icons/favicon-16x16.png
Normal file
|
After Width: | Height: | Size: 629 B |
BIN
mih_ui/web/icons/favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
mih_ui/web/icons/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
353
mih_ui/web/index.html
Normal file
@@ -0,0 +1,353 @@
|
||||
<!DOCTYPE html><html><head>
|
||||
<base href="/">
|
||||
|
||||
<!-- APP Description -->
|
||||
<meta charset="UTF-8">
|
||||
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
|
||||
<meta name="description" content="MIH, the first Mzansi super app by Mzansi Innovation Hub. Streamline your life with Mzansi Profile, Wallet, Patient Manager, AI, Directory, Calendar, Calculator, & secure MIH Access. Unify social, business & personal tools.">
|
||||
|
||||
<!-- iOS meta tags & icons -->
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="apple-mobile-web-app-title" content="MIH">
|
||||
|
||||
<link rel="apple-touch-icon" href="icons/apple-touch-icon.png">
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" href="favicon.ico">
|
||||
|
||||
<title>MIH App: Mzansi Innovation Hub - All-in-One Super App for Business & Personal Life</title>
|
||||
<link rel="manifest" href="manifest.json">
|
||||
|
||||
<!-- test stuff for speed -->
|
||||
<link rel="preconnect" href="https://cdnjs.cloudflare.com">
|
||||
<!-- <link rel="preload" href="flutter_bootstrap.js" as="script"> -->
|
||||
<link rel="preload" href="main.dart.js" as="script">
|
||||
|
||||
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport">
|
||||
|
||||
<!-- Splash screen -->
|
||||
|
||||
|
||||
<!-- <script src="install_pwa.js" defer=""></script> -->
|
||||
<!-- Capture PWA install prompt event -->
|
||||
<script>
|
||||
let deferredPrompt;
|
||||
|
||||
window.addEventListener('beforeinstallprompt', (e) => {
|
||||
deferredPrompt = e;
|
||||
});
|
||||
|
||||
function promptInstall() {
|
||||
deferredPrompt.prompt();
|
||||
}
|
||||
|
||||
// Listen for app install event
|
||||
window.addEventListener('appinstalled', () => {
|
||||
deferredPrompt = null;
|
||||
appInstalled();
|
||||
});
|
||||
|
||||
// Track how PWA was launched (either from browser or as PWA)
|
||||
function getLaunchMode() {
|
||||
const isStandalone = window.matchMedia('(display-mode: standalone)').matches;
|
||||
if (deferredPrompt) hasPrompt();
|
||||
if (document.referrer.startsWith('android-app://')) {
|
||||
appLaunchedAsTWA();
|
||||
} else if (navigator.standalone || isStandalone) {
|
||||
appLaunchedAsPWA();
|
||||
} else {
|
||||
window.appLaunchedInBrowser();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<!-- Splash screen -->
|
||||
<!-- <script>
|
||||
var dartPdfJsBaseUrl = "https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.2.146/";
|
||||
</script> -->
|
||||
<!--------------------->
|
||||
|
||||
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "http://schema.org",
|
||||
"@type": "SoftwareApplication",
|
||||
"name": "MIH App",
|
||||
"alternateName": "Mzansi Innovation Hub App",
|
||||
"applicationCategory": "ProductivityApplication",
|
||||
"operatingSystem": ["Android", "iOS", "Web"],
|
||||
"description": "MIH, the first super app of Mzansi, streamlines personal and business life with features like Mzansi Profile, Wallet, Patient Manager, AI, Directory, Calendar, Calculator, and MIH Access.",
|
||||
"softwareRequirements": "Internet connection",
|
||||
"offers": {
|
||||
"@type": "Offer",
|
||||
"price": "0",
|
||||
"priceCurrency": "ZAR"
|
||||
},
|
||||
"url": "https://app.mzansi-innovation-hub.co.za/",
|
||||
"sameAs": [
|
||||
"https://play.google.com/store/apps/details?id=za.co.mzansiinnovationhub.mih&hl=en_ZA",
|
||||
"https://apps.apple.com/za/app/mih-app-mzansi-innovation-hub/id6743310890"
|
||||
],
|
||||
"featureList": [
|
||||
"Mzansi Profile (Personal & Business)",
|
||||
"Mzansi Wallet (Loyalty Cards)",
|
||||
"Patient Manager (Appointment Scheduling)",
|
||||
"Mzansi AI (Chat Assistant)",
|
||||
"Mzansi Directory (People & Businesses)",
|
||||
"Integrated Calendar",
|
||||
"Calculator (Tips & Forex)",
|
||||
"MIH Access (Profile Security Management)"
|
||||
],
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "Mzansi Innovation Hub"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style id="splash-screen-style">
|
||||
html {
|
||||
height: 100%
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
min-height: 100%;
|
||||
background-color: #3A4454;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.center {
|
||||
margin: 0;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
-ms-transform: translate(-50%, -50%);
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.contain {
|
||||
display:block;
|
||||
width:100%; height:100%;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
.stretch {
|
||||
display:block;
|
||||
width:100%; height:100%;
|
||||
}
|
||||
|
||||
.cover {
|
||||
display:block;
|
||||
width:100%; height:100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.bottom {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
-ms-transform: translate(-50%, 0);
|
||||
transform: translate(-50%, 0);
|
||||
}
|
||||
|
||||
.bottomLeft {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.bottomRight {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
}
|
||||
</style>
|
||||
<script id="splash-screen-script">
|
||||
function removeSplashFromWeb() {
|
||||
document.getElementById("splash")?.remove();
|
||||
document.getElementById("splash-branding")?.remove();
|
||||
document.body.style.background = "transparent";
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<picture id="splash-branding">
|
||||
<source srcset="splash/img/branding-1x.gif 1x, splash/img/branding-2x.gif 2x, splash/img/branding-3x.gif 3x, splash/img/branding-4x.gif 4x" media="(prefers-color-scheme: light)">
|
||||
<source srcset="splash/img/branding-dark-1x.gif 1x, splash/img/branding-dark-2x.gif 2x, splash/img/branding-dark-3x.gif 3x, splash/img/branding-dark-4x.gif 4x" media="(prefers-color-scheme: dark)">
|
||||
<img class="bottom" aria-hidden="true" src="splash/img/branding-1x.gif" alt="">
|
||||
</picture>
|
||||
<picture id="splash">
|
||||
<source srcset="splash/img/light-1x.gif 1x, splash/img/light-2x.gif 2x, splash/img/light-3x.gif 3x, splash/img/light-4x.gif 4x" media="(prefers-color-scheme: light)">
|
||||
<source srcset="splash/img/dark-1x.gif 1x, splash/img/dark-2x.gif 2x, splash/img/dark-3x.gif 3x, splash/img/dark-4x.gif 4x" media="(prefers-color-scheme: dark)">
|
||||
<img class="center" aria-hidden="true" src="splash/img/light-1x.gif" alt="">
|
||||
</picture>
|
||||
|
||||
<div id="seo-content" style="display:none;">
|
||||
<h1>Mzansi Innovation Hub (MIH) - Your All-in-One Super App for South Africa</h1>
|
||||
<p>Tired of juggling multiple apps? Mzansi Innovation Hub (MIH) presents the first super app designed specifically for the people and businesses of Mzansi. MIH is your unified online information technology system to streamline both your personal and professional life, bridging the socio-economic divide during the digital revolution.</p>
|
||||
|
||||
<h2>Key Features of the MIH Super App:</h2>
|
||||
<ul>
|
||||
<li><strong>Mzansi Profile:</strong> Effortlessly manage your professional profile, personal information, and valuable business team details. Amplify your online presence.</li>
|
||||
<li><strong>Mzansi Wallet:</strong> Go digital! Securely store all your loyalty cards in one convenient place, reducing clutter.</li>
|
||||
<li><strong>Patient Manager:</strong> Revolutionize medical practices with seamless patient appointment scheduling and efficient data management.</li>
|
||||
<li><strong>Mzansi AI:</strong> Get instant support and quick answers with our friendly AI assistant, available 24/7.</li>
|
||||
<li></li><li><strong>Mzansi Directory:</strong> Discover and connect with people and businesses across Mzansi.</li>
|
||||
<li><strong>Calendar:</strong> Stay perfectly organized with an integrated calendar for all your personal and business appointments.</li>
|
||||
<li><strong>Calculator:</strong> Perform quick calculations, including tips and forex, right within the app.</li>
|
||||
<li><strong>MIH Access:</strong> Take control of your security. Easily manage and view who has access to your profile and data.</li>
|
||||
</ul>
|
||||
|
||||
<p>MIH simplifies daily tasks, reduces costs, and helps you manage your professional profile, team, and appointments all from a single, user-friendly platform. It's the essential mobile app for business owners and individuals looking to streamline their online presence in South Africa.</p>
|
||||
|
||||
<h3>Download the MIH Super App Today!</h3>
|
||||
<p>Available for Android and iOS. Search "Mzansi Innovation Hub" or "MIH App" on your app store.</p>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// Hide the SEO content once the Flutter app starts to load
|
||||
window.addEventListener('load', function() {
|
||||
const seoContent = document.getElementById('seo-content');
|
||||
if (seoContent) {
|
||||
seoContent.style.display = 'none'; // Or 'hidden'
|
||||
}
|
||||
});
|
||||
// You might need to adjust this script to ensure it hides *after* the Flutter app's visual elements are fully rendered.
|
||||
// A more robust solution might involve listening for a Flutter-specific event when the app is ready.
|
||||
</script>
|
||||
|
||||
<script>
|
||||
window.addEventListener("load", function (e) {
|
||||
document.addEventListener("focusin", function (event) {
|
||||
if (event.target.tagName === "INPUT" || event.target.tagName === "TEXTAREA") {
|
||||
event.target.setAttribute("spellcheck", "true");
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<script defer="">
|
||||
var serviceWorkerVersion = '{{flutter_service_worker_version}}';
|
||||
var scriptLoaded = false;
|
||||
var swFallbackTimeout;
|
||||
|
||||
function loadMainDartJs() {
|
||||
console.log('Loading app...');
|
||||
if (scriptLoaded) {
|
||||
return;
|
||||
}
|
||||
scriptLoaded = true;
|
||||
// Cancel Timeut
|
||||
if (swFallbackTimeout) {
|
||||
clearTimeout(swFallbackTimeout);
|
||||
console.log('Service worker loaded successfully - fallback timeout cancelled.');
|
||||
}
|
||||
{{flutter_js}}
|
||||
{{flutter_build_config}}
|
||||
_flutter.loader.load({
|
||||
serviceWorker: {
|
||||
serviceWorkerVersion: serviceWorkerVersion,
|
||||
},
|
||||
onEntrypointLoaded: function (engineInitializer) {
|
||||
engineInitializer.initializeEngine().then(function (appRunner) {
|
||||
appRunner.runApp();
|
||||
});
|
||||
}
|
||||
});
|
||||
var finishLoad = new Date();
|
||||
var loadTime = (finishLoad.getTime() - startLoad.getTime());
|
||||
console.log("Load Time: " + loadTime);
|
||||
}
|
||||
|
||||
// Helper function to strip quotes from the version placeholder
|
||||
function getCleanVersion(version) {
|
||||
return version.replace(/"/g, '');
|
||||
}
|
||||
|
||||
if ('serviceWorker' in navigator) {
|
||||
var startLoad = new Date();
|
||||
// Service workers are supported. Use them.
|
||||
window.addEventListener('load', function () {
|
||||
var cleanServiceWorkerVersion = getCleanVersion(serviceWorkerVersion);
|
||||
var serviceWorkerUrl = 'flutter_service_worker.js?v=' + cleanServiceWorkerVersion;
|
||||
|
||||
navigator.serviceWorker.register(serviceWorkerUrl)
|
||||
.then((reg) => {
|
||||
|
||||
function waitForActivation(serviceWorker, isFirstTimeInstall) {
|
||||
serviceWorker.addEventListener('statechange', () => {
|
||||
if (serviceWorker.state == 'activated') {
|
||||
console.log('Installed new service worker.');
|
||||
loadMainDartJs();
|
||||
// Only prompt if this is NOT the first time installing (i.e., returning user)
|
||||
if (!isFirstTimeInstall && navigator.serviceWorker.controller) {
|
||||
console.log('New app version activated. Prompting for reload.');
|
||||
// You can replace this confirm with a better UI notification.
|
||||
if (confirm('A new version of the app is available. Refresh now to update?')) {
|
||||
window.location.reload();
|
||||
}
|
||||
} else if (isFirstTimeInstall) {
|
||||
console.log('First time install - skipping reload prompt.');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const currentSWVersion = reg.active ? reg.active.scriptURL.split("=")[1].replaceAll("%22", "") : null;
|
||||
console.log('Active Service Worker URL: ' + (reg.active ? reg.active.scriptURL : 'None'));
|
||||
console.log('Latest Service Worker Version: ' + cleanServiceWorkerVersion);
|
||||
console.log('Active Service Worker Version: ' + (currentSWVersion || 'None'));
|
||||
const isMatch = currentSWVersion === cleanServiceWorkerVersion;
|
||||
console.log('Latest Service Worker Installed: ' + isMatch);
|
||||
|
||||
if (!reg.active && (reg.installing || reg.waiting)) {
|
||||
// First time load: wait for activation but don't prompt.
|
||||
console.log('No Service Worker Available - Installing New Service Worker.');
|
||||
waitForActivation(reg.installing || reg.waiting, true); // true = first time install
|
||||
} else if (!isMatch) {
|
||||
// New version available: force update (returning user).
|
||||
console.log('New service worker available. Updating and waiting for activation.');
|
||||
reg.update();
|
||||
waitForActivation(reg.installing, false); // false = not first time
|
||||
} else {
|
||||
// Existing service worker is still good.
|
||||
console.log('Service Worker up-to-date, Loading app.');
|
||||
loadMainDartJs();
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Service Worker registration failed:', error);
|
||||
loadMainDartJs(); // Fallback if registration fails completely
|
||||
});
|
||||
|
||||
|
||||
// If service worker doesn't succeed in a reasonable amount of time,
|
||||
// fallback to plain <script> tag.
|
||||
swFallbackTimeout = setTimeout(() => {
|
||||
if (!scriptLoaded) {
|
||||
console.warn(
|
||||
'Failed to load app from a service worker. Falling back to plain <script> tag.',
|
||||
);
|
||||
loadMainDartJs();
|
||||
}
|
||||
}, 1500);
|
||||
});
|
||||
}
|
||||
else {
|
||||
// Service workers not supported. Just drop the <script> tag.
|
||||
console.log('Service Workers Not Supported. Loading app directly.');
|
||||
loadMainDartJs();
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<script id="pdfjs-lib" src="//cdnjs.cloudflare.com/ajax/libs/pdf.js/3.2.146/pdf.min.js" defer=""></script>
|
||||
<script id="pdfjs-worker" type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/pdf.js/3.2.146/pdf.worker.min.js" defer=""></script>
|
||||
<!--------------------->
|
||||
|
||||
|
||||
|
||||
</body><!-- File Picker & PDF viewer --></html>
|
||||
33
mih_ui/web/install_pwa.js
Normal file
@@ -0,0 +1,33 @@
|
||||
let deferredPrompt;
|
||||
|
||||
// add to homescreen
|
||||
window.addEventListener("beforeinstallprompt", (e) => {
|
||||
// Prevent Chrome 67 and earlier from automatically showing the prompt
|
||||
e.preventDefault();
|
||||
// Stash the event so it can be triggered later.
|
||||
deferredPrompt = e;
|
||||
});
|
||||
|
||||
function isDeferredNotNull() {
|
||||
return deferredPrompt != null;
|
||||
}
|
||||
|
||||
function presentAddToHome() {
|
||||
if (deferredPrompt != null) {
|
||||
// Update UI to notify the user they can add to home screen
|
||||
// Show the prompt
|
||||
deferredPrompt.prompt();
|
||||
// Wait for the user to respond to the prompt
|
||||
deferredPrompt.userChoice.then((choiceResult) => {
|
||||
if (choiceResult.outcome === "accepted") {
|
||||
console.log("User accepted the A2HS prompt");
|
||||
} else {
|
||||
console.log("User dismissed the A2HS prompt");
|
||||
}
|
||||
deferredPrompt = null;
|
||||
});
|
||||
} else {
|
||||
console.log("deferredPrompt is null");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
35
mih_ui/web/manifest.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Mzansi Innovation Hub",
|
||||
"short_name": "MIH",
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"background_color": "#6641b2",
|
||||
"theme_color": "#6641b2",
|
||||
"description": "Digitizing Mzansi one process at a time. Discover essential Mzansi apps to streamline your personal and professional life. Simplify your daily tasks with our user-friendly solutions.",
|
||||
"orientation": "any",
|
||||
"prefer_related_applications": false,
|
||||
"icons": [
|
||||
{
|
||||
"src": "icons/Icon-192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "icons/Icon-512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "icons/Icon-maskable-192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "icons/Icon-maskable-512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
}
|
||||
]
|
||||
}
|
||||
153
mih_ui/web/privacy-simplified-chinese.html
Normal file
@@ -0,0 +1,153 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
background-color: #3A4454;
|
||||
color: #bedcfe;
|
||||
text-align: center;
|
||||
padding: 5%;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #bedcfe;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
padding-top: 0;
|
||||
margin-top: 0;
|
||||
font-size: 44px;
|
||||
}
|
||||
|
||||
h4 {
|
||||
color: #bedcfe;
|
||||
text-align: left;
|
||||
font-size: 17px;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
p {
|
||||
color: #bedcfe;
|
||||
text-align: left;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
ul {
|
||||
color: #bedcfe;
|
||||
text-align: left;
|
||||
font-size: 12px;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
.simplified-chinese-btn {
|
||||
background-color: #bedcfe;
|
||||
color: #3A4454;
|
||||
border: none;
|
||||
padding: 10px 24px;
|
||||
border-radius: 20px;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
}
|
||||
|
||||
|
||||
.back-to-mih-btn {
|
||||
background-color: #bedcfe;
|
||||
color: #3A4454;
|
||||
border: none;
|
||||
padding: 10px 24px;
|
||||
border-radius: 20px;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 5px;
|
||||
}
|
||||
|
||||
.privacy-btn:hover {
|
||||
background-color: #a3c8e9;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<img src="wallpaper.png" />
|
||||
<h1>隐私政策</h1>
|
||||
|
||||
<button class="Simplified-chinese-btn" onclick="window.location.href='privacy.html'">English</button>
|
||||
<button class="back-to-mih-btn" onclick="window.location.href='https://app.mzansi-innovation-hub.co.za/'">Visit
|
||||
MIH</button>
|
||||
<p><b>生效日期:</b> 2024年12月6日<br><br>
|
||||
Mzansi Innovation Hub - MIH(“我们”)重视您的隐私,并致力于保护您的个人数据。本隐私政策解释了当您使用我们面向全球推出的应用程序 Mzansi Innovation Hub - MIH
|
||||
时,我们如何收集、使用、披露和保护您的信息。
|
||||
</p>
|
||||
<h4>1. 我们收集的信息</h4>
|
||||
<p>
|
||||
我们收集以下个人信息以提供和改进我们的服务:
|
||||
<ul>
|
||||
<li>个人信息:姓名、身份证号、地址、电话号码等。</li>
|
||||
<li>医疗信息:医疗援助信息(如适用)。</li>
|
||||
<li>会员卡信息:用于 Mzansi Wallet 功能的会员卡号。</li>
|
||||
</ul>
|
||||
</p>
|
||||
<h4>2. 我们如何使用您的信息</h4>
|
||||
<p>
|
||||
您的个人信息将用于以下目的:
|
||||
<ul>
|
||||
<li>创建和管理您的帐户。</li>
|
||||
<li>促进客户与企业之间的互动。</li>
|
||||
<li>在 Mzansi Wallet 中存储会员卡信息。</li>
|
||||
<li>提供技术支持并改进我们应用程序的功能。</li>
|
||||
</ul>
|
||||
</p>
|
||||
<h4>3. 数据共享</h4>
|
||||
<p>
|
||||
我们仅在以下情况下共享您的数据:
|
||||
<ul>
|
||||
<li>征得您的同意:企业只有在您明确许可的情况下才能访问您的信息。</li>
|
||||
<li>法律义务:我们可能会根据适用法律法规披露信息。</li>
|
||||
</ul>
|
||||
</p>
|
||||
<h4>4. 数据安全</h4>
|
||||
<p>我们实施先进的安全措施来保护您的个人数据:
|
||||
<ul>
|
||||
<li>传输过程中的数据加密。</li>
|
||||
<li>安全的身份验证协议,以防止未经授权的访问。</li>
|
||||
<li>定期审核以识别和解决漏洞。</li>
|
||||
</ul>
|
||||
</p>
|
||||
<h4>5. 您的权利</h4>
|
||||
<p>您对您的个人数据拥有以下权利:
|
||||
<ul>
|
||||
<li>访问和更正:通过您的帐户设置查看和更新您的信息。</li>
|
||||
<li>数据删除:请求删除您的帐户和相关数据。</li>
|
||||
<li>撤回同意:一旦获得授权,企业访问您数据的权限将被限制撤销。
|
||||
</li>
|
||||
<li>要行使这些权利,请通过 mzansi.innovation.hub@gmail.com 与我们联系。</li>
|
||||
</ul>
|
||||
</p>
|
||||
<h4>6. 数据保留</h4>
|
||||
<p>我们会在提供服务所需的时间内保留您的个人数据。帐户删除后,您的数据将被永久删除,除非法律要求保留某些记录。</p>
|
||||
<h4>7. 本隐私政策的变更</h4>
|
||||
<p>我们可能会更新本隐私政策,以反映我们实践或法律要求的变化。我们将通过应用内通知和/或电子邮件通知您重大更新。</p>
|
||||
<h4>8. 联系我们</h4>
|
||||
<p>
|
||||
如果您对本隐私政策有任何疑问或疑虑,请联系我们:
|
||||
<ul>
|
||||
<li>邮箱: mzansi.innovation.hub@gmail.com.</li>
|
||||
<li>电话: +27 655 530 195</li>
|
||||
</ul>
|
||||
</p>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
157
mih_ui/web/privacy.html
Normal file
@@ -0,0 +1,157 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
background-color: #3A4454;
|
||||
color: #bedcfe;
|
||||
text-align: center;
|
||||
padding: 5%;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #bedcfe;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
padding-top: 0;
|
||||
margin-top: 0;
|
||||
font-size: 44px;
|
||||
}
|
||||
|
||||
h4 {
|
||||
color: #bedcfe;
|
||||
text-align: left;
|
||||
font-size: 17px;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
p {
|
||||
color: #bedcfe;
|
||||
text-align: left;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
ul {
|
||||
color: #bedcfe;
|
||||
text-align: left;
|
||||
font-size: 12px;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
.simplified-chinese-btn {
|
||||
background-color: #bedcfe;
|
||||
color: #3A4454;
|
||||
border: none;
|
||||
padding: 10px 24px;
|
||||
border-radius: 20px;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
}
|
||||
|
||||
|
||||
.back-to-mih-btn {
|
||||
background-color: #bedcfe;
|
||||
color: #3A4454;
|
||||
border: none;
|
||||
padding: 10px 24px;
|
||||
border-radius: 20px;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 5px;
|
||||
}
|
||||
|
||||
.privacy-btn:hover {
|
||||
background-color: #a3c8e9;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<img src="wallpaper.png" />
|
||||
<h1>Privacy Policy</h1>
|
||||
|
||||
<button class="Simplified-chinese-btn" onclick="window.location.href='privacy-simplified-chinese.html'">Simplified
|
||||
Chinese</button>
|
||||
<button class="back-to-mih-btn" onclick="window.location.href='https://app.mzansi-innovation-hub.co.za/'">Visit
|
||||
MIH</button>
|
||||
<p><b>Effective Date:</b> 6 December 2024<br><br>
|
||||
Mzansi Innovation Hub - MIH ("we," "our," "us") values your privacy and is committed to protecting your personal
|
||||
data. This Privacy Policy explains how we collect, use, disclose, and safeguard your information when you use
|
||||
our app, Mzansi Innovation Hub - MIH, available globally.
|
||||
</p>
|
||||
<h4>1. Information We Collect</h4>
|
||||
<p>
|
||||
We collect the following personal information to provide and improve our services:
|
||||
<ul>
|
||||
<li>Personal Details: Name, ID, address, phone number etc.</li>
|
||||
<li>Medical Information: Medical aid details (if applicable).</li>
|
||||
<li>Loyalty Card Information: Loyalty card numbers for the Mzansi Wallet feature.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<h4>2. How We Use Your Information</h4>
|
||||
<p>
|
||||
Your personal information is used for the following purposes:
|
||||
<ul>
|
||||
<li>To create and manage your account.</li>
|
||||
<li>To facilitate interactions between clients and businesses.</li>
|
||||
<li>To enable the storage of loyalty card information within the Mzansi Wallet.</li>
|
||||
<li>To provide technical support and improve our app's functionality.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<h4>3. Data Sharing</h4>
|
||||
<p>
|
||||
We only share your data under the following conditions:
|
||||
<ul>
|
||||
<li>With Your Consent: Businesses can access your information only with your explicit permission.</li>
|
||||
<li>Legal Obligations: We may disclose information to comply with applicable laws or regulations.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<h4>4. Data Security</h4>
|
||||
<p>We implement advanced security measures to protect your personal data:
|
||||
<ul>
|
||||
<li>Data encryption during transmission.</li>
|
||||
<li>Secure authentication protocols to prevent unauthorized access.</li>
|
||||
<li>Regular audits to identify and address vulnerabilities.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<h4>5. Your Rights</h4>
|
||||
<p>You have the following rights regarding your personal data:
|
||||
<ul>
|
||||
<li>Access and Correction: View and update your information via your account settings.</li>
|
||||
<li>Data Deletion: Request the deletion of your account and associated data.</li>
|
||||
<li>Withdrawal of Consent: Revoke permissions for businesses to access your data is restricted once granted.
|
||||
</li>
|
||||
<li>To exercise these rights, contact us at mzansi.innovation.hub@gmail.com.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<h4>6. Data Retention</h4>
|
||||
<p>We retain your personal data for as long as necessary to provide our services. Upon account deletion, your data
|
||||
will be permanently removed unless required by law to retain certain records.</p>
|
||||
<h4>7. Changes to This Privacy Policy</h4>
|
||||
<p>We may update this Privacy Policy to reflect changes in our practices or legal requirements. We will notify you
|
||||
of significant updates via in app notifications and/ or email.</p>
|
||||
<h4>8. Contact Us</h4>
|
||||
<p>
|
||||
If you have questions or concerns about this Privacy Policy, please contact us:
|
||||
<ul>
|
||||
<li>Email: mzansi.innovation.hub@gmail.com.</li>
|
||||
<li>Phone: +27 655 530 195</li>
|
||||
</ul>
|
||||
</p>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
BIN
mih_ui/web/splash/img/branding-1x.gif
Normal file
|
After Width: | Height: | Size: 416 KiB |
BIN
mih_ui/web/splash/img/branding-1x.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
mih_ui/web/splash/img/branding-2x.gif
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
mih_ui/web/splash/img/branding-2x.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
mih_ui/web/splash/img/branding-3x.gif
Normal file
|
After Width: | Height: | Size: 3.1 MiB |
BIN
mih_ui/web/splash/img/branding-3x.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
mih_ui/web/splash/img/branding-4x.gif
Normal file
|
After Width: | Height: | Size: 4.4 MiB |
BIN
mih_ui/web/splash/img/branding-4x.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
mih_ui/web/splash/img/branding-dark-1x.gif
Normal file
|
After Width: | Height: | Size: 416 KiB |
BIN
mih_ui/web/splash/img/branding-dark-1x.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
mih_ui/web/splash/img/branding-dark-2x.gif
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
mih_ui/web/splash/img/branding-dark-2x.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
mih_ui/web/splash/img/branding-dark-3x.gif
Normal file
|
After Width: | Height: | Size: 3.1 MiB |
BIN
mih_ui/web/splash/img/branding-dark-3x.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
mih_ui/web/splash/img/branding-dark-4x.gif
Normal file
|
After Width: | Height: | Size: 4.4 MiB |
BIN
mih_ui/web/splash/img/branding-dark-4x.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
mih_ui/web/splash/img/dark-1x.gif
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
BIN
mih_ui/web/splash/img/dark-1x.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
mih_ui/web/splash/img/dark-2x.gif
Normal file
|
After Width: | Height: | Size: 7.4 MiB |
BIN
mih_ui/web/splash/img/dark-2x.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
mih_ui/web/splash/img/dark-3x.gif
Normal file
|
After Width: | Height: | Size: 19 MiB |
BIN
mih_ui/web/splash/img/dark-3x.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
mih_ui/web/splash/img/dark-4x.gif
Normal file
|
After Width: | Height: | Size: 30 MiB |
BIN
mih_ui/web/splash/img/dark-4x.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
mih_ui/web/splash/img/light-1x.gif
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
BIN
mih_ui/web/splash/img/light-1x.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
mih_ui/web/splash/img/light-2x.gif
Normal file
|
After Width: | Height: | Size: 7.4 MiB |
BIN
mih_ui/web/splash/img/light-2x.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
mih_ui/web/splash/img/light-3x.gif
Normal file
|
After Width: | Height: | Size: 19 MiB |
BIN
mih_ui/web/splash/img/light-3x.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
mih_ui/web/splash/img/light-4x.gif
Normal file
|
After Width: | Height: | Size: 30 MiB |
BIN
mih_ui/web/splash/img/light-4x.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
mih_ui/web/wallpaper.png
Normal file
|
After Width: | Height: | Size: 107 KiB |