Fields & Floors Collectors
eBay에서 번호가 매겨진 스포츠 카드들을 인쇄본·사인·신인 여부·가격으로 검색하고, 검색을 저장해 새 카드가 등록되면 이메일 알림을 받는다
N4Cluster는 지역 사업자가 고객 관계를 직접 관리하도록 주문·수요 확대·조정·AI 지원 운영을 지원합니다
N4Cluster helps local businesses own the customer relationship with merchant-first ordering, neighborhood demand growth, orchestration, and AI-assisted operations.
커머스TypeScript · CSSGitHub @N4Cluster온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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 devREADME 전문 보기 ↗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.