SCS AWS Kiro Hackathon 2026

This is the application designed for the hackathon hosted by Singapore Computer Society with AWS, showcasing Kiro.

No license.


Mandai WildDex & Ranger Expeditions

A demo-mode, offline-capable iOS PWA. Four tabs — Map, Camera, Quests, Journal — running entirely locally against LocalStorage and mock services. No backend, no auth, and no real AWS calls at any point. The "AI" scan is a local DemoAIAnalyzer behind an AIAnalyzer interface (see src/services/aiDemo.ts); a future AWS-backed implementation would satisfy the same interface but is intentionally not built here.

Requirements

  • Node 20.x (see .nvmrc) — nvm use
  • npm

Setup

npm install
npm run dev      # dev server
npm run build    # tsc --noEmit + vite build (emits dist/ + service worker)
npm run preview  # serve the production build (needed to exercise the service worker)

PWA & offline

  • Service worker generated by vite-plugin-pwa (generateSW); precaches the app shell, bundled JS/CSS, and static assets (icons, splash, species/map images).
  • Because the app makes no network calls, precaching the shell + bundled data is sufficient for full offline function — no runtime caching rules are needed.
  • iOS meta tags + manifest.json configure standalone display, theme color, and the install experience. Icons/splash use the supplied art in public/icons and public/splash.
  • First-run overlay explains iOS "Add to Home Screen"; dismissal is persisted (hasSeenInstallPrompt).

Accessibility

  • Reduced motion honored via a single useReducedMotion() hook (combines the in-app setting and the OS prefers-reduced-motion query); consumed by every animation.
  • ARIA roles/labels on toasts, progress bars, badges, and interactive controls; 44×44px minimum touch targets.
  • Sound and reduced-motion are user-toggleable from the settings menu.

Verification status (per Requirement 9.4)

Verified in this environment:

  • npm run build and tsc --noEmit complete with zero errors.
  • localStorage access is confined to src/services/storage.ts (no component touches it directly).
  • No raw camera-frame/base64 data is persisted to state — only species IDs.
  • Rank thresholds and XP calibration reviewed against the fixed table (a full playthrough crosses into Master Ranger).

Configured, untested (requires a real browser/device — not verifiable headlessly):

  • Live camera getUserMedia feed and permission prompt on a real device.
  • Service-worker registration and offline reload behavior in a browser.
  • Real iOS Safari "Add to Home Screen" install and standalone rendering.
  • Lighthouse/PWA audit scores and real-device animation frame rate.
Share this project:

Updates