Fields & Floors Collectors
Search every numbered sports card on eBay by print run, autograph, rookie status and price, then save searches and get an email when a new card lists.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Production-ready marketing website for N4Cluster — the merchant-first infrastructure platform for local commerce.
• Next.js 15 — App Router, static generation
• TypeScript — full type coverage
• Tailwind CSS v4 — CSS-based design tokens, utility-first styling
• Lucide React — icon system
bash
npm install
npm run dev檢視完整 README ↗Production-ready marketing website for N4Cluster — the merchant-first infrastructure platform for local commerce.
n4cluster/
├── app/ # Next.js App Router
│ ├── layout.tsx # Root layout, metadata, schema
│ ├── page.tsx # Homepage
│ ├── globals.css # Tailwind v4 + design tokens
│ ├── sitemap.ts # Dynamic sitemap
│ ├── robots.ts # Robots.txt
│ ├── opengraph-image.tsx # OG image (edge runtime)
│ ├── not-found.tsx # 404 page
│ ├── platform/ # Platform page
│ ├── solutions/ # Solutions page
│ ├── how-it-works/ # How It Works page
│ ├── integrations/ # Integrations page
│ ├── n4logic/ # N4Logic page
│ ├── pricing/ # Pricing page
│ ├── resources/ # Resources listing (client)
│ ├── case-studies/ # Case Studies page
│ ├── about/ # About page
│ ├── mission/ # Mission and values page
│ ├── partners/ # Partners page
│ ├── contact/ # Contact / Demo request page
│ ├── faq/ # FAQ page (FAQ schema)
│ ├── careers/ # Careers page
│ ├── privacy/ # Privacy Policy
│ ├── terms/ # Terms of Service
│ └── cookies/ # Cookie Notice
│
├── components/
│ ├── layout/
│ │ ├── SiteHeader.tsx # Sticky nav with dropdowns + mobile
│ │ └── SiteFooter.tsx # Multi-column footer
│ ├── ui/ # UI primitives
│ │ ├── Button.tsx
│ │ ├── Card.tsx
│ │ ├── Badge.tsx
│ │ ├── Container.tsx
│ │ ├── Divider.tsx
│ │ ├── SectionContainer.tsx
│ │ └── SectionIntro.tsx
│ ├── sections/ # Marketing section components
│ │ ├── HeroSplit.tsx
│ │ ├── HeroCentered.tsx
│ │ ├── TrustStrip.tsx
│ │ ├── FeatureGrid.tsx
│ │ ├── CTASection.tsx
│ │ ├── StepTimeline.tsx
│ │ ├── ComparisonCards.tsx
│ │ ├── AudienceSegments.tsx
│ │ ├── ProblemSection.tsx
│ │ ├── ImageTextBlock.tsx
│ │ ├── PricingTiers.tsx
│ │ ├── FAQAccordion.tsx
│ │ └── ResourceCard.tsx
│ └── forms/
│ ├── ContactForm.tsx # Full demo/contact form with validation
│ └── NewsletterForm.tsx
│
├── content/
│ ├── site/
│ │ ├── navigation.ts # Nav items and dropdowns
│ │ ├── footer.ts # Footer link groups
│ │ ├── settings.ts # Site config (URL, name, etc.)
│ │ └── theme.ts # Routes whose hero is dark (header contrast)
│ └── pages/
│ ├── faq.ts # FAQ data
│ ├── mission.ts # Mission and values copy
│ └── resources.ts # Resource listing data
│
├── lib/
│ ├── consent.ts # Cookie-consent store (gates analytics)
│ ├── mail.ts # Gmail send + RFC 2822 builder
│ ├── rate-limit.ts # Per-instance fixed-window limiter
│ ├── utils.ts # cn() utility
│ ├── utm.ts # UTM capture and persistence
│ └── validation.ts # Server-side form validation
│
└── tests/ # Vitest unit tests
npm install
npm run dev
Open http://localhost:3000.
| Route | Description |
|---|---|
/ | Homepage — full conversion-focused landing |
/platform | Platform overview with N4Sync and N4Logic |
/solutions | Solutions by business type |
/how-it-works | Step-by-step process walkthrough |
/integrations | Integration categories and architecture |
/n4logic | N4Logic AI intelligence layer |
/pricing | Engagement tiers |
/resources | Resource library with category filtering |
/roi-calculator | Commission-savings calculator |
/case-studies | Pilot scenarios |
/about | Mission, principles, brand architecture |
/mission | Mission and values, with what each value rules out |
/partners | Partner program |
/contact | Demo request and contact form |
/faq | FAQ with FAQ schema markup |
/careers | Careers and open roles |
/privacy | Privacy Policy |
/terms | Terms of Service |
/cookies | Cookie Notice |
The design system is defined in app/globals.css using Tailwind v4's @theme block:
.gradient-hero, .gradient-dark, .text-gradient, .card-hover, .animate-fade-upnpm run dev # local dev server
npm run build # production build
npm run lint # ESLint (flat config; Next 16 removed `next lint`)
npm run typecheck # tsc --noEmit
npm test # vitest
CI runs typecheck, lint, test, and build on every pull request — see
.github/workflows/ci.yml.
ContactForm POSTs to app/api/contact/route.ts and NewsletterForm to
app/api/newsletter/route.ts. Both routes rate-limit by IP, check the honeypot,
validate input in lib/validation.ts, and send a notification through the Gmail
API via lib/mail.ts. Optionally they also POST the lead to ICP Finder when
ICP_FINDER_API_URL is set.
Input that reaches an email header is validated server-side — the browser-side
checks are advisory, since both routes are public endpoints. lib/mail.ts refuses
to build a message whose address headers contain a CR or LF, so a submitted value
cannot inject extra headers such as Bcc.
ContactForm's variant prop (contact | demo | partner) sets the submit
label and is sent as formVariant, so the notification email and the ICP source
identify which page the enquiry came from.
metadata exports with title and descriptionsitemap.ts — auto-generated XML sitemaprobots.ts — robots.txtopengraph-image.tsx — dynamic OG image via Edge Runtime/faqAdd new entries to content/pages/resources.ts. For MDX-based articles, install @next/mdx and create files in content/resources/.
Create a new directory under app/ with a page.tsx file. Use the existing section
components for rapid assembly, then:
staticRoutes in app/sitemap.ts.content/site/navigation.ts and/or content/site/footer.ts.HeroSplit, HeroCentered, or a
gradient-hero section), add its path to content/site/theme.ts. The fixed
header renders transparent with white text over a dark hero and solid otherwise;
an unregistered route gets the solid treatment, which is always readable.tests/site-structure.test.ts checks that nav and footer links point at routes the
sitemap knows about, so a missed step fails CI rather than shipping a dead link.
Google Analytics 4 is wired up in components/Analytics.tsx and loads only after
the visitor accepts in the consent banner. Set
NEXT_PUBLIC_GA_MEASUREMENT_ID to enable it.
Consent state lives in lib/consent.ts (localStorage plus an event, read through
useSyncExternalStore). components/CookieConsent.tsx collects the choice and the
footer's "Cookie preferences" control clears it so a visitor can change their mind.
Declining after accepting also sets GA's ga-disable-<ID> flag, since a script that
has already executed cannot be unloaded.
If you add another third-party script, gate it on consent the same way and update
/cookies and section 10 of /privacy — those pages describe this behaviour.