Compare commits
45 Commits
bbbc6cb067
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 3fb9903928 | |||
| 22508e3bc0 | |||
| 1d819127ca | |||
| 7007bba964 | |||
| 74f53ec286 | |||
| 9b72a28b2f | |||
| 4a0adea793 | |||
| a4328a791a | |||
| 4e0facc9af | |||
| c5631a6011 | |||
| 0549793a7c | |||
| 9abd59ec85 | |||
| 4073dc8386 | |||
| a411a5027e | |||
| 0823fe3333 | |||
| 4f51f772c0 | |||
| 205f8b989a | |||
| 843182d393 | |||
| 60147da53e | |||
| e7e1d1479c | |||
| 2b1e7094dc | |||
| 08a44524fd | |||
| f37e2392f3 | |||
| 208f6258ce | |||
| d5fe40882e | |||
| f3f74cf47c | |||
| 61ab517a21 | |||
| 545a6097eb | |||
| a0d7809751 | |||
| 114b49570b | |||
| 9449accea6 | |||
| a89cd2939a | |||
| c1eac6e2bc | |||
| b323cbb6be | |||
| b6581fc10b | |||
| 48cafd07c6 | |||
| 7f6b42153a | |||
| b233992f30 | |||
| d3c7d93cef | |||
| 6ddfc57217 | |||
| 230be11899 | |||
| 8ffc7809ce | |||
| 6cb34f5b8f | |||
| 9ea89c317f | |||
| 1b9ceb4a52 |
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"css.lint.unknownAtRules": "ignore"
|
||||||
|
}
|
||||||
219
AGENTS.md
@@ -1,5 +1,216 @@
|
|||||||
<!-- BEGIN:nextjs-agent-rules -->
|
# Nearle Project Guide
|
||||||
# This is NOT the Next.js you know
|
|
||||||
|
|
||||||
This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices.
|
## Project
|
||||||
<!-- END:nextjs-agent-rules -->
|
|
||||||
|
Nearle is a premium hyperlocal commerce platform connecting
|
||||||
|
|
||||||
|
- Customers
|
||||||
|
- Local Merchants
|
||||||
|
- Delivery Partners
|
||||||
|
- Brands
|
||||||
|
|
||||||
|
The experience should feel:
|
||||||
|
|
||||||
|
- Premium
|
||||||
|
- Modern
|
||||||
|
- Minimal
|
||||||
|
- Community-first
|
||||||
|
- Human
|
||||||
|
- Trustworthy
|
||||||
|
|
||||||
|
Avoid generic SaaS designs.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Tech Stack
|
||||||
|
|
||||||
|
- Next.js 16 App Router
|
||||||
|
- React
|
||||||
|
- TypeScript
|
||||||
|
- Tailwind CSS
|
||||||
|
- MaterialIcon component
|
||||||
|
|
||||||
|
IMPORTANT
|
||||||
|
|
||||||
|
This project uses the latest Next.js version.
|
||||||
|
|
||||||
|
Before changing framework APIs, read
|
||||||
|
|
||||||
|
node_modules/next/dist/docs/
|
||||||
|
|
||||||
|
Follow the latest conventions.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Design System
|
||||||
|
|
||||||
|
Preserve the existing Nearle identity.
|
||||||
|
|
||||||
|
Never change unless explicitly requested:
|
||||||
|
|
||||||
|
- Brand colors
|
||||||
|
- Typography
|
||||||
|
- Border radius
|
||||||
|
- Layout hierarchy
|
||||||
|
- Section order
|
||||||
|
- Existing content
|
||||||
|
- Existing illustrations
|
||||||
|
|
||||||
|
Always extend the current design instead of redesigning it.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# UI Rules
|
||||||
|
|
||||||
|
Always match existing Nearle pages.
|
||||||
|
|
||||||
|
Reuse:
|
||||||
|
|
||||||
|
- Hero layouts
|
||||||
|
- CTA buttons
|
||||||
|
- Card styles
|
||||||
|
- Section spacing
|
||||||
|
- Grid system
|
||||||
|
- Shadows
|
||||||
|
- Glass effects
|
||||||
|
- Gradients
|
||||||
|
|
||||||
|
Avoid Bootstrap-style layouts.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Motion Rules
|
||||||
|
|
||||||
|
Use:
|
||||||
|
|
||||||
|
- Framer Motion
|
||||||
|
- CSS transitions
|
||||||
|
|
||||||
|
Avoid:
|
||||||
|
|
||||||
|
- Heavy GSAP
|
||||||
|
- Layout animations
|
||||||
|
- Flashy effects
|
||||||
|
|
||||||
|
Animation style:
|
||||||
|
|
||||||
|
- Apple
|
||||||
|
- Linear
|
||||||
|
- Stripe
|
||||||
|
- Vercel
|
||||||
|
|
||||||
|
Use only:
|
||||||
|
|
||||||
|
- opacity
|
||||||
|
- transform
|
||||||
|
- scale
|
||||||
|
- translate
|
||||||
|
|
||||||
|
Respect prefers-reduced-motion.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Code Rules
|
||||||
|
|
||||||
|
Never rewrite files unnecessarily.
|
||||||
|
|
||||||
|
Only modify required code.
|
||||||
|
|
||||||
|
Preserve formatting.
|
||||||
|
|
||||||
|
Do not rename components unless necessary.
|
||||||
|
|
||||||
|
Reuse existing components before creating new ones.
|
||||||
|
|
||||||
|
Create reusable components when repeated more than twice.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Performance
|
||||||
|
|
||||||
|
Maintain 60 FPS.
|
||||||
|
|
||||||
|
Avoid unnecessary re-renders.
|
||||||
|
|
||||||
|
Avoid layout shift.
|
||||||
|
|
||||||
|
Prefer GPU-friendly animations.
|
||||||
|
|
||||||
|
Optimize images.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# SEO
|
||||||
|
|
||||||
|
Every new page should include:
|
||||||
|
|
||||||
|
- Metadata
|
||||||
|
- Title
|
||||||
|
- Description
|
||||||
|
- OpenGraph
|
||||||
|
- Semantic HTML
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Content Rules
|
||||||
|
|
||||||
|
Write content specifically for Nearle.
|
||||||
|
|
||||||
|
Tone:
|
||||||
|
|
||||||
|
- Friendly
|
||||||
|
- Premium
|
||||||
|
- Community-first
|
||||||
|
- Local
|
||||||
|
- Trustworthy
|
||||||
|
|
||||||
|
Avoid AI-sounding or generic marketing copy.
|
||||||
|
|
||||||
|
Prefer real examples involving:
|
||||||
|
|
||||||
|
- neighbourhood stores
|
||||||
|
- customers
|
||||||
|
- delivery partners
|
||||||
|
- local commerce
|
||||||
|
- digital catalogues
|
||||||
|
- QR ordering
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Execution Rules
|
||||||
|
|
||||||
|
Frontend Tasks
|
||||||
|
|
||||||
|
- You MAY run npm run dev.
|
||||||
|
- Inspect localhost before reporting visual fixes.
|
||||||
|
- Use screenshots only for major UI changes.
|
||||||
|
|
||||||
|
Build
|
||||||
|
|
||||||
|
- npm run build only verifies compilation.
|
||||||
|
- Never claim visual fixes based only on build success.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Workflow
|
||||||
|
|
||||||
|
Before editing
|
||||||
|
|
||||||
|
1. Read the target file.
|
||||||
|
2. Understand existing implementation.
|
||||||
|
3. Modify only the required code.
|
||||||
|
4. Avoid unrelated refactoring.
|
||||||
|
5. Keep code production ready.
|
||||||
|
6. Return concise summaries.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Response Rules
|
||||||
|
|
||||||
|
Do not explain obvious code.
|
||||||
|
|
||||||
|
Do not rewrite unchanged code.
|
||||||
|
|
||||||
|
Do not introduce unnecessary abstractions.
|
||||||
|
|
||||||
|
Focus only on the requested task.
|
||||||
41
Dockerfile
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
FROM node:20-alpine AS base
|
||||||
|
|
||||||
|
# Install dependencies only when needed
|
||||||
|
FROM base AS deps
|
||||||
|
RUN apk add --no-cache libc6-compat
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
COPY package.json package-lock.json* ./
|
||||||
|
RUN npm ci
|
||||||
|
|
||||||
|
# Rebuild the source code only when needed
|
||||||
|
FROM base AS builder
|
||||||
|
WORKDIR /app
|
||||||
|
COPY --from=deps /app/node_modules ./node_modules
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# Next.js telemetry is disabled
|
||||||
|
ENV NEXT_TELEMETRY_DISABLED=1
|
||||||
|
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
# Production image, copy all the files and run next
|
||||||
|
FROM base AS runner
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
ENV NODE_ENV=production
|
||||||
|
ENV NEXT_TELEMETRY_DISABLED=1
|
||||||
|
|
||||||
|
COPY --from=builder /app/public ./public
|
||||||
|
|
||||||
|
# Automatically leverage output traces to reduce image size
|
||||||
|
# https://nextjs.org/docs/advanced-features/output-file-tracing
|
||||||
|
COPY --from=builder /app/.next/standalone ./
|
||||||
|
COPY --from=builder /app/.next/static ./.next/static
|
||||||
|
|
||||||
|
EXPOSE 80
|
||||||
|
ENV PORT=80
|
||||||
|
ENV HOSTNAME="0.0.0.0"
|
||||||
|
|
||||||
|
CMD ["node", "server.js"]
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import type { NextConfig } from "next";
|
import type { NextConfig } from "next";
|
||||||
|
|
||||||
const nextConfig: NextConfig = {
|
const nextConfig: NextConfig = {
|
||||||
/* config options here */
|
output: "standalone",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default nextConfig;
|
export default nextConfig;
|
||||||
|
|||||||
18
nginx.conf
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
events {}
|
||||||
|
|
||||||
|
http {
|
||||||
|
include /etc/nginx/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name localhost;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.html index.htm;
|
||||||
|
# This line forces Nginx to pass routing back to React Router
|
||||||
|
try_files $uri $uri/ /index.html;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
53
package-lock.json
generated
@@ -8,7 +8,9 @@
|
|||||||
"name": "nearle-new",
|
"name": "nearle-new",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"framer-motion": "^12.42.0",
|
||||||
"jsdom": "^29.1.1",
|
"jsdom": "^29.1.1",
|
||||||
|
"lucide-react": "^1.22.0",
|
||||||
"next": "16.2.9",
|
"next": "16.2.9",
|
||||||
"puppeteer-core": "^24.43.1",
|
"puppeteer-core": "^24.43.1",
|
||||||
"react": "19.2.4",
|
"react": "19.2.4",
|
||||||
@@ -4305,6 +4307,33 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/framer-motion": {
|
||||||
|
"version": "12.42.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.42.0.tgz",
|
||||||
|
"integrity": "sha512-wp7EJnfWaaEScVygKv3e20udoRz+LbtxScsuTkakAxfXmt+ReC6WyPW2nINRAGvd+hG9odwcjBLyOTPjH5pBRA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"motion-dom": "^12.42.0",
|
||||||
|
"motion-utils": "^12.39.0",
|
||||||
|
"tslib": "^2.4.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@emotion/is-prop-valid": "*",
|
||||||
|
"react": "^18.0.0 || ^19.0.0",
|
||||||
|
"react-dom": "^18.0.0 || ^19.0.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@emotion/is-prop-valid": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"react": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"react-dom": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/function-bind": {
|
"node_modules/function-bind": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
||||||
@@ -5731,6 +5760,15 @@
|
|||||||
"yallist": "^3.0.2"
|
"yallist": "^3.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/lucide-react": {
|
||||||
|
"version": "1.22.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.22.0.tgz",
|
||||||
|
"integrity": "sha512-c9o3l0PiNcgOQDW4F31BEYHudE7kgxVt3o30qMl36ZPwTxXlGB4QnLilhERvVM4uh/pl5MDyY1/gzZSYcHDtBg==",
|
||||||
|
"license": "ISC",
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/magic-string": {
|
"node_modules/magic-string": {
|
||||||
"version": "0.30.21",
|
"version": "0.30.21",
|
||||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
|
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
|
||||||
@@ -5810,6 +5848,21 @@
|
|||||||
"integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
|
"integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/motion-dom": {
|
||||||
|
"version": "12.42.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.42.0.tgz",
|
||||||
|
"integrity": "sha512-M63h4n8R+quJdNhBwuLlgxM+OLYa9+I/T2pzDRboB9fLXRdbou+Gw7Zury+SkpaCyACP1JHSjHgZ1EgTkBr30w==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"motion-utils": "^12.39.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/motion-utils": {
|
||||||
|
"version": "12.39.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.39.0.tgz",
|
||||||
|
"integrity": "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/ms": {
|
"node_modules/ms": {
|
||||||
"version": "2.1.3",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
|
|||||||
13
package.json
@@ -3,13 +3,24 @@
|
|||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev",
|
"dev": "NODE_OPTIONS=--max-old-space-size=6144 next dev",
|
||||||
"build": "next build",
|
"build": "next build",
|
||||||
"start": "next start",
|
"start": "next start",
|
||||||
"lint": "eslint"
|
"lint": "eslint"
|
||||||
},
|
},
|
||||||
|
"browserslist": [
|
||||||
|
"last 2 Chrome versions",
|
||||||
|
"last 2 Edge versions",
|
||||||
|
"last 2 Firefox versions",
|
||||||
|
"last 2 Safari versions",
|
||||||
|
"last 2 iOS versions",
|
||||||
|
"not dead",
|
||||||
|
"not op_mini all"
|
||||||
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"framer-motion": "^12.42.0",
|
||||||
"jsdom": "^29.1.1",
|
"jsdom": "^29.1.1",
|
||||||
|
"lucide-react": "^1.22.0",
|
||||||
"next": "16.2.9",
|
"next": "16.2.9",
|
||||||
"puppeteer-core": "^24.43.1",
|
"puppeteer-core": "^24.43.1",
|
||||||
"react": "19.2.4",
|
"react": "19.2.4",
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 5.0 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 391 B |
BIN
public/fonts/material-symbols-outlined.woff2
Normal file
@@ -1 +0,0 @@
|
|||||||
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.0 KiB |
1
public/icons/apple-download.svg
Normal file
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
1
public/icons/play-download.svg
Normal file
|
After Width: | Height: | Size: 105 KiB |
1
public/icons/play.svg
Normal file
|
After Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 693 KiB |
|
Before Width: | Height: | Size: 538 KiB |
|
Before Width: | Height: | Size: 560 KiB |
|
Before Width: | Height: | Size: 752 KiB |
|
Before Width: | Height: | Size: 660 KiB |
|
Before Width: | Height: | Size: 985 KiB |
|
Before Width: | Height: | Size: 729 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 1002 KiB |
BIN
public/images/hero/about.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
public/images/hero/business1.webp
Normal file
|
After Width: | Height: | Size: 338 KiB |
BIN
public/images/hero/contact-page1.webp
Normal file
|
After Width: | Height: | Size: 260 KiB |
BIN
public/images/hero/home1.webp
Normal file
|
After Width: | Height: | Size: 290 KiB |
22
public/images/hero/iphone-chrome.svg
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<svg width="476" height="941" viewBox="0 0 476 941" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<!-- Notch + status bar extracted verbatim from the provided iPhone SVG.
|
||||||
|
Rendered above the live app screen so the app sits under the notch,
|
||||||
|
exactly like real iOS. -->
|
||||||
|
<g clip-path="url(#clip0_312_252)">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M388.5 25C387.119 25 386 26.1193 386 27.5V33C386 34.3807 387.119 35.5 388.5 35.5H404.469H405.5C406.881 35.5 408 34.3807 408 33V27.5C408 26.1193 406.881 25 405.5 25H388.5ZM389 26C387.895 26 387 26.8954 387 28V32.5C387 33.6046 387.895 34.5 389 34.5H403.469H405C406.105 34.5 407 33.6046 407 32.5V28C407 26.8954 406.105 26 405 26H389Z" fill="white"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M409 32.374C409.863 32.152 410.5 31.3689 410.5 30.437C410.5 29.5051 409.863 28.722 409 28.5V32.374Z" fill="white"/>
|
||||||
|
<rect x="388" y="27" width="18" height="6.5" rx="1" fill="white"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M373.33 26.6079C375.546 26.608 377.678 27.4594 379.283 28.9862C379.404 29.1041 379.598 29.1026 379.717 28.9829L380.873 27.8162C380.933 27.7555 380.967 27.6733 380.966 27.5877C380.966 27.5021 380.931 27.4202 380.87 27.3602C376.655 23.3207 370.005 23.3207 365.79 27.3602C365.729 27.4202 365.694 27.502 365.694 27.5876C365.693 27.6732 365.727 27.7555 365.787 27.8162L366.943 28.9829C367.062 29.1028 367.256 29.1043 367.377 28.9862C368.983 27.4593 371.114 26.6079 373.33 26.6079ZM373.33 30.4036C374.548 30.4035 375.722 30.856 376.624 31.6732C376.747 31.7892 376.939 31.7867 377.058 31.6676L378.212 30.5009C378.273 30.4397 378.307 30.3567 378.306 30.2704C378.305 30.1842 378.27 30.1018 378.208 30.0419C375.46 27.4855 371.204 27.4855 368.455 30.0419C368.393 30.1018 368.358 30.1842 368.357 30.2705C368.356 30.3568 368.39 30.4398 368.451 30.5009L369.605 31.6676C369.724 31.7867 369.917 31.7892 370.039 31.6732C370.941 30.8566 372.114 30.4041 373.33 30.4036ZM375.549 33.1879C375.611 33.1273 375.645 33.0439 375.643 32.9574C375.642 32.8709 375.604 32.7889 375.54 32.7309C374.265 31.652 372.396 31.652 371.121 32.7309C371.057 32.7889 371.019 32.8708 371.017 32.9573C371.015 33.0438 371.049 33.1272 371.111 33.1879L373.109 35.2036C373.167 35.2628 373.247 35.2961 373.33 35.2961C373.414 35.2961 373.494 35.2628 373.552 35.2036L375.549 33.1879Z" fill="white"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M344.667 31.3334H345.667C346.219 31.3334 346.667 31.7811 346.667 32.3334V34.3334C346.667 34.8857 346.219 35.3334 345.667 35.3334H344.667C344.114 35.3334 343.667 34.8857 343.667 34.3334V32.3334C343.667 31.7811 344.114 31.3334 344.667 31.3334ZM349.333 29.3334H350.333C350.885 29.3334 351.333 29.7811 351.333 30.3334V34.3334C351.333 34.8857 350.885 35.3334 350.333 35.3334H349.333C348.781 35.3334 348.333 34.8857 348.333 34.3334V30.3334C348.333 29.7811 348.781 29.3334 349.333 29.3334ZM354 27.0001H355C355.552 27.0001 356 27.4478 356 28.0001V34.3334C356 34.8857 355.552 35.3334 355 35.3334H354C353.448 35.3334 353 34.8857 353 34.3334V28.0001C353 27.4478 353.448 27.0001 354 27.0001ZM358.667 24.6667H359.667C360.219 24.6667 360.667 25.1145 360.667 25.6667V34.3334C360.667 34.8857 360.219 35.3334 359.667 35.3334H358.667C358.114 35.3334 357.667 34.8857 357.667 34.3334V25.6667C357.667 25.1145 358.114 24.6667 358.667 24.6667Z" fill="white"/>
|
||||||
|
<!-- 9:41 static vector text removed to render real-time live clock overlay -->
|
||||||
|
</g>
|
||||||
|
<path d="M138 5H338V23C338 31.2843 331.284 38 323 38H153C144.716 38 138 31.2843 138 23V5Z" fill="black"/>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_312_252">
|
||||||
|
<rect width="375" height="44" fill="white" transform="translate(50 7)"/>
|
||||||
|
</clipPath>
|
||||||
|
<clipPath id="clip1_312_252">
|
||||||
|
<rect width="54" height="18" fill="white" transform="translate(71 21)"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.7 KiB |
336
public/images/hero/iphone-frame.svg
Normal file
|
After Width: | Height: | Size: 463 KiB |
BIN
public/images/hero/nearle-people.webp
Normal file
|
After Width: | Height: | Size: 133 KiB |
BIN
public/images/hero/people1.webp
Normal file
|
After Width: | Height: | Size: 135 KiB |
BIN
public/images/illustrations/better-local-value.webp
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
public/images/illustrations/brand-part.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
52
public/images/illustrations/convenience.svg
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
<svg fill="none" viewBox="0 0 240 240" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<!-- Gradient definitions -->
|
||||||
|
<defs>
|
||||||
|
<radialGradient id="shadow" cx="50%" cy="50%" r="50%">
|
||||||
|
<stop offset="0%" stop-color="#7C3AED" stop-opacity="0.15" />
|
||||||
|
<stop offset="100%" stop-color="#7C3AED" stop-opacity="0" />
|
||||||
|
</radialGradient>
|
||||||
|
<linearGradient id="purpleGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||||
|
<stop offset="0%" stop-color="#9367F4" />
|
||||||
|
<stop offset="100%" stop-color="#6330D6" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="glowGradient" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||||
|
<stop offset="0%" stop-color="#C9A2FF" stop-opacity="0.8" />
|
||||||
|
<stop offset="100%" stop-color="#7C3AED" stop-opacity="0.2" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
|
||||||
|
<!-- Ground shadow -->
|
||||||
|
<ellipse cx="120" cy="180" rx="70" ry="20" fill="url(#shadow)" />
|
||||||
|
|
||||||
|
<!-- Container group -->
|
||||||
|
<g>
|
||||||
|
<!-- Isometric Delivery Box / Package representing doorstep convenience -->
|
||||||
|
<!-- Top Face -->
|
||||||
|
<path d="M120 75 L165 95 L120 115 L75 95 Z" fill="#F5EEFF" stroke="#6330D6" stroke-width="2" stroke-linejoin="round" />
|
||||||
|
<!-- Left Face -->
|
||||||
|
<path d="M75 95 L120 115 L120 160 L75 140 Z" fill="#EBDCFF" stroke="#6330D6" stroke-width="2" stroke-linejoin="round" />
|
||||||
|
<!-- Right Face -->
|
||||||
|
<path d="M120 115 L165 95 L165 140 L120 160 Z" fill="#DFCAFF" stroke="#6330D6" stroke-width="2" stroke-linejoin="round" />
|
||||||
|
|
||||||
|
<!-- Isometric Lid lines -->
|
||||||
|
<path d="M120 115 L120 75" stroke="#6330D6" stroke-width="1.5" stroke-dasharray="3 3" />
|
||||||
|
<path d="M75 95 L165 95" stroke="#6330D6" stroke-width="1.5" stroke-dasharray="3 3" />
|
||||||
|
|
||||||
|
<!-- Location Pin / Doorstep Marker floating above the box -->
|
||||||
|
<g transform="translate(120, 50)">
|
||||||
|
<!-- Pulsing Glow -->
|
||||||
|
<circle cx="0" cy="-10" r="18" fill="url(#glowGradient)" opacity="0.5" />
|
||||||
|
|
||||||
|
<!-- Pin shape -->
|
||||||
|
<path d="M0 8 C-10 -2 -15 -12 -15 -22 C-15 -32 -6 -40 0 -40 C6 -40 15 -32 15 -22 C15 -12 10 -2 0 8 Z" fill="url(#purpleGradient)" />
|
||||||
|
<!-- Inner dot -->
|
||||||
|
<circle cx="0" cy="-22" r="5" fill="#FFFFFF" />
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<!-- Speed/Convenience Motion Lines -->
|
||||||
|
<path d="M50 110 L65 110" stroke="#C9A2FF" stroke-width="3" stroke-linecap="round" opacity="0.7" />
|
||||||
|
<path d="M45 125 L60 125" stroke="#C9A2FF" stroke-width="3" stroke-linecap="round" opacity="0.7" />
|
||||||
|
<path d="M175 120 L190 120" stroke="#7C3AED" stroke-width="3" stroke-linecap="round" opacity="0.7" />
|
||||||
|
<path d="M180 135 L195 135" stroke="#7C3AED" stroke-width="3" stroke-linecap="round" opacity="0.7" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.5 KiB |
1
public/images/illustrations/customer.svg
Normal file
|
After Width: | Height: | Size: 28 KiB |
1
public/images/illustrations/customers.svg
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
public/images/illustrations/d2c-bg1.png
Normal file
|
After Width: | Height: | Size: 1.7 MiB |
BIN
public/images/illustrations/delivery-doorstep.webp
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
public/images/illustrations/easy-reordering.webp
Normal file
|
After Width: | Height: | Size: 38 KiB |
1
public/images/illustrations/food.svg
Normal file
|
After Width: | Height: | Size: 431 KiB |
BIN
public/images/illustrations/gemini-generated-image.png
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
BIN
public/images/illustrations/heading-shopper.webp
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
public/images/illustrations/heading-store.webp
Normal file
|
After Width: | Height: | Size: 72 KiB |
1
public/images/illustrations/location.svg
Normal file
|
After Width: | Height: | Size: 186 KiB |
BIN
public/images/illustrations/nerale.png
Normal file
|
After Width: | Height: | Size: 203 KiB |
BIN
public/images/illustrations/shops-you-know.webp
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
public/images/illustrations/super.png
Normal file
|
After Width: | Height: | Size: 108 KiB |
BIN
public/images/illustrations/superhero.png
Normal file
|
After Width: | Height: | Size: 109 KiB |
BIN
public/images/illustrations/support-local-business.webp
Normal file
|
After Width: | Height: | Size: 55 KiB |
1
public/images/illustrations/trust.svg
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
public/images/illustrations/vegetable.png
Normal file
|
After Width: | Height: | Size: 2.3 MiB |
|
Before Width: | Height: | Size: 3.3 KiB |
1
public/images/platform/ai-booting.svg
Normal file
|
After Width: | Height: | Size: 188 KiB |
BIN
public/images/platform/app-mockup.webp
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
public/images/platform/mobile-image.webp
Normal file
|
After Width: | Height: | Size: 99 KiB |
BIN
public/images/platform/platform.png
Normal file
|
After Width: | Height: | Size: 2.3 MiB |
|
Before Width: | Height: | Size: 750 KiB |
|
Before Width: | Height: | Size: 750 KiB |
|
Before Width: | Height: | Size: 750 KiB |
|
Before Width: | Height: | Size: 751 KiB |
BIN
public/images/slider-courier-mask-purple-v5.webp
Normal file
|
After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 750 KiB |
|
Before Width: | Height: | Size: 790 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 300 KiB |
BIN
public/images/stores/cat-daily-essentials.webp
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
public/images/stores/cat-health-wellness.webp
Normal file
|
After Width: | Height: | Size: 110 KiB |
BIN
public/images/stores/cat-home-services.webp
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
public/images/stores/cat-hot-food.webp
Normal file
|
After Width: | Height: | Size: 222 KiB |
BIN
public/images/stores/cat-pet-essentials.webp
Normal file
|
After Width: | Height: | Size: 101 KiB |
BIN
public/images/stores/catalogue-ui.webp
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
public/images/stores/delivery-support.webp
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
public/images/stores/local-map.webp
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
public/images/stores/merchant-hero.webp
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
public/images/stores/merchant.png
Normal file
|
After Width: | Height: | Size: 2.2 MiB |
BIN
public/images/stores/nearle-qr-code.png
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
BIN
public/images/stores/qr-stand.webp
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
public/images/stores/success-owner.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
public/images/why-nearle/why-nearle.png
Normal file
|
After Width: | Height: | Size: 2.5 MiB |
1
public/images/workflow/delivery-map.svg
Normal file
|
After Width: | Height: | Size: 186 KiB |
BIN
public/images/workflow/delivery.png
Normal file
|
After Width: | Height: | Size: 2.1 MiB |
BIN
public/images/workflow/how-grocery-bag.webp
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
public/images/workflow/how-storefront.webp
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
public/images/workflow/map1.webp
Normal file
|
After Width: | Height: | Size: 203 KiB |
|
Before Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
BIN
public/logo.png
|
Before Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 12 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.3 KiB |
1
public/playstore.svg
Normal file
|
After Width: | Height: | Size: 76 KiB |