Live site: nikkishakes.com
NikkiShakes is a pure static single-page app designed to run on GitHub Pages.
- No server required for runtime hosting
- True Single-Page-Application security archiecture
- Admin and delegated admin governance and access control flows
- Source hosted on GitHub, served via GitHub Pages, secured by Cloudflare (DNS + edge security), with PingOne as the identity provider (FIDO2 passkeys, real-time risk analysis, identity verification, orchestration, and authorization), and Firebase (Google GCP) for data persistence
index.htmlSPA shell with all viewsstyles/main.cssvisual system and animationsscripts/app.jsorchestration layer and event wiringscripts/constants.jsshared constants and route/storage keysscripts/routing.jshash route parsing and navigation helpersscripts/themeMode.jstheme initialization and togglingscripts/clientAuth.jsFirebase OIDC login/callback/session helpersscripts/pingoneConfig.jsFirebase OIDC provider configurationscripts/domUtils.jsDOM utility and safety helpersscripts/data.jsFirestore data model and normalizationlogin.htmlandadmin.htmllegacy redirects to SPA routes.github/workflows/pages.ymlautomatic GitHub Pages deploy workflowFIREBASE_OIDC_SETUP.mdstep-by-step Firebase + PingOne wiring guide
You can preview with any static file server.
Option A: Python
python3 -m http.server 8080Then open http://localhost:8080.
Option B: VS Code Live Server extension
Serve the repository root and open the generated local URL.
- Push this repo to GitHub.
- In repository settings, enable Pages and choose GitHub Actions as the source.
- The workflow at
.github/workflows/pages.ymldeploys automatically on pushes tomain.
Follow FIREBASE_OIDC_SETUP.md for the full checklist. At minimum:
- Configure OpenID Connect provider in Firebase Authentication.
- Ensure your PingOne OIDC app includes scope
shakes. - Set
firebaseProviderIdinscripts/pingoneConfig.js. - Publish Firestore rules that enforce authenticated writes.
- Deploy and test login at
#/login.
The UI can hide controls, but Firestore rules are the real security boundary.
- Require Firebase Authentication for writes.
- Enforce role checks in Firestore rules and/or custom claims for
shakesAdmin.