A modern, responsive web application providing AI-powered tax assistance for Uganda. Built with React, TypeScript, and Supabase authentication. Now with full multilingual support - click any language to instantly translate the entire interface!
- WhatsApp/Messenger-style chat interface
- Context-aware responses about Uganda's tax system
- Real-time typing indicators and smooth animations
- Voice input capability with microphone integration
Click any language button to instantly translate the entire application!
- English 🇺🇸 - International standard
- Luganda 🇺🇬 - Central Uganda (Fully translated)
- Acholi 🇺🇬 - Northern Uganda (Fully translated)
- Runyankole 🇺🇬 - Western Uganda (Fully translated)
- Luo 🇺🇬 - Northern Uganda (Partial translation)
- Swahili 🇰🇪 - East African lingua franca (Fully translated)
- French 🇫🇷 - International (Fully translated)
- Arabic 🇸🇦 - Middle Eastern/North African (Fully translated with RTL support)
Features:
- Instant Translation: Click any language flag to immediately translate all page content
- Persistent Selection: Your language choice is saved and remembered
- Context-Aware AI: Voxa responds in your selected language
- RTL Support: Arabic language includes proper right-to-left layout
- Cultural Adaptation: Translations include local context and examples
- Supabase-powered authentication
- Email/password and Google OAuth signup
- User profile management with initials display
- Secure session management
- Mobile-first approach
- Optimized for all screen sizes
- Modern green and white theme
- Smooth animations and transitions
- PAYE (Pay As You Earn) calculator
- VAT calculator (18% Uganda rate)
- Interactive tax breakdown displays
- Current 2024 Uganda tax brackets
- Node.js 18+
- npm or yarn
- Supabase account (for authentication)
- Clone the repository
git clone <your-repo-url>
cd voxa-tax-assistant- Install dependencies
npm install- Set up environment variables
cp .env.example .envEdit .env with your Supabase credentials:
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key-here- Start development server
npm run dev-
Open your browser Visit
http://localhost:8080to see Voxa in action! -
Test the translation system
- Click the language selector in the navigation (globe icon with flag)
- Select any language to see the entire interface translate instantly
- Try the chat feature to see AI responses in your selected language
client/
├── components/
│ ├── ui/ # Reusable UI components (buttons, inputs, etc.)
│ └── Navigation.tsx # Main navigation with language selector
├── pages/
│ ├── Home.tsx # Animated landing page (translated)
│ ├── Chat.tsx # Main chat interface (translated)
│ ├── About.tsx # About Voxa (translated)
│ ├── Login.tsx # Authentication login
│ ├── Signup.tsx # User registration
│ ├── Calculator.tsx # Tax calculator tools
│ ├── Laws.tsx # Tax laws (placeholder)
│ └── Contact.tsx # Contact page
├── lib/
│ ├── translations.tsx # Complete translation system
│ ├── supabase.ts # Supabase client configuration
│ └── utils.ts # Utility functions
└── global.css # TailwindCSS configuration
server/
├── routes/ # API endpoints
└── index.ts # Express server setup
shared/
└── api.ts # Shared TypeScript interfaces
- Primary Green:
hsl(142, 76%, 36%)- Uganda-inspired green - Accent Green:
hsl(142, 69%, 58%)- Lighter accent - Background: Clean white with subtle green gradients
- Text: Professional grays for readability
- Built with Radix UI primitives
- TailwindCSS for styling
- Consistent spacing and typography
- Accessible color contrasts
The translation system is built using React Context and provides:
- LanguageProvider: Wraps the entire app and manages current language state
- useLanguage Hook: Provides access to translation functions and current language
- Translation Files: Complete translations stored in
client/lib/translations.tsx - Persistent Storage: Selected language is saved in localStorage
- RTL Support: Automatic right-to-left layout for Arabic
import { useLanguage } from "@/lib/translations";
const MyComponent = () => {
const { t, currentLanguage, setLanguage } = useLanguage();
return (
<div>
<h1>{t("home.hero.title")}</h1>
<p>{t("home.hero.subtitle")}</p>
</div>
);
};- Add new keys to the translation object in
client/lib/translations.tsx - Provide translations for all supported languages
- Use the
t()function in your components - Test by switching languages in the UI
Example:
// In translations.tsx
const translations = {
en: {
"myKey": "Hello World",
"myOtherKey": "Welcome to Voxa"
},
lug: {
"myKey": "Nkulamuse Ensi",
"myOtherKey": "Tusanyuse ku Voxa"
}
// ... other languages
};
// In your component
const { t } = useLanguage();
return <h1>{t("myKey")}</h1>; // Displays "Hello World" or "Nkulamuse Ensi"Voxa is designed to easily integrate with:
- RESTful API endpoints ready
- Webhook support for real-time responses
- Custom actions for tax calculations
- Multilingual response support
- API integration patterns established
- Environment variables configured
- Context-aware conversation handling
- Language-aware prompt engineering
- Set up your chatbot platform (Botpress/Gemini)
- Configure webhook URLs in environment variables
- Update the chat interface to call your API endpoints
- Ensure responses respect the current language setting
- Deploy and test conversations in all supported languages
npm run devnpm run build
npm run start- Configure Supabase for authentication
- Set up domain for OAuth redirects
- Enable required authentication providers
- Configure email templates (optional)
- Touch-friendly: Large tap targets for mobile users
- Voice input: Microphone button for accessibility
- Responsive chat: Adapts to all screen sizes
- Fast loading: Optimized bundle sizes
- PWA-ready: Can be installed as mobile app
- Language switching: Easy mobile-friendly language selector
- 2024 tax brackets implemented
- Monthly and annual salary support
- Detailed tax breakdown display
- Instant calculations
- Multilingual explanations
- 18% Uganda VAT rate
- Inclusive/exclusive calculations
- Business registration guidance
- URA compliance information
- Local language support
- Current Uganda Revenue Authority guidelines
- Local language explanations
- Cultural context awareness
- Accessible to all education levels
npm run dev # Start development server
npm run build # Build for production
npm run typecheck # TypeScript validation
npm test # Run tests
npm run format.fix # Format code- Start the development server:
npm run dev - Open the application in your browser
- Click the language selector (globe icon with flag in navigation)
- Select different languages and watch the interface translate instantly
- Test the chat feature to see AI responses in different languages
- Check RTL support by selecting Arabic
- Add language code to the
LanguageCodetype intranslations.tsx - Add language object to the
languagesarray - Provide complete translations in the
translationsobject - Test thoroughly with native speakers
- Update documentation
- Edit
generateVoxaResponse()inChat.tsx - Add language-specific responses
- Include local context and examples
- Maintain professional, helpful tone in all languages
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open Pull Request
We welcome native speakers to help improve our translations:
- Review existing translations in
client/lib/translations.tsx - Suggest improvements via GitHub issues
- Add new languages following the established pattern
- Test thoroughly on the live application
This project is licensed under the MIT License - see the LICENSE file for details.
- Uganda Revenue Authority - Tax information and guidelines
- Native speakers - Translation accuracy and cultural context
- Supabase - Authentication and database services
- Radix UI - Accessible component primitives
- TailwindCSS - Utility-first CSS framework
- React & TypeScript - Modern web development
Built with ❤️ for Uganda's taxpayers
Making tax compliance accessible to everyone, in every language.