Copy & paste prompts for your AI coding tool AI ์ฝ๋ฉ ๋๊ตฌ์ ๋ณต์ฌํด์ ๋ฐ๋ก ์ฌ์ฉํ์ธ์
Install the Diffsome SDK and set up the client. npm install @diffsome/sdk Create src/lib/diffsome.ts: import { Diffsome } from '@diffsome/sdk'; export const diffsome = new Diffsome({ baseUrl: 'https://www.diffsome.com', tenantId: 'YOUR_TENANT_ID', apiKey: 'YOUR_API_KEY', persistToken: true, }); Replace YOUR_TENANT_ID and YOUR_API_KEY with your actual values from the dashboard.Diffsome SDK๋ฅผ ์ค์นํ๊ณ ํด๋ผ์ด์ธํธ๋ฅผ ์ค์ ํด์ฃผ์ธ์. npm install @diffsome/sdk src/lib/diffsome.ts ํ์ผ์ ์์ฑํ์ธ์: import { Diffsome } from '@diffsome/sdk'; export const diffsome = new Diffsome({ baseUrl: 'https://www.diffsome.com', tenantId: 'YOUR_TENANT_ID', apiKey: 'YOUR_API_KEY', persistToken: true, }); YOUR_TENANT_ID์ YOUR_API_KEY๋ ๋์๋ณด๋์์ ํ์ธํ ์ค์ ๊ฐ์ผ๋ก ๊ต์ฒดํ์ธ์.
Create login and register pages using the Diffsome SDK. Login: const { token, user } = await diffsome.auth.login({ email, password }); Register: const { token, user } = await diffsome.auth.register({ name, email, password, password_confirmation: password }); Logout: await diffsome.auth.logout(); Check auth state: const user = await diffsome.auth.me(); Use persistToken: true in SDK config for automatic token management.Diffsome SDK๋ฅผ ์ฌ์ฉํด์ ๋ก๊ทธ์ธ, ํ์๊ฐ์ ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์. ๋ก๊ทธ์ธ: const { token, user } = await diffsome.auth.login({ email, password }); ํ์๊ฐ์ : const { token, user } = await diffsome.auth.register({ name, email, password, password_confirmation: password }); ๋ก๊ทธ์์: await diffsome.auth.logout(); ๋ก๊ทธ์ธ ์ํ ํ์ธ: const user = await diffsome.auth.me(); SDK ์ค์ ์์ persistToken: true๋ฅผ ์ฌ์ฉํ๋ฉด ํ ํฐ์ด ์๋ ๊ด๋ฆฌ๋ฉ๋๋ค.
Create blog list and detail pages using Diffsome SDK. List posts: const { data: posts, meta } = await diffsome.blog.list({ page: 1, per_page: 10 }); Get single post: const post = await diffsome.blog.get(slug); Get categories: const categories = await diffsome.blog.categories(); Filter by category: const { data: posts } = await diffsome.blog.byCategory('tech');Diffsome SDK๋ฅผ ์ฌ์ฉํด์ ๋ธ๋ก๊ทธ ๋ชฉ๋ก, ์์ธ ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์. ๊ธ ๋ชฉ๋ก: const { data: posts, meta } = await diffsome.blog.list({ page: 1, per_page: 10 }); ๊ธ ์์ธ: const post = await diffsome.blog.get(slug); ์นดํ ๊ณ ๋ฆฌ ๋ชฉ๋ก: const categories = await diffsome.blog.categories(); ์นดํ ๊ณ ๋ฆฌ๋ณ ํํฐ: const { data: posts } = await diffsome.blog.byCategory('tech');
Create product list and detail pages using Diffsome SDK. Product List: const { data: products, meta } = await diffsome.shop.listProducts({ page: 1, per_page: 12 }); Product Detail: const product = await diffsome.shop.getProduct(slug); Featured Products: const featured = await diffsome.shop.featuredProducts(8); Search Products: const { data: results } = await diffsome.shop.searchProducts('keyword'); Categories: const { data: categories } = await diffsome.shop.listCategories(); const category = await diffsome.shop.getCategory(slug); const { data: products } = await diffsome.shop.categoryProducts(categorySlug);Diffsome SDK๋ฅผ ์ฌ์ฉํด์ ์ํ ๋ชฉ๋ก, ์์ธ ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์. ์ํ ๋ชฉ๋ก: const { data: products, meta } = await diffsome.shop.listProducts({ page: 1, per_page: 12 }); ์ํ ์์ธ: const product = await diffsome.shop.getProduct(slug); ์ถ์ฒ ์ํ: const featured = await diffsome.shop.featuredProducts(8); ์ํ ๊ฒ์: const { data: results } = await diffsome.shop.searchProducts('keyword'); ์นดํ ๊ณ ๋ฆฌ: const { data: categories } = await diffsome.shop.listCategories(); const category = await diffsome.shop.getCategory(slug); const { data: products } = await diffsome.shop.categoryProducts(categorySlug);
Create cart page using Diffsome SDK. Get Cart: const cart = await diffsome.shop.getCart(); // cart.items, cart.total, cart.item_count Add to Cart: await diffsome.shop.addToCart({ product_id: 1, quantity: 1, variant_id: optionalVariantId }); Update Quantity: await diffsome.shop.updateCartItem(itemId, { quantity: 2 }); Remove Item: await diffsome.shop.removeFromCart(itemId); Clear Cart: await diffsome.shop.clearCart(); Note: Guest cart is automatically persisted via session_id.Diffsome SDK๋ฅผ ์ฌ์ฉํด์ ์ฅ๋ฐ๊ตฌ๋ ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์. ์ฅ๋ฐ๊ตฌ๋ ์กฐํ: const cart = await diffsome.shop.getCart(); // cart.items, cart.total, cart.item_count ์ฅ๋ฐ๊ตฌ๋ ์ถ๊ฐ: await diffsome.shop.addToCart({ product_id: 1, quantity: 1, variant_id: optionalVariantId }); ์๋ ๋ณ๊ฒฝ: await diffsome.shop.updateCartItem(itemId, { quantity: 2 }); ํญ๋ชฉ ์ญ์ : await diffsome.shop.removeFromCart(itemId); ์ฅ๋ฐ๊ตฌ๋ ๋น์ฐ๊ธฐ: await diffsome.shop.clearCart(); ์ฐธ๊ณ : ๋นํ์ ์ฅ๋ฐ๊ตฌ๋๋ session_id๋ก ์๋ ์ ์ง๋ฉ๋๋ค.
Create checkout and order pages using Diffsome SDK. Create Order: const order = await diffsome.shop.createOrder({ shipping_name: 'John Doe', shipping_phone: '010-1234-5678', shipping_address: '123 Main St', shipping_address_detail: 'Apt 101', shipping_postal_code: '12345', payment_method: 'card', // card, bank_transfer, virtual_account note: 'Please leave at door' }); My Orders: const { data: orders, meta } = await diffsome.shop.listOrders({ page: 1 }); Order Detail: const order = await diffsome.shop.getOrder(orderNumber); Cancel Order: await diffsome.shop.cancelOrder(orderId);Diffsome SDK๋ฅผ ์ฌ์ฉํด์ ์ฃผ๋ฌธ/๊ฒฐ์ ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์. ์ฃผ๋ฌธ ์์ฑ: const order = await diffsome.shop.createOrder({ shipping_name: 'ํ๊ธธ๋', shipping_phone: '010-1234-5678', shipping_address: '์์ธ์ ๊ฐ๋จ๊ตฌ ํ ํค๋๋ก 123', shipping_address_detail: '101ํธ', shipping_postal_code: '12345', payment_method: 'card', // card, bank_transfer, virtual_account note: '๋ฌธ ์์ ๋์์ฃผ์ธ์' }); ๋ด ์ฃผ๋ฌธ ๋ชฉ๋ก: const { data: orders, meta } = await diffsome.shop.listOrders({ page: 1 }); ์ฃผ๋ฌธ ์์ธ: const order = await diffsome.shop.getOrder(orderNumber); ์ฃผ๋ฌธ ์ทจ์: await diffsome.shop.cancelOrder(orderId);
Integrate payments using Diffsome SDK. Check Payment Status: const status = await diffsome.shop.getPaymentStatus(); // { toss_enabled, stripe_enabled } Toss Payments (Korea): const ready = await diffsome.shop.tossPaymentReady({ order_number: 'ORD-123' }); // Use ready.client_key with Toss SDK const result = await diffsome.shop.tossPaymentConfirm({ paymentKey, orderId, amount }); Stripe (Global): const { checkout_url } = await diffsome.shop.stripeCheckout({ order_number: 'ORD-123', success_url: 'https://yoursite.com/success', cancel_url: 'https://yoursite.com/cancel' }); window.location.href = checkout_url; // After redirect: const result = await diffsome.shop.stripeVerify({ session_id });Diffsome SDK๋ฅผ ์ฌ์ฉํด์ ๊ฒฐ์ ๋ฅผ ์ฐ๋ํ์ธ์. ๊ฒฐ์ ์ํ ํ์ธ: const status = await diffsome.shop.getPaymentStatus(); // { toss_enabled, stripe_enabled } ํ ์ค ํ์ด๋จผ์ธ (ํ๊ตญ): const ready = await diffsome.shop.tossPaymentReady({ order_number: 'ORD-123' }); // ready.client_key๋ฅผ ํ ์ค SDK์ ํจ๊ป ์ฌ์ฉ const result = await diffsome.shop.tossPaymentConfirm({ paymentKey, orderId, amount }); Stripe (ํด์ธ): const { checkout_url } = await diffsome.shop.stripeCheckout({ order_number: 'ORD-123', success_url: 'https://yoursite.com/success', cancel_url: 'https://yoursite.com/cancel' }); window.location.href = checkout_url; // ๋ฆฌ๋ค์ด๋ ํธ ํ: const result = await diffsome.shop.stripeVerify({ session_id });
Create product review system using Diffsome SDK. Get Reviews: const { data: reviews, stats } = await diffsome.shop.getProductReviews(productSlug, { rating: 5, sort: 'latest' }); // stats: { average_rating, total_count, rating_counts } Check if Can Review: const { can_review, reason } = await diffsome.shop.canReviewProduct(productSlug); // Requires: logged in + purchased + not reviewed yet Create Review: const review = await diffsome.shop.createReview(productSlug, { rating: 5, title: 'Great product!', content: 'Highly recommended...', images: [mediaId1, mediaId2] // optional }); Mark Helpful: await diffsome.shop.markReviewHelpful(reviewId); My Reviews: const { data: myReviews } = await diffsome.shop.myReviews();Diffsome SDK๋ฅผ ์ฌ์ฉํด์ ์ํ ๋ฆฌ๋ทฐ ์์คํ ์ ๋ง๋ค์ด์ฃผ์ธ์. ๋ฆฌ๋ทฐ ์กฐํ: const { data: reviews, stats } = await diffsome.shop.getProductReviews(productSlug, { rating: 5, sort: 'latest' }); // stats: { average_rating, total_count, rating_counts } ๋ฆฌ๋ทฐ ์์ฑ ๊ฐ๋ฅ ์ฌ๋ถ: const { can_review, reason } = await diffsome.shop.canReviewProduct(productSlug); // ์กฐ๊ฑด: ๋ก๊ทธ์ธ + ๊ตฌ๋งค ์๋ฃ + ๋ฏธ์์ฑ ๋ฆฌ๋ทฐ ์์ฑ: const review = await diffsome.shop.createReview(productSlug, { rating: 5, title: '์ ๋ง ์ข์์!', content: '๊ฐ๋ ฅ ์ถ์ฒํฉ๋๋ค...', images: [mediaId1, mediaId2] // ์ ํ }); ๋์๋จ ํ์: await diffsome.shop.markReviewHelpful(reviewId); ๋ด ๋ฆฌ๋ทฐ ๋ชฉ๋ก: const { data: myReviews } = await diffsome.shop.myReviews();
Create coupon system using Diffsome SDK. My Coupons: const coupons = await diffsome.shop.myCoupons(); Validate Coupon: const validation = await diffsome.shop.validateCoupon(couponCode, orderAmount); // { valid, discount_amount, message } Apply coupon during checkout by passing coupon_code to createOrder.Diffsome SDK๋ฅผ ์ฌ์ฉํด์ ์ฟ ํฐ ์์คํ ์ ๋ง๋ค์ด์ฃผ์ธ์. ๋ด ์ฟ ํฐ ๋ชฉ๋ก: const coupons = await diffsome.shop.myCoupons(); ์ฟ ํฐ ๊ฒ์ฆ: const validation = await diffsome.shop.validateCoupon(couponCode, orderAmount); // { valid, discount_amount, message } ์ฃผ๋ฌธ ์ coupon_code๋ฅผ createOrder์ ์ ๋ฌํ์ฌ ์ฟ ํฐ์ ์ ์ฉํฉ๋๋ค.
Create board pages using Diffsome SDK. Boards: const { data: boards } = await diffsome.boards.list(); const board = await diffsome.boards.get(slug); Posts: const { data: posts } = await diffsome.boards.listPosts(boardSlug); const post = await diffsome.boards.getPost(postId); await diffsome.boards.createPost({ board_id, title, content }); Comments: const comments = await diffsome.boards.listComments(postId); await diffsome.boards.createComment(postId, { content });Diffsome SDK๋ฅผ ์ฌ์ฉํด์ ๊ฒ์ํ ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์. ๊ฒ์ํ: const { data: boards } = await diffsome.boards.list(); const board = await diffsome.boards.get(slug); ๊ฒ์๊ธ: const { data: posts } = await diffsome.boards.listPosts(boardSlug); const post = await diffsome.boards.getPost(postId); await diffsome.boards.createPost({ board_id, title, content }); ๋๊ธ: const comments = await diffsome.boards.listComments(postId); await diffsome.boards.createComment(postId, { content });
Create reservation pages using Diffsome SDK. Settings & Services: const settings = await diffsome.reservation.getSettings(); const services = await diffsome.reservation.listServices(); const staffs = await diffsome.reservation.listStaff(serviceId); // optional filter Available Slots: const dates = await diffsome.reservation.getAvailableDates({ service_id, month: '2025-01' }); const slots = await diffsome.reservation.getAvailableSlots({ service_id, date: '2025-01-15', staff_id }); Create Reservation: const result = await diffsome.reservation.create({ service_id, staff_id, date, start_time, customer_name, customer_email, customer_phone, note }); My Reservations: const { data: reservations } = await diffsome.reservation.list(); const upcoming = await diffsome.reservation.upcoming(10); const past = await diffsome.reservation.past(10); const detail = await diffsome.reservation.get(reservationNumber); Cancel: await diffsome.reservation.cancel(reservationNumber, 'reason');Diffsome SDK๋ฅผ ์ฌ์ฉํด์ ์์ฝ ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์. ์ค์ & ์๋น์ค: const settings = await diffsome.reservation.getSettings(); const services = await diffsome.reservation.listServices(); const staffs = await diffsome.reservation.listStaff(serviceId); // ์ ํ์ ํํฐ ์์ฝ ๊ฐ๋ฅ ์๊ฐ: const dates = await diffsome.reservation.getAvailableDates({ service_id, month: '2025-01' }); const slots = await diffsome.reservation.getAvailableSlots({ service_id, date: '2025-01-15', staff_id }); ์์ฝ ์์ฑ: const result = await diffsome.reservation.create({ service_id, staff_id, date, start_time, customer_name, customer_email, customer_phone, note }); ๋ด ์์ฝ: const { data: reservations } = await diffsome.reservation.list(); const upcoming = await diffsome.reservation.upcoming(10); const past = await diffsome.reservation.past(10); const detail = await diffsome.reservation.get(reservationNumber); ์ทจ์: await diffsome.reservation.cancel(reservationNumber, '์ทจ์ ์ฌ์ ');
Create form pages using Diffsome SDK. List Forms: const { data: forms } = await diffsome.forms.list(); Get Form (with fields schema): const form = await diffsome.forms.get(formSlug); // form.fields: [{ name, label, type, required, options }] Submit Form: const submission = await diffsome.forms.submit(formSlug, { name: 'John', email: '[email protected]', message: 'Hello...' }); My Submissions: const { data: submissions } = await diffsome.forms.mySubmissions(); const submission = await diffsome.forms.getSubmission(submissionId);Diffsome SDK๋ฅผ ์ฌ์ฉํด์ ํผ ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์. ํผ ๋ชฉ๋ก: const { data: forms } = await diffsome.forms.list(); ํผ ์กฐํ (ํ๋ ์คํค๋ง ํฌํจ): const form = await diffsome.forms.get(formSlug); // form.fields: [{ name, label, type, required, options }] ํผ ์ ์ถ: const submission = await diffsome.forms.submit(formSlug, { name: 'ํ๊ธธ๋', email: '[email protected]', message: '์๋ ํ์ธ์...' }); ๋ด ์ ์ถ ๋ด์ญ: const { data: submissions } = await diffsome.forms.mySubmissions(); const submission = await diffsome.forms.getSubmission(submissionId);
Create comment system using Diffsome SDK. Blog Post Comments: const comments = await diffsome.comments.blogPost(slug); await diffsome.comments.createBlogPost(slug, { content, author_name, author_email }); Board Post Comments: const comments = await diffsome.comments.boardPost(postId); await diffsome.comments.createBoardPost(postId, { content }); Standalone Comments (Guestbook, Feedback): const comments = await diffsome.comments.standalone('guestbook'); await diffsome.comments.createStandalone('guestbook', { content, author_name }); Common Actions: await diffsome.comments.update(commentId, { content }); await diffsome.comments.delete(commentId); await diffsome.comments.like(commentId);Diffsome SDK๋ฅผ ์ฌ์ฉํด์ ๋๊ธ ์์คํ ์ ๋ง๋ค์ด์ฃผ์ธ์. ๋ธ๋ก๊ทธ ๋๊ธ: const comments = await diffsome.comments.blogPost(slug); await diffsome.comments.createBlogPost(slug, { content, author_name, author_email }); ๊ฒ์ํ ๋๊ธ: const comments = await diffsome.comments.boardPost(postId); await diffsome.comments.createBoardPost(postId, { content }); ๋จ๋ ๋๊ธ (๋ฐฉ๋ช ๋ก, ํผ๋๋ฐฑ): const comments = await diffsome.comments.standalone('guestbook'); await diffsome.comments.createStandalone('guestbook', { content, author_name }); ๊ณตํต ๊ธฐ๋ฅ: await diffsome.comments.update(commentId, { content }); await diffsome.comments.delete(commentId); await diffsome.comments.like(commentId);
Create custom data management using Diffsome SDK. Entity Definitions: const entities = await diffsome.entities.list(); const entity = await diffsome.entities.get('customers'); Records CRUD: const { data: records, meta } = await diffsome.entities.listRecords('customers', { page: 1, search: 'ACME' }); const record = await diffsome.entities.getRecord('customers', recordId); const newRecord = await diffsome.entities.createRecord('customers', { company: 'ABC', email: '[email protected]' }); await diffsome.entities.updateRecord('customers', recordId, { company: 'XYZ' }); await diffsome.entities.deleteRecord('customers', recordId); Typed Access (TypeScript): interface Customer { company: string; email: string; } const customers = diffsome.entities.typed('customers'); const { data } = await customers.list(); const record = await customers.get(1); // record.data.company is typed Diffsome SDK๋ฅผ ์ฌ์ฉํด์ ์ปค์คํ ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์. ์ํฐํฐ ์ ์: const entities = await diffsome.entities.list(); const entity = await diffsome.entities.get('customers'); ๋ ์ฝ๋ CRUD: const { data: records, meta } = await diffsome.entities.listRecords('customers', { page: 1, search: 'ACME' }); const record = await diffsome.entities.getRecord('customers', recordId); const newRecord = await diffsome.entities.createRecord('customers', { company: 'ABC', email: '[email protected]' }); await diffsome.entities.updateRecord('customers', recordId, { company: 'XYZ' }); await diffsome.entities.deleteRecord('customers', recordId); ํ์ ์ง์ ์ ๊ทผ (TypeScript): interface Customer { company: string; email: string; } const customers = diffsome.entities.typed('customers'); const { data } = await customers.list(); const record = await customers.get(1); // record.data.company์ ํ์ ์ ์ฉ
Create file upload using Diffsome SDK. Upload Single File: const media = await diffsome.media.upload(file); // File or Blob // media.id, media.url, media.thumbnail_url Upload Multiple Files: const mediaList = await diffsome.media.uploadMultiple([file1, file2]); List My Media: const { data: files } = await diffsome.media.list({ type: 'image' }); Get & Delete: const media = await diffsome.media.get(mediaId); await diffsome.media.delete(mediaId); Use with Reviews/Posts: const media = await diffsome.media.upload(imageFile); await diffsome.shop.createReview(slug, { rating: 5, content: '...', images: [media.id] });Diffsome SDK๋ฅผ ์ฌ์ฉํด์ ํ์ผ ์ ๋ก๋๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์. ๋จ์ผ ํ์ผ ์ ๋ก๋: const media = await diffsome.media.upload(file); // File ๋๋ Blob // media.id, media.url, media.thumbnail_url ๋ค์ค ํ์ผ ์ ๋ก๋: const mediaList = await diffsome.media.uploadMultiple([file1, file2]); ๋ด ๋ฏธ๋์ด ๋ชฉ๋ก: const { data: files } = await diffsome.media.list({ type: 'image' }); ์กฐํ & ์ญ์ : const media = await diffsome.media.get(mediaId); await diffsome.media.delete(mediaId); ๋ฆฌ๋ทฐ/๊ฒ์๊ธ๊ณผ ํจ๊ป ์ฌ์ฉ: const media = await diffsome.media.upload(imageFile); await diffsome.shop.createReview(slug, { rating: 5, content: '...', images: [media.id] });
Use the React Starter Kit for the fastest setup. Clone the repo and start building with AI. ๊ฐ์ฅ ๋น ๋ฅธ ์์์ ์ํด React ์คํํฐ ํท์ ์ฌ์ฉํ์ธ์. ์ ์ฅ์๋ฅผ ํด๋ก ํ๊ณ AI์ ํจ๊ป ๊ฐ๋ฐ์ ์์ํ์ธ์.
React 18 + Vite + TypeScript + Tailwind + shadcn/ui + @diffsome/sdk
Create a .cursorrules or CLAUDE.md file with this content for AI context: # Project: Diffsome Frontend ## Tech Stack - React 18 + Vite + TypeScript - @diffsome/sdk for API calls - Tailwind CSS + shadcn/ui ## SDK Usage import { diffsome } from '@/lib/diffsome'; // Auth await diffsome.auth.login({ email, password }); await diffsome.auth.register({ name, email, password, password_confirmation }); // Blog const { data: posts } = await diffsome.blog.list(); const post = await diffsome.blog.get(slug); // Shop const { data: products } = await diffsome.shop.listProducts(); const cart = await diffsome.shop.getCart(); ## Rules - Always use SDK methods, not raw fetch - Handle loading and error states - Use TypeScript types from SDK.cursorrules ๋๋ CLAUDE.md ํ์ผ์ ๋ง๋ค์ด AI ์ปจํ ์คํธ๋ก ์ฌ์ฉํ์ธ์: # ํ๋ก์ ํธ: Diffsome ํ๋ก ํธ์๋ ## ๊ธฐ์ ์คํ - React 18 + Vite + TypeScript - @diffsome/sdk๋ก API ํธ์ถ - Tailwind CSS + shadcn/ui ## SDK ์ฌ์ฉ๋ฒ import { diffsome } from '@/lib/diffsome'; // ์ธ์ฆ await diffsome.auth.login({ email, password }); await diffsome.auth.register({ name, email, password, password_confirmation }); // ๋ธ๋ก๊ทธ const { data: posts } = await diffsome.blog.list(); const post = await diffsome.blog.get(slug); // ์ผํ๋ชฐ const { data: products } = await diffsome.shop.listProducts(); const cart = await diffsome.shop.getCart(); ## ๊ท์น - ํญ์ SDK ๋ฉ์๋ ์ฌ์ฉ, fetch ์ง์ ์ฌ์ฉ ๊ธ์ง - ๋ก๋ฉ, ์๋ฌ ์ํ ์ฒ๋ฆฌ ํ์ - SDK์ TypeScript ํ์ ํ์ฉ
Use this template when asking AI to add features: Add [FEATURE NAME] page. Requirements: - Use @diffsome/sdk from src/lib/diffsome.ts - Follow existing component patterns in src/components - Add route in src/App.tsx - Handle loading and error states - Use shadcn/ui components SDK methods to use: [paste relevant SDK methods here]AI์๊ฒ ๊ธฐ๋ฅ ์ถ๊ฐ๋ฅผ ์์ฒญํ ๋ ์ด ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ธ์: [๊ธฐ๋ฅ๋ช ] ํ์ด์ง๋ฅผ ์ถ๊ฐํด์ฃผ์ธ์. ์๊ตฌ์ฌํญ: - src/lib/diffsome.ts์ @diffsome/sdk ์ฌ์ฉ - src/components์ ๊ธฐ์กด ์ปดํฌ๋ํธ ํจํด ๋ฐ๋ฅด๊ธฐ - src/App.tsx์ ๋ผ์ฐํธ ์ถ๊ฐ - ๋ก๋ฉ, ์๋ฌ ์ํ ์ฒ๋ฆฌ - shadcn/ui ์ปดํฌ๋ํธ ์ฌ์ฉ ์ฌ์ฉํ SDK ๋ฉ์๋: [๊ด๋ จ SDK ๋ฉ์๋ ์ฌ๊ธฐ์ ๋ถ์ฌ๋ฃ๊ธฐ]