diff --git a/firebase/internal-launchpad/assets/data/links.json b/firebase/internal-launchpad/assets/data/links.json new file mode 100644 index 00000000..c71818da --- /dev/null +++ b/firebase/internal-launchpad/assets/data/links.json @@ -0,0 +1,145 @@ +[ + { + "title": "Applications", + "iconColorClass": "bg-primary-100", + "iconPath": "assets/images/icon-applications.svg", + "links": [ + { + "title": "Control Tower", + "url": "https://krow-workforce-dev.web.app", + "badge": "Dev", + "badgeColorClass": "bg-blue-500", + "containerClass": "bg-gradient-to-r from-blue-50 to-blue-100 hover:from-blue-100 hover:to-blue-200", + "iconClass": "w-2 h-2 bg-blue-500 rounded-full", + "textHoverClass": "group-hover:text-blue-700" + }, + { + "title": "Control Tower", + "url": "https://krow-workforce-staging.web.app", + "badge": "Staging", + "badgeColorClass": "bg-amber-500", + "containerClass": "bg-gradient-to-r from-amber-50 to-amber-100 hover:from-amber-100 hover:to-amber-200", + "iconClass": "w-2 h-2 bg-amber-500 rounded-full", + "textHoverClass": "group-hover:text-amber-700" + } + ] + }, + { + "title": "Legacy Mobile Apps", + "iconColorClass": "bg-green-100", + "iconPath": "assets/images/icon-legacy-mobile-apps.svg", + "links": [ + { + "title": "Google Play Store", + "url": "https://play.google.com/store/apps/dev?id=9163719228191263405&hl=en", + "badge": "Live", + "badgeColorClass": "bg-green-500", + "containerClass": "bg-gradient-to-r from-green-50 to-emerald-100 hover:from-green-100 hover:to-emerald-200", + "iconPath": "assets/images/icon-google-play.svg", + "textHoverClass": "group-hover:text-green-700" + }, + { + "title": "Apple App Store", + "url": "https://apps.apple.com/us/developer/thinkloops-llc/id1719034287", + "badge": "Live", + "badgeColorClass": "bg-gray-700", + "containerClass": "bg-gradient-to-r from-gray-50 to-gray-100 hover:from-gray-100 hover:to-gray-200", + "iconPath": "assets/images/icon-apple-app-store.svg", + "textHoverClass": "group-hover:text-gray-700" + } + ] + }, + { + "title": "Cloud Infrastructure", + "iconColorClass": "bg-purple-100", + "iconPath": "assets/images/icon-cloud-infrastructure.svg", + "links": [ + { + "title": "Firebase Console", + "url": "https://console.firebase.google.com/project/krow-workforce-dev/overview", + "badge": "Dev", + "badgeColorClass": "bg-blue-500", + "containerClass": "bg-gradient-to-r from-blue-50 to-indigo-100 hover:from-blue-100 hover:to-indigo-200", + "iconPath": "assets/images/icon-firebase-console.svg", + "textHoverClass": "group-hover:text-indigo-700" + }, + { + "title": "Firebase Console", + "url": "https://console.firebase.google.com/project/krow-workforce-staging/overview", + "badge": "Staging", + "badgeColorClass": "bg-amber-500", + "containerClass": "bg-gradient-to-r from-amber-50 to-orange-100 hover:from-amber-100 hover:to-orange-200", + "iconPath": "assets/images/icon-firebase-console.svg", + "textHoverClass": "group-hover:text-orange-700" + }, + { + "title": "Google Cloud", + "url": "https://console.cloud.google.com/welcome/new?project=krow-workforce-dev", + "badge": "Dev", + "badgeColorClass": "bg-blue-500", + "containerClass": "bg-gradient-to-r from-blue-50 to-cyan-100 hover:from-blue-100 hover:to-cyan-200", + "iconPath": "assets/images/icon-google-cloud.svg", + "textHoverClass": "group-hover:text-cyan-700" + }, + { + "title": "Google Cloud", + "url": "https://console.cloud.google.com/welcome/new?project=krow-workforce-staging", + "badge": "Staging", + "badgeColorClass": "bg-amber-500", + "containerClass": "bg-gradient-to-r from-amber-50 to-yellow-100 hover:from-amber-100 hover:to-yellow-200", + "iconPath": "assets/images/icon-google-cloud.svg", + "textHoverClass": "group-hover:text-yellow-700" + } + ] + }, + { + "title": "Design", + "iconColorClass": "bg-pink-100", + "iconPath": "assets/images/icon-design.svg", + "links": [ + { + "title": "Staff App Figma File", + "url": "https://www.figma.com/design/HfNpoYOpkfUu2lgDMp4xQK/KROW-Staff-App-Revamp?node-id=0-1&t=4TLUeCIWf7I1TTGQ-1", + "badge": "Design", + "badgeColorClass": "bg-pink-500", + "containerClass": "bg-gradient-to-r from-pink-50 to-rose-100 hover:from-pink-100 hover:to-rose-200", + "iconPath": "assets/images/icon-figma.svg", + "textHoverClass": "group-hover:text-pink-700" + }, + { + "title": "Staff App Preview", + "url": "https://9000-firebase-studio-1764098159606.cluster-oe5pskshnfducslpwllk6difqk.cloudworkstations.dev/", + "badge": "Preview", + "badgeColorClass": "bg-purple-500", + "containerClass": "bg-gradient-to-r from-purple-50 to-fuchsia-100 hover:from-purple-100 hover:to-fuchsia-200", + "iconPath": "assets/images/icon-preview.svg", + "textHoverClass": "group-hover:text-purple-700" + } + ] + }, + { + "title": "Resources", + "iconColorClass": "bg-indigo-100", + "iconPath": "assets/images/icon-resources.svg", + "links": [ + { + "title": "GitHub Repository", + "subtitle": "View source code", + "url": "https://github.com/Oloodi/krow-workforce", + "containerClass": "bg-gradient-to-r from-gray-50 to-slate-100 hover:from-gray-100 hover:to-slate-200", + "iconPath": "assets/images/icon-github.svg", + "textHoverClass": "group-hover:text-gray-700", + "arrowIcon": true + }, + { + "title": "Team Communication", + "subtitle": "Google Chat", + "url": "https://chat.google.com/", + "containerClass": "bg-gradient-to-r from-green-50 to-teal-100 hover:from-green-100 hover:to-teal-200", + "iconPath": "assets/images/icon-chat.svg", + "textHoverClass": "group-hover:text-teal-700", + "arrowIcon": true + } + ] + } +] diff --git a/firebase/internal-launchpad/assets/images/icon-apple-app-store.svg b/firebase/internal-launchpad/assets/images/icon-apple-app-store.svg new file mode 100644 index 00000000..00407e9d --- /dev/null +++ b/firebase/internal-launchpad/assets/images/icon-apple-app-store.svg @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/firebase/internal-launchpad/assets/images/icon-applications.svg b/firebase/internal-launchpad/assets/images/icon-applications.svg new file mode 100644 index 00000000..c7fc8783 --- /dev/null +++ b/firebase/internal-launchpad/assets/images/icon-applications.svg @@ -0,0 +1 @@ + diff --git a/firebase/internal-launchpad/assets/images/icon-chat.svg b/firebase/internal-launchpad/assets/images/icon-chat.svg new file mode 100644 index 00000000..0be8c1ac --- /dev/null +++ b/firebase/internal-launchpad/assets/images/icon-chat.svg @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/firebase/internal-launchpad/assets/images/icon-cloud-infrastructure.svg b/firebase/internal-launchpad/assets/images/icon-cloud-infrastructure.svg new file mode 100644 index 00000000..41b26fd4 --- /dev/null +++ b/firebase/internal-launchpad/assets/images/icon-cloud-infrastructure.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/firebase/internal-launchpad/assets/images/icon-design.svg b/firebase/internal-launchpad/assets/images/icon-design.svg new file mode 100644 index 00000000..4aade6eb --- /dev/null +++ b/firebase/internal-launchpad/assets/images/icon-design.svg @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/firebase/internal-launchpad/assets/images/icon-figma.svg b/firebase/internal-launchpad/assets/images/icon-figma.svg new file mode 100644 index 00000000..2d8439c3 --- /dev/null +++ b/firebase/internal-launchpad/assets/images/icon-figma.svg @@ -0,0 +1,30 @@ + \ No newline at end of file diff --git a/firebase/internal-launchpad/assets/images/icon-firebase-console.svg b/firebase/internal-launchpad/assets/images/icon-firebase-console.svg new file mode 100644 index 00000000..d6ed32f0 --- /dev/null +++ b/firebase/internal-launchpad/assets/images/icon-firebase-console.svg @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/firebase/internal-launchpad/assets/images/icon-github.svg b/firebase/internal-launchpad/assets/images/icon-github.svg new file mode 100644 index 00000000..f5f2bd80 --- /dev/null +++ b/firebase/internal-launchpad/assets/images/icon-github.svg @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/firebase/internal-launchpad/assets/images/icon-google-cloud.svg b/firebase/internal-launchpad/assets/images/icon-google-cloud.svg new file mode 100644 index 00000000..6f5213d3 --- /dev/null +++ b/firebase/internal-launchpad/assets/images/icon-google-cloud.svg @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/firebase/internal-launchpad/assets/images/icon-google-play.svg b/firebase/internal-launchpad/assets/images/icon-google-play.svg new file mode 100644 index 00000000..8a02867a --- /dev/null +++ b/firebase/internal-launchpad/assets/images/icon-google-play.svg @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/firebase/internal-launchpad/assets/images/icon-legacy-mobile-apps.svg b/firebase/internal-launchpad/assets/images/icon-legacy-mobile-apps.svg new file mode 100644 index 00000000..c43a10d4 --- /dev/null +++ b/firebase/internal-launchpad/assets/images/icon-legacy-mobile-apps.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/firebase/internal-launchpad/assets/images/icon-preview.svg b/firebase/internal-launchpad/assets/images/icon-preview.svg new file mode 100644 index 00000000..e9846535 --- /dev/null +++ b/firebase/internal-launchpad/assets/images/icon-preview.svg @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/firebase/internal-launchpad/assets/images/icon-resources.svg b/firebase/internal-launchpad/assets/images/icon-resources.svg new file mode 100644 index 00000000..cda1666d --- /dev/null +++ b/firebase/internal-launchpad/assets/images/icon-resources.svg @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/firebase/internal-launchpad/assets/js/links-loader.js b/firebase/internal-launchpad/assets/js/links-loader.js new file mode 100644 index 00000000..9bca36f7 --- /dev/null +++ b/firebase/internal-launchpad/assets/js/links-loader.js @@ -0,0 +1,88 @@ +async function loadLinks() { + const container = document.getElementById('links-container'); + if (!container) return; + + try { + const response = await fetch('./assets/data/links.json'); + if (!response.ok) { + throw new Error(`Failed to load links: ${response.status}`); + } + + const groups = await response.json(); + + // Helper function to fetch SVG content + const fetchSvg = async (path) => { + if (!path) return ''; + try { + const res = await fetch(path); + if (!res.ok) return ''; + return await res.text(); + } catch (e) { + console.error(`Failed to load SVG: ${path}`, e); + return ''; + } + }; + + // Process groups and fetch SVGs in parallel + const groupsWithSvgs = await Promise.all(groups.map(async (group) => { + const groupIconSvg = await fetchSvg(group.iconPath); + + const linksWithSvgs = await Promise.all(group.links.map(async (link) => { + const linkIconSvg = link.iconPath ? await fetchSvg(link.iconPath) : ''; + return { ...link, iconSvg: linkIconSvg }; + })); + + return { ...group, iconSvg: groupIconSvg, links: linksWithSvgs }; + })); + + container.innerHTML = groupsWithSvgs.map(group => ` + +