Naskh is a full-stack TypeScript application for converting and transliterating text between Arabic script, Latin script, and DIN 31635 standard transliteration. The application serves Islamic studies students, translators, and researchers who need accurate Arabic-Latin text conversion.
Core Purpose: Provide AI-powered and dictionary-based transliteration following the DIN 31635 standard for Arabic transliteration.
Technology Stack:
- Frontend: React + Vite + TailwindCSS
- Backend: Express.js (Node.js)
- Database: PostgreSQL (via Neon) with Drizzle ORM
- AI Integration: Google Gemini API
- Mobile: Capacitor (iOS/Android)
- UI Components: Radix UI + shadcn/ui
Preferred communication style: Simple, everyday language.
31 Ottobre 2025 - Ottimizzazione Prestazioni con Streaming AI:
- Implementato streaming per risposte Gemini AI quasi immediate
- Aggiunto cache in-memory per conversioni ripetute (60 minuti TTL)
- Nuovo endpoint
/api/convert/streamcon Server-Sent Events - Frontend aggiornato per gestire streaming progressivo del testo
- Migliorata user experience con visualizzazione incrementale
31 Ottobre 2025 - Integrazione Capacitor per App Native:
- Configurato Capacitor per creare app native Android e iOS
- Aggiunti progetti nativi nelle cartelle
android/eios/ - Generati icone e splash screens per tutte le piattaforme
- Creata documentazione completa in
MOBILE_DEPLOYMENT.mdper pubblicazione su App Store e Play Store - Aggiunti script npm per build e sync delle app native
- Configurato deployment production per Replit (autoscale)
Monorepo Layout:
client/: React frontend applicationserver/: Express.js backend APIshared/: Shared TypeScript schemas and types (Zod validation)dist/: Production build output
Development vs Production:
- Development: Vite dev server integrated with Express via middleware
- Production: Static files served from
dist/publicby Express
Component Design System:
- Based on Material Design principles adapted for Islamic aesthetics
- Uses shadcn/ui component library (Radix UI primitives)
- Supports bidirectional text (RTL/LTR) for Arabic and Latin scripts
- Theme system with light/dark modes via React Context
Typography Approach:
- Arabic text: Cairo/Amiri fonts (Google Fonts)
- Latin text: Inter font
- Special handling for DIN 31635 diacritics (ḥ, ṣ, ṯ, ʿ, etc.)
State Management:
- TanStack Query (React Query) for server state
- Local React state for UI interactions
- No complex global state management needed (stateless conversion tool)
Key UI Features:
- Single-page application with vertical scroll
- Three conversion modes: Latin→DIN, Arabic→DIN, Latin→Arabic
- Auto-detection of text direction (RTL/LTR)
- Real-time character counting
- Copy-to-clipboard functionality
API Design:
- RESTful endpoint:
POST /api/convert - Stateless request-response model
- JSON-based communication with Zod validation
Conversion Strategy (Multi-Layer Approach):
- In-Memory Cache: Conversioni recenti cached per 60 minuti (instant)
- Dictionary Lookup: Static dictionary of common Islamic terms (
server/dictionary.ts) - AI Streaming: Google Gemini API con streaming per risposte progressive
- Logging: AI conversions logged to
data/conversion-logs.jsonfor future dictionary expansion
Performance Optimizations:
- Cache in-memory (
server/cache.ts): LRU cache con 1000 entry max, TTL 60 minuti - Streaming AI (
/api/convert/stream): Server-Sent Events per risposte progressive - Response time: Cache/Dictionary ~5-50ms, AI streaming ~100-500ms first chunk, progressivo dopo
- Frontend mostra testo incrementalmente invece di aspettare risposta completa
Why This Approach?:
- Cache elimina latenza per conversioni ripetute
- Dictionary provides instant, consistent results for common terms
- Streaming AI riduce perceived latency (user vede testo apparire immediatamente)
- Logging builds knowledge base for improving dictionary over time
Error Handling:
- Zod schema validation on all API requests
- Graceful fallback if AI service unavailable
- User-friendly error messages via toast notifications
- Stream error handling con chiusura pulita della connessione
Database Setup:
- PostgreSQL via Neon (serverless)
- Drizzle ORM for type-safe database access
- Schema defined in
shared/schema.ts
Current Usage:
- Application is primarily stateless (no user accounts)
- Database infrastructure provisioned but minimal usage
- File-based logging for conversion history (
data/conversion-logs.json)
Future Expansion Potential:
- Could add user accounts and saved conversions
- Dictionary entries could migrate from static file to database
- Analytics on conversion patterns
Cross-Platform Strategy:
- Single codebase for web, iOS, and Android
- Capacitor wraps web build into native containers
- Native splash screens and app icons configured
Build Process:
- Web build (
npm run build) generatesdist/public - Capacitor syncs web assets to native projects
- Native builds done via Android Studio / Xcode
Platform-Specific Features:
- Custom splash screens for iOS (multiple device sizes)
- Theme color:
#111827(dark gray) - App ID:
com.naskh.app
Progressive Web App:
- Service worker for offline capability
- Manifest with app metadata
- Installable on mobile/desktop browsers
- Custom app icons and splash screens
Google Gemini API:
- Purpose: AI-powered text conversion when dictionary lookup fails
- Configuration: Requires
GEMINI_API_KEYenvironment variable - Usage Pattern: Specialized prompts for each conversion mode
- Cost Consideration: API calls only made when dictionary doesn't have entry
Prompts Strategy:
- Separate prompts for Latin→DIN, Arabic→DIN, Latin→Arabic
- Prompts emphasize DIN 31635 standard compliance
- Instructions to preserve non-Arabic text unchanged
Neon PostgreSQL:
- Purpose: Serverless PostgreSQL database
- Configuration: Requires
DATABASE_URLenvironment variable - Connection: Via
@neondatabase/serverlesspackage - Current State: Provisioned but minimal usage (stateless app)
Radix UI:
- Unstyled, accessible component primitives
- Used for dialogs, dropdowns, tooltips, etc.
- Provides keyboard navigation and ARIA attributes
shadcn/ui:
- Pre-built component library wrapping Radix UI
- Customized with TailwindCSS
- Configuration in
components.json
Google Fonts:
- Cairo: Modern Arabic sans-serif
- Amiri: Classical Arabic serif
- Inter: Latin text for UI
- Loaded via CDN in
client/index.html
Vite:
- Frontend build tool and dev server
- Fast HMR (Hot Module Replacement)
- Plugin: VitePWA for service worker generation
esbuild:
- Backend bundler for production builds
- Bundles Express server code to
dist/index.js
Capacitor:
- Native app wrapper for iOS/Android
- Asset generation for icons and splash screens
- Platform-specific build scripts in
package.json - Setup: Progetti nativi già configurati in
android/eios/ - Scripts disponibili:
npm run cap:sync: Sincronizza web build con app nativenpm run cap:build:android/ios: Build completo per piattaforma specificanpm run cap:open:android/ios: Apri progetto in IDE nativonpm run cap:assets: Rigenera icone e splash screens
- Deployment: Vedi
MOBILE_DEPLOYMENT.mdper guida completa pubblicazione store
Key Dependencies:
express: Web server frameworkreact+react-dom: UI librarydrizzle-orm: Type-safe database ORMzod: Schema validationtailwindcss: Utility-first CSS frameworkwouter: Lightweight routing@tanstack/react-query: Server state managementclass-variance-authority: Component variant stylingdate-fns: Date formatting utilities@capacitor/core: Runtime per app native (in dependencies, necessario a runtime)
Dev Dependencies:
@capacitor/cli: CLI per gestione progetti Capacitor@capacitor/android: Piattaforma Android@capacitor/ios: Piattaforma iOS@capacitor/assets: Generatore automatico di icone e splash screens
GEMINI_API_KEY=<your-google-gemini-api-key>
DATABASE_URL=<neon-postgres-connection-string>
PORT=5001 # Optional, defaults to 5000
NODE_ENV=development|production