shopport 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 72 11% 95%;--foreground: 0 0% 7%;--card: 0 0% 100%;--card-foreground: 0 0% 7%;--popover: 0 0% 100%;--popover-foreground: 0 0% 7%;--border: 70 8% 86%;--muted: 70 8% 89%;--muted-foreground: 0 0% 7% / .55;--primary: 19 100% 49%;--primary-foreground: 0 0% 100%;--success: 142 71% 45%;--warning: 37 84% 55%;--destructive: 0 84% 60%;--destructive-foreground: 0 0% 100%;--radius: 8px}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.-top-6{top:-1.5rem}.bottom-\[20px\]{bottom:20px}.left-0{left:0}.left-1\/2{left:50%}.right-0{right:0}.right-1\.5{right:.375rem}.right-6{right:1.5rem}.top-0{top:0}.top-1\/2{top:50%}.top-8{top:2rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.float-right{float:right}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[3px\]{margin-top:3px}.mt-px{margin-top:1px}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-12{height:3rem}.h-2{height:.5rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-9{height:2.25rem}.h-\[24px\]{height:24px}.h-\[350px\]{height:350px}.h-\[40px\]{height:40px}.h-\[72px\]{height:72px}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[280px\]{max-height:280px}.max-h-\[400px\]{max-height:400px}.max-h-\[70vh\]{max-height:70vh}.min-h-\[120px\]{min-height:120px}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-36{width:9rem}.w-4{width:1rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-\[120px\]{width:120px}.w-\[140px\]{width:140px}.w-\[220px\]{width:220px}.w-\[32px\]{width:32px}.w-\[50px\]{width:50px}.w-\[60px\]{width:60px}.w-\[72px\]{width:72px}.w-\[88px\]{width:88px}.w-\[90px\]{width:90px}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-\[160px\]{min-width:160px}.min-w-\[180px\]{min-width:180px}.min-w-\[200px\]{min-width:200px}.max-w-\[120px\]{max-width:120px}.max-w-\[1280px\]{max-width:1280px}.max-w-\[140px\]{max-width:140px}.max-w-\[160px\]{max-width:160px}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-\[220px\]{max-width:220px}.max-w-\[240px\]{max-width:240px}.max-w-\[260px\]{max-width:260px}.max-w-\[280px\]{max-width:280px}.max-w-\[300px\]{max-width:300px}.max-w-\[320px\]{max-width:320px}.max-w-\[340px\]{max-width:340px}.max-w-\[860px\]{max-width:860px}.max-w-\[90px\]{max-width:90px}.flex-1{flex:1 1 0%}.flex-\[1\]{flex:1}.flex-\[2\]{flex:2}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.scroll-mt-4{scroll-margin-top:1rem}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[190px_1fr\]{grid-template-columns:190px 1fr}.grid-cols-\[1fr_2fr_1fr\]{grid-template-columns:1fr 2fr 1fr}.grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}.grid-cols-\[260px_1fr\]{grid-template-columns:260px 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-\[2px\]{gap:2px}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){border-color:hsl(var(--border))}.divide-border\/50>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .5)}.self-center{align-self:center}.self-stretch{align-self:stretch}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-200\/50{border-color:#fde68a80}.border-amber-200\/60{border-color:#fde68a99}.border-amber-500\/50{border-color:#f59e0b80}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-border{border-color:hsl(var(--border))}.border-border\/30{border-color:hsl(var(--border) / .3)}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-border\/60{border-color:hsl(var(--border) / .6)}.border-emerald-200{--tw-border-opacity: 1;border-color:rgb(167 243 208 / var(--tw-border-opacity, 1))}.border-foreground\/50{border-color:hsl(var(--foreground) / .5)}.border-muted-foreground\/40{border-color:hsl(var(--muted-foreground) / .4)}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/40{border-color:hsl(var(--primary) / .4)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-primary\/60{border-color:hsl(var(--primary) / .6)}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-50\/50{background-color:#fffbeb80}.bg-background{background-color:hsl(var(--background))}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-400{--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-500\/60{background-color:#3b82f699}.bg-card{background-color:hsl(var(--card))}.bg-card\/80{background-color:hsl(var(--card) / .8)}.bg-emerald-100{--tw-bg-opacity: 1;background-color:rgb(209 250 229 / var(--tw-bg-opacity, 1))}.bg-emerald-50{--tw-bg-opacity: 1;background-color:rgb(236 253 245 / var(--tw-bg-opacity, 1))}.bg-emerald-50\/50{background-color:#ecfdf580}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/50{background-color:#10b98180}.bg-emerald-600{--tw-bg-opacity: 1;background-color:rgb(5 150 105 / var(--tw-bg-opacity, 1))}.bg-gray-50\/60{background-color:#f9fafb99}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-500\/10{background-color:#22c55e1a}.bg-green-500\/15{background-color:#22c55e26}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-muted-foreground\/30{background-color:hsl(var(--muted-foreground) / .3)}.bg-muted-foreground\/40{background-color:hsl(var(--muted-foreground) / .4)}.bg-muted-foreground\/50{background-color:hsl(var(--muted-foreground) / .5)}.bg-muted\/10{background-color:hsl(var(--muted) / .1)}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-muted\/40{background-color:hsl(var(--muted) / .4)}.bg-muted\/5{background-color:hsl(var(--muted) / .05)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-muted\/60{background-color:hsl(var(--muted) / .6)}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-orange-500\/15{background-color:#f9731626}.bg-pink-500{--tw-bg-opacity: 1;background-color:rgb(236 72 153 / var(--tw-bg-opacity, 1))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-primary\/50{background-color:hsl(var(--primary) / .5)}.bg-primary\/60{background-color:hsl(var(--primary) / .6)}.bg-primary\/70{background-color:hsl(var(--primary) / .7)}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500\/10{background-color:#ef44441a}.bg-red-500\/15{background-color:#ef444426}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-sky-100{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity, 1))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.bg-slate-700{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-violet-500{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/15{background-color:#eab30826}.bg-zinc-800{--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity, 1))}.p-0{padding:0}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-7{padding:1.75rem}.p-8{padding:2rem}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pl-0\.5{padding-left:.125rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-6{padding-left:1.5rem}.pr-3{padding-right:.75rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-7{padding-top:1.75rem}.pt-px{padding-top:1px}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[17px\]{font-size:17px}.text-\[18px\]{font-size:18px}.text-\[7px\]{font-size:7px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-400\/70{color:#fbbf24b3}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-border{color:hsl(var(--border))}.text-destructive{color:hsl(var(--destructive))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.text-emerald-800{--tw-text-opacity: 1;color:rgb(6 95 70 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/40{color:hsl(var(--foreground) / .4)}.text-foreground\/50{color:hsl(var(--foreground) / .5)}.text-foreground\/60{color:hsl(var(--foreground) / .6)}.text-foreground\/70{color:hsl(var(--foreground) / .7)}.text-foreground\/80{color:hsl(var(--foreground) / .8)}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/30{color:hsl(var(--muted-foreground) / .3)}.text-muted-foreground\/40{color:hsl(var(--muted-foreground) / .4)}.text-muted-foreground\/50{color:hsl(var(--muted-foreground) / .5)}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-muted-foreground\/70{color:hsl(var(--muted-foreground) / .7)}.text-orange-600{--tw-text-opacity: 1;color:rgb(234 88 12 / var(--tw-text-opacity, 1))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-700{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-sky-700{--tw-text-opacity: 1;color:rgb(3 105 161 / var(--tw-text-opacity, 1))}.text-white\/90{color:#ffffffe6}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.decoration-muted-foreground\/40{text-decoration-color:hsl(var(--muted-foreground) / .4)}.decoration-dotted{text-decoration-style:dotted}.underline-offset-2{text-underline-offset:2px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-inset{--tw-ring-inset: inset}.ring-primary\/50{--tw-ring-color: hsl(var(--primary) / .5)}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.placeholder\:text-muted-foreground\/60::-moz-placeholder{color:hsl(var(--muted-foreground) / .6)}.placeholder\:text-muted-foreground\/60::placeholder{color:hsl(var(--muted-foreground) / .6)}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:border-foreground\/30:hover{border-color:hsl(var(--foreground) / .3)}.hover\:border-foreground\/40:hover{border-color:hsl(var(--foreground) / .4)}.hover\:border-primary\/70:hover{border-color:hsl(var(--primary) / .7)}.hover\:bg-blue-50\/40:hover{background-color:#eff6ff66}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/20:hover{background-color:hsl(var(--muted) / .2)}.hover\:bg-muted\/30:hover{background-color:hsl(var(--muted) / .3)}.hover\:bg-muted\/40:hover{background-color:hsl(var(--muted) / .4)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-muted\/60:hover{background-color:hsl(var(--muted) / .6)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-primary\/50:focus{--tw-ring-color: hsl(var(--primary) / .5)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:block{display:block}.group:hover .group-hover\:text-foreground\/80{color:hsl(var(--foreground) / .8)}@media(prefers-color-scheme:dark){.dark\:border-amber-800{--tw-border-opacity: 1;border-color:rgb(146 64 14 / var(--tw-border-opacity, 1))}.dark\:border-amber-800\/40{border-color:#92400e66}.dark\:border-amber-900\/50{border-color:#78350f80}.dark\:border-amber-900\/60{border-color:#78350f99}.dark\:border-emerald-900\/60{border-color:#064e3b99}.dark\:border-red-900\/50{border-color:#7f1d1d80}.dark\:bg-amber-950{--tw-bg-opacity: 1;background-color:rgb(69 26 3 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-950\/20{background-color:#451a0333}.dark\:bg-amber-950\/30{background-color:#451a034d}.dark\:bg-amber-950\/50{background-color:#451a0380}.dark\:bg-blue-950\/50{background-color:#17255480}.dark\:bg-card{background-color:hsl(var(--card))}.dark\:bg-emerald-950\/20{background-color:#022c2233}.dark\:bg-emerald-950\/30{background-color:#022c224d}.dark\:bg-emerald-950\/50{background-color:#022c2280}.dark\:bg-green-950\/50{background-color:#052e1680}.dark\:bg-muted\/5{background-color:hsl(var(--muted) / .05)}.dark\:bg-purple-950\/50{background-color:#3b076480}.dark\:bg-red-950\/20{background-color:#450a0a33}.dark\:bg-red-950\/50{background-color:#450a0a80}.dark\:bg-sky-950\/50{background-color:#082f4980}.dark\:bg-slate-400{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity, 1))}.dark\:bg-zinc-200{--tw-bg-opacity: 1;background-color:rgb(228 228 231 / var(--tw-bg-opacity, 1))}.dark\:text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.dark\:text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.dark\:hover\:bg-muted\/20:hover{background-color:hsl(var(--muted) / .2)}}
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>shopport</title>
7
- <script type="module" crossorigin src="/assets/index-CchAOldH.js"></script>
8
- <link rel="stylesheet" crossorigin href="/assets/index-D4yBZJHs.css">
7
+ <script type="module" crossorigin src="/assets/index-BCUE7uKG.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/assets/index-BNMlqCBh.css">
9
9
  </head>
10
10
  <body>
11
11
  <div id="root"></div>
@@ -2,34 +2,102 @@
2
2
 
3
3
  > Claude Code가 읽고 실행하는 커머스 운영 워크플로우 스킬
4
4
 
5
- ## 사용법
5
+ ## 설치
6
6
 
7
- ### Claude Code에서
8
- ```
9
- /skill install shopport
7
+ ### 자동 설치 (npm 설치 시 자동 등록)
8
+
9
+ ```bash
10
+ npm install -g shopport
10
11
  ```
11
12
 
12
- 또는 수동 설치:
13
+ 설치 완료 후 `~/.claude/skills/`에 스킬이 자동 등록됩니다.
14
+
15
+ ### 수동 등록
16
+
13
17
  ```bash
14
- git clone https://github.com/onlymytho/shopport ~/.claude/skills/shopport
18
+ sppt setup-skills # 스킬 등록
19
+ sppt setup-skills uninstall # 스킬 제거
15
20
  ```
16
21
 
17
- ### 스킬 목록
22
+ ## 스킬 목록
23
+
24
+ ### 도움말
25
+
26
+ | 스킬 | 설명 |
27
+ |---|---|
28
+ | `/sppt` | shopport 전체 도움말 + 스킬 목록 |
29
+ | `/shopport` | `/sppt`와 동일 (별칭) |
30
+
31
+ ### 주문
18
32
 
19
33
  | 스킬 | 설명 |
20
34
  |---|---|
21
- | `source-to-register` | 소싱 검색 마진 계산 → 판매 채널 등록 |
22
- | `order-fulfill` | 주문 확인 → 소싱 발주 → 송장 등록 |
23
- | `inventory-sync` | 멀티채널 재고 동기화 |
24
- | `waterfall-source` | 3개 소싱채널 워터폴 검색 |
25
- | `price-monitor` | 소싱가 변동 감지 → 판매가 조정 |
35
+ | `/sppt-order-collect` | 멀티채널 주문 한번에 모아보기 |
36
+ | `/sppt-order-fulfill` | 주문 확인 → 소싱 발주 → 송장 등록 |
37
+
38
+ ### 소싱
39
+
40
+ | 스킬 | 설명 |
41
+ |---|---|
42
+ | `/sppt-source-to-register` | 소싱 검색 → 마진 계산 → 판매 채널 등록 |
43
+ | `/sppt-waterfall-source` | 3개 소싱채널 워터폴 가격 비교 |
44
+
45
+ ### 상품
46
+
47
+ | 스킬 | 설명 |
48
+ |---|---|
49
+ | `/sppt-product-sync` | 소싱→판매 배치 상품 동기화 |
50
+ | `/sppt-product-parse` | 상품명 → SKU/카테고리/제품라인 해체 |
51
+
52
+ ### 재고
53
+
54
+ | 스킬 | 설명 |
55
+ |---|---|
56
+ | `/sppt-inventory-sync` | 멀티채널 재고 분배 + 동기화 |
57
+
58
+ ### 가격/정산
59
+
60
+ | 스킬 | 설명 |
61
+ |---|---|
62
+ | `/sppt-price-monitor` | 소싱가 변동 감지 → 마진 체크 → 판매가 조정 |
63
+ | `/sppt-settlement-report` | 정산 현황 조회 + 수익 요약 |
64
+ | `/sppt-cost-calc` | 원가/마진/수수료 계산 |
65
+
66
+ ### 리서치/홍보
67
+
68
+ | 스킬 | 설명 |
69
+ |---|---|
70
+ | `/sppt-trend-research` | 트렌드 키워드 리서치 |
71
+ | `/sppt-promo-research` | 경쟁 광고 분석 → 바이럴 체크 → 카피 생성 |
72
+
73
+ ### 운영
74
+
75
+ | 스킬 | 설명 |
76
+ |---|---|
77
+ | `/sppt-dashboard` | 운영 대시보드 띄우기 |
78
+ | `/sppt-status-check` | 전채널 연결 + 건강 체크 |
26
79
 
27
80
  ## 전제 조건
28
81
 
29
- - `sppt` CLI 설치
82
+ - `sppt` CLI 설치 (`npm install -g shopport`)
30
83
  - 최소 1개 판매 채널 + 1개 소싱 채널 설정 (`sppt init`)
31
84
 
32
85
  ## 스킬 구조
33
86
 
34
87
  각 스킬은 `SKILL.md` 마크다운 파일 하나로 구성됩니다.
35
- Claude Code가 파일을 읽고, CLI 명령어를 조합해 워크플로우를 실행합니다.
88
+ YAML frontmatter에 `name`, `description`, `triggers`, `allowed-tools`가 정의되어 있으며,
89
+ Claude Code가 `~/.claude/skills/`에서 자동으로 발견하여 슬래시 커맨드로 사용할 수 있습니다.
90
+
91
+ ```
92
+ ~/.claude/skills/
93
+ ├── sppt/SKILL.md → /sppt
94
+ ├── shopport/SKILL.md → /shopport
95
+ ├── sppt-order-collect/SKILL.md → /sppt-order-collect
96
+ ├── sppt-order-fulfill/SKILL.md → /sppt-order-fulfill
97
+ └── ...
98
+ ```
99
+
100
+ ## 지원 채널
101
+
102
+ - **판매**: cafe24, coupang, smartstore, shopify
103
+ - **소싱**: domemae (위탁), domeggook (사입), specialoffer, cjdropshipping
@@ -0,0 +1,100 @@
1
+ ---
2
+ name: sppt-cost-calc
3
+ version: 1.0.0
4
+ description: |
5
+ 원가/마진/수수료/실수령액 계산 워크플로우.
6
+ Use when asked to "마진 계산", "원가 분석", "이거 팔면 얼마 남아", "수수료 계산".
7
+ triggers:
8
+ - 마진 계산
9
+ - 원가 분석
10
+ - 얼마 남아
11
+ - 수수료 계산
12
+ - cost calc
13
+ allowed-tools:
14
+ - Bash
15
+ - Read
16
+ - Glob
17
+ - Grep
18
+ ---
19
+
20
+ # cost-calc
21
+
22
+ 상품의 원가/마진/수수료/실수령액을 계산하는 워크플로우.
23
+
24
+ ## When to use
25
+
26
+ - "이 상품 팔면 얼마 남아?", "마진 계산해줘", "원가 분석해줘"
27
+ - 소싱 상품 등록 전 수익성 판단
28
+ - 채널별 수수료 비교
29
+
30
+ ## Steps
31
+
32
+ ### 1. 소싱가 확인
33
+
34
+ 소싱 채널에서 도매가를 확인합니다:
35
+
36
+ ```bash
37
+ sppt source detail <sourceChannel> <productId>
38
+ ```
39
+
40
+ ### 2. 채널별 수수료 확인
41
+
42
+ ```bash
43
+ sppt settlement fee list
44
+ ```
45
+
46
+ 채널별 수수료율:
47
+ | 채널 | 기본 수수료 |
48
+ |---|---|
49
+ | cafe24 | 3.3% (PG 수수료) |
50
+ | coupang | 10.8% (카테고리별 상이) |
51
+ | smartstore | 5.5% (카테고리별 상이) |
52
+ | shopify | 2.9% + $0.30 (결제 수수료) |
53
+
54
+ ### 3. 마진 계산
55
+
56
+ ```bash
57
+ sppt settlement calc <channel> <orderId> --amount <판매가>
58
+ ```
59
+
60
+ 또는 직접 계산:
61
+
62
+ ```bash
63
+ sppt cost estimate --source-price <도매가> --selling-price <판매가> --channel <채널> --shipping <배송비>
64
+ ```
65
+
66
+ 계산 공식:
67
+ ```
68
+ 실수령액 = 판매가 - 수수료 - 배송비
69
+ 마진 = 실수령액 - 도매가
70
+ 마진율 = 마진 / 판매가 × 100
71
+ ```
72
+
73
+ ### 4. 채널별 비교
74
+
75
+ 여러 채널에 같은 상품을 판매할 때 채널별 수익 비교:
76
+
77
+ ```
78
+ 💰 수익 비교 (도매가 8,500원, 판매가 15,900원)
79
+ ────────────────────────────────────────
80
+ 채널 수수료 배송비 실수령 마진 마진율
81
+ cafe24 525 3,000 12,375 3,875 24.4%
82
+ coupang 1,717 0 14,183 5,683 35.7%
83
+ smartstore 875 3,000 12,025 3,525 22.2%
84
+ ────────────────────────────────────────
85
+ ```
86
+
87
+ ### 5. 적정 판매가 역산
88
+
89
+ 목표 마진율로 판매가를 역산합니다:
90
+
91
+ ```
92
+ 목표 마진 30% → 판매가 = (도매가 + 배송비) / (1 - 수수료율 - 목표마진율)
93
+ ```
94
+
95
+ ## Notes
96
+
97
+ - 쿠팡은 로켓배송/판매자배송에 따라 수수료 체계가 다릅니다
98
+ - 배송비 포함/별도 정책에 따라 마진이 크게 달라집니다
99
+ - 환율 변동 (CJ Dropshipping 등 해외 소싱) 고려 필요
100
+ - 수수료 규칙은 `sppt settlement fee set`으로 커스터마이즈 가능
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: sppt-dashboard
3
+ version: 1.0.0
4
+ description: |
5
+ shopport 운영 대시보드를 브라우저에서 띄우는 스킬.
6
+ Use when asked to "대시보드", "dashboard", "현황판 보여줘".
7
+ triggers:
8
+ - 대시보드
9
+ - dashboard
10
+ - 현황판
11
+ - 대시보드 띄워
12
+ allowed-tools:
13
+ - Bash
14
+ - Read
15
+ ---
16
+
17
+ # dashboard
18
+
19
+ shopport 웹 대시보드를 로컬에서 띄워 브라우저로 확인하는 워크플로우.
20
+
21
+ ## When to use
22
+
23
+ - "대시보드 띄워줘", "현황 보고 싶어", "dashboard" 요청 시
24
+ - 주문/상품/재고 현황을 시각적으로 확인하고 싶을 때
25
+
26
+ ## Steps
27
+
28
+ ### 1. 대시보드 실행
29
+
30
+ ```bash
31
+ sppt dashboard
32
+ ```
33
+
34
+ 기본 포트 3847에서 대시보드가 실행되고 브라우저가 자동으로 열립니다.
35
+
36
+ 포트를 변경하려면:
37
+
38
+ ```bash
39
+ sppt dashboard --port 8080
40
+ ```
41
+
42
+ ### 2. 대시보드 기능
43
+
44
+ 대시보드에서 확인 가능한 항목:
45
+ - 세션별 CLI 명령어 실행 현황 + 진행률
46
+ - 주문 조회 결과
47
+ - 상품 목록/상세
48
+ - 작업 로그
49
+
50
+ ### 3. 종료
51
+
52
+ 대시보드는 CLI 프로세스가 종료되면 함께 종료됩니다.
53
+ 터미널에서 `Ctrl+C`로 종료합니다.
54
+
55
+ ## Notes
56
+
57
+ - 대시보드는 로컬 전용 (외부 접근 불가)
58
+ - 주요 커맨드(order, product, inventory 등) 실행 시 세션 대시보드가 자동으로 열립니다
59
+ - `--no-dashboard` 플래그로 자동 열기를 비활성화할 수 있습니다
@@ -1,3 +1,22 @@
1
+ ---
2
+ name: sppt-inventory-sync
3
+ version: 1.0.0
4
+ description: |
5
+ 공급사 재고 기준 멀티채널 재고 분배 + 동기화 워크플로우.
6
+ Use when asked to "재고 동기화", "채널별 재고 맞춰줘", "재고 분배".
7
+ triggers:
8
+ - 재고 동기화
9
+ - 재고 분배
10
+ - inventory sync
11
+ - 채널별 재고
12
+ allowed-tools:
13
+ - Bash
14
+ - Read
15
+ - Edit
16
+ - Glob
17
+ - Grep
18
+ ---
19
+
1
20
  # inventory-sync
2
21
 
3
22
  공급사 재고를 기준으로 4개 판매 채널의 재고를 분배하고 동기화하는 워크플로우.
@@ -0,0 +1,100 @@
1
+ ---
2
+ name: sppt-order-collect
3
+ version: 1.0.0
4
+ description: |
5
+ 멀티채널 주문을 한번에 모아보는 워크플로우.
6
+ Use when asked to "주문 모아줘", "전채널 주문 조회", "오늘 주문 몇 개야".
7
+ triggers:
8
+ - 주문 모아
9
+ - 전채널 주문
10
+ - 오늘 주문
11
+ - order collect
12
+ - 주문 현황
13
+ allowed-tools:
14
+ - Bash
15
+ - Read
16
+ - Glob
17
+ - Grep
18
+ ---
19
+
20
+ # order-collect
21
+
22
+ 설정된 모든 판매 채널의 주문을 한번에 조회하고 통합 요약하는 워크플로우.
23
+
24
+ ## When to use
25
+
26
+ - "오늘 주문 몇 개야?", "주문 모아줘", "전채널 주문 현황" 요청 시
27
+ - 매일 아침 주문 현황 파악할 때
28
+ - 멀티채널 주문을 한눈에 보고 싶을 때
29
+
30
+ ## Prerequisites
31
+
32
+ - 최소 1개 판매 채널 설정 완료
33
+ - `sppt status`로 채널 연결 확인
34
+
35
+ ## Steps
36
+
37
+ ### 1. 채널 상태 확인
38
+
39
+ ```bash
40
+ sppt status
41
+ ```
42
+
43
+ 연결된 채널 목록을 파악합니다. 연결 실패한 채널이 있으면 사용자에게 알립니다.
44
+
45
+ ### 2. 채널별 주문 조회
46
+
47
+ 연결된 각 채널에서 주문을 조회합니다:
48
+
49
+ ```bash
50
+ sppt order list cafe24 --days 1
51
+ sppt order list coupang --days 1
52
+ sppt order list smartstore --days 1
53
+ sppt order list shopify --days 1
54
+ ```
55
+
56
+ `--days` 기본값은 7일이지만, 일일 체크에는 `--days 1`을 사용합니다.
57
+ 사용자가 특정 기간을 요청하면 해당 기간으로 조정합니다.
58
+
59
+ ### 3. 통합 요약
60
+
61
+ 채널별 결과를 통합하여 사용자에게 보여줍니다:
62
+
63
+ ```
64
+ 📦 주문 현황 (최근 1일)
65
+ ─────────────────────────────────────
66
+ 채널 신규 처리중 완료 합계
67
+ cafe24 3 2 5 10
68
+ coupang 5 1 8 14
69
+ smartstore 2 0 3 5
70
+ shopify 1 0 1 2
71
+ ─────────────────────────────────────
72
+ 합계 11 3 17 31
73
+ ```
74
+
75
+ ### 4. 미처리 주문 안내
76
+
77
+ 신규(미확인) 주문이 있으면 즉시 처리가 필요함을 안내합니다:
78
+
79
+ - 미확인 주문 → `/sppt-order-fulfill`로 처리 안내
80
+ - 발주 확인 후 송장 미등록 → 송장 등록 필요 안내
81
+
82
+ ### 5. 주문 상세 (선택)
83
+
84
+ 사용자가 특정 주문을 더 보고 싶으면:
85
+
86
+ ```bash
87
+ sppt order get <channel> <orderId>
88
+ ```
89
+
90
+ ## Error handling
91
+
92
+ - **채널 연결 실패**: 해당 채널 건너뛰고 나머지 채널 결과 표시, 재인증 안내
93
+ - **SmartStore 24시간 제한**: CLI가 자동으로 일 단위 순회하므로 걱정 불필요
94
+ - **Rate limit**: CLI rate limiter가 자동 처리
95
+
96
+ ## Notes
97
+
98
+ - 매일 아침 체크 루틴으로 활용하면 효과적
99
+ - Coupang은 발주 확인 전에만 취소가 가능하므로 빠른 확인 중요
100
+ - `--json` 플래그로 JSON 출력 가능 (자동화/파이프라인 연동 시)
@@ -1,3 +1,22 @@
1
+ ---
2
+ name: sppt-order-fulfill
3
+ version: 1.0.0
4
+ description: |
5
+ 신규 주문 확인 → 소싱 발주 → 송장 등록까지 전체 주문 처리 워크플로우.
6
+ Use when asked to "주문 처리해줘", "송장 넣어줘", "발주 확인해줘".
7
+ triggers:
8
+ - 주문 처리
9
+ - 송장 등록
10
+ - 발주 확인
11
+ - order fulfill
12
+ allowed-tools:
13
+ - Bash
14
+ - Read
15
+ - Edit
16
+ - Glob
17
+ - Grep
18
+ ---
19
+
1
20
  # order-fulfill
2
21
 
3
22
  신규 주문 확인 → 소싱 발주 → 송장 등록까지의 주문 처리 워크플로우.
@@ -1,3 +1,23 @@
1
+ ---
2
+ name: sppt-price-monitor
3
+ version: 1.0.0
4
+ description: |
5
+ 소싱가 변동 감지 + 마진 체크 + 판매가 조정 제안 워크플로우.
6
+ Use when asked to "가격 변동 체크", "마진 확인", "소싱가 올랐는지".
7
+ triggers:
8
+ - 가격 변동
9
+ - 마진 확인
10
+ - 소싱가 체크
11
+ - price monitor
12
+ allowed-tools:
13
+ - Bash
14
+ - Read
15
+ - Write
16
+ - Edit
17
+ - Glob
18
+ - Grep
19
+ ---
20
+
1
21
  # price-monitor
2
22
 
3
23
  소싱 채널의 도매가 변동을 감지하고 판매가 조정을 제안하는 워크플로우.
@@ -1,3 +1,23 @@
1
+ ---
2
+ name: sppt-product-parse
3
+ version: 1.0.0
4
+ description: |
5
+ 주문 상품명을 SKU/카테고리/제품라인으로 해체하는 파싱 워크플로우.
6
+ Use when asked to "상품명 분석", "SKU별 정리", "미매핑 상품 확인".
7
+ triggers:
8
+ - 상품명 분석
9
+ - SKU 정리
10
+ - 미매핑 상품
11
+ - product parse
12
+ allowed-tools:
13
+ - Bash
14
+ - Read
15
+ - Write
16
+ - Edit
17
+ - Glob
18
+ - Grep
19
+ ---
20
+
1
21
  # product-parse
2
22
 
3
23
  주문 데이터의 상품명을 사용자 정의 규칙에 따라 SKU/카테고리/제품라인 단위로 해체.
@@ -0,0 +1,99 @@
1
+ ---
2
+ name: sppt-product-sync
3
+ version: 1.0.0
4
+ description: |
5
+ 소싱 상품을 판매 채널에 배치로 동기화/등록하는 워크플로우.
6
+ Use when asked to "상품 동기화", "배치 등록", "전채널 등록", "상품 복사".
7
+ triggers:
8
+ - 상품 동기화
9
+ - 배치 등록
10
+ - 전채널 등록
11
+ - 상품 복사
12
+ - product sync
13
+ allowed-tools:
14
+ - Bash
15
+ - Read
16
+ - Write
17
+ - Edit
18
+ - Glob
19
+ - Grep
20
+ ---
21
+
22
+ # product-sync
23
+
24
+ 소싱 상품을 여러 판매 채널에 배치로 등록/동기화하는 워크플로우.
25
+
26
+ ## When to use
27
+
28
+ - "상품 전채널에 올려줘", "배치로 등록해줘", "카페24 상품 쿠팡에도 올려줘"
29
+ - 한 채널에 등록된 상품을 다른 채널로 복사할 때
30
+ - 다수 상품을 한번에 등록할 때
31
+
32
+ ## Prerequisites
33
+
34
+ - 최소 2개 판매 채널 설정 완료
35
+ - 등록할 상품 데이터 (JSON 파일 또는 기존 채널 상품 ID)
36
+
37
+ ## Steps
38
+
39
+ ### 1. 원본 상품 확인
40
+
41
+ 기존 채널에서 상품 목록을 확인합니다:
42
+
43
+ ```bash
44
+ sppt product list cafe24
45
+ ```
46
+
47
+ 또는 특정 상품 상세:
48
+
49
+ ```bash
50
+ sppt product get cafe24 <productId>
51
+ ```
52
+
53
+ ### 2. 배치 동기화 실행
54
+
55
+ 한 채널의 상품을 다른 채널로 배치 복사:
56
+
57
+ ```bash
58
+ sppt product sync-batch --from cafe24 --to coupang --ids <id1,id2,id3>
59
+ ```
60
+
61
+ 전체 채널 동시 등록:
62
+
63
+ ```bash
64
+ sppt product register --all-channels --file /tmp/product.json
65
+ ```
66
+
67
+ ### 3. 결과 확인
68
+
69
+ 배치 결과가 CSV로 저장됩니다. 실패한 항목을 확인합니다:
70
+
71
+ ```bash
72
+ # 결과 CSV에서 실패 건 확인
73
+ ```
74
+
75
+ 실패한 상품은 에러 메시지를 확인하고 개별 재시도합니다:
76
+
77
+ ```bash
78
+ sppt product register coupang --file /tmp/failed-product.json
79
+ ```
80
+
81
+ ### 4. 매핑 등록
82
+
83
+ 채널 간 상품 매핑을 등록하여 재고 동기화에 활용합니다:
84
+
85
+ ```bash
86
+ sppt mapping add <cafe24Id> <coupangId>
87
+ ```
88
+
89
+ ## Error handling
90
+
91
+ - **카테고리 코드 불일치**: 채널별 카테고리 체계가 달라 매핑 필요
92
+ - **이미지 URL 차단**: 일부 채널은 외부 이미지 URL을 차단 — 이미지 업로드 필요
93
+ - **필수 필드 누락**: 채널별 필수 입력 항목이 다름 (쿠팡: 카테고리 코드 필수)
94
+
95
+ ## Notes
96
+
97
+ - `--all-channels`는 설정된 모든 판매 채널에 동시 등록합니다
98
+ - 배치 복사 결과는 자동으로 CSV에 기록됩니다
99
+ - 채널 간 가격 차등은 `--markup` 옵션으로 조정 가능합니다
@@ -1,3 +1,24 @@
1
+ ---
2
+ name: sppt-promo-research
3
+ version: 1.0.0
4
+ description: |
5
+ 경쟁 광고 분석 → 바이럴 강도 확인 → AI 광고 카피 생성 홍보 리서치 워크플로우.
6
+ Use when asked to "광고 분석", "카피 써줘", "홍보 전략", "인플루언서 찾아줘".
7
+ triggers:
8
+ - 광고 분석
9
+ - 카피 생성
10
+ - 홍보 전략
11
+ - 인플루언서
12
+ - promo research
13
+ allowed-tools:
14
+ - Bash
15
+ - Read
16
+ - Write
17
+ - Edit
18
+ - Glob
19
+ - Grep
20
+ ---
21
+
1
22
  # promo-research
2
23
 
3
24
  소싱 키워드 또는 등록 상품을 바탕으로 경쟁 광고 분석 → 바이럴 강도 확인 → AI 광고 카피 생성까지 자동으로 진행하는 홍보 리서치 워크플로우.