Survival LLM
A free AI assistant and survival library (1.5 million offline articles) that runs on your own computer, with no internet. Shows the source of every answer. Mac and Windows.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Palmera is an experiences marketplace for African cities (Dakar, Marrakesh, Lagos). This repo is a single Next.js 16 (App Router) app that contains two things:
/) — a scroll-driven, animated landing page (migrated from Webflow)./dashboard) — a Firebase-auth-gated portal where experience providers onboard, add listings, upload media, and sign off on terms.Built with Next.js 16, React 18, TypeScript, and Tailwind CSS. Deployable on Vercel or Netlify.
| Concern | Tool |
|---|---|
| Framework | Next.js 16 (App Router, Turbopack) |
| Language | TypeScript + React 18 |
| Styling | Tailwind CSS 3 + CSS custom properties |
| Auth & database | Firebase Auth + Cloud Firestore |
| Media (video/images) | Cloudinary |
| Animation | GSAP + Lenis (smooth scroll) |
| i18n | next-intl (French default, English secondary) |
| Hosting | Vercel or Netlify |
src/
app/
page.tsx ← Homepage (assembles all marketing sections)
layout.tsx ← Root layout + metadata
globals.css ← Brand tokens, animations, base styles
partners/
page.tsx ← Public 4-step partner application form
dashboard/
page.tsx ← Login / signup (Firebase Auth)
layout.tsx ← Auth gate + sidebar nav + theme provider
home/ ← Onboarding overview + progress
profile/ ← Business profile + payout details
listings/ ← Experience listings (CRUD)
photos/ ← Media upload (Cloudinary)
operations/ ← Booking / confirmation preferences
documents/ ← Legal document upload
settings/ ← Terms & sign-off
admin/ ← Admin: all partners + per-partner review
components/
Navbar.tsx / NavbarWrapper.tsx ← Sticky, scroll-aware nav
Hero.tsx ← Full-screen Cloudinary video hero
BaseSection.tsx ← Intro / phrases section
Destinations.tsx ← Dakar / Marrakesh / Lagos cards
Services.tsx ← Service grid
Stats.tsx ← Stats section
AppSection.tsx ← App download + early-access CTA
Footer.tsx ← Logo marquee + copyright
dashboard/ ← DashboardNav, SectionCard, ListingModal, PhotoUpload
lib/
firebase.ts ← Firebase app init
auth.ts ← signUp / signIn / logOut / onAuthChange
firestore.ts ← Partner + listing data access
theme.tsx ← Dashboard theme provider
scroll-bus.ts, use-viewport.ts
messages/
fr.json, en.json ← Marketing-site translations
middleware.ts ← Sets default locale cookie (fr)
firestore.rules ← Firestore security rules
npm install
npm run dev
# → http://localhost:3000
Create .env.local with your Firebase config (see Environment Variables).
partners/{uid} — one document per partner account, created on signup. Holds profile fields plus a sections status map (incomplete / in_progress / complete) that drives the onboarding progress UI:
basics, payouts, listings, photos, operations, documents, signoff.partners/{uid}/listings/{listingId} — subcollection of experiences the partner offers (pricing, availability, guest limits, inclusions, etc. — see the Listing type in src/lib/firestore.ts).Security rules (firestore.rules): a partner can read/write only their own document and listings; admins (allow-listed by email) can read everyone's.
Admin is gated by a hard-coded email allow-list in two places that must stay in sync:
firestore.rules (isAdmin())src/app/dashboard/layout.tsx (ADMIN_EMAILS)Admin users are redirected to /dashboard/admin on login.
fr) is the default; English (en) is secondary.middleware.ts sets a locale cookie (defaulting to fr) for visitors without one.messages/fr.json and messages/en.json.messages/).The hero video and partner photos are served from Cloudinary (cloud name dgthehvgs).
Hero delivery uses Cloudinary transformations for performance and reliable mobile autoplay:
f_auto,q_auto,w_1280 — auto-format/quality + width cap (keeps the file small so iOS Safari autoplays it and it starts fast on cellular).so_0,...jpg — first video frame used as the poster image.See src/components/Hero.tsx.
Create .env.local for local development and set the same values in your host's
environment settings (Vercel / Netlify):
NEXT_PUBLIC_FIREBASE_API_KEY=...
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=...
NEXT_PUBLIC_FIREBASE_PROJECT_ID=...
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=...
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=...
NEXT_PUBLIC_FIREBASE_APP_ID=...
Check
src/lib/firebase.tsfor the exact variable names the app reads.
The app deploys as a standard Next.js App Router project.
netlify.toml. Add the same environment
variables in Site settings → Environment variables.After deploying, remember to:
firestore.rules) to your Firebase project.Defined in tailwind.config.ts and globals.css. The marketing site uses the
--forest* / --gold* / --cream palette; the dashboard uses a separate set of
--db-* variables via the theme provider in src/lib/theme.tsx.
| Token | Value | Use |
|---|---|---|
--forest-deep | #0F2219 | Page background |
--forest | #1B3A2D | Card / section backgrounds |
--gold | #C9A84C | Primary accent, borders |
--gold-light | #E4C97E | Headlines, CTAs |
--cream | #F5F0E8 | Body text |
| Route | Description |
|---|---|
/ | Homepage — full marketing site |
/partners | Public partner application form (4-step) |
/dashboard | Partner login / signup |
/dashboard/home | Onboarding overview + progress |
/dashboard/{profile,listings,photos,operations,documents,settings} | Onboarding sections |
/dashboard/admin | Admin — partner review (allow-listed emails only) |