# Tabungin Project Standards ## 🌐 Multilingual Support (COMPLETED) ### Languages Supported: - ✅ **English (EN)** - Full translation - ✅ **Indonesian (ID)** - Full translation (Default) ### Implementation: - **Location:** `/apps/web/src/locales/` - `en.ts` - English translations - `id.ts` - Indonesian translations - **Context:** `LanguageContext.tsx` - Language state management - **Component:** `LanguageToggle.tsx` - Language switcher UI - **Usage:** `const { t } = useLanguage()` then `t.section.key` ### Translation Structure: ```typescript { nav: { ... }, overview: { ... }, wallets: { ... }, transactions: { ... }, profile: { ... }, walletDialog: { ... }, transactionDialog: { ... }, dateRange: { ... } } ``` ### Rules: 1. ✅ **ALL user-facing text MUST use translations** - No hardcoded strings 2. ✅ **Both EN and ID must have identical keys** - Type-safe with TypeScript 3. ✅ **Toast messages use translations** - `toast.success(t.section.key)` 4. ✅ **Error messages use translations** - Consistent UX --- ## 🎨 UI Component Library (COMPLETED) ### Framework: **shadcn/ui** - Built on Radix UI primitives - Tailwind CSS styling - Fully customizable components ### Components Used: - ✅ Button, Input, Label, Badge - ✅ Card, Alert, Separator, Tabs - ✅ Dialog, Drawer (Responsive) - ✅ Select, Popover, Calendar - ✅ Sidebar, Breadcrumb - ✅ Toast (Sonner) ### Styling Convention: - **Tailwind CSS** for all styling - **Dark mode support** via `useTheme` hook - **Responsive design** with `md:`, `lg:` breakpoints --- ## 📱 Mobile UI/UX Optimization (COMPLETED ✅) ### Status: - ✅ **Profile Page** - Fully optimized - ✅ **Overview Page** - Fully optimized - ✅ **Wallets Page** - Fully optimized - ✅ **Transactions Page** - Fully optimized - ✅ **Responsive Dialogs** - Desktop (Dialog) / Mobile (Drawer) ### Mobile Standards: #### 1. Touch Target Sizes - **Buttons:** `h-11` (44px) on mobile, `h-10` on desktop - **Inputs:** `h-11` (44px) on mobile, `h-10` on desktop - **Minimum width:** `min-w-[100px]` for buttons - **Padding:** `px-6` on mobile, `px-4` on desktop #### 2. Typography - **Inputs/Labels:** `text-base` (16px) on mobile to prevent iOS zoom - **Desktop:** `text-sm` (14px) for compact layout - **Responsive:** `text-base md:text-sm` #### 3. Spacing - **Form fields:** `space-y-3` on mobile, `space-y-2` on desktop - **Touch targets:** Minimum 8px gap between tappable elements - **Padding:** More generous on mobile (`p-6` vs `p-4`) #### 4. Responsive Patterns ```tsx // Button sizing