Cursor rule
.cursor/rules/tech-debt-prevention.mdcTech debt prevention patterns with consistency enforcement, code quality gates, and architectural governance
Cursor rules
Quality
50/100
Scores the file, not the repository.Length
2,195 words
12 headings · 7 code blocksRepository
118
— · pushed 339 days agoLast changed
3 days ago
First indexed 3 days ago.12345# 🏗️ Tech Debt Prevention & Code Quality Governance67## 🎯 Zero Tech Debt Philosophy89### Proactive Prevention Strategy10```typescript11// ✅ TECH DEBT PREVENTION: Systematic approach to code quality12namespace TechDebtPrevention {13 // Code quality metrics and thresholds14 interface QualityGates {15 code_coverage: { minimum: 85, target: 90 }16 complexity_score: { maximum: 10, target: 7 }17 duplication: { maximum: 3, target: 1 }18 performance: { api_response: '< 200ms', ui_render: '< 100ms' }19 security: { vulnerabilities: 0, code_quality: 'A' }20 }2122 // Automated quality enforcement23 class QualityEnforcer {24 static enforcePreCommitQuality(): PreCommitHook {25 return {26 // Code format and style27 prettier_format: true,28 eslint_validation: true,29 typescript_strict_check: true,3031 // Business logic validation32 business_rule_consistency: true,33 api_contract_validation: true,34 database_migration_safety: true,3536 // Performance validation37 bundle_size_check: true,38 query_performance_validation: true,39 memory_leak_detection: true40 }41 }42 }43}44```4546## 🔒 Consistency Enforcement Patterns4748### 1. Architectural Consistency49```typescript50// ✅ CONSISTENCY: Standardized architectural patterns51class ArchitecturalConsistency {52 // Enforce consistent API patterns53 static createAPIEndpoint<TRequest, TResponse>(54 config: APIEndpointConfig<TRequest, TResponse>55 ): StandardAPIEndpoint<TRequest, TResponse> {56 return {57 // Standardized request validation58 validateRequest: (request: TRequest): ValidationResult => {59 const validator = this.createValidator(config.validation_schema)60 return validator.validate(request)61 },6263 // Standardized business logic execution64 executeBusinessLogic: async (request: TRequest): Promise<TResponse> => {65 // Consistent error handling66 try {67 // Standardized logging68 Logger.info(`Executing ${config.endpoint_name}`, { request })6970 // Business logic with consistent patterns71 const result = await config.business_logic(request)7273 // Standardized success response74 return {75 success: true,76 message: config.success_message,77 data: result,78 timestamp: new Date().toISOString(),79 request_id: generateRequestId()80 }81 } catch (error) {82 // Standardized error handling83 return this.handleStandardError(error, config.endpoint_name)84 }85 },8687 // Standardized response formatting88 formatResponse: (response: TResponse): StandardAPIResponse<TResponse> => {89 return {90 ...response,91 version: config.api_version,92 performance_metrics: this.getPerformanceMetrics()93 }94 }95 }96 }9798 // Enforce consistent component patterns99 static createBusinessComponent<TProps>(100 config: ComponentConfig<TProps>101 ): React.FC<TProps> {102 return React.memo((props: TProps) => {103 // Standardized error boundary104 return (105 <ErrorBoundary fallback={config.error_fallback}>106 {/* Standardized loading states */}107 <Suspense fallback={config.loading_fallback}>108 {/* Standardized accessibility */}109 <div110 role={config.accessibility.role}111 aria-label={config.accessibility.label}112 className={cn(config.base_classes, props.className)}113 >114 {/* Component content with consistent patterns */}115 {config.render(props)}116 </div>117 </Suspense>118 </ErrorBoundary>119 )120 }, config.memo_comparison || shallowEqual)121 }122123 // Database query consistency124 static createDatabaseQuery<TParams, TResult>(125 config: QueryConfig<TParams, TResult>126 ): DatabaseQuery<TParams, TResult> {127 return {128 execute: async (params: TParams): Promise<TResult> => {129 // Standardized query performance monitoring130 const startTime = performance.now()131132 try {133 // Standardized parameter validation134 this.validateQueryParams(params, config.param_schema)135136 // Standardized query execution137 const result = await this.executeQuery(config.query, params)138139 // Standardized performance logging140 const duration = performance.now() - startTime141 this.logQueryPerformance(config.name, duration, params)142143 return result144 } catch (error) {145 // Standardized error handling146 this.handleQueryError(error, config.name, params)147 throw error148 }149 }150 }151 }152}153```154155### 2. Code Pattern Enforcement156```typescript157// ✅ PATTERN ENFORCEMENT: Consistent code patterns across the system158class CodePatternEnforcement {159 // Standardized hook patterns160 static createBusinessHook<TData, TError = Error>(161 config: BusinessHookConfig<TData, TError>162 ): BusinessHook<TData, TError> {163 return function useBusinessData() {164 // Consistent state management165 const [state, setState] = useState<BusinessHookState<TData, TError>>({166 data: null,167 loading: false,168 error: null,169 lastUpdated: null170 })171172 // Consistent data fetching173 const fetchData = useCallback(async () => {174 setState(prev => ({ ...prev, loading: true, error: null }))175176 try {177 const data = await config.fetcher()178 setState({179 data,180 loading: false,181 error: null,182 lastUpdated: new Date()183 })184 } catch (error) {185 setState(prev => ({186 ...prev,187 loading: false,188 error: error as TError189 }))190 }191 }, [config.dependencies])192193 // Consistent lifecycle management194 useEffect(() => {195 if (config.auto_fetch) {196 fetchData()197 }198 }, [fetchData])199200 // Consistent return interface201 return {202 ...state,203 refetch: fetchData,204 reset: () => setState({205 data: null,206 loading: false,207 error: null,208 lastUpdated: null209 })210 }211 }212 }213214 // Standardized service patterns215 static createBusinessService<TConfig>(216 config: BusinessServiceConfig<TConfig>217 ): BusinessService<TConfig> {218 return {219 // Consistent initialization220 initialize: async (): Promise<void> => {221 Logger.info(`Initializing ${config.service_name}`)222 await config.initialize?.()223 },224225 // Consistent method patterns226 ...Object.entries(config.methods).reduce((service, [methodName, methodConfig]) => {227 service[methodName] = async (...args: any[]): Promise<any> => {228 // Consistent logging229 Logger.debug(`${config.service_name}.${methodName}`, { args })230231 // Consistent validation232 if (methodConfig.validation) {233 const validation = methodConfig.validation(...args)234 if (!validation.isValid) {235 throw new ValidationError(validation.errors)236 }237 }238239 // Consistent caching240 if (methodConfig.cache) {241 const cacheKey = methodConfig.cache.keyGenerator(...args)242 const cached = await this.cache.get(cacheKey)243 if (cached) return cached244 }245246 // Execute business logic247 const result = await methodConfig.implementation(...args)248249 // Consistent caching250 if (methodConfig.cache) {251 const cacheKey = methodConfig.cache.keyGenerator(...args)252 await this.cache.set(cacheKey, result, methodConfig.cache.ttl)253 }254255 return result256 }257 return service258 }, {} as any)259 }260 }261}262```263264## 🔄 DRY Principle Implementation265266### 1. Reusable Business Logic Components267```typescript268// ✅ DRY: Centralized business logic to eliminate duplication269namespace ReusableBusinessLogic {270 // Unified validation system271 export class ValidationEngine {272 private static validators = new Map<string, Validator<any>>()273274 static registerValidator<T>(name: string, validator: Validator<T>): void {275 this.validators.set(name, validator)276 }277278 static createCompositeValidator<T>(279 validatorNames: string[],280 customValidations?: Validation<T>[]281 ): Validator<T> {282 return {283 validate: (data: T): ValidationResult => {284 const errors: string[] = []285286 // Apply registered validators287 validatorNames.forEach(name => {288 const validator = this.validators.get(name)289 if (validator) {290 const result = validator.validate(data)291 if (!result.isValid) {292 errors.push(...result.errors)293 }294 }295 })296297 // Apply custom validations298 customValidations?.forEach(validation => {299 if (!validation.check(data)) {300 errors.push(validation.message)301 }302 })303304 return {305 isValid: errors.length === 0,306 errors307 }308 }309 }310 }311 }312313 // Unified caching system314 export class UnifiedCache {315 private static cache = new Map<string, CacheEntry<any>>()316 private static strategies = new Map<string, CacheStrategy>()317318 static registerStrategy(name: string, strategy: CacheStrategy): void {319 this.strategies.set(name, strategy)320 }321322 static async get<T>(323 key: string,324 fetcher: () => Promise<T>,325 strategyName: string = 'default'326 ): Promise<T> {327 const strategy = this.strategies.get(strategyName)328 if (!strategy) {329 throw new Error(`Cache strategy '${strategyName}' not found`)330 }331332 const cached = this.cache.get(key)333 if (cached && cached.expiresAt > Date.now()) {334 return cached.data as T335 }336337 const data = await fetcher()338 this.cache.set(key, {339 data,340 expiresAt: Date.now() + strategy.ttl,341 createdAt: Date.now(),342 accessCount: 1343 })344345 return data346 }347348 static invalidatePattern(pattern: string): void {349 const regex = new RegExp(pattern)350 Array.from(this.cache.keys())351 .filter(key => regex.test(key))352 .forEach(key => this.cache.delete(key))353 }354 }355356 // Unified state management357 export class BusinessStateManager<T> {358 private state: T359 private subscribers = new Set<StateChangeListener<T>>()360 private middleware: StateMiddleware<T>[] = []361362 constructor(initialState: T) {363 this.state = { ...initialState }364 }365366 getState(): T {367 return { ...this.state }368 }369370 setState(updater: StateUpdater<T>): void {371 const previousState = { ...this.state }372 const newState = typeof updater === 'function'373 ? updater(previousState)374 : { ...previousState, ...updater }375376 // Apply middleware377 const processedState = this.middleware.reduce(378 (state, middleware) => middleware.process(state, previousState),379 newState380 )381382 this.state = processedState383384 // Notify subscribers385 this.subscribers.forEach(listener =>386 listener(processedState, previousState)387 )388 }389390 subscribe(listener: StateChangeListener<T>): () => void {391 this.subscribers.add(listener)392 return () => this.subscribers.delete(listener)393 }394395 addMiddleware(middleware: StateMiddleware<T>): void {396 this.middleware.push(middleware)397 }398 }399400 // Unified HTTP client401 export class BusinessHTTPClient {402 private static instance: BusinessHTTPClient403 private interceptors: HTTPInterceptor[] = []404 private retryPolicies = new Map<string, RetryPolicy>()405406 static getInstance(): BusinessHTTPClient {407 if (!this.instance) {408 this.instance = new BusinessHTTPClient()409 }410 return this.instance411 }412413 async request<TResponse>(config: HTTPRequestConfig): Promise<TResponse> {414 let processedConfig = { ...config }415416 // Apply request interceptors417 for (const interceptor of this.interceptors) {418 if (interceptor.request) {419 processedConfig = await interceptor.request(processedConfig)420 }421 }422423 // Execute request with retry policy424 const retryPolicy = this.retryPolicies.get(config.endpoint) || DEFAULT_RETRY_POLICY425 return this.executeWithRetry(processedConfig, retryPolicy)426 }427428 private async executeWithRetry<TResponse>(429 config: HTTPRequestConfig,430 retryPolicy: RetryPolicy431 ): Promise<TResponse> {432 let lastError: Error433434 for (let attempt = 0; attempt <= retryPolicy.maxRetries; attempt++) {435 try {436 const response = await this.executeRequest<TResponse>(config)437438 // Apply response interceptors439 let processedResponse = response440 for (const interceptor of this.interceptors) {441 if (interceptor.response) {442 processedResponse = await interceptor.response(processedResponse)443 }444 }445446 return processedResponse447 } catch (error) {448 lastError = error as Error449450 if (attempt < retryPolicy.maxRetries && retryPolicy.shouldRetry(error)) {451 await this.delay(retryPolicy.calculateDelay(attempt))452 continue453 }454455 break456 }457 }458459 throw lastError!460 }461 }462}463```464465### 2. Shared Component Library466```typescript467// ✅ DRY: Reusable UI components with consistent behavior468namespace SharedComponentLibrary {469 // Base form component with consistent validation and submission470 export const BusinessForm = <TFormData extends Record<string, any>>({471 schema,472 onSubmit,473 loading,474 children475 }: BusinessFormProps<TFormData>) => {476 const form = useForm<TFormData>({477 resolver: zodResolver(schema),478 mode: 'onChange' // Consistent validation timing479 })480481 const handleSubmit = form.handleSubmit(async (data) => {482 try {483 await onSubmit(data)484 } catch (error) {485 // Consistent error handling486 if (error instanceof ValidationError) {487 error.fieldErrors.forEach(({ field, message }) => {488 form.setError(field as Path<TFormData>, { message })489 })490 } else {491 // Global form error492 form.setError('root', {493 message: error instanceof Error ? error.message : 'An error occurred'494 })495 }496 }497 })498499 return (500 <Form {...form}>501 <form onSubmit={handleSubmit} className="space-y-6">502 {children}503504 {/* Consistent form actions */}505 <FormActions>506 <Button type="submit" disabled={loading}>507 {loading ? <LoadingSpinner size="sm" /> : 'Submit'}508 </Button>509 </FormActions>510 </form>511 </Form>512 )513 }514515 // Reusable data table with consistent features516 export const BusinessDataTable = <TData extends Record<string, any>>({517 data,518 columns,519 loading,520 pagination,521 sorting,522 filtering523 }: BusinessDataTableProps<TData>) => {524 // Consistent table state management525 const table = useReactTable({526 data: data || [],527 columns,528 getCoreRowModel: getCoreRowModel(),529 getSortedRowModel: getSortedRowModel(),530 getFilteredRowModel: getFilteredRowModel(),531 getPaginationRowModel: getPaginationRowModel(),532533 // Consistent default configurations534 initialState: {535 pagination: { pageSize: 20 },536 sorting: [],537 columnVisibility: {}538 }539 })540541 return (542 <div className="space-y-4">543 {/* Consistent table toolbar */}544 <DataTableToolbar table={table} filtering={filtering} />545546 {/* Consistent table structure */}547 <div className="rounded-md border">548 <Table>549 <TableHeader>550 {table.getHeaderGroups().map(headerGroup => (551 <TableRow key={headerGroup.id}>552 {headerGroup.headers.map(header => (553 <TableHead key={header.id}>554 {/* Consistent sorting indicators */}555 <DataTableColumnHeader header={header} />556 </TableHead>557 ))}558 </TableRow>559 ))}560 </TableHeader>561562 <TableBody>563 {loading ? (564 <DataTableSkeleton columnCount={columns.length} />565 ) : table.getRowModel().rows?.length ? (566 table.getRowModel().rows.map(row => (567 <TableRow key={row.id}>568 {row.getVisibleCells().map(cell => (569 <TableCell key={cell.id}>570 {flexRender(cell.column.columnDef.cell, cell.getContext())}571 </TableCell>572 ))}573 </TableRow>574 ))575 ) : (576 <DataTableEmpty columnCount={columns.length} />577 )}578 </TableBody>579 </Table>580 </div>581582 {/* Consistent pagination */}583 <DataTablePagination table={table} />584 </div>585 )586 }587588 // Reusable business card with consistent layout589 export const BusinessCard = ({590 title,591 description,592 actions,593 status,594 metadata,595 children596 }: BusinessCardProps) => {597 return (598 <Card className="h-full">599 <CardHeader className="pb-3">600 <div className="flex items-center justify-between">601 <div className="space-y-1">602 <CardTitle className="text-base">{title}</CardTitle>603 {description && (604 <CardDescription>{description}</CardDescription>605 )}606 </div>607608 {status && (609 <Badge variant={getStatusVariant(status)}>610 {status}611 </Badge>612 )}613 </div>614 </CardHeader>615616 <CardContent className="pb-3">617 {children}618619 {metadata && (620 <div className="mt-4 text-sm text-muted-foreground">621 {Object.entries(metadata).map(([key, value]) => (622 <div key={key} className="flex justify-between">623 <span>{key}:</span>624 <span>{value}</span>625 </div>626 ))}627 </div>628 )}629 </CardContent>630631 {actions && (632 <CardFooter className="pt-3">633 <div className="flex gap-2 w-full">634 {actions.map((action, index) => (635 <Button636 key={index}637 variant={action.variant || 'outline'}638 size="sm"639 onClick={action.onClick}640 disabled={action.disabled}641 className={action.className}642 >643 {action.label}644 </Button>645 ))}646 </div>647 </CardFooter>648 )}649 </Card>650 )651 }652}653```654655## 🛡️ Quality Gates & Automation656657### 1. Automated Code Quality Checks658```typescript659// ✅ QUALITY GATES: Automated enforcement of quality standards660class QualityGateEnforcement {661 // Pre-commit quality checks662 static createPreCommitPipeline(): QualityPipeline {663 return {664 stages: [665 {666 name: 'Format Check',667 check: async (files: string[]) => {668 const results = await Promise.all([669 this.checkPrettierFormatting(files),670 this.checkESLintRules(files),671 this.checkTypeScriptCompilation(files)672 ])673674 return {675 passed: results.every(r => r.passed),676 errors: results.flatMap(r => r.errors),677 autoFixAvailable: results.some(r => r.autoFixAvailable)678 }679 }680 },681682 {683 name: 'Business Logic Validation',684 check: async (files: string[]) => {685 return {686 passed: await this.validateBusinessRuleConsistency(files),687 errors: await this.getBusinessRuleViolations(files),688 autoFixAvailable: false689 }690 }691 },692693 {694 name: 'Performance Validation',695 check: async (files: string[]) => {696 const results = await Promise.all([697 this.checkBundleSize(files),698 this.validateQueryPerformance(files),699 this.checkMemoryLeaks(files)700 ])701702 return {703 passed: results.every(r => r.passed),704 errors: results.flatMap(r => r.errors),705 warnings: results.flatMap(r => r.warnings || [])706 }707 }708 }709 ],710711 onFailure: (stage: QualityStage, errors: QualityError[]) => {712 throw new QualityGateError(713 `Quality gate failed at stage: ${stage.name}`,714 errors715 )716 }717 }718 }719720 // Code review automation721 static createCodeReviewAssistant(): CodeReviewAssistant {722 return {723 // Automated pattern detection724 detectPatternViolations: (diff: GitDiff): PatternViolation[] => {725 const violations: PatternViolation[] = []726727 // Check for DRY violations728 const duplicateCode = this.detectDuplicateCode(diff)729 if (duplicateCode.length > 0) {730 violations.push({731 type: 'DRY_VIOLATION',732 severity: 'high',733 message: 'Duplicate code detected',734 suggestions: duplicateCode.map(d => d.refactoringSuggestion)735 })736 }737738 // Check for inconsistent patterns739 const inconsistentPatterns = this.detectInconsistentPatterns(diff)740 violations.push(...inconsistentPatterns)741742 return violations743 },744745 // Automated test coverage analysis746 analyzeTes tCoverage: (diff: GitDiff): TestCoverageAnalysis => {747 return {748 coverage_percentage: this.calculateCoverageForDiff(diff),749 missing_tests: this.findUntested Code(diff),750 test_quality_score: this.assessTestQuality(diff),751 recommendations: this.generateTestRecommendations(diff)752 }753 },754755 // Performance impact analysis756 analyzePerformanceImpact: (diff: GitDiff): PerformanceAnalysis => {757 return {758 bundle_size_impact: this.calculateBundleSizeChange(diff),759 query_performance_impact: this.analyzeQueryChanges(diff),760 memory_impact: this.analyzeMemoryImpact(diff),761 recommendations: this.generatePerformanceRecommendations(diff)762 }763 }764 }765 }766}767```768769### 2. Continuous Quality Monitoring770```typescript771// ✅ MONITORING: Continuous quality and tech debt monitoring772class ContinuousQualityMonitoring {773 // Technical debt detection774 static createTechDebtMonitor(): TechDebtMonitor {775 return {776 // Code complexity monitoring777 monitorComplexity: async (): Promise<ComplexityReport> => {778 const files = await this.getAllSourceFiles()779 const complexityResults = await Promise.all(780 files.map(file => this.analyzeFileComplexity(file))781 )782783 return {784 overall_score: this.calculateOverallComplexityScore(complexityResults),785 high_complexity_files: complexityResults786 .filter(r => r.complexity > COMPLEXITY_THRESHOLD)787 .sort((a, b) => b.complexity - a.complexity),788 trending_complexity: this.calculateComplexityTrend(complexityResults),789 refactoring_candidates: this.identifyRefactoringCandidates(complexityResults)790 }791 },792793 // Dependency analysis794 monitorDependencies: async (): Promise<DependencyReport> => {795 const dependencies = await this.analyzeDependencies()796797 return {798 outdated_packages: dependencies.outdated,799 security_vulnerabilities: dependencies.vulnerabilities,800 unused_dependencies: dependencies.unused,801 circular_dependencies: dependencies.circular,802 upgrade_recommendations: this.generateUpgradeRecommendations(dependencies)803 }804 },805806 // Performance regression detection807 monitorPerformanceRegressions: async (): Promise<PerformanceReport> => {808 const currentMetrics = await this.gatherPerformanceMetrics()809 const historicalMetrics = await this.getHistoricalMetrics()810811 return {812 regressions: this.detectRegressions(currentMetrics, historicalMetrics),813 improvements: this.detectImprovements(currentMetrics, historicalMetrics),814 trending_metrics: this.calculateTrends(currentMetrics, historicalMetrics),815 optimization_opportunities: this.identifyOptimizationOpportunities(currentMetrics)816 }817 }818 }819 }820821 // Automated refactoring suggestions822 static createRefactoringSuggestionEngine(): RefactoringSuggestionEngine {823 return {824 // Extract common patterns825 suggestPatternExtractions: (codebase: Codebase): PatternExtractionSuggestion[] => {826 const duplicatePatterns = this.findDuplicatePatterns(codebase)827828 return duplicatePatterns.map(pattern => ({829 pattern_description: pattern.description,830 occurrences: pattern.locations,831 suggested_abstraction: pattern.suggestedAbstraction,832 estimated_impact: {833 lines_reduced: pattern.duplicateLines,834 maintainability_improvement: pattern.maintainabilityScore,835 test_coverage_impact: pattern.testCoverageChange836 }837 }))838 },839840 // Component optimization suggestions841 suggestComponentOptimizations: (components: ComponentAnalysis[]): ComponentOptimization[] => {842 return components843 .filter(c => c.needsOptimization)844 .map(component => ({845 component_name: component.name,846 optimization_type: component.suggestedOptimization,847 current_issues: component.issues,848 suggested_solution: component.solution,849 implementation_effort: component.estimatedEffort850 }))851 },852853 // Database optimization suggestions854 suggestDatabaseOptimizations: (queries: QueryAnalysis[]): DatabaseOptimization[] => {855 return queries856 .filter(q => q.performance_issues.length > 0)857 .map(query => ({858 query_identifier: query.id,859 performance_issues: query.performance_issues,860 suggested_indexes: query.suggestedIndexes,861 query_rewrite_suggestions: query.rewriteSuggestions,862 estimated_improvement: query.estimatedImprovement863 }))864 }865 }866 }867}868```869870This comprehensive tech debt prevention system ensures that code quality remains high, patterns stay consistent, and the system continues to evolve without accumulating technical debt. The automated checks and monitoring provide continuous feedback to maintain the highest standards of code quality and architectural integrity.871872<function_calls>873<invoke name="todo_write">874<parameter name="merge">true
Also in madebyaris/poinf-of-sales
Diff this repo’s formatsOne repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| madebyaris/poinf-of-sales.cursor/rules/admin-interface-patterns.mdc · 118 | Cursor rules | stylearchsecurityapi+2 | 62/100 | 3 days ago | |
| madebyaris/poinf-of-sales.cursor/rules/api-patterns.mdc · 118 | Cursor rules | lint-formatstylesecuritydatabase+3 | 62/100 | 3 days ago | |
| madebyaris/poinf-of-sales.cursor/rules/authentication-and-security-patterns.mdc · 118 | Cursor rules | setupteststylesecurity+4 | 81/100 | 3 days ago | |
| madebyaris/poinf-of-sales.cursor/rules/backend-golang.mdc · 118 | Cursor rules | testlint-formatstylearch+5 | 69/100 | 3 days ago | |
| madebyaris/poinf-of-sales.cursor/rules/business-logic-patterns.mdc · 118 | Cursor rules | teststyledatabaseperformance+1 | 50/100 | 3 days ago | |
| madebyaris/poinf-of-sales.cursor/rules/database-patterns.mdc · 118 | Cursor rules | stylearchtypessecurity+2 | 62/100 | 3 days ago | |
| madebyaris/poinf-of-sales.cursor/rules/development-workflow.mdc · 118 | Cursor rules | setupbuildteststyle+3 | 86/100 | 3 days ago | |
| madebyaris/poinf-of-sales.cursor/rules/docker-deployment.mdc · 118 | Cursor rules | setupbuildteststyle+8 | 77/100 | 3 days ago | |
| madebyaris/poinf-of-sales.cursor/rules/frontend-react.mdc · 118 | Cursor rules | buildtestlint-formatstyle+4 | 69/100 | 3 days ago | |
| madebyaris/poinf-of-sales.cursor/rules/makefile-scripting.mdc · 118 | Cursor rules | setuplint-formatstylearch+2 | 81/100 | 3 days ago | |
| madebyaris/poinf-of-sales.cursor/rules/performance-optimization-patterns.mdc · 118 | Cursor rules | buildteststyledatabase+3 | 66/100 | 3 days ago | |
| madebyaris/poinf-of-sales.cursor/rules/project-architecture.mdc · 118 | Cursor rules | setupteststylearch+6 | 78/100 | 3 days ago | |
| madebyaris/poinf-of-sales.cursor/rules/react-native-mobile-patterns.mdc · 118 | Cursor rules | buildstylearchui+2 | 74/100 | 3 days ago | |
| madebyaris/poinf-of-sales.cursor/rules/role-based-access-patterns.mdc · 118 | Cursor rules | styletypessecuritydatabase+2 | 58/100 | 3 days ago | |
| madebyaris/poinf-of-sales.cursor/rules/testing-patterns.mdc · 118 | Cursor rules | setupteststylearch+4 | 74/100 | 3 days ago | |
| madebyaris/poinf-of-sales.cursor/rules/user-journey-optimization.mdc · 118 | Cursor rules | styleperformanceagent-behaviour | 50/100 | 3 days ago |
Diff against .cursor/rules/admin-interface-patterns.mdc Diff against .cursor/rules/api-patterns.mdc Diff against .cursor/rules/authentication-and-security-patterns.mdc Diff against .cursor/rules/backend-golang.mdc Diff against .cursor/rules/business-logic-patterns.mdc Diff against .cursor/rules/database-patterns.mdc Diff against .cursor/rules/development-workflow.mdc Diff against .cursor/rules/docker-deployment.mdc Diff against .cursor/rules/frontend-react.mdc Diff against .cursor/rules/makefile-scripting.mdc Diff against .cursor/rules/performance-optimization-patterns.mdc Diff against .cursor/rules/project-architecture.mdc Diff against .cursor/rules/react-native-mobile-patterns.mdc Diff against .cursor/rules/role-based-access-patterns.mdc Diff against .cursor/rules/testing-patterns.mdc Diff against .cursor/rules/user-journey-optimization.mdc
Similar configs
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| hiromaily/go-crypto-wallet.cursor/rules/typescript.mdc · 126 | Cursor rules | setupbuildtestlint-format+6 | 100/100 | 3 days ago | |
| TechSquidTV/Hermes.cursor/rules/10-hermes-api.mdc · 45 | Cursor rules | testlint-formatstylearch+5 | 100/100 | 3 days ago | |
| markstev/mark-starter.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+6 | 99/100 | 3 days ago | |
| Allymahmoud/case-intake-platform.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 3 days ago | |
| dodgecfr/combatfilms-webapp.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 3 days ago | |
| deifos/clipmira-subtitles.cursor/rules/frontend.mdc · 1 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 3 days ago | |
| langflow-ai/langflow.cursor/rules/docs_development.mdc · 153k | Cursor rules | setupbuildtestlint-format+7 | 97/100 | 3 days ago | |
| TechSquidTV/Hermes.cursor/rules/20-hermes-api-tests.mdc · 45 | Cursor rules | teststyletesting-strategysecurity+3 | 97/100 | 3 days ago |
