5.5 KiB
Domain Configuration System
Author: Matthew Raymer
Date: 2025-01-27
Status: ✅ UPDATED - Simplified to use APP_SERVER for all functionality
Overview
TimeSafari uses a centralized domain configuration system to ensure consistent URL generation across all environments. This system provides a single point of control for domain changes and uses environment-specific configuration for all functionality including sharing.
Problem Solved
Issue: Inconsistent Domain Usage
Previously, the system used separate constants for different types of URLs:
- Internal Operations: Used
APP_SERVER
(environment-specific) - Sharing: Used separate constants (removed)
This created complexity and confusion about when to use which constant.
Solution: Unified Domain Configuration
All functionality now uses the APP_SERVER
constant, which provides
environment-specific URLs that can be configured per environment.
Implementation
Core Configuration
The domain configuration is centralized in src/constants/app.ts
:
export enum AppString {
// ... other constants ...
PROD_PUSH_SERVER = "https://timesafari.app",
// ... other constants ...
}
// Environment-specific server URL for all functionality
export const APP_SERVER =
import.meta.env.VITE_APP_SERVER || "https://timesafari.app";
Usage Pattern
All components that generate URLs follow this pattern:
import { APP_SERVER } from "@/constants/app";
// In component class
APP_SERVER = APP_SERVER;
// In methods
const deepLink = `${APP_SERVER}/deep-link/claim/${claimId}`;
Components Updated
The following components and services use APP_SERVER
:
Views
ClaimView.vue
- Claim and certificate linksProjectViewView.vue
- Project copy linksConfirmGiftView.vue
- Confirm gift deep linksUserProfileView.vue
- Profile copy linksInviteOneView.vue
- Invite link generationContactsView.vue
- Contact import linksOnboardMeetingSetupView.vue
- Meeting members links
Components
HiddenDidDialog.vue
- Hidden DID dialog links
Services
endorserServer.ts
- Contact import confirm links
Configuration Management
Environment-Specific Configuration
The system uses environment variables to configure domains:
# Development
VITE_APP_SERVER=http://localhost:8080
# Test
VITE_APP_SERVER=https://test.timesafari.app
# Production
VITE_APP_SERVER=https://timesafari.app
Changing the Domain
To change the domain for all functionality:
-
Update environment variables for the target environment:
VITE_APP_SERVER=https://your-new-domain.com
-
Rebuild the application for all platforms:
npm run build:web npm run build:capacitor npm run build:electron
Benefits
✅ Simplified Configuration
- Single constant for all URL generation
- No confusion about which constant to use
- Consistent behavior across all functionality
✅ Environment Flexibility
- Easy to configure different domains per environment
- Support for development, test, and production environments
- Environment-specific sharing URLs when needed
✅ Maintainability
- Single source of truth for domain configuration
- Easy to change domain across entire application
- Clear pattern for implementing new URL functionality
✅ Developer Experience
- Simple, consistent pattern for URL generation
- Clear documentation and examples
- Type-safe configuration with TypeScript
Testing
Manual Testing
-
Development Environment:
npm run dev # Navigate to any page with copy link buttons # Verify links use configured domain
-
Production Build:
npm run build:web # Deploy and test sharing functionality # Verify all links work correctly
Automated Testing
The implementation includes comprehensive linting to ensure:
- All components properly import
APP_SERVER
- No hardcoded URLs in functionality
- Consistent usage patterns across the codebase
Implementation Pattern
Current Approach
// ✅ Single constant for all functionality
import { APP_SERVER } from "@/constants/app";
const shareLink = `${APP_SERVER}/deep-link/claim/123`;
const apiUrl = `${APP_SERVER}/api/claim/123`;
Future Enhancements
Potential Improvements
-
Environment-Specific Sharing Domains:
export const getShareDomain = () => { if (import.meta.env.PROD) { return AppString.PROD_PUSH_SERVER; } return AppString.TEST1_PUSH_SERVER; // Use test domain for dev sharing };
-
Dynamic Domain Detection:
export const SHARE_DOMAIN = import.meta.env.VITE_SHARE_DOMAIN || AppString.PROD_PUSH_SERVER;
-
Platform-Specific Domains:
export const getPlatformShareDomain = () => { const platform = process.env.VITE_PLATFORM; switch (platform) { case 'web': return AppString.PROD_PUSH_SERVER; case 'capacitor': return AppString.PROD_PUSH_SERVER; case 'electron': return AppString.PROD_PUSH_SERVER; default: return AppString.PROD_PUSH_SERVER; } };
Related Documentation
- Build Systems Overview - Environment configuration
- Constants and Configuration - Core constants
- Migration Guide - Database migration context
Last Updated: 2025-01-27
Version: 2.0
Maintainer: Matthew Raymer