Understanding WorkGenius platform architecture
project/ ├── pages/ # Page components (FLAT - no subfolders) │ ├── Dashboard.jsx │ ├── ClientManagement.jsx │ └── TaskManager.jsx │ ├── components/ │ ├── ui/ # UI primitives (shadcn/ui) │ ├── shared/ # Shared components │ ├── client/ # Client-specific components │ ├── sales/ # Sales-specific components │ ├── receivables/ # Receivables components │ ├── hooks/ # Custom React hooks │ ├── utils/ # Utility functions │ ├── routing/ # Route configuration │ ├── security/ # Security components │ └── types/ # TypeScript types │ ├── entities/ # JSON schema definitions │ ├── Contact.json │ ├── Invoice.json │ └── Task.json │ ├── functions/ # Backend Deno functions │ ├── emailInvoice.js │ └── processPayment.js │ └── Layout.jsx # Global layout wrapper
import { base44 } from '@/api/base44Client';
// List entities
const tasks = await base44.entities.Task.list('-created_date', 20);
// Filter entities
const clients = await base44.entities.Contact.filter(
{ status: 'active' },
'-created_date',
50
);
// Create entity
await base44.entities.Invoice.create({
invoice_number: 'INV-001',
total_amount: 1000
});import { useQuery } from '@tanstack/react-query';
const { data, isLoading } = useQuery({
queryKey: ['tasks', userId],
queryFn: () => base44.entities.Task.list(),
staleTime: 300000, // 5 minutes
gcTime: 600000, // 10 minutes
refetchOnWindowFocus: false
});const mutation = useMutation({
mutationFn: (data) => base44.entities.Task.create(data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['tasks'] });
}
});Pages are lazy-loaded using React.lazy() for optimal bundle size
React Query with aggressive caching (5-10 min stale times)
useMemo/useCallback for expensive computations
Hover/focus prefetching for anticipated navigation
Base44 built-in auth with JWT tokens
Role-based access control (admin/user)
All sensitive actions logged to AuditLog entity
JSON Schema validation on entity operations