Skip to content

Eldoraaa/Eldora-Frontend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

8 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🌐 Eldora-Frontend β€” ELDORA Marketing & Download Site

Protect. Respond. Recover.

Framework Language Styling Animation License Hackathon


The public-facing website for the ELDORA ecosystem β€” a single-page marketing site that showcases the caregiver app, hosts a dynamic APK download route that always resolves the latest GitHub Release, and provides Google Play-required legal pages.

🌐 Live Site Β· πŸ€– DoraBot Β· ☁️ Backend Β· πŸ“± Mobile App


πŸ“Œ Overview

Eldora-Frontend is the public web presence of the ELDORA eldercare ecosystem. It serves three purposes: communicate the product story to families and caregivers, provide a /download endpoint that always resolves to the newest APK asset from GitHub Releases, and host the Privacy Policy and Account Deletion pages required for Google Play Store compliance.

Eldora-Frontend's role in the ELDORA ecosystem: "The storefront β€” the first place families learn about ELDORA, and the one URL that always hands them the latest app."

Framework Next.js 16 (App Router)
Language TypeScript 5.9
Styling Tailwind CSS 3.4
Animation Framer Motion 12 + GSAP 3.13
Icons Phosphor Icons (React)
Site URL https://eldora.my.id

🌐 ELDORA Ecosystem

Eldora-Frontend is the public storefront for the ecosystem β€” it links visitors directly to the mobile app download:

ELDORA Ecosystem
β”œβ”€β”€ πŸ›‘οΈ  DoraShield         β€” Fall detection wearable (ESP32)
β”œβ”€β”€ πŸ€–  DoraBot             β€” AI voice companion (ESP32-S3)
β”œβ”€β”€ ☁️   Eldora-Backend      β€” API server & orchestration
β”œβ”€β”€ 🧠  Eldora-AI-Pipeline  β€” Voice AI service
β”œβ”€β”€ πŸ“±  Eldora-Mobile       β€” Caregiver app (the product this site promotes)
└── 🌐  Eldora-Frontend     β€” Marketing site + APK download (this repo)

✨ Site Features

  • 🏠 Hero Section β€” full-viewport landing with GSAP-animated floating phone mockups, an orbital ring decoration, and a Framer Motion scroll-progress bar fixed at the top of the page
  • πŸ“£ Animated Marquee β€” continuously scrolling strip of ELDORA feature keywords, driven by GSAP
  • πŸƒ Features Section β€” three pillar cards (DoraShield alerts, Device status, Wellness summaries) with whileInView fade-up animations
  • πŸ“± Mobile Preview Showcase β€” six phone mockup frames arranged as an editorial layout, plus a second auto-scrolling mockup carousel below using Framer Motion
  • πŸͺœ How It Works β€” three numbered steps walking visitors through DoraBot pairing and monitoring
  • πŸ“₯ APK Download CTA β€” a prominent download section linking to /download, which dynamically resolves the latest release asset from the Eldoraaa/Eldora-Mobile GitHub repository and redirects visitors via HTTP 302
  • πŸ” Privacy Policy β€” full privacy policy page (/privacy) for Google Play Store compliance
  • πŸ—‘οΈ Account Deletion β€” guided account deletion page (/account-deletion) explaining the in-app deletion flow, meeting Google Play data deletion requirements
  • πŸ” Full SEO & Open Graph β€” canonical URL, OG image (screen-1.jpg), Twitter large card, application/ld+json schema.org SoftwareApplication structured data, complete favicon set with site.webmanifest
  • πŸ–ΌοΈ Next.js Image Optimization β€” AVIF and WebP format negotiation via next.config.ts

πŸ› οΈ Tech Stack

Layer Technology Purpose
Framework Next.js 16 (App Router) SSR + static pages, API routes
Language TypeScript 5.9 Type-safe component and data authoring
Styling Tailwind CSS 3.4 Utility-first CSS, custom design tokens
UI Animation Framer Motion 12 Scroll progress bar, parallax hero, whileInView fade-up transitions, mockup carousel
DOM Animation GSAP 3.13 Floating elements, pulsing ring, orbital decoration, marquee scroll
Icons Phosphor Icons React 2.1 Lightweight icon components
Image Optimization Next.js <Image> + AVIF/WebP Responsive, format-negotiated image delivery
Font Inter (system stack) Clean, readable sans-serif for medical/care context

πŸ“ Project Structure

Eldora-Frontend/
β”‚
β”œβ”€β”€ πŸ“ app/                           # Next.js App Router
β”‚   β”œβ”€β”€ layout.tsx                    # Root layout β€” full SEO metadata (OG, Twitter card,
β”‚   β”‚                                 # canonical, favicon, viewport, theme color)
β”‚   β”œβ”€β”€ page.tsx                      # Landing page β€” hero, marquee, features, preview,
β”‚   β”‚                                 # how-it-works, APK CTA, footer
β”‚   β”œβ”€β”€ globals.css                   # Tailwind base layers + global resets, Inter font
β”‚   β”œβ”€β”€ πŸ“ download/
β”‚   β”‚   └── route.ts                  # Dynamic API route β€” fetches GitHub Releases API,
β”‚   β”‚                                 # redirects (302) to latest .apk asset; falls back to
β”‚   β”‚                                 # hardcoded v1.0.0-build.24 if API is unavailable
β”‚   β”œβ”€β”€ πŸ“ privacy/
β”‚   β”‚   └── page.tsx                  # Privacy Policy page (Google Play requirement)
β”‚   └── πŸ“ account-deletion/
β”‚       └── page.tsx                  # Account Deletion page (Google Play requirement)
β”‚
β”œβ”€β”€ πŸ“ src/
β”‚   β”œβ”€β”€ πŸ“ components/common/
β”‚   β”‚   β”œβ”€β”€ PhoneMockup.tsx           # Phone frame component β€” rounded bezel, dynamic island
β”‚   β”‚   β”‚                             # notch, screenshot image via next/image
β”‚   β”‚   β”œβ”€β”€ MiniIcon.tsx              # Section icon variants (shield, device, care, scene)
β”‚   β”‚   └── index.ts                  # Barrel export
β”‚   └── πŸ“ constants/
β”‚       └── data.tsx                  # All site copy, URLs, mockup paths, hero stats,
β”‚                                     # pillars, features, steps, marquee items, fadeUp variant
β”‚
β”œβ”€β”€ πŸ“ public/
β”‚   β”œβ”€β”€ πŸ“ brand/                     # eldora_logo.png, eldora_logo_nobg.png
β”‚   β”œβ”€β”€ πŸ“ favicon_io/               # Full favicon set + apple-touch-icon + site.webmanifest
β”‚   β”œβ”€β”€ πŸ“ illustrations/            # Feature illustration PNGs (care, alerts, wellness, welcome)
β”‚   └── πŸ“ mockups/                  # App screen screenshots (screen-1.jpg … screen-6.jpg)
β”‚
β”œβ”€β”€ πŸ“„ next.config.ts                 # Image formats: AVIF + WebP
β”œβ”€β”€ πŸ“„ postcss.config.js              # Tailwind + Autoprefixer
└── πŸ“„ package.json

βš™οΈ How the Site Works

In plain English:

Visitor lands on eldora.app
    β†’ sees hero with animated phone mockups
    β†’ scrolls through feature pillars, mockup carousel, how-it-works steps
    β†’ clicks "Download latest APK"
        β†’ browser hits GET /download (Next.js API route)
        β†’ server fetches GitHub Releases API (5-minute cache)
        β†’ finds the first asset whose name ends in .apk
        β†’ 302 redirect β†’ visitor downloads the APK directly
    β†’ alternatively: clicks "View GitHub release" β†’ github.com/Eldoraaa/Eldora-Mobile/releases/latest

🎨 Design System

The site uses a custom set of Tailwind color tokens defined in tailwind.config (referenced throughout page.tsx):

Token Role Appearance
eldora-coral CTAs, section eyebrows, hover states Warm red-orange (#D95545)
eldora-text Primary headings and body text Deep charcoal (#17202A)
eldora-muted Subheadings and descriptive text Medium grey
eldora-soft Card backgrounds, icon containers Pale warm cream
eldora-mint Accent highlights, orbit dot Soft green (rgba(168,216,194,…))
eldora-line Borders, dividers Light neutral
eldora-warm Gradient card backgrounds Warm off-white to cream

Background: #FDF8F5 β€” a warm off-white used consistently across all pages and the html element.

Typography: Inter, system-ui fallback chain. All headings use negative tracking (tracking-[-0.07em] to tracking-[-0.105em]) and heavy weight (font-black) for editorial density.

Animation strategy:

  • GSAP handles continuous loops: gsap-float (gentle vertical drift), gsap-pulse (scale breathe), gsap-orbit (360Β° rotation over 36 s), and the text marquee (xPercent: -50 over 30 s)
  • Framer Motion handles scroll-reactive effects: useScroll + useTransform for hero parallax (heroY, heroRotate) and the background glow glowScale, plus whileInView fade-up for all content sections

πŸ”— APK Download Route

The /download route (app/download/route.ts) is the only server-side dynamic behavior in the project:

GET /download
  β†’ fetch https://api.github.com/repos/Eldoraaa/Eldora-Mobile/releases/latest
      { Accept: application/vnd.github+json, next: { revalidate: 300 } }
  β†’ find first asset where name.endsWith('.apk')
  β†’ 302 redirect to asset.browser_download_url
  β†’ fallback: redirect to hardcoded v1.0.0-build.24 APK URL

The route is marked export const dynamic = "force-dynamic" so it never serves a stale cached response for the redirect target. The revalidate: 300 applies only to the GitHub API fetch, caching that response for 5 minutes to avoid hitting GitHub rate limits on high traffic.


πŸ“„ Legal Pages

Both pages are required for Google Play Store listing compliance:

Route Page Purpose
/privacy Privacy Policy Explains what data ELDORA collects (account info, device/safety data, notifications, wellness summaries), why it's collected, and how users can control or delete it. Last updated: June 9, 2026
/account-deletion Account Deletion Guides users through the in-app account deletion flow and explains what data is removed

These pages share the same warm cream background (#FDF8F5) and design system as the landing page, with a "Back to Eldora" link in the header.


πŸš€ Build & Run

Prerequisites

Install & Start

# 1. Clone the repository
git clone https://github.com/Eldoraaa/eldora-frontend.git
cd eldora-frontend

# 2. Install dependencies
npm install

# 3. Start the dev server
npm run dev

The site starts at http://localhost:3000.

Other Scripts

npm run build       # Production build
npm run start       # Start production server (after build)
npm run typecheck   # TypeScript type check without emitting

TypeScript Check

npm run typecheck   # runs tsc --noEmit

ℹ️ No .env file is needed. The APK download route fetches the GitHub Releases API without authentication β€” the public rate limit (60 req/hour per IP) is sufficient given the 5-minute revalidation window.


πŸ› οΈ Troubleshooting

APK download redirects to fallback instead of latest release

The /download route falls back to the hardcoded v1.0.0-build.24 APK URL when the GitHub Releases API returns a non-OK response. This can happen if:

  • The Eldoraaa/Eldora-Mobile repository has no published releases
  • GitHub's API rate limit (60 req/hour unauthenticated) is exceeded
  • The latest release has no .apk asset attached

To fix: publish a release on Eldoraaa/Eldora-Mobile with an .apk file attached as a release asset. The route will pick it up on the next request (within the 5-minute revalidation window).

GSAP animations not playing on first load

GSAP animations in page.tsx run inside a useEffect with a gsap.context() scoped to pageRef. If animations don't play:

  • Confirm the page renders as a Client Component ("use client" at line 1 of page.tsx)
  • Confirm GSAP is installed: npm install should include gsap@^3.13.0
  • Check the browser console for gsap is not defined errors
Phone mockup images not loading

PhoneMockup renders screenshots from public/mockups/screen-1.jpg through screen-6.jpg. If images show broken:

  • Verify the files exist in public/mockups/
  • Next.js serves public/ files at the root path β€” screen-1.jpg maps to /mockups/screen-1.jpg
  • The priority prop is set for screen-1.jpg to preload the above-the-fold hero image

πŸŽ“ Project Context

Built for the

Passage to ASEAN Hackathon 2026

Top 10 Semi-Finalist β€” BINUS BM Team

Eldora-Frontend is the public face of ELDORA, a privacy-first elderly safety ecosystem designed for ASEAN aging populations. The full system follows the Protect β†’ Respond β†’ Recover framework:

Phase Component Role
πŸ›‘οΈ Protect DoraShield (ESP32) Fall detection wearable β€” hardware safety layer
πŸ€– Respond DoraBot (ESP32-S3) AI voice companion β€” audio capture and playback
🧠 Voice AI Eldora-AI-Pipeline STT β†’ LLM β†’ Intent β†’ Emotion β†’ TTS
☁️ Orchestrate Eldora-Backend API server, device commands, FCM push
πŸ“± Recover Eldora-Mobile Caregiver app β€” safety alerts and monitoring
🌐 Showcase Eldora-Frontend (this repo) Marketing site + APK download

πŸ‘₯ Team

ELDORA β€” BINUS BM Team Passage to ASEAN Hackathon 2026

Name Role
Stanley Nathanael Wijaya Team Lead
Lutfi Alvaro Pratama IoT Engineer
Andrian Pratama Mobile Developer
Khalisa Amanda Sifa Ghaizani Backend Developer
Devon Nicholas AI Engineer

πŸ“§ Contact

Have questions, want to collaborate, or interested in ELDORA?

Channel Details
πŸ“§ Email stanley.n.wijaya7@gmail.com
✈️ Telegram @xstynwx
πŸ’¬ Discord stynw7

πŸ“„ License

This project is licensed under the MIT License β€” free to use, modify, and distribute.

MIT License

Copyright (c) 2026 ELDORA β€” BINUS BM Team

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software.

ELDORA Component Map

Repository Component Status
eldora-dorashield πŸ›‘οΈ Fall detection wearable πŸ”—
eldora-dorabot πŸ€– Voice companion firmware πŸ”—
eldora-mobile πŸ“± Caregiver mobile app πŸ”—
eldora-backend ☁️ API server & orchestration πŸ”—
eldora-ai-pipeline 🧠 Voice AI service πŸ”—
eldora-frontend 🌐 Marketing site + APK download βœ… This repo

"Stay safe. Stay connected. Stay supported."


Hackathon BINUS


Made with 🀍 by BINUS BM Team πŸ”₯

Releases

No releases published

Packages

 
 
 

Contributors