
🌍 Language Mode: Single vs. Multi-Language Support
- Added configurable language mode via
AppConfig
(single or dual language) - Adapted all key views:
- Conversations
- Translator
- Sentences & Words
- Lu Pronunciation Coach
- Introduced language toggle flag in conversation view (visible in multi-language mode)
📚 Smarter Dictionary
- Now shows:
- Word meaning
- Explanation of usage in context
- Translation (if multi-language enabled)
- Example sentences
- Added caching layer for faster reloading
- Improved Markdown-to-HTML rendering for:
- Line breaks
- Numbered lists
🧩 Multitenancy & White Labeling Foundations
- Introduced
AppConfig
system to enable per-app customization - Fully functional multi-tenant support:
- App-specific routing via subdomain or param
- Separate login and registration flows per app
- UI and language behavior controlled by app config
- Added alias support to allow multiple app names per configuration
Multi-App User Authentication
LingoStand now supports multiple applications with shared infrastructure but separate user contexts. The system has been modified to allow users to register and log in with the same credentials (email, login) across different applications identified by appConfigId.
Key Features
- Users can register with the same email/login across different applications
- Each application has its own isolated user management context
- User uniqueness is enforced per application, not globally
- Authentication is scoped to the specific application context
Authentication Model
- User credentials (email and login) are now unique per
appConfigId
rather than globally - Each
User
entity is linked to aProfile
entity which references theAppConfig
entity - Authentication and registration flows require an
appConfigId
parameter - The system checks uniqueness of credentials at the application level through
Profile
->AppConfig
associations
Database Schema Changes
The following changes were made to the database schema:
- Removed unique constraints from
jhi_user.login
andjhi_user.email
columns - Dropped unique indexes
idx_user_login
andidx_user_email
from thejhi_user
table - Uniqueness is now enforced at the application layer based on the
appConfigId
associated with the user’s profile
These changes allow the same email or login to exist multiple times in the database, as long as they belong to different application contexts.
Migration Notes
For existing deployments upgrading to this multi-app model:
- Run the Liquibase migration to remove unique constraints on user login/email
- All existing users will be associated with their current application context
- No manual data migration is required for existing users
- The
DomainUserDetailsService
now extractsappConfigId
from request URIs during authentication
🔁 Backend PR
- 🔗 PR 1176
- 📁 Files changed: 66
- ➕➖ Lines: +2,500 / −88
🖥️ Frontend PR
- PR 874
- 📁 Files changed: 33
- ➕➖ Lines: +573 / −263