Compare commits
13 Commits
637e46b76f
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5eae6e5094 | ||
|
|
e40faf0418 | ||
|
|
a2ce7c7b49 | ||
|
|
ba725c328d | ||
|
|
da2f956de9 | ||
|
|
7a804e84a1 | ||
|
|
468a6d48ec | ||
|
|
a78ba9b343 | ||
|
|
241c10fe29 | ||
|
|
34ce6929e5 | ||
|
|
5c16cb788d | ||
|
|
cd156b0ff4 | ||
|
|
8c59ac9944 |
3
note.md
3
note.md
@@ -20,3 +20,6 @@
|
||||
|
||||
## Step 5: Documents
|
||||
- To be built
|
||||
|
||||
|
||||
"@ducanh2912/next-pwa": "^10.2.9",
|
||||
2999
package-lock.json
generated
2999
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
11
package.json
11
package.json
@@ -12,13 +12,14 @@
|
||||
"@ducanh2912/next-pwa": "^10.2.9",
|
||||
"@react-three/drei": "^10.7.7",
|
||||
"@react-three/fiber": "^9.6.1",
|
||||
"date-fns": "^4.1.0",
|
||||
"date-fns": "^4.4.0",
|
||||
"glob": "^13.0.6",
|
||||
"jspdf": "^4.2.1",
|
||||
"jspdf-autotable": "^5.0.7",
|
||||
"jspdf-autotable": "^5.0.8",
|
||||
"lucide-react": "^1.8.0",
|
||||
"next": "16.2.4",
|
||||
"react": "19.2.4",
|
||||
"react-dom": "19.2.4",
|
||||
"next": "^16.2.9",
|
||||
"react": "^19.2.7",
|
||||
"react-dom": "^19.2.7",
|
||||
"react-hot-toast": "^2.6.0",
|
||||
"three": "^0.184.0"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
const { createServer } = require('http')
|
||||
const { parse } = require('url')
|
||||
|
||||
const next = require('next')
|
||||
|
||||
const dev = process.env.NODE_ENV !== 'production'
|
||||
|
||||
@@ -94,7 +94,7 @@ export default function ComingSoonPage() {
|
||||
|
||||
return (
|
||||
<div className="min-h-screen bg-slate-900 flex flex-col items-center justify-center p-4 text-center">
|
||||
<div className="absolute top-6 left-6">
|
||||
<div className="absolute top-6 left-6 z-50">
|
||||
<button
|
||||
onClick={() => router.push('/')}
|
||||
className="text-slate-400 hover:text-white flex items-center gap-2 transition-colors"
|
||||
@@ -128,7 +128,7 @@ export default function ComingSoonPage() {
|
||||
</p>
|
||||
|
||||
{/* Mini Game Container */}
|
||||
<div className="bg-slate-800 p-6 rounded-3xl border border-slate-700 shadow-2xl">
|
||||
<div className="bg-slate-800 p-6 rounded-3xl border border-slate-700 shadow-2xl z-[9999]">
|
||||
<div className="flex justify-between items-center mb-6 text-slate-300">
|
||||
<span className="font-semibold">Moves: <span className="text-accent">{moves}</span></span>
|
||||
{won && <span className="text-yellow-400 font-bold flex items-center gap-1"><Trophy className="w-5 h-5" /> You Won!</span>}
|
||||
@@ -145,8 +145,7 @@ export default function ComingSoonPage() {
|
||||
<button
|
||||
key={card.id}
|
||||
onClick={() => handleCardClick(index)}
|
||||
className={`aspect-square rounded-xl flex items-center justify-center text-2xl transition-all duration-300 transform ${
|
||||
isVisible
|
||||
className={`aspect-square rounded-xl flex items-center justify-center text-2xl transition-all duration-300 transform ${isVisible
|
||||
? 'bg-accent/20 border-2 border-accent text-accent scale-100 rotate-0'
|
||||
: 'bg-slate-700 border-2 border-slate-600 hover:bg-slate-600 scale-95'
|
||||
} ${card.isMatched ? 'opacity-50' : ''}`}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 25 KiB |
BIN
src/app/icon.png
Normal file
BIN
src/app/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 981 KiB |
@@ -62,7 +62,7 @@ export default function LandingPage() {
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="min-h-screen bg-slate-50 font-sans selection:bg-accent selection:text-white pb-20 lg:pb-0">
|
||||
<div className="min-h-screen bg-slate-50 font-sans selection:bg-accent selection:text-white">
|
||||
{/* Dynamic Header */}
|
||||
<header className={`fixed top-0 left-0 right-0 z-50 transition-all duration-300 ${scrolled ? 'bg-white/90 backdrop-blur-md shadow-sm py-3' : 'bg-transparent py-5'}`}>
|
||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 flex items-center justify-between">
|
||||
@@ -102,7 +102,7 @@ export default function LandingPage() {
|
||||
<span className="text-transparent bg-clip-text bg-gradient-to-r from-accent via-emerald-400 to-accent-light">Go Electric</span> with JAIBEN.
|
||||
</h1>
|
||||
<p className="text-slate-300 text-lg sm:text-xl mb-10 drop-shadow-lg">
|
||||
The largest EV Tech platform enabling the Gig Economy. Rent, Rent-to-Own, or Invest in EVs. Join the sustainable mobility revolution today.
|
||||
The largest EV Tech platform enabling the Gig Economy. Choose from Single Rent, Rent to Own, or Share an EV. Join the sustainable mobility revolution today.
|
||||
</p>
|
||||
<div className="flex flex-col sm:flex-row items-center lg:items-start justify-center lg:justify-start gap-4">
|
||||
<button
|
||||
@@ -140,7 +140,7 @@ export default function LandingPage() {
|
||||
<h3 className="text-4xl md:text-5xl font-black text-slate-900 mb-2 text-accent">
|
||||
<AnimatedCounter end={18} suffix="%" />
|
||||
</h3>
|
||||
<p className="text-xs sm:text-sm font-semibold text-slate-500 uppercase tracking-wider">Avg. Investor ROI</p>
|
||||
<p className="text-xs sm:text-sm font-semibold text-slate-500 uppercase tracking-wider">Avg. Rider Savings</p>
|
||||
</div>
|
||||
<div className="flex flex-col items-center justify-center text-center px-2">
|
||||
<h3 className="text-4xl md:text-5xl font-black text-slate-900 mb-2">
|
||||
@@ -171,7 +171,7 @@ export default function LandingPage() {
|
||||
</div>
|
||||
|
||||
<h4 className="text-2xl font-extrabold text-slate-900 mb-4 relative z-10">Biker Rentals</h4>
|
||||
<p className="text-slate-600 mb-8 flex-grow relative z-10 leading-relaxed">Save on petrol costs and rent a high-performance e-scooter for your daily commute or delivery gigs.</p>
|
||||
<p className="text-slate-600 mb-8 flex-grow relative z-10 leading-relaxed">Save money on fuel. Pick the plan that works for you: Single Rent for quick trips, Rent to Own to keep the bike later, or Share an EV for flexibility.</p>
|
||||
|
||||
<button
|
||||
onClick={() => router.push('/coming-soon')}
|
||||
@@ -182,7 +182,7 @@ export default function LandingPage() {
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Service 2 - FICO Investment - User will redesign this section */}
|
||||
{/* Service 2 - FICO Partners - User will redesign this section */}
|
||||
{/*
|
||||
<div className="group bg-white rounded-3xl p-8 shadow-sm hover:shadow-2xl transition-all duration-300 border border-slate-100 relative overflow-hidden flex flex-col h-full">
|
||||
...
|
||||
@@ -198,7 +198,7 @@ export default function LandingPage() {
|
||||
</div>
|
||||
|
||||
<h4 className="text-2xl font-extrabold text-slate-900 mb-4 relative z-10">Swap Stations</h4>
|
||||
<p className="text-slate-600 mb-8 flex-grow relative z-10 leading-relaxed">Never wait to charge. Swap your depleted battery for a fully charged one in less than 2 minutes.</p>
|
||||
<p className="text-slate-600 mb-8 flex-grow relative z-10 leading-relaxed">Never wait hours to charge your bike. Find a swap station near you, drop off your empty battery, and get a full one in under 2 minutes so you can keep riding.</p>
|
||||
|
||||
<button
|
||||
onClick={() => router.push('/coming-soon')}
|
||||
@@ -218,7 +218,7 @@ export default function LandingPage() {
|
||||
</div>
|
||||
|
||||
<h4 className="text-2xl font-extrabold text-slate-900 mb-4 relative z-10">Merchants & Deliveries</h4>
|
||||
<p className="text-slate-600 mb-8 flex-grow relative z-10 leading-relaxed">Are you a delivery partner or company? Request any amount of riders for your delivery needs. Partner with us for dedicated EV riders.</p>
|
||||
<p className="text-slate-600 mb-8 flex-grow relative z-10 leading-relaxed">Grow your delivery business with ease. Request verified EV riders whenever you need them, deliver more orders smoothly, and help keep the environment green.</p>
|
||||
|
||||
<button
|
||||
onClick={() => router.push('/coming-soon')}
|
||||
@@ -303,7 +303,7 @@ export default function LandingPage() {
|
||||
<div className="absolute -top-2 -right-2 w-8 h-8 bg-accent rounded-full flex items-center justify-center font-bold text-sm">2</div>
|
||||
</div>
|
||||
<h4 className="text-xl font-bold mb-3">Choose Your Plan</h4>
|
||||
<p className="text-slate-400">Select your EV model and subscription plan (Daily, Weekly, or Rent-to-Own).</p>
|
||||
<p className="text-slate-400">Select your EV model and preferred plan (Single Rent, Rent to Own, or Share an EV).</p>
|
||||
</div>
|
||||
|
||||
<div className="relative text-center">
|
||||
@@ -438,9 +438,9 @@ export default function LandingPage() {
|
||||
<div>
|
||||
<h4 className="text-white font-bold mb-6">Services</h4>
|
||||
<ul className="space-y-3 text-slate-400">
|
||||
<li><button onClick={() => router.push('/coming-soon')} className="hover:text-accent transition-colors">EV for Deliveries</button></li>
|
||||
<li><button onClick={() => router.push('/coming-soon')} className="hover:text-accent transition-colors">Single Rent</button></li>
|
||||
<li><button onClick={() => router.push('/coming-soon')} className="hover:text-accent transition-colors">Rent to Own</button></li>
|
||||
<li><button onClick={() => router.push('/coming-soon')} className="hover:text-accent transition-colors">Investor Platform</button></li>
|
||||
<li><button onClick={() => router.push('/coming-soon')} className="hover:text-accent transition-colors">Share an EV</button></li>
|
||||
<li><button onClick={() => router.push('/coming-soon')} className="hover:text-accent transition-colors">Swap Stations</button></li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -457,8 +457,8 @@ export default function LandingPage() {
|
||||
</div>
|
||||
|
||||
<div className="border-t border-slate-800 pt-8 flex flex-col md:flex-row justify-between items-center gap-4">
|
||||
<p className="text-slate-500 text-sm">
|
||||
© {new Date().getFullYear()} JAIBEN Mobility Ltd. All rights reserved.
|
||||
<p className="text-slate-500 text-sm text-center md:text-left">
|
||||
© {new Date().getFullYear()} JAIBEN Mobility Ltd. All rights reserved. <span className="hidden md:inline">|</span><br className="md:hidden" /> Developed by <a href="https://forenizence.com/" target="_blank" rel="noopener noreferrer" className="hover:text-accent transition-colors font-medium">Forenizence</a>
|
||||
</p>
|
||||
<div className="flex gap-6 text-sm text-slate-500">
|
||||
<a href="#" className="hover:text-white transition-colors">Privacy Policy</a>
|
||||
|
||||
@@ -14,6 +14,9 @@ import {
|
||||
import * as THREE from 'three';
|
||||
import { OBJLoader } from 'three-stdlib';
|
||||
|
||||
useLoader.preload(OBJLoader, '/aerox.obj');
|
||||
useLoader.preload(THREE.TextureLoader, '/jaiben.png');
|
||||
|
||||
const ACCENT = '#00bc84';
|
||||
const ACCENT_BRIGHT = '#10b981';
|
||||
|
||||
@@ -138,7 +141,7 @@ function Battery({ position, scale = 1, rotation = [0, 0, 0] }: { position: [num
|
||||
{/* Handle */}
|
||||
<mesh position={[0, 0.70, 0]} castShadow receiveShadow>
|
||||
<torusGeometry args={[0.15, 0.04, 16, 32, Math.PI]} />
|
||||
<meshStandardMaterial color="#0d7a33ff" roughness={0.2} metalness={0.9} />
|
||||
<meshStandardMaterial color="#0d7a33" roughness={0.2} metalness={0.9} />
|
||||
</mesh>
|
||||
|
||||
{/* Glowing Indicator Light */}
|
||||
|
||||
Reference in New Issue
Block a user