agentsclimarketplace

Frontend design

Skill itssungho17/ssdam/templetes/frontend-design

SSDAM (Structured Skill-Driven Automation Mechanism) - 쓰담

Install
npx -y skills add itssungho17/ssdam --skill frontend-design

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Frontend-specialised design skill. Reads architecture-design (required) and backend-design (optional) to produce a complete frontend specification: pages, component tree, state management, API integration, and routing. Its output drives frontend-implementation.

SKILL.md

11.5 KB, as published. Nobody here has run it

Frontend-Design AgentSkill

Overview

frontend-design is the sixth step in the SSDAM execution pipeline (after backend-design, optional). It transforms architectural and backend specifications into a complete frontend design specification covering pages, components, state management, API integration, and routing.

This skill produces a single output document (frontend-design.TSK-NNN.md) that drives the final implementation step (frontend-implementation).

Skill Chain Context

task-spec.TSK-NNN.yaml
  + architecture-design.TSK-NNN.md (required)
  + backend-design.TSK-NNN.md      (optional — provides API specs)
    ↓
[frontend-design]  ← YOU ARE HERE
    ↓
.ssdam/{id}/output/design/frontend-design.TSK-NNN.md
    ↓
[frontend-implementation]

Trigger and I/O

AspectDetails
Trigger/frontend-design <task-spec-path>
Inputtask-spec.TSK-NNN.yaml + architecture-design.TSK-NNN.md (req.) + backend-design.TSK-NNN.md (opt.)
Output.ssdam/{id}/output/design/frontend-design.TSK-NNN.md
Tech StackSvelte 5, TypeScript, TailwindCSS, Vite, SvelteKit (varies by task-spec.tech_stack)

Execution Procedure

Step 1: Load Inputs

  1. Parse task-spec.TSK-NNN.yaml:

    • Extract purpose.scope_included (features/views requiring frontend)
    • Extract purpose.scope_excluded (out-of-scope frontend features)
    • Read execution_plan.tech_stack to determine frontend framework (default: Svelte 5)
    • Extract requirement_ids and output_contract (acceptance criteria)
  2. Read architecture-design.TSK-NNN.md:

    • Extract domain_entities (data model overview)
    • Extract api_contract_overview (high-level API structure)
    • Extract module_boundaries (system partitioning)
    • Note any user roles and permission levels
  3. If backend-design.TSK-NNN.md exists:

    • Read api_endpoints section (precise endpoints, methods, paths)
    • Read schemas section (TypeScript interfaces for request/response types)
    • Use these details for precise API integration plan (override api_contract_overview if conflicting)

Error handling:

  • If architecture-design.TSK-NNN.md not found: Stop and instruct user to run /architecture-design first.
  • If no frontend scope in scope_included: Warn that this task has no frontend work — skip frontend chain entirely.

Step 2: Identify Pages and Routes

For each item in scope_included that involves user interface:

  1. Page identification: List each distinct page or view.

    • Page name: descriptive (e.g., "Library", "UploadManagement", "Marketplace")
    • Route: SvelteKit route pattern (e.g., /, /uploads, /marketplace/[id])
    • Purpose: one-sentence description of what the page does
    • Accessed by: which user role(s) can access this page (from architecture-design)
    • Layout: which layout wrapper component (e.g., "AppLayout", "AuthLayout", "BlankLayout")
  2. Verify all UI-related scope_included items are represented by at least one page.

Step 3: Design Component Tree

For each page identified in Step 2:

  1. Page component: Create a top-level page component.

    • File: src/routes/{route}/+page.svelte
    • Responsibility: page-level layout, data loading orchestration, page-specific state
  2. Layout components: Identify shared UI (header, sidebar, footer, navigation).

    • Shared across pages → src/lib/components/layout/ (e.g., AppHeader.svelte, AppSidebar.svelte)
    • One layout per page category (e.g., "AppLayout" for authenticated pages, "AuthLayout" for login/signup)
  3. Feature components: Components specific to a feature or page.

    • File: src/lib/components/features/{FeatureName}/
    • Examples: MediaGrid.svelte, FileUploadModal.svelte, FilterPanel.svelte
    • Responsibility: handle a discrete feature or interaction
  4. Atomic components: Reusable, primitive components.

    • File: src/lib/components/atomic/ (e.g., Button.svelte, TextField.svelte, Modal.svelte)
    • Responsibility: single, focused UI pattern (no business logic)

For each component, define:

AttributeFormatExample
Component namePascalCaseMediaGrid, FileUploadModal
File pathRelative to project_rootsrc/lib/components/features/MediaGallery/Grid.svelte
Categorypage | layout | feature | atomicfeature
PropsList with typesitems: MediaFile[], selectedId: string | null
EventsCustom events dispatchedon:select={...}{ detail: { id: string } }
Stores usedList of stores read/writtenmediaFilesStore, authStore

Step 4: Design State Management

For each piece of shared state (data needed across multiple components):

  1. Store identification: One store per domain concept.

    • Examples: authStore, mediaFilesStore, purchasesStore, uiStateStore
    • Do NOT create one massive global store — partition by domain.
  2. For each store, define:

AttributeFormatExample
Store namecamelCasemediaFilesStore
Store filesrc/lib/stores/{storeName}.tssrc/lib/stores/mediaFiles.ts
State interfaceTypeScript interfaceinterface MediaFilesState { items: MediaFile[]; loading: boolean }
Initial stateConcrete values{ items: [], loading: false, error: null }
Actions/methodsNamed operationsfetchFiles(), uploadFile(file), deleteFile(id)
Derived storesComputed valuesselectedCount$ = derived(...)

Step 5: Design API Integration

For each API call the frontend needs to make:

  1. Endpoint mapping: Match each component action to a backend endpoint.

    • Method: GET, POST, PUT, DELETE, PATCH
    • Path: e.g., /api/media/files, /api/uploads/{id}
    • Source: from backend-design.api_endpoints if available, else from architecture-design.api_contract_overview
  2. Trigger identification: Which user action initiates each call.

    • Example: "Click 'Upload' button" → POST /api/uploads
    • Example: "Page load on /library" → GET /api/media/files
    • Example: "Delete media" → DELETE /api/media/files/{id}
  3. Component/store responsibility: Which component/store makes the call.

    • Prefer stores for shared data (mediaFilesStore.fetchFiles())
    • Prefer components for isolated actions
  4. TypeScript types: For each endpoint, define request and response types.

    • Request interface (if body is required): CreateUploadRequest { filename: string; mimetype: string }
    • Response interface: MediaFile { id: string; filename: string; size: number; uploadedAt: Date }
    • Match field names exactly with backend schemas (from backend-design)
  5. Loading and error handling:

    • Every API call must update a loading state before fetch, unset in finally block
    • Every API call must catch errors and update error state
    • Components displaying results show loading spinner, error message, or success state
  6. Group into API client module:

    • File: src/lib/api/{domain}.ts (e.g., src/lib/api/mediaFiles.ts)
    • Export async functions (not methods on a class)
    • Examples:
      export async function fetchMediaFiles(): Promise<MediaFile[]> { ... }
      export async function uploadFile(file: File): Promise<MediaFile> { ... }
      

Step 6: UI/UX Decisions

For each significant interaction identified in Steps 2-5:

  1. Interaction pattern: Name the interaction (e.g., "double-click to open detail", "drag-to-reorder", "search-to-filter")

  2. Component responsible: Which component handles it.

  3. Behavior: What happens in response.

    • Example: "Double-click media → open detail modal"
    • Example: "Type in search field → filter list in real-time"
    • Example: "Click upload → show file picker"
  4. State changes: Which store(s) update, and how.

    • Example: mediaFilesStore.setSelectedId(id) → detail modal becomes visible

Step 7: Define File Structure

List all files and directories to be created in project_root/:

Directory/FileDescriptionExample
src/routes/SvelteKit page routessrc/routes/+page.svelte, src/routes/library/+page.svelte
src/lib/components/Reusable componentssrc/lib/components/MediaGrid.svelte
src/lib/components/layout/Layout wrapperssrc/lib/components/layout/AppLayout.svelte
src/lib/components/atomic/Primitive componentssrc/lib/components/atomic/Button.svelte
src/lib/stores/Svelte storessrc/lib/stores/mediaFiles.ts
src/lib/api/API client functionssrc/lib/api/mediaFiles.ts
src/lib/types/TypeScript interfacessrc/lib/types/media.ts, src/lib/types/auth.ts
tests/Component and store teststests/components/MediaGrid.test.ts

Step 8: Test Strategy and Write Output

  1. Define testing approach:

    • Test runner: Vitest + Svelte Testing Library
    • Per-component testing: component renders, props work, events dispatch, stores integrate
    • Store testing: actions update state correctly, derived values compute
    • API client testing: functions call correct endpoints, handle errors, transform responses
  2. Write output document .ssdam/{id}/output/design/frontend-design.TSK-NNN.md:

    • Follow structure in references/output.template.yaml
    • Include all pages, components, stores, API integrations, file structure, test strategy
    • Self-validation: verify all scope_included UI items are addressed

Post-Execution

On successful completion:

✓ frontend-design.TSK-NNN.md written.
  - N pages defined
  - N components defined
  - N stores defined
  - N API endpoints integrated

Next: run /frontend-implementation <task-spec-path>

Error Handling

ErrorAction
architecture-design.TSK-NNN.md not foundStop. Instruct user: "Run /architecture-design first."
No frontend scope in task-spec.scope_includedWarn: "This task has no frontend work — skipping frontend chain." Do not produce a document.
backend-design.TSK-NNN.md not foundProceed using api_contract_overview from architecture-design as fallback. Document the fallback.
Incomplete pages/componentsReturn error: "Step 3: [list missing components needed for scope_included]"
Missing API integration for a page actionReturn error: "Step 5: [page/action] has no API endpoint defined."

References

  • input.template.yaml: Template for parsing task-spec, architecture-design, backend-design
  • output.template.yaml: Schema for the output frontend-design.TSK-NNN.md document
  • rules.md: Mandatory conventions (naming, store design, component structure, etc.)

Compatibility Notes

  • Framework detection: Read task-spec.execution_plan.tech_stack.frontend to determine framework (Svelte 5, React, Vue, etc.). This skill is optimized for Svelte 5 but abstracts patterns for other frameworks.
  • TypeScript: All interface definitions must match backend schemas exactly (same field names, compatible types).
  • Styling: TailwindCSS is the default CSS framework. Adjust if task-spec specifies otherwise.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.