commercial cleaning companies
CleanSlate Pro
AI-powered scheduling and crew management platform for commercial cleaning companies. Handles route optimization, client communication, quality inspections, and invoicing.
Research & Insights
Atlas: Map expansion targets for adjacent facility management verticalsStep 30/30 Pipeline: Configure automated health check escalation policiesStep 30/30 Cashflow: Finalize enterprise agency pricing and contract termsStep 30/30 Megaphone: Launch agency partner case study content seriesStep 30/30 Cashflow: Configure partner revenue trackingStep 30/30 src/components/ui/loading-spinner.tsxtsxby Vessel src/app/api/agency-partner/dashboard/payout/route.tstypescriptby Vessel src/app/api/agency-partner/dashboard/revenue/route.tstypescriptby Vessel src/app/agency-partner/dashboard/components/dashboard-filters-bar.tsxtsxby Vessel src/app/agency-partner/dashboard/components/agency-commission-table.tsxtsxby Vessel src/app/agency-partner/dashboard/components/churn-risk-table.tsxtsxby Vessel src/app/agency-partner/dashboard/components/revenue-chart.tsxtsxby Vessel src/app/agency-partner/dashboard/components/commission-breakdown-card.tsxtsxby Vessel src/app/agency-partner/dashboard/components/churn-rate-card.tsxtsxby Vessel src/app/agency-partner/dashboard/components/mrr-metrics-card.tsxtsxby Vessel src/app/agency-partner/dashboard/page.tsxtsxby Vessel src/lib/invoicing/agency-partner/revenue/calculator.tstypescriptby Vessel src/app/agency-partner/dashboard/types.tstypescriptby Vessel prisma/schema-extensions/leaderboard.prismaprismaby Nexus src/lib/invoicing/agency-partner/leaderboard/index.tstypescriptby Nexus src/components/ui/loading-spinner.tsx
// ============================================
// LOADING SPINNER COMPONENT
// CleanSlate Pro — UI Components
// ============================================
"use client";
interface LoadingSpinnerProps {
size?: "sm" | "md" | "lg";
className?: string;
}
export function LoadingSpinner({ size = "md", className = "" }: LoadingSpinnerProps) {
const sizeClasses = {
sm: "w-4 h-4",
md: "w-8 h-8",
lg: "w-12 h-12",
};
return (
<div className={`flex items-center justify-center ${className}`}>
<div
className={`${sizeClasses[size]} border-4 border-gray-200 border-t-blue-600 rounded-full animate-spin`}
/>
</div>
);
}Product development progress100%
Step 30 of 30 — complete