Proje: Okul B2B App
Okul B2B App — Conventions
Bu klasördeki tüm notların hub’ı. Her yeni not buraya link vermeli ([[Okul B2B App — Conventions]]).
Notlar
-
api-client-pattern — utils/ApiClient.ts kullanımı, header’lar, cache
-
error-handling-pattern — ServerError, Toast, servis boş değer patternleri
-
build-ve-ota-update — EAS profilleri, OTA platform ayrımı, native pin, signing
-
firebase-native-module-kurali — Expo Go crash önleme, lazy load patternleri
-
context-state-yonetimi — CompanyContext/SchoolContext kullanımı, remount stratejisi
-
naming-ve-klasor-yapisi — Dosya isimlendirme, import alias, platform-specific
-
custom-hooklar — Tüm hooks/ listesi ve kullanım alanları
-
service-config-sabitleri — Sayfalama, cache TTL, dosya limitleri
-
guvenlik-ve-depolama — SecureStorage, AsyncStorage, şifreleme, KVKK
-
tema-ve-renk-sistemi — ThemeContext, APP_COLORS, dark mode, font scaling
-
tip-sistemi — types/ klasörü, Lead/Media/ApiResponse tipleri, isSuccessStatus
-
tab-bar-ve-navigasyon-detaylari — Tab bar config, SVG ikonlar, lazy:false kuralı
-
turkce-arama-ve-platform-optimizasyonlari — TurkishSearchUtils, Android opts, font scaling
-
icerik-ekreni-pattern — PagerView+Reanimated tab pattern, TabState, lazy load
-
boyut-ve-spacing-sistemi — SPACING/FONT_SIZES/BORDER_RADIUS responsive sistem
-
izin-yonetimi — PermissionManager, kamera/galeri/bildirim izinleri
-
gorsel-sıkistirma — ImageCompressor konfigürasyonu, 3MB eşiği
-
environment-ve-env-degiskenleri — .env değişkenleri, EXPO_PUBLIC_ prefix kuralı
-
crash-reporting-ve-loglama — CrashlyticsService, Logger, log level konfigürasyonu
-
leads-ekreni-pattern — FlatList pagination, StatusBadge önceliği, cached status
-
galeri-ekreni-pattern — PagerView sekmeler, upload flow, platform modal farkı
-
network-manager-hata-siniflar — ServerError hiyerarşisi, getFieldErrors(), bağlantı kontrolü
-
gorsel-secici-hooklar — useNativeImagePicker vs useImageCropPicker farkı
-
alert-notification-toast — AlertNotification, Toast stilleri, topOffset 180
-
api-dosya-adi-kurallari — 50 karakter limit, createSafeFileName, FloatingLabelInput
-
development-araclari — DevInfoBanner, test ekranı, logger debug modu, npm komutları
-
api-client-header-yonetimi — Authorization, x-cid, x-consumer-key yaşam döngüsü, 401 handling
-
hata-mesaji-yonetimi — SimpleErrorHandler, AuthErrorHandler, HTTP status → Türkçe mesaj
-
photo-grid-yapisi — PhotoGrid boyutları, sortable entegrasyon, pending photos
-
icerik-form-modal-pattern — ContentFormModal alanları, medya 2 state, DatePickerField
-
content-media-picker-pattern — Optimistic upload, NewMediaItem vs ExistingMediaItem, ref pattern
-
app-lock-pattern — useAppLock, 5 dakika timeout, background timer
-
versiyon-yonetimi-scripti — npm run version:patch, native dosyaları script güncellemez!
-
tab-ikon-ve-renk-detaylari — Tab aktif rengi FF495C (kırmızı), SVG COLOR_PLACEHOLDER
-
yukleme-durumu-bilesenler — LottieSpinner, SkeletonLoader, LoadingOverlay ne zaman kullanılır
-
responsive-ve-tablet-destek — useResponsive hook, tablet tespiti algoritması, responsive.select()
-
kritik-bileşen-pattern-ozet — Sortable customHandle ZORUNLU, Modal Button KAV içinde olmalı
-
api-client-get-cache-ve-dedup — useCache flag, request dedup, postPublic vs post
-
async-operation-pattern — useAsyncOperation hook, loading/error/retry state
-
otp-input-ve-auth-bilesenler — OTPInput 4 hane, AuthFlow hiyerarşisi
-
remote-config-ve-force-update — useRemoteConfig, maintenance mode, TODO: Remote Config aktif değil
-
link-acma-ve-youtube — openLink(), YouTube app öncelik, expo-web-browser yasal belgeler
-
upload-progress-bileşeni — UploadProgress UploadItem state, retry/cancel, haptic
-
school-content-service-pattern — SchoolContentResult, toggleStatus, cache bypass pattern
-
media-picker-bileşeni — MediaPicker bileşeni, MediaPickerResult, video desteği
-
terms-acceptance-hook — useTermsAcceptance, needsAcceptance flag, acceptTerms
-
analytics-event-tracking-kullanim — trackLeadEvent, trackGalleryEvent vb. kullanım örnekleri
-
app-header-detaylar — Header gradient, okul seçici, bildirim badge, onHeightChange
-
permission-utils — ensurePhotoPermissions, ensureNotificationPermissions utility fonksiyonlar
-
error-handler-hook — useErrorHandler, showError, retry pattern, ErrorModal
-
error-messages-sozlugu — UserErrorMessage, Türkçe hata sözlüğü, isRetryable flag
-
biometric-auth-detaylari — BiometricAuth prompt, hata kodları, BiometricCapabilities
-
secure-storage-detaylari — SecureStorage AES TODO, requireAuth, iOS kilit ekranı uyarısı
-
school-content-config-detaylari — getMediaUrl, CDN fallback (cdndev→cdn), CONTENT_TABS sırası
-
companies-service-cache — CompaniesService 10 dakika cache, x-cid bazlı validasyon, clearCache
-
notes-service-detaylari — NotesService CRUD, createNote throws, getLeadNotes boş dönüş
-
test-yapisi — Jest, jest-expo, SimpleErrorHandler ve MediaService testleri
-
tema-hooklar — useAppTheme, useThemeColor, useTheme — hangisi ne zaman kullanılır
-
kodlama-standartlari-ozet — Clean Code, Türkçe naming summary, error handling kurallar
-
bileşen-kutuphanesi-ozet — Bileşen klasör yapısı, tasarım prensipleri, ThemedText/ThemedView
-
themed-bilesenler — ThemedText tip tipleri, ThemedView, yeni kodda doğrudan Colors[theme] tercih
-
icerik-detay-ve-kart-bilesenler — ContentDetailModal pageSheet, allMedia birleştirme, ContentCard
-
firma-degistirme-mekanizmasi — setSelectedCompanyId adımları, cache clear önemli, AsyncStorage persist