尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Native, beyond the plate — order food from local restaurants and discover markets, culture, stays, events and experiences, all in one place. The sample listings in this prototype are set in Owerri, Imo State.
Stack: Next.js 16 (App Router, Cache Components) · TypeScript · Tailwind CSS v4 · Lucide React · Motion
npm install
npm run dev
| Script | What it does |
|---|---|
npm run dev | Development server |
npm run build / npm start | Production build / serve |
npm run lint | ESLint |
npm run typecheck | Generate route types + tsc --noEmit |
Wordmark in src/components/brand.tsx, which every header, drawer, footer, the splash screen, auth pages and the admin previews use. public/brand/native-logo-green.png / native-logo-white.png are the full lockup with “BEYOND THE PLATE” (tagline, the default); native-wordmark-green.png / native-wordmark-white.png are the wordmark alone for tight spaces such as the phone header. White files are used on dark backgrounds and in the Option 2 dark theme.--color-spark (#E7B655 — lighter than the original #F1A10C, which read too yellow) is used for small highlights, ratings and the key Explore Food / Add / View Restaurant buttons.public/brand/native-pattern.jpg) is kept; bg-native-pattern / bg-native-pattern-lg draw a mirrored tile of it at reduced scale under a deep-green wash so it reads as a quiet texture.globals.css, components/splash.tsx). Shown on every full load of the homepage, and on the first page of a browser session elsewhere — never on internal navigation (src/lib/theme-script.ts). It never intercepts clicks, shortens under reduced motion, and a timer removes it even if animations are paused.public/videos/ and components/hero-video.tsx (HeroVideo) but are no longer shown on the homepage.homeShortcuts in src/lib/services.ts), Featured Restaurants as a spotlight for Annie’s Native Kitchen (label, name, place, description, View Restaurant) beside a "Places to explore" card, Popular Dishes (bordered cards with a category badge, price and Add / quantity controls using the shared cart), Nearby (closest places and restaurants with distance badges; they open the existing details) Farmers Market (produce and spice stalls) and Shops & Crafts (craft makers) rows, and a compact culture banner on the Native pattern. On phones there is no bottom bar. Version B uses the same structure in its own style (rounded hero card, round shortcut bubbles, softer radii). Components: components/home/*.src/components/service-art.tsx (one consistent flat style).components/app-menu.tsx, menuGroups in services.ts): the account card, Discover & Order (Home, Restaurants, Explore Nigerian Food) followed by the Native Kitchen banner, Explore More (Farmers Market, Tours & Experiences — which includes stays, Events & Hangouts, Nearby, Shops & Crafts, Explore — the stories page), (Saved, Orders, Notifications, Settings, Help / Support) and the Taste the regions banner.Food ordering is a primary service: Restaurants (/restaurants) is second in the navigation, first among the homepage shortcuts and in both mobile docks.
TOP_RESTAURANTS in src/lib/data.ts), then featured kitchens./orders review & checkout → confirmation. The restaurant page is the ordering page: photo hero, tabs (Menu / About / Reviews / Gallery in A; Menu / About / Reviews in B), category circles, popular-dish cards and menu rows with Add buttons and quantity steppers (components/restaurant-page.tsx, components/sig/menu.tsx). /restaurants/[slug]/menu still works and shows the same page. Popular dishes can also be added straight from the homepage (useOrdering in components/food.tsx). One cart store (src/lib/cart-store.ts) powers every step.cart.placeOrder.SAMPLE placeholders in src/lib/data.ts. The site shows "New on Native" with a one-line note instead of inventing ratings, reviews, distance, hours or a phone number. To publish real details, put naira prices in prices, fill in open, close, phone, address and area, then remove sampleProfile.Routes: /sign-in, /sign-up, /forgot-password, /reset-password, /verify-email, /account (My Profile), plus draft /terms and /privacy. Every screen has a Version A layout (form beside a photograph on desktop) and a Version B layout (centred card); behaviour is shared.
This is not real authentication. It is a frontend prototype with a clean seam for a real provider:
| Layer | File | Notes |
|---|---|---|
| Validation | src/lib/auth/validation.ts | Email, name, Nigerian phone (formats 0803 123 4567 / +234 …), password strength, matching, safe ?next= return paths. Pure functions. |
| Service | src/lib/auth/service.ts | AuthService interface + mockAuthService. Replace the authService export with a real implementation (secure HTTP-only sessions, server-side password hashing, real email). |
| Session | src/lib/auth/session.ts | useAuth() — status, user, sign in/up/out. Stores only the signed-in profile (name, email, phone) — never a password or token. "Keep me signed in" → localStorage, otherwise sessionStorage. |
| UI | src/components/auth/* | Shared fields (labels, inline errors, show/hide password, strength meter), notices and messages for every state, shells per version, header account button and menu, sign-out confirmation, profile page. |
Prototype behaviour:
[email protected] / NativeDemo1! (also offered on the sign-in screen)./sign-up are remembered on this device as a profile only; because passwords are never stored, they sign in with any password of 8+ characters.[email protected] simulates a network/service failure on any form./reset-password?token=demo-reset; any other token shows the expired-link state. Verify-email offers "Resend" (prototype feedback) and a labelled "Simulate verification"./orders with the cart intact. Saving works signed out; a one-time toast suggests signing in. Signing in or out never touches the cart, orders or saved items.The site ships two complete design systems over the same routes, data and business logic.
| Version A — Original UI | Version B — Native Signature Experience | |
|---|---|---|
| Presentation | existing components in src/components | src/components/sig/* |
| Header / nav | logo left, horizontal links (white over the homepage hero), grouped drawer opening from the right (menu button on the right on phones; no bottom bar) | centred logo, a few text links, grouped slide-in menu panel (no bottom bar on phones) |
| Homepage | full-width compact video hero, overlapping search bar, square service tiles, dark photo cards | rounded video hero card, floating search pill, round service bubbles, light portrait cards |
| Cards & menus | dark photo cards; restaurant page with dark hero, spark-orange Add buttons | caption-bar tiles, portrait restaurant cards, ticket-style events; restaurant page with rounded hero and a persistent order panel |
| Footer | column footer on the pattern | centred wordmark footer on the full-strength pattern |
How it works
src/lib/design.ts stores the version (native:design in localStorage). An inline script in src/app/layout.tsx sets <html data-design="b"> before first paint.<Design a={…} b={…} /> (src/components/design.tsx); CSS in globals.css displays exactly one. Both are prerendered, so switching never flashes and survives refresh.:root[data-design="b"]) and sans display font are defined in globals.css. Both versions follow the admin background theme (Option 1 — Native Original / Option 2 — Native Forest Dark).src/lib/feed.ts (discovery filtering), src/lib/restaurant-filter.ts, cart/orders/saved/notification stores, src/lib/data.ts. Functional widgets (checkout, settings, contact form, cart drawer) are reused inside Version B layouts.data-anchor (ids belong to Version A); SigHashScroll handles #hash links.Switching: /admin → Website Design Selector (frontend-only prototype — affects this browser only, not other visitors). The background theme is chosen there too, in its own Website Background Theme section.
References live in design-references/ (native/ holds the current Native set: drawer, pattern, light and forest mock-ups).
src/app/globals.css (@theme).gold #E7B655only for small highlights). Theme tokens are overridden on:root[data-theme="forest"]for Version A and:root[data-design="b"][data-theme="forest"]for Version B, so both design versions follow the selected theme;dark:` utilities are tied to the same attribute. The logo automatically uses white letters on dark surfaces (the gold leaf is never recoloured)./admin → Website Background Theme (separate from the Website Design Selector). There is no public toggle in the header, menus, profile or settings. The choice is saved in this browser (native:theme) and applied before first paint, so it never flashes — it is not yet a central setting shared with every visitor.public/brand/native-pattern.jpg. public/brand/native-pattern-tile.png is the same image with a 9px white edge artefact trimmed and mirrored 2×2 so it repeats seamlessly. Use the bg-native-pattern / bg-native-pattern-lg utilities (hero edges, PatternBanner, footer, drawer, culture feature).src/lib/navigation.ts (Home, Restaurants, Farmers Market, Tours › Stays & Getaways / Nature & Places, Nearby, Events & Hangouts, Explore (/blog, stories), Saved, Notifications, Settings, Help / Support) and used by the desktop header, mobile drawer and footer./ – compact video hero, search, service tiles, featured restaurants, popular dishes, markets & shops, culture & events, nearby experiences, Explore Native banner/market – traditional food (kitchens you can order from), fresh produce, spices & ingredients, crafts/tours, /tours/stays, /tours/nature · /nearby · /events – scoped discovery feeds (?cat=, ?item=<slug> opens the details/tickets sheet)/saved, /notifications, /blog, /settings, /help, /admin/restaurants – Restaurants (+ [slug] restaurant & ordering page; [slug]/menu shows the same page), /orders cart review & checkout/explore, /culture, /dishes, /neighbourhoods, /stories/[slug], /credits, ⌘K searchsrc/lib/data.ts are sample content — replace with a CMS/API. Menus are built from a shared catalogue (getMenu) so prices stay consistent between menu, cart and orders.src/lib/cart-store.ts, src/lib/saved-store.ts). There is no backend, authentication or payment.public/images and are registered in src/lib/images.ts. Most are from Unsplash (Unsplash License); five are from Wikimedia Commons under CC BY-SA 4.0 and are credited on /credits. Photos illustrate dishes and moods, not the specific sample businesses.public/fonts.