소스 정보
- 저장소
- ForceInjection/domain-driven-design-skills
- 최근 소스 활동
- 2026년 5월 8일 03:07
- 감지된 SKILL.md 언어
- 영어
- 스타
- 25
- 포크
- 7
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/ForceInjection/domain-driven-design-skills --skill violetconnect명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
Conduct deep academic research for philosophy, neuroscience, cognitive science, and theoretical computer science (computability, complexity, AI theory, logic). Use when user asks to: research academic topics, find scholarly papers, conduct literature reviews, analyze citations, synthesize research findings, explore philosophical arguments, investigate consciousness/cognition, study computability/decidability/Turing machines, or analyze academic debates. Triggers on: 'research papers', 'literature review', 'academic sources', 'scholarly articles', 'philosophy of mind', 'computability theory', 'neuroscience studies', 'find papers on', 'what does the research say'.
Create clear action plans with steps, success criteria, and risk awareness. Use before implementing features, making changes, starting projects, or anytime you need a roadmap to success. Triggers on "plan this", "how should we approach", "what's the strategy", "steps to complete", or when facing complex multi-step work.
Add keyboard navigation to a feature using CommandRegistryService. Use when implementing keyboard shortcuts, vim-style navigation, or hotkeys for a page or component.
SOC 직업 분류 기준
| name | violetconnect |
| description | VioletConnect core features - merchant onboarding application architecture |
VioletConnect is Violet's merchant onboarding application that handles OAuth flows for connecting merchant stores to channels through the Violet platform.
Purpose: Enable merchants to connect their e-commerce stores (Shopify, BigCommerce, WooCommerce, etc.) to channel applications through a guided onboarding flow.
Repository: VioletConnect
Tech Stack: Next.js 12.2.5, React 17.0.2, Redux Toolkit, SCSS modules
URL Pattern: connect.violet.io/{appAlias}
Related Skills:
VioletConnect uses subdomain routing to support multi-tenancy for channels.
URL: connect.violet.io/{appAlias}/...
Example: connect.violet.io/andydev/platforms/shopify
appAlias identifies the channel (e.g., andydev, testchannel):
appId in the databasepages/
└── [appAlias]/
├── index.tsx # Landing page
├── platforms/
│ └── [platform]/
│ ├── index.tsx # Platform selection/store URL entry
│ └── callback.tsx # OAuth callback handler
├── merchant-migration/
│ └── [platform]/
│ └── index.tsx # Migration flow (existing merchants)
└── [[...catchall]].tsx # 404 handler
VioletConnect detects appAlias from the URL and loads channel configuration:
// Detected in AppContext
const appAlias = router.query.appAlias as string;
// Fetches channel config
GET /api/apps/bySubdomain/{appAlias}
Response: {
appId: number,
appAlias: string,
channelName: string,
supportedPlatforms: string[],
logoUrl: string,
// ... channel-specific config
}
1. Merchant lands on VioletConnect with appAlias
2. Merchant enters email
3. VioletConnect creates session (cookie-based)
4. Session persists through OAuth flow
5. Session used to associate merchant with channel
connect.sid (httpOnly, secure)sessionId, appId, email, merchantId (after OAuth)| State | Description | Next Step |
|---|---|---|
| No Session | First visit | Prompt for email |
| Session, No OAuth | Email entered | Prompt for store URL or platform |
| Session, OAuth Complete | Merchant connected | Commission/payout configuration |
| Session Expired | 24h timeout | Re-enter email |
VioletConnect guides merchants through a 13-step onboarding process from initial contact to fully configured merchant.
Step 1: Merchant lands on VioletConnect (via appAlias URL)
Step 2: Merchant enters email → Creates session
Step 3: Merchant selects platform (Shopify, BigCommerce, WooCommerce, etc.)
Step 4: Merchant enters store URL
Step 5: VioletConnect validates store URL
Step 6: VioletConnect redirects to platform OAuth
Step 7: Merchant approves app in platform admin
Step 8: Platform redirects back to VioletConnect callback
Step 9: VioletConnect exchanges code for access token (server-side)
Step 10: VioletConnect creates merchant record in MerchantService
Step 11: Merchant enters commission settings
Step 12: Merchant enters payout settings
Step 13: Success - Merchant redirected to dashboard or success page
For merchants already on Violet moving to a new channel:
URL: connect.violet.io/{appAlias}/merchant-migration/{platform}
Step 1: Merchant lands with migration URL
Step 2: Email entry (or skip if already logged in)
Step 3: Store URL entry
Step 4: VioletConnect detects existing merchant
Step 5: Merchant approves new channel access
Step 6: Commission/payout settings inherited or updated
Step 7: Success - Merchant connected to new channel
Key Difference: Skips OAuth (merchant already has credentials), just associates with new channel.
The standard onboarding path starts with email entry to create a session before OAuth.
Page: pages/[appAlias]/index.tsx
UI:
- Channel logo/branding
- "Connect your {platform} store to {channelName}"
- Email input field
- "Continue" button
- Help text: "We'll guide you through connecting your store"
On Submit:
- POST /api/session/create { email, appId }
- Creates session with email + appId
- Redirects to platform selection or direct platform URL
After OAuth completes, merchants configure commission rates and payout settings.
interface CommissionSettings {
rateType: 'percentage' | 'flat';
rateValue: number; // e.g., 15 (for 15%) or 5.00 (for $5)
applyTo: 'order' | 'product'; // Commission on order total or per product
}
UI: Simple form with:
interface PayoutSettings {
method: 'bank_transfer' | 'paypal' | 'check';
bankDetails?: {
accountNumber: string;
routingNumber: string;
accountName: string;
};
paypalEmail?: string;
mailingAddress?: Address;
payoutSchedule: 'weekly' | 'biweekly' | 'monthly';
}
UI: Multi-step form:
Each channel has its own configuration that determines VioletConnect behavior.
interface ChannelConfig {
appId: number;
appAlias: string;
channelName: string;
logoUrl: string;
supportedPlatforms: Platform[];
defaultCommissionRate?: number;
requiresCommissionConfig: boolean;
requiresPayoutConfig: boolean;
customSuccessUrl?: string;
brandingColors: {
primary: string;
secondary: string;
};
shopifyClientId?: string;
bigcommerceClientId?: string;
// ... platform-specific credentials
}
AppContext is VioletConnect's application-wide context provider. It manages data available throughout the app.
interface AppContextValue {
// Channel Information
appId: number;
appAlias: string;
channelName: string;
channelConfig: ChannelConfig;
// Session & Authentication
isAuthenticated: boolean;
sessionId: string;
email?: string;
// Merchant Information
merchantId?: string; // From query param or post-OAuth
merchantData?: Merchant; // After OAuth completes
// Platform Selection
selectedPlatform?: Platform;
// OAuth State
oauthInProgress: boolean;
oauthError?: string;
// Pre-Registration (if applicable)
preRegistrationId?: string;
hasPreRegistration: boolean;
}
| Data | When Populated | Source |
|---|---|---|
appId, appAlias | App load | URL + API fetch |
channelConfig | App load | GET /api/apps/bySubdomain/{appAlias} |
sessionId, email | Email entry | POST /api/session/create |
selectedPlatform | Platform selection | User input or URL |
merchantId | Query param or post-OAuth | URL or MerchantService response |
merchantData | Post-OAuth | MerchantService response |
hasPreRegistration | Pre-reg check | GET /api/pre-register/lookup |
import { useContext } from 'react';
import { AppContext } from '@/contexts/AppContext';
function MyComponent() {
const { appId, channelName, merchantId, isAuthenticated } = useContext(AppContext);
// Use context data...
}
VioletConnect integrates with MerchantService to create and manage merchant records.
POST /merchants/external
Headers: X-Violet-Token, X-Violet-App-Secret, X-Violet-App-Id
Body: {
email: string,
platform: string,
storeUrl: string,
accessToken: string, // From OAuth
shopDomain: string, // Platform-specific
appId: number
}
Response: {
merchantId: number,
status: 'active',
dateCreated: string
}
GET /merchants/external/pre-register?store_url={url}&app_id={id}
Headers: X-Violet-Token, X-Violet-App-Secret, X-Violet-App-Id
Response: {
merchantId: number,
merchantName: string,
storeUrl: string,
platform: string,
installLink: string,
status: 'pending'
}
PUT /merchants/external/{merchantId}
Headers: X-Violet-Token, X-Violet-App-Secret, X-Violet-App-Id
Body: {
commissionRate: number,
payoutMethod: string,
payoutDetails: object
}
VioletConnect must include these headers for all MerchantService calls:
X-Violet-Token: Session-based auth tokenX-Violet-App-Secret: Channel app secretX-Violet-App-Id: Channel app IDAfter merchant completes all steps:
Page: pages/[appAlias]/success.tsx
UI:
- Success icon/animation
- "You're all set!"
- Summary of what was configured
- "Go to Dashboard" button (if channel has dashboard)
- Or redirect to channel's custom success URL
Triggers:
- Analytics event: 'merchant_onboarding_complete'
- Email notification to merchant (optional)
- Webhook to channel (optional)
VioletConnect handles several error scenarios:
URL: callback?error=access_denied
UI:
- "Authorization Cancelled"
- "You declined to connect your store. Please try again."
- "Return to Setup" button → Restart OAuth
Triggered: During store URL validation
UI:
- Inline error below store URL input
- "Invalid store URL format. Must be *.myshopify.com" (platform-specific)
- Input highlighted in red
Triggered: When OAuth callback finds no session
UI:
- "Session Expired"
- "Your session has expired. Please start over."
- "Start Over" button → Return to email entry
Triggered: MerchantService returns 409 Conflict
UI:
- "Store Already Connected"
- "This store is already connected to another channel."
- "Contact support if you need help: {supportEmail}"
VioletConnect supports merchant pre-registration to streamline onboarding.
VioletConnect detects pre-registration in three ways:
connect.violet.io/{appAlias}?merchantId={id}VioletConnect supports 43 platforms via the Merchant.Platform enum.
| Platform | OAuth Type | Identifier |
|---|---|---|
| Shopify | Centralized OAuth 2.0 | Store URL (*.myshopify.com) |
| BigCommerce | Centralized OAuth 2.0 | Store Hash (abc123) |
| WooCommerce | REST API Keys | Store URL (any domain) |
Note: See platform-specific skills for integration details:
violetconnect-shopifyvioletconnect-bigcommercevioletconnect-woocommerce# Start VioletConnect locally
cd VioletConnect
npm install
npm run dev # Port 3001
# Configure /etc/hosts for subdomain testing
127.0.0.1 appname.localhost
# Access: http://appname.localhost:3001
# Required for local development
VIOLET_API_URL=http://localhost:8080
REDIS_URL=redis://localhost:6379
SESSION_SECRET=your-secret-key
# Platform OAuth credentials (per channel)
SHOPIFY_CLIENT_ID=...
SHOPIFY_CLIENT_SECRET=...
BIGCOMMERCE_CLIENT_ID=...
BIGCOMMERCE_CLIENT_SECRET=...
# Run Playwright E2E tests
npm run test:e2e
# Test specific flow
npm run test:e2e -- --grep "Shopify onboarding"
VioletConnect/
├── pages/
│ ├── [appAlias]/
│ │ ├── index.tsx # Landing page (email entry)
│ │ ├── platforms/
│ │ │ └── [platform]/
│ │ │ ├── index.tsx # Store URL entry + OAuth redirect
│ │ │ └── callback.tsx # OAuth callback handler
│ │ ├── merchant-migration/
│ │ │ └── [platform]/
│ │ │ └── index.tsx # Migration flow
│ │ ├── commission.tsx # Commission config
│ │ ├── payout.tsx # Payout config
│ │ ├── success.tsx # Success page
│ │ └── [[...catchall]].tsx # 404 handler
│ └── api/
│ ├── apps/
│ │ └── bySubdomain/[subdomain]/
│ │ └── index.ts # Fetch channel config
│ ├── session/
│ │ ├── create.ts # Create session
│ │ └── validate.ts # Validate session
│ ├── merchants/
│ │ └── create.ts # Create merchant (post-OAuth)
│ └── pre-register/
│ ├── lookup.ts # Pre-reg lookup by store URL
│ └── [merchantId].ts # Pre-reg lookup by merchantId
├── contexts/
│ └── AppContext.tsx # Application-wide context
├── components/
│ ├── EmailEntry/ # Email entry form
│ ├── StoreUrlInput/ # Store URL input (platform-specific)
│ ├── CommissionForm/ # Commission configuration
│ ├── PayoutForm/ # Payout configuration
│ ├── PreRegistration/ # Pre-reg confirmation UI
│ └── SuccessPage/ # Success page components
├── redux/
│ └── slices/
│ ├── session.ts # Session state
│ ├── merchant.ts # Merchant data
│ └── preRegistration.ts # Pre-reg state
└── utils/
├── axiosWrapper.ts # HTTP client
└── validation/ # Store URL validators
prism-brain/systems/violet-connect/merchant-onboarding-flow.mdprism-brain/systems/violet-connect/component-inventory.mdprism-brain/systems/violet-connect/test-coverage.mdprism-brain/product/specs/merchant-pre-registration/