Jeden Skill in Manus ausführen
mit einem Klick
mit einem Klick
Jeden Skill in Manus mit einem Klick ausführen
Loslegen$pwd:
$ git log --oneline --stat
stars:264
forks:31
updated:13. Februar 2026 um 11:16
SKILL.md
Use when adding new scraping targets to the crawler
Use when adding/modifying database tables or columns in Drizzle ORM schema
Use when needing to visualize database schema, generate ERD diagrams from Drizzle ORM schemas, or understand table relationships
| name | ui-component |
| description | Use when creating new UI components under apps/web/src/components/ |
*.stories.tsx for Storybookpnpm --filter @mf-dashboard/web storybookcomponents/charts/ or components/ui/)Data-agnostic, reusable components. Receive all data via props.
// components/charts/my-chart.tsx
"use client";
interface MyChartProps {
data: Array<{ label: string; value: number }>;
// ... props only, no data fetching
}
export function MyChart({ data }: MyChartProps) {
return (/* pure rendering */);
}
components/info/)| File | Purpose |
|---|---|
foo.tsx | Server Component - fetches data via lib/queries |
foo.client.tsx | Client Component - handles interactivity (ONLY if needed) |
foo.stories.tsx | Storybook - uses mock data |
IMPORTANT: Only create .client.tsx when interactivity is required (useState, useEffect, event handlers, etc.). If the component only displays data, keep it as a Server Component.
// components/info/my-info.tsx
import { getMyData } from "../../lib/queries";
export function MyInfo() {
const data = getMyData();
return (
<Card>
<CardHeader>
<CardTitle>My Info</CardTitle>
</CardHeader>
<CardContent>{/* render data */}</CardContent>
</Card>
);
}
// components/info/my-info.tsx
import { getMyData } from "../../lib/queries";
import { MyInfoClient } from "./my-info.client";
export function MyInfo() {
const data = getMyData();
return <MyInfoClient data={data} />;
}
// components/info/my-info.client.tsx
"use client";
interface MyInfoClientProps {
data: MyData;
}
export function MyInfoClient({ data }: MyInfoClientProps) {
const [state, setState] = useState(/* ... */);
return (/* interactive UI */);
}
apps/web/src/components/charts/apps/web/src/components/ui/apps/web/src/components/info/apps/web/src/lib/queries.ts// components/info/my-info.stories.tsx
import type { Meta, StoryObj } from "@storybook/react";
import { MyInfoClient } from "./my-info.client";
const meta = {
component: MyInfoClient,
} satisfies Meta<typeof MyInfoClient>;
export default meta;
type Story = StoryObj<typeof meta>;
export const Default: Story = {
args: {
data: {
// mock data here
},
},
};
| Purpose | Class |
|---|---|
| Income amount | text-income |
| Expense amount | text-expense |
| Positive balance | text-balance-positive |
| Negative balance | text-balance-negative |