Expert guide for automated and manual Web Accessibility (a11y) testing — axe-core, Pa11y, Playwright a11y, screen reader testing, and WCAG 2.2 Level AA/AAA compliance / Panduan ahli pengujian aksesibilitas web.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Orchestrates Single-Page Application (SPA) architecture, integrating frontend state management with API-driven backends / Mengorkestrasi arsitektur Single-Page Application (SPA), mengintegrasikan state management frontend dengan backend berbasis API.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
<a name="english"></a>
Connects and orchestrates with relevant domain skills like modern-web-guidance, brainstorming, zero-to-prod-orchestrator, and session-memory-manager to ensure cohesive execution.
modern-web-guidance FIRST for all HTML/CSS and client-side JS tasks to ensure modern web standards.Structured orchestration guide for building modern Single-Page Applications (SPAs). Coordinates frontend architecture (TanStack Router, React 19, TanStack Query v5) with decoupled API backends (Hono RPC, tRPC). Covers state management strategy, routing patterns, API layer design, build tooling (Vite + TanStack Start), and deployment strategies.
Choose SPA when:
✅ Highly interactive app (dashboard, editor, admin panel)
✅ Rich client-side state that persists across navigation
✅ Auth-gated app (SEO is not a primary concern)
✅ Already have a separate backend API
Choose SSR (Next.js) when:
✅ SEO is critical (marketing pages, public content)
✅ Fast initial page load for unauthenticated users
✅ Mixed app: some public pages + some gated app pages
Choose MPA (Astro, Django, Laravel) when:
✅ Mostly static content, minimal interactivity
✅ SEO is the primary concern
✅ Small team that wants to avoid JS complexity
→ see mpa-orchestrator skill
| Layer | Tool | Why |
|---|---|---|
| Build | Vite 6 / TanStack Start | Instant HMR, ES modules, fast builds |
| Routing | TanStack Router | Fully type-safe routes, search params, loaders |
| Server State | TanStack Query v5 | Data fetching, caching, mutations |
| Client State | Zustand / Jotai | Lightweight, no boilerplate |
| API Layer | Hono RPC / tRPC | End-to-end type-safe, no codegen |
| Forms | React Hook Form + Zod | Performant, type-safe validation |
| Styling | Tailwind CSS v4 | Utility-first, zero-runtime |
| Components | shadcn/ui + Base UI | Headless, accessible, customizable |
| Animations | GSAP | Complex, timeline-based, scroll-driven |
src/routes/
__root.tsx # Root layout (providers, nav)
index.tsx # / — landing/home
_auth.tsx # Auth guard layout
_auth/
dashboard.tsx # /dashboard (auth required)
settings/
index.tsx # /settings
profile.tsx # /settings/profile
_public.tsx # Public layout
_public/
login.tsx # /login
// src/routes/__root.tsx
import { createRootRouteWithContext, Outlet } from '@tanstack/react-router';
import type { QueryClient } from '@tanstack/react-query';
interface RouterContext {
queryClient: QueryClient;
auth: { user: User | null; isAuthenticated: boolean };
}
export const Route = createRootRouteWithContext<RouterContext>()({
component: () => (
<div>
<Navbar />
<Outlet />
</div>
),
});
// src/routes/_auth/dashboard.tsx — protected route with data preloading
import { createFileRoute, redirect } from '@tanstack/react-router';
import { workspacesQueryOptions } from '@/queries/workspaces';
export const Route = createFileRoute('/_auth/dashboard')({
// Runs before render — redirect if not authenticated
beforeLoad: ({ context }) => {
if (!context.auth.isAuthenticated) {
throw redirect({ to: '/login' });
}
},
// Prefetch data in loader — no loading state on initial render
loader: ({ context: { queryClient } }) =>
queryClient.ensureQueryData(workspacesQueryOptions()),
component: DashboardPage,
});
function DashboardPage() {
// Data is already available — no loading state
const { data: workspaces } = useSuspenseQuery(workspacesQueryOptions());
return <WorkspaceList workspaces={workspaces} />;
}
State Layers:
┌─────────────────────────────────────┐
│ Server State (TanStack Query v5) │ ← API data, cached, auto-refetch
│ workspaces, users, projects, etc. │
├─────────────────────────────────────┤
│ Client State (Zustand) │ ← UI state, sidebar open, theme
│ modals, filters, UI preferences │
├─────────────────────────────────────┤
│ Form State (React Hook Form) │ ← Active form inputs, validation
│ Scoped to individual forms │
├─────────────────────────────────────┤
│ URL State (TanStack Router) │ ← Shareable page state
│ search params, active tab, page # │
└─────────────────────────────────────┘
// URL State — persist filter state in URL (shareable)
import { createFileRoute, useNavigate } from '@tanstack/react-router';
import { z } from 'zod';
const searchSchema = z.object({
page: z.number().int().positive().default(1).catch(1),
search: z.string().default('').catch(''),
status: z.enum(['all', 'active', 'archived']).default('all').catch('all'),
});
export const Route = createFileRoute('/_auth/projects')({
validateSearch: searchSchema,
component: ProjectsPage,
});
function ProjectsPage() {
const { page, search, status } = Route.useSearch();
const navigate = useNavigate({ from: Route.fullPath });
const setSearch = (q: string) =>
navigate({ search: (prev) => ({ ...prev, search: q, page: 1 }) });
return (
<div>
<SearchInput value={search} onChange={setSearch} />
<ProjectList page={page} search={search} status={status} />
</div>
);
}
// apps/api/src/index.ts — backend Hono app
import { Hono } from 'hono';
import { zValidator } from '@hono/zod-validator';
const workspacesRoute = new Hono()
.get('/', async (c) => {
const user = c.get('user');
const workspaces = await db.workspace.findMany({
where: { members: { some: { userId: user.id } } },
});
return c.json(workspaces);
})
.post('/', zValidator('json', CreateWorkspaceSchema), async (c) => {
const data = c.req.valid('json');
const workspace = await db.workspace.create({ data });
return c.json(workspace, 201);
});
const app = new Hono()
.use('*', authMiddleware)
.route('/workspaces', workspacesRoute);
export type AppType = typeof app;
export default app;
// apps/web/src/lib/api.ts — type-safe client
import { hc } from 'hono/client';
import type { AppType } from '@myapp/api';
export const api = hc<AppType>(import.meta.env.VITE_API_URL);
// TanStack Query integration
export const workspacesQueryOptions = () =>
queryOptions({
queryKey: ['workspaces'],
queryFn: async () => {
const res = await api.workspaces.$get();
return res.json(); // Fully typed!
},
staleTime: 5 * 60 * 1000,
});
// vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import { TanStackRouterVite } from '@tanstack/router-plugin/vite';
export default defineConfig({
plugins: [
TanStackRouterVite(), // Auto-generates route tree
react(),
],
build: {
rollupOptions: {
output: {
manualChunks: {
'vendor-react': ['react', 'react-dom'],
'vendor-query': ['@tanstack/react-query'],
'vendor-router': ['@tanstack/react-router'],
},
},
},
},
});
Deployment target: Cloudflare Pages or Vercel for CDN-served static SPA. Backend API deployed separately to Railway/Fly.io.
<a name="bahasa-indonesia"></a>
Terhubung dan mengorkestrasi skill domain yang relevan seperti modern-web-guidance, brainstorming, zero-to-prod-orchestrator, dan session-memory-manager untuk memastikan eksekusi yang kohesif.
modern-web-guidance PERTAMA KALI untuk semua tugas HTML/CSS dan JS sisi klien guna memastikan standar web modern.Panduan orkestrasi terstruktur untuk membangun Single-Page Application (SPA) modern. Mengkoordinasikan arsitektur frontend (TanStack Router, React 19, TanStack Query v5) dengan backend API terpisah (Hono RPC, tRPC). Mencakup strategi state management, pola routing, desain API layer, build tooling (Vite + TanStack Start), dan strategi deployment.
Pilih SPA saat: aplikasi sangat interaktif (dashboard, editor, panel admin), state sisi klien yang kaya, aplikasi yang dibatasi auth (SEO bukan perhatian utama).
Pilih SSR (Next.js) saat: SEO sangat penting, load halaman awal yang cepat untuk pengguna yang tidak terautentikasi, aplikasi campuran.
Pilih MPA (Astro, Django, Laravel) saat: konten sebagian besar statis, SEO adalah perhatian utama — lihat skill mpa-orchestrator.
Vite 6 untuk build, TanStack Router untuk routing type-safe, TanStack Query v5 untuk server state, Zustand untuk client state, Hono RPC untuk API layer type-safe, React Hook Form + Zod untuk form, Tailwind CSS v4 untuk styling, dan GSAP untuk animasi kompleks.
Atur rute dalam direktori src/routes/ dengan layout bersarang. Gunakan createFileRoute dengan beforeLoad untuk guard autentikasi, loader untuk prefetch data, dan validateSearch untuk URL state yang dapat dibagikan.
Empat lapisan state yang saling melengkapi: Server State (TanStack Query), Client State (Zustand), Form State (React Hook Form), dan URL State (TanStack Router search params).
Ekspor AppType dari backend Hono dan gunakan hc<AppType>() di frontend untuk panggilan API yang fully typed tanpa codegen.
Gunakan plugin TanStackRouterVite untuk auto-generate route tree. Konfigurasi manualChunks untuk code splitting yang optimal. Deploy SPA ke Cloudflare Pages atau Vercel; backend API ke Railway/Fly.io secara terpisah.
MANDATORY: Whenever you are building a new application, landing page, or website, you MUST automatically create the following standard pages:
/about)/profile)/contact)/terms)/privacy-policy)These pages must be generated with standard boilerplate content that can later be customized to fit the specific application. Do not wait for the user to ask for them; they are a strict requirement for all web projects. / WAJIB: Otomatis buatkan halaman standar (About, Profile, Contact, Terms, Privacy Policy) pada setiap pembuatan aplikasi/website baru dengan konten boilerplate yang bisa disesuaikan nanti.
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Expert guide for automated and manual Web Accessibility (a11y) testing — axe-core, Pa11y, Playwright a11y, screen reader testing, and WCAG 2.2 Level AA/AAA compliance / Panduan ahli pengujian aksesibilitas web.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Expert guide for intelligent model cascading and routing — complexity-scored task routing from Flash/Haiku to Sonnet/Opus/Astra, dynamic escalation with quality gates, 40-60% token cost reduction while maintaining output quality / Panduan ahli untuk kaskade dan routing model cerdas — routing tugas berbasis skor kompleksitas dari Flash/Haiku ke Sonnet/Opus/Astra, eskalasi dinamis dengan gerbang kualitas, pengurangan biaya token 40-60% dengan kualitas output terjaga.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Expert guide for Affective Computing, emotional AI, and real-time sentiment analysis through native multimodal tokens (voice intonation and facial micro-expressions) / Panduan ahli komputasi afektif, AI emosional, dan analisis sentimen real-time melalui token multimodal native.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Expert guide for AI-assisted coding workflows — agentic code generation, multi-agent code swarms, self-healing CI/CD, automated PR review, spec-to-code pipelines, codebase knowledge graphs, and human-in-the-loop approval gates / Panduan ahli untuk workflow pengkodean berbasis AI — generasi kode agentic, code swarm multi-agen, CI/CD self-healing, review PR otomatis, pipeline spec-to-code, knowledge graph codebase, dan gate persetujuan human-in-the-loop.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Expert guide for autonomous Machine-to-Machine (M2M) agent settlement, dual-rail fiat & stablecoin micro-clearing, dynamic budget envelopes, and cryptographic agent invoicing / Panduan ahli settlement otonom antar-agen (M2M), kliring mikro dual-rail fiat & stablecoin, pagu anggaran dinamis, dan penagihan agen kriptografis.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Expert guide for long-term episodic memory integration (Mem0 v2, Letta/MemGPT, Zep v2), memory tier architecture, pgvector HNSW storage, and unified context management for autonomous AI agents / Panduan ahli untuk integrasi memori episodik jangka panjang (Mem0 v2, Letta/MemGPT, Zep v2), arsitektur tier memori, penyimpanan pgvector HNSW, dan manajemen konteks terpadu untuk agen AI otonom.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.