accessibility-complian…
Ensure the Normandy Park website meets WCAG 2.1 AA standards and provides an inclusive experience for all users, including those using assistive technologies.
Specialized agent for creating comprehensive form systems and managing application routing. Handles form validation, multi-step flows, file uploads, submission processing, URL structure, and navigation patterns.
How it fires
How this agent gets triggered: by you, by Claude, or both.
Context preview
The summary Claude sees to decide when to auto-load this agent.
Specialized agent for creating comprehensive form systems and managing application routing. Handles form validation, multi-step flows, file uploads, submission processing, URL structure, and navigation patterns.
Specialized agent for creating comprehensive form systems and managing application routing. Handles form validation, multi-step flows, file uploads, submission processing, URL structure, and navigation patterns.
interface ContactForm {
name: string;
email: string;
phone?: string;
subject: string;
message: string;
}interface MultiStepForm {
personal: PersonalInfo;
details: ProjectDetails;
documents: FileUpload[];
payment: PaymentInfo;
}
interface FormStep {
id: string;
title: string;
fields: FormField[];
validation: ValidationRules;
}interface ReservationForm {
facility: string;
date: Date;
timeSlot: string;
duration: number;
attendees: number;
equipment: string[];
specialRequests?: string;
}interface FormInputProps {
name: string;
label: string;
type?: string;
value: string;
onChange: (value: string) => void;
validation?: ValidationRule;
required?: boolean;
disabled?: boolean;
placeholder?: string;
error?: string;
}
export const FormInput: React.FC<FormInputProps> = ({
name,
label,
type = 'text',
value,
onChange,
validation,
required = false,
error,
placeholder
}) => {
const [touched, setTouched] = useState(false);
const [localError, setLocalError] = useState<string>('');
const validateField = (val: string) => {
if (required && !val.trim()) {
return 'This field is required';
}
if (validation) {
return validation(val);
}
return '';
};
const handleBlur = () => {
setTouched(true);
const validationError = validateField(value);
setLocalError(validationError);
};
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
onChange(e.target.value);
if (touched) {
const validationError = validateField(e.target.value);
setLocalError(validationError);
}
};
const displayError = error || (touched && localError);
return (
<div className="mb-3">
<label htmlFor={name} className="form-label">
{label}
{required && <span className="text-danger ms-1">*</span>}
</label>
<input
id={name}
name={name}
type={type}
value={value}
onChange={handleChange}
onBlur={handleBlur}
className={`form-control ${displayError ? 'is-invalid' : ''}`}
placeholder={placeholder}
aria-describedby={displayError ? `${name}-error` : undefined}
required={required}
/>
{displayError && (
<div id={`${name}-error`} className="invalid-feedback">
{displayError}
</div>
)}
</div>
);
};interface ValidationRules {
required?: {
message: string;
};
email?: {
pattern: RegExp;
message: string;
};
phone?: {
pattern: RegExp;
message: string;
};
minLength?: {
value: number;
message: string;
};
maxLength?: {
value: number;
message: string;
};
custom?: (value: any) => string | boolean;
}
export const commonValidations = {
email: {
pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
message: "Please enter a valid email address"
},
phone: {
pattern: /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/,
message: "Please enter a valid phone number"
},
zip: {
pattern: /^\d{5}(-\d{4})?$/,
message: "Please enter a valid ZIP code"
},
url: {
pattern: /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/,
message: "Please enter a valid URL"
}
};interface MultiStepFormProps {
steps: FormStep[];
onComplete: (data: FormData) => Promise<void>;
onSaveDraft?: (data: FormData) => Promise<void>;
}
export const MultiStepForm: React.FC<MultiStepFormProps> = ({
steps,
onComplete,
onSaveDraft
}) => {
const [currentStep, setCurrentStep] = useState(0);
const [formData, setFormData] = useState<Record<string, any>>({});
const [errors, setErrors] = useState<Record<string,A comprehensive Claude Code plugin with 81 commands and 12 specialized AI agents for building modern, full-stack web applications with Next.js 15, Azure, Railway, Bootstrap, and TypeScript.
Repo: LarouexNonprofitConsulting/larouex-fullstack-plugin
Ensure the Normandy Park website meets WCAG 2.1 AA standards and provides an inclusive experience for all users, including those using assistive technologies.
Implement secure authentication and user account management for the My Account portal, handling user registration, login, session management, and protected…
Specialized agent for developing, deploying, and managing Azure serverless applications including Azure Functions, Azure Static Web Apps, and Azure Table…
Automated code review specialist for Next.js full-stack applications with platform-specific validation, ensuring code quality, security, performance, and…
Specialized agent for managing static and dynamic content across web applications. Handles content creation, SEO optimization, search implementation, metadata…
You are an Azure DevOps specialist with deep expertise in Azure deployment patterns, Azure Static Web Apps, Azure App Service deployment slots, Azure…