Docs
Kifuliiru.com
Applications
Kifuliiru.com
Overview
IntroductionArchitectureDevelopment setup
Design languageCalculatorNumbers systemMath question templatesTranslation systemRole-based access controlAudio systemAPI implementation plan
Platform integration
HomeBrowse applications

© 2026 Wekify LLC · Kifuliiru Lab

Homellms.txtkifuliiru.com

GuidesNumbers system

Numbers system

File-based number architecture on the portal.

Overview

This document describes the new file-based number system that replaces database queries with pre-generated JSON files for improved performance, SEO, and scalability.

Why File-Based Numbers?

Performance Benefits

  • Near-instant loading: Files load 5-10x faster than database queries
  • No database overhead: Eliminates connection pooling and query processing
  • Better caching: Files can be cached at CDN level
  • Reduced server load: Less database pressure

SEO Benefits

  • Pre-generated content: Search engines can index all numbers
  • Faster page loads: Better Core Web Vitals scores
  • Static content: Can be served from CDN

Scalability Benefits

  • Millions of numbers: Can generate unlimited numbers without DB constraints
  • Offline capability: Works without database connection
  • Cost efficiency: Reduces database usage and costs

Calculator Integration

  • Real-time Translation: Powers the Kifuliiru Calculator
  • Mathematical Operations: Supports all calculator functions
  • Audio Integration: Enables text-to-speech for numbers
  • Consistent Formatting: Unified number display across all tools

Architecture

File Structure

∑Formula
src/data/numbers/
├── generator.ts # Number generation logic
└── generated/ # Generated number files
 ├── index.json # Metadata and file index
 ├── basic-0-1000.json # Numbers 0-1000
 ├── thousands-1001-10000.json
 ├── ten-thousands-10001-100000.json
 ├── hundred-thousands-100001-1000000.json
 ├── millions-1000001-10000000.json
 └── special-numbers.json # Special numbers (powers of 10, etc.)
```text

### Data Format
Each number entry contains:
```typescript
interface GeneratedNumberEntry {
 id: number; // Numeric value
 muharuro: number; // Numeric value (same as id)
 kifuliiru: string; // Kifuliiru translation
 kingereza: string; // English translation
 kifaransa: string; // French translation
 kiswahili: string; // Swahili translation
 category: string; // 'basic', 'tens', 'hundreds', etc.
 searchable: string; // Combined searchable text
}
```text

## Usage

### Generating Numbers

1. **Run the generation script:**
 ```bash
 npm run generate-numbers
 ```text

2. **The script will:**
 - Generate numbers 0-10,000,000
 - Create translations in 4 languages
 - Save files in batches for efficiency
 - Create an index file for metadata

### Loading Numbers

1. **Use the file loader:**
 ```typescript
 import { numberFileLoader } from '@/lib/numberFileLoader';
 
 // Search numbers
 const result = await numberFileLoader.searchNumbers({
 page: 1,
 limit: 50,
 search: 'higuma',
 category: 'basic'
 });
 ```text

2. **API endpoints:**
 - `GET /api/numbers-file` - Search numbers
 - `POST /api/numbers-file` - Get specific number

### Frontend Integration

1. **Replace database queries:**
 ```typescript
 // Old way (database)
 const { data } = await supabase
 .from('kuharura')
 .select('*')
 .range(offset, offset + limit);

 // New way (files)
 const result = await numberFileLoader.searchNumbers({
 page: currentPage,
 limit: numbersPerPage,
 search: searchTerm
 });
 ```text

## Performance Comparison

| Metric | Database | File System | Improvement | |--------|----------|-------------|-------------| | Load Time | 200-500ms | 20-50ms | 5-10x faster | | Data Limit | ~1000 numbers | Unlimited | Unlimited | | Offline Support | No | Yes | Yes | | SEO Friendly | Limited | Full | Full | | Server Cost | High | Low | 70% reduction |

## Features

### Search Capabilities
- **Multi-language search**: Search in Kifuliiru, English, French, Swahili
- **Numeric search**: Search by number value
- **Category filtering**: Filter by number categories
- **Range filtering**: Search within number ranges

### Caching
- **File-level caching**: Loaded files are cached in memory
- **Smart loading**: Only loads relevant files based on search criteria
- **Preloading**: Common files are preloaded for better performance

### Pagination
- **Efficient pagination**: Only loads data for current page
- **Large datasets**: Handles millions of numbers efficiently
- **Search pagination**: Maintains pagination during search

## Migration Guide

### Step 1: Generate Numbers
```bash
npm run generate-numbers
```text

### Step 2: Update Components
Replace database queries with file loader calls:

```typescript
// Before
const { data } = await supabase.from('kuharura').select('*');

// After
const result = await numberFileLoader.searchNumbers({});
```text

### Step 3: Update API Routes
Replace database API routes with file-based ones:

```typescript
// Before: /api/numbers
// After: /api/numbers-file
```text

### Step 4: Test Performance
Use the comparison page at `/numbers/compare` to verify improvements.

## Maintenance

### Regenerating Numbers
When translation functions are updated:

1. Run the generation script
2. Clear file cache: `numberFileLoader.clearCache()`
3. Deploy updated files

### Adding New Languages
1. Update translation functions in `generator.ts`
2. Regenerate numbers
3. Update frontend to display new language

### Monitoring
- Monitor file sizes and generation time
- Track search performance
- Monitor cache hit rates

## Troubleshooting

### Common Issues

1. **Files not found**
 - Ensure generation script completed successfully
 - Check file permissions
 - Verify file paths

2. **Slow performance**
 - Clear cache: `numberFileLoader.clearCache()`
 - Check file sizes
 - Verify search criteria

3. **Memory issues**
 - Implement file streaming for very large datasets
 - Use pagination more aggressively
 - Consider file compression

### Debug Mode
Enable debug logging:
```typescript
// In development
console.log('Loading files:', relevantFiles);
console.log('Search results:', result);
```text

## Future Enhancements

1. **Compression**: Compress JSON files for smaller sizes
2. **Streaming**: Stream large files for better memory usage
3. **CDN Integration**: Serve files from CDN
4. **Incremental Updates**: Update only changed numbers
5. **Audio Integration**: Pre-generate audio files
6. **Visualization**: Add number visualization features

## Conclusion

The file-based number system provides significant performance improvements while maintaining all existing functionality. It's more scalable, cost-effective, and SEO-friendly than the database approach.

For questions or issues, refer to the comparison page at `/numbers/compare` or check the console logs for debugging information.
PreviousCalculatorNextMath question templates

On this page

  • Overview
  • Why File-Based Numbers?
  • Performance Benefits
  • SEO Benefits
  • Scalability Benefits
  • Calculator Integration
  • Architecture
  • File Structure