new-term-radar
신규 AI 용어를 매일 추적, X·Hugging Face·GitHub 등에서 모델·제품·레포 이름을 빠르게 수집
Flightpath는 LinkedIn·이메일·후속 작업을 연계해 SMB 영업팀을 위한 참여 기반 매출 워크플로우를 구축
Flightpath orchestrates LinkedIn, email and follow-up into engagement-aware, benchmarked revenue workflows for SMB sales teams.
마케팅HTML · TypeScriptGitHub @CodeGallery09온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Monorepo of GTM
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Marketing site for Flightpath, a GTM workflow-orchestration product for SMB sales teams. It orchestrates LinkedIn, email and follow-up into engagement-aware, benchmarked outreach workflows.
Stack: Next.js 15 (App Router), React 19, TypeScript 5, Tailwind CSS v4, ESLint 9. The only runtime dependency beyond Next and React is lucide-react.
Requires Node.js 22.18 or later.
npm install
npm run dev # http://localhost:3000
| Command | What it does |
|---|---|
npm run dev | Dev server |
npm run build | Production build |
npm run typecheck | tsc --noEmit |
npm run lint | ESLint |
npm test | Unit tests (Node's built-in test runner) |
Don't run
npm run buildwhilenext devis running. Both write to.next/and can corrupt it. Stop dev and delete.nextfirst.
| Route | Purpose |
|---|---|
/ | Landing page |
/book-demo | Demo-request form |
/login | Sign in (prototype, see below) |
/signup | Sign-up form (dummy, creates nothing) |
/dashboard | Workspace home: metrics, to-do list, live strategies, sending caps |
/dashboard/inbox | Unified inbox across channels, with a reply composer |
/dashboard/audiences | Audience table with search, facets and sorting |
/dashboard/strategies | Strategy list with live/paused toggles |
/dashboard/workflows | Workflow library, and the builder at /workflows/[id] |
/dashboard/integrations | Connect LinkedIn, email domains and mailboxes; roadmap providers |
/dashboard/analytics | Trend, channel breakdown and funnel |
/dashboard/settings | Account, workspace, channel caps and team |
/api/demo-request | Validates and forwards demo requests to a webhook |
/api/login, /api/logout | Prototype session cookie endpoints |
/api/* | Workspace data: see "Data and API" below |
Copy .env.example and set values as needed. All variables are server-only.
| Variable | Purpose |
|---|---|
DEMO_REQUEST_WEBHOOK_URL | Where demo requests are delivered. If unset, the API returns 503 and the form says nothing was sent. |
DEMO_REQUEST_WEBHOOK_SECRET | Optional. Sent as Authorization: Bearer <secret> to the webhook. |
AUTH_SESSION_SECRET | Optional. Signs the prototype session cookie. Falls back to a dev-only value; set it anywhere that is not local. |
Real authentication is not built yet.
lib/auth.ts and are checked on the server only.httpOnly session cookie. /dashboard verifies it./signup validates input but never creates an account, and tells the user so.Replace lib/auth.ts and the two login/logout routes with a real provider and user store before launch.
The app has no database yet, but it is wired as though it does.
Every page and route handler talks to one interface, Repository in lib/data/repository.ts,
obtained from getRepository() in lib/data/index.ts. Today that returns MemoryRepository,
backed by the demo seed in lib/data/seed.ts.
Adding a database means writing one class and changing one line:
// lib/data/index.ts
export function getRepository(): Repository {
if (!instance) {
instance = process.env.DATABASE_URL ? new PrismaRepository() : new MemoryRepository();
}
return instance;
}
No page, component or endpoint changes, because none of them import a concrete store. The shared
filter/sort/paginate rules in lib/data/query.ts are pure and unit-tested, so both
implementations behave the same.
All require a session cookie and answer 401 without one. Errors are always
{ error: { code, message } } — 404 for a missing row, 422 for invalid input.
| Method | Path | Purpose |
|---|---|---|
| GET | /api/me | Signed-in user and workspace |
| GET | /api/workspace | Org, plan, seats, members, channel caps |
| GET | /api/overview?range=7d|30d|90d | Everything the home screen shows |
| GET | /api/tasks?kind=all|reply|call|review | Open to-dos |
| POST | /api/tasks/:id/complete | Mark a to-do handled |
| GET | /api/strategies?q=&status=&type=&channel= | Strategy list with totals |
| GET / PATCH | /api/strategies/:id | Read one; { status } pauses or resumes |
| GET | /api/audiences?q=&stage=&ownerId=&strategyId=&sort=&dir=&page=&pageSize= | Paged audiences |
| GET | /api/audiences/:id | One audience |
| GET | /api/threads?filter=to-reply|all&q= | Inbox list |
| GET | /api/threads/:id | Thread with messages |
| POST | /api/threads/:id/messages | { channel, body } sends a reply |
| GET | /api/analytics?range=&channels=linkedin,email | Metrics, trend, channels, funnel |
Server components read the repository directly; client components use the typed client in
lib/api.ts.
app/ Routes, layout, global styles (design tokens in globals.css)
api/ Route handlers: demo-request, login, logout
components/ Landing sections, navbar/footer, demo/ and auth/ forms
app/ Workspace shell, screens and glass UI primitives
lib/
data/ Domain types, Repository interface, in-memory store, seed, query helpers
api.ts Typed browser client for /api
http.ts Shared route-handler helpers (auth, JSON, errors, param parsing)
demoRequest.ts Shared demo-form contract and validation (import-free)
auth.ts Prototype credentials and session cookie (server-only)
site.ts Nav links and route constants
tests/ Node test runner tests (demo-request validation)
gtm_mock.html Standalone design reference, not part of the app
See CLAUDE.md for deeper architecture and conventions (styling layers, animation rules, testing constraints).