498 Commits

Author SHA1 Message Date
barsa
2dec0af63b fix: resolve nested ternary lint errors across codebase 2026-02-03 18:11:51 +09:00
barsa
44aa90061e refactor: remove unused metadata and sitemap configurations for cleaner code 2026-02-03 17:59:44 +09:00
barsa
9e442a51f8 feat: add API Property Name Guessing Audit and Orchestrator Refactoring Plan documentation 2026-02-03 17:37:42 +09:00
barsa
4cb393bdb8 refactor: simplify order fulfillment and remove unused public pages
- Extract fulfillment step executors and factory from orchestrator
- Remove unused signup, migrate, and internet configure pages
- Simplify PublicShell and landing page components
- Standardize conditional expressions across codebase
2026-02-03 17:35:47 +09:00
barsa
ff9ee10860 Merge main into alt-design
Resolved merge conflicts between main and alt-design branches.

Key decisions:
- BFF: Adopted SIM-first workflow from main (PA05-18 → PA02-01 → PA05-05 → WHMCS)
- BFF: Kept FreebitFacade pattern, added new services (AccountRegistration, VoiceOptions, SemiBlack)
- BFF: Fixed freebit-usage.service.ts bug (quotaKb → quotaMb)
- BFF: Merged rate limiting + HTTP status parsing in WHMCS error handler
- Portal: Took main's UI implementations
- Deleted: TV page, SignupForm, ServicesGrid (as per main)
- Added whmcsRegistrationUrl to field-maps.ts (was missing after file consolidation)

TODO post-merge:
- Refactor order-fulfillment-orchestrator.service.ts to use buildTransactionSteps abstraction
- Fix ESLint errors from main's code (skipped pre-commit for merge)
2026-02-03 16:12:05 +09:00
Temuuleenn
35619f24d1 Simplify physical SIM activation and enhance order fulfillment
- Remove PA05-18 semi-black step from physical SIM flow, use PA02-01 directly
- Add WHMCS client ID fallback from Salesforce WH_Account__c field
- Return service IDs from WHMCS AcceptOrder for proper linking
- Add phone number to WHMCS domain field and WHMCS admin URL to Salesforce
- Change SIM Inventory status from "In Use" to "Assigned"
- Fix SIM services query case sensitivity ("SIM" → "Sim")
- Add bash 3.2 compatibility to dev-watch.sh
- Add "Most Popular Services" section to landing page
- Add "Trusted By" company carousel to About page

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 15:41:32 +09:00
barsa
61d2236b68 refactor: standardize conditional expressions for improved readability 2026-02-03 15:21:45 +09:00
barsa
f257ffe35a Refactor SupportCaseDetailView for improved state management and component structure
- Extracted case detail logic into a custom hook `useCaseDetailState` for better separation of concerns.
- Created sub-components: `CaseNotFoundView`, `CaseHeaderCard`, `CaseMetaInfoRow`, `CaseConversationSection`, `ReplyForm`, and `ClosedCaseNotice` to enhance readability and maintainability.
- Updated message bubble rendering to use `MessageBubbleHeader` and `MessageBubbleStatus` for clearer status indication.
- Improved loading and error handling in `ResidenceCardVerificationSettingsView` by creating dedicated content components for different states.
- Refactored `transformWhmcsSubscriptionListResponse` to enhance readability and maintainability.
- Minor code style adjustments for consistency and clarity across various files.
2026-02-03 13:12:08 +09:00
barsa
d5e22f14f5 feat: add address reconciliation queue service for Salesforce integration
- Implement AddressReconcileQueueService to handle address reconciliation jobs between WHMCS and Salesforce.
- Define job data structure and queue configuration for retries and error handling.
- Add methods for enqueueing reconciliation jobs and retrieving queue health metrics.

feat: create loading components for various services in the portal

- Add loading skeletons for Internet, SIM, VPN, and public services configuration.
- Implement loading states for account-related views including account details, services, and verification settings.
- Introduce loading states for support case details and subscription actions.

feat: implement OTP input component for user verification

- Create OtpInput component to handle 6-digit OTP input with auto-focus and navigation.
- Add LoginOtpStep component for OTP verification during login, including countdown timer and error handling.

feat: define address domain constants for validation

- Establish constants for address field length limits to ensure compliance with WHMCS API constraints.
- Include maximum lengths for address fields and user input fields to maintain data integrity.
2026-02-03 11:48:49 +09:00
Temuulen Ankhbayar
9fbb6ed61e Add PA05-18 semi-black registration before PA02-01 for physical SIM activation
Physical SIM activation was failing with error 210 "アカウント不在エラー"
(Account not found) because PA02-01 requires the SIM to be pre-registered
in Freebit's system. This adds PA05-18 (Semi-Black Account Registration)
as the first step before PA02-01.

New flow: PA05-18 → PA02-01 → PA05-05

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 11:02:15 +09:00
tema
b400b982f3 Improve section transitions with gradient bleed effect
- Replace animated blob hero background with dot grid pattern
- Add gradient bleed transitions between all landing page sections
- Apply same gradient bleed technique to About page sections
- Remove unused blob-float animations from globals.css
- Make Trust and Values sections full-width for visual consistency

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 17:05:54 +09:00
tema
1283880f7d Revamp Physical SIM activation to use PA02-01 + PA05-05
Replace PA05-33 OTA API with the proper two-step activation flow:
- PA02-01: Account Registration (/master/addAcnt/)
- PA05-05: Voice Options Registration (/mvno/talkoption/addOrder/)

Changes:
- Add FreebitAccountRegistrationService for PA02-01 account registration
- Add FreebitVoiceOptionsService for PA05-05 voice options
- Update SimFulfillmentService to use new APIs instead of PA05-33 OTA
- Add SalesforceSIMInventoryService for fetching SIM inventory data
- Remove deprecated FreebitOtaService (PA05-33 no longer used)
- Remove debug console.log statements

The new flow:
1. Fetch SIM inventory from Salesforce (phone number, PT number)
2. Call PA02-01 to register MVNO account with plan code
3. Call PA05-05 to configure voice options with customer identity
4. Update SIM inventory status to "In Use"

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 18:22:00 +09:00
tema
56189a9fe8 Enhance Portal Functionality and UI Components
- Added new animation styles to globals.css for improved visual effects in the portal.
- Updated PublicShell component to include mobile menu functionality and touch device detection, enhancing user experience on mobile devices.
- Refactored PublicLandingView to incorporate a custom hook for scroll-triggered animations and improved form validation for user inquiries.
- Enhanced AboutUsView layout for better readability and accessibility, including corporate data presentation.
- Streamlined PublicInternetPlans component by removing unnecessary CTA elements, focusing on setup fee details for clarity.
- Adjusted PublicContactView styling for improved layout consistency across the portal.
2026-01-29 17:42:57 +09:00
tema
c9d568d22f Enhance Homepage UX with Mobile Navigation and Form Improvements
- Add mobile hamburger menu with full navigation
- Fix touch support for Services dropdown
- Add form validation and accessibility labels to contact form
- Add carousel position indicators and swipe support
- Add scroll-triggered animations with useInView hook
- Add sticky mobile CTA bar
- Improve Remote Support section mobile layout
- Add animated background blobs
- Add language selector (EN indicator)
- Optimize hero image with priority flag

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 17:42:19 +09:00
barsa
b5a1091d41 feat(sim-plans): update layout for SimPlansContent component with responsive design 2026-01-20 19:44:12 +09:00
barsa
7dff7dc728 refactor(auth): remove SignupForm and related steps, migrate to new account creation flow
- Deleted SignupForm component and its associated steps (AccountStep, AddressStep, PasswordStep, ReviewStep).
- Removed references to SignupForm in index files and views.
- Updated MigrateAccountView to redirect to the new get-started flow.
- Adjusted PublicInternetConfigureView to use InlineGetStartedSection instead of InlineAuthSection.
- Cleaned up unused hooks and store methods related to WHMCS linking.
2026-01-20 19:40:55 +09:00
barsa
0ee1f00bf8 feat(migrate-account): implement MigrateAccountStep for passwordless WHMCS account migration 2026-01-20 19:00:20 +09:00
barsa
464f98284a feat(eligibility): add address key field for Salesforce Flow duplicate detection
Add Eligibility_Address_Key__c field (postcode:streetAddress format) to Case records
for eligibility check requests. Salesforce Flow will use this field to detect duplicate
requests for the same address within a time period.

Changes:
- Add eligibilityAddressKey to CreateCaseParams and CASE_FIELDS mapping
- Add streetAddress param to EligibilityCheckCaseParams for passing from callers
- Add createAddressKey() helper in WorkflowCaseManager to generate the key
- Update raw.types.ts schema with new field
- Note in internet-eligibility.service.ts that basic flow skips duplicate detection
2026-01-20 19:00:09 +09:00
tema
ff870c9f4f Update Service Pages Metadata and Content for Enhanced User Engagement
- Revised metadata titles and descriptions across various service pages to better reflect offerings and improve SEO.
- Updated content in the About Us, Contact, and Support pages to emphasize English support and services for expats in Japan.
- Removed TV Services references from the portal, streamlining service offerings and focusing on core services.
- Enhanced service descriptions to clarify benefits and features, ensuring users understand the value of each service.
2026-01-20 17:19:00 +09:00
tema
7139e0489d Enhance Service Pages with New FAQ Sections and Content Updates
- Added new FAQ sections to the TV Services and Public Internet Plans pages, improving user assistance and engagement.
- Updated the Onsite Support page to utilize a dedicated content component for better organization and maintainability.
- Included device compatibility information in the SIM Plans content, enhancing user clarity on service offerings.
- Improved the structure and functionality of FAQ items across various service pages for a more interactive user experience.
2026-01-20 11:43:51 +09:00
Temuuleenn
1f57ca4906 Remove Deprecated FAQ Sections and Update Blog Content
- Deleted the .env.example file as it is no longer needed.
- Updated blog page content with new sample posts and adjusted category counts for better accuracy.
- Removed FAQ sections from various service pages to streamline content and improve user experience.
- Simplified author information in blog posts for consistency and clarity.
2026-01-20 11:33:10 +09:00
barsa
04fd0ea233 feat: Implement safe redirect handling in CompleteAccountStep and SuccessStep components 2026-01-20 11:28:03 +09:00
barsa
5c6bd00346 feat(auth): update migration and password set flows with improved redirect handling
feat(billing): enhance invoice list with filtering and summary stats

feat(components): add ClearFiltersButton, FilterDropdown, and DetailStatsGrid components for better UI consistency

fix(get-started): refactor button links to use new Button component for consistency

style(services): update ServicesOverviewContent to conditionally render hero section

refactor(orders): simplify OrderDetail and OrdersList views with new stat grid and filtering components

chore: add useInvoicesFilter hook for managing invoice filtering logic
2026-01-20 11:26:40 +09:00
barsa
8d9c954230 refactor: Remove AccountRouteGuard and adjust loading state handling in AppShell and views 2026-01-19 18:32:31 +09:00
barsa
69e07ecef2 feat: Set hasCheckedAuth to true upon successful login/signup 2026-01-19 17:29:07 +09:00
barsa
f3b41ca6f4 refactor: Simplify getStepIndex and getStatusCategory logic for clarity 2026-01-19 17:11:55 +09:00
barsa
dd8259e06f feat: Add SummaryStats component for displaying statistics in cards and inline formats
- Introduced SummaryStats component to standardize the display of statistics across the application.
- Updated SubscriptionsList and SupportCasesView to utilize the new SummaryStats component for better UI consistency.
- Refactored existing statistics display code into the new component, improving maintainability.

feat: Implement OrderDetailSkeleton and OrderProgressTimeline components

- Created OrderDetailSkeleton for loading states in order details view.
- Developed OrderProgressTimeline to visually represent the order status progression.
- Added skeleton loading states for both components to enhance user experience during data fetching.

feat: Enhance orders filtering with useOrdersFilter hook

- Implemented useOrdersFilter hook to manage order filtering logic, including search and status filters.
- Improved filtering capabilities for orders based on various criteria, enhancing user interaction.

feat: Add VpnPlansContent component for VPN service plans display

- Developed VpnPlansContent component to showcase available VPN plans and features.
- Integrated loading and error handling states for better user feedback.
- Included FAQ and How It Works sections to provide users with essential information about the VPN service.

chore: Update index files for new components

- Added exports for new components in their respective index files for easier imports.
2026-01-19 17:08:28 +09:00
barsa
2a40d84691 feat: implement ServicesOverviewContent component for consistent service listings
refactor: update AccountServicesOverview and PublicServicesOverview to use ServicesOverviewContent
fix: enhance case comment transformation with email-based customer identification
refactor: improve SupportCaseDetailView with message grouping and localStorage tracking
2026-01-19 16:29:26 +09:00
barsa
789e2d95a5 refactor: extract hooks and components from high-complexity views
Reduce complexity in ProfileContainer, AccountCheckoutContainer, and JapanAddressForm
by extracting reusable hooks, components, and utilities.

ProfileContainer (705 → 132 lines):
- Extract useProfileDataLoading hook for consolidated data loading
- Extract useVerificationFileUpload hook for file upload state
- Create VerificationCard component for verification UI
- Create ProfileLoadingSkeleton for loading state
- Update PersonalInfoCard with phone field and additional fields
- Update AddressCard to use Button component

AccountCheckoutContainer (382 → 303 lines):
- Extract useCheckoutEligibility hook for eligibility state
- Extract useCheckoutFormState and useCanSubmit hooks
- Extract useCheckoutToast hook for toast timing
- Create checkout-navigation utilities
- Create CheckoutErrorFallback component

JapanAddressForm (727 → 437 lines):
- Extract AnimatedSection, ProgressIndicator, BilingualValue components
- Extract useAddressCompletion hook for completion state
- Extract useJapanAddressForm hook for form state/handlers
- Create japan-address.constants and street-address.validation utilities
2026-01-19 15:48:47 +09:00
barsa
0a5a33da98 Refactor conditional statements for improved readability and consistency
- Updated various components to use parentheses in conditional statements for clarity.
- Refactored `renderSubCardHeader` to use an options object for better parameter handling.
- Enhanced error handling messages across multiple components to provide clearer feedback.
- Adjusted query string handling in routing to improve readability.
- Made minor adjustments to ensure consistent formatting and style across the codebase.
2026-01-19 15:14:39 +09:00
barsa
0a0e2c6508 feat: add SIM call history management service with import and retrieval functionalities
feat: implement unified SIM notification service for internal and customer notifications

feat: create SIM schedule service for date validation and resolution

feat: develop subscriptions orchestrator service for managing subscription operations and statistics
2026-01-19 14:20:14 +09:00
barsa
6a7ea6e057 feat: add services for SIM billing, details, top-up pricing, and usage management 2026-01-19 14:15:43 +09:00
barsa
be164cf287 feat: Implement Me Status Aggregator to consolidate user status data
feat: Add Fulfillment Side Effects Service for order processing notifications and cache management

feat: Create base validation interfaces and implement various order validators

feat: Develop Internet Order Validator to check eligibility and prevent duplicate services

feat: Implement SIM Order Validator to ensure residence card verification and activation fee presence

feat: Create SKU Validator to validate product SKUs against the Salesforce pricebook

feat: Implement User Mapping Validator to ensure necessary account mappings exist before ordering

feat: Enhance Users Service with methods for user profile management and summary retrieval
2026-01-19 11:25:30 +09:00
barsa
d3b94b1ed3 feat(auth): implement permission-based access control and centralized error handling
- Introduced PermissionsGuard to enforce permission checks on routes.
- Added RequirePermissions decorator for specifying required permissions on handlers.
- Created AUTH_ERRORS constants for consistent error messages across the auth module.
- Updated CsrfService to reduce CSRF token expiry time for enhanced security.
- Refactored auth cookie handling into utility functions for better maintainability.
- Enhanced TokenBlacklistService to default to fail-closed in production environments.
- Updated various DTOs and schemas for consistency and clarity.
- Removed legacy code and types related to SIM requests.
- Improved logging and error handling in GlobalAuthGuard.
- Added middleware for public path checks and optimistic authentication.
2026-01-19 10:40:50 +09:00
barsa
b52b2874d6 feat: add public VPN configuration page and view for unauthenticated users 2026-01-19 10:13:55 +09:00
tema
94b341dd93 Enhance Freebit Integration and Update UI Components
- Added FreebitTestTrackerService to FreebitClientService for improved API call tracking.
- Updated Freebit module to include the new test tracker service.
- Refactored HowItWorksSection and PublicInternetPlans to enhance user guidance with clearer steps and improved styling.
- Introduced a new VpnHowItWorksSection to provide users with a simplified setup process for VPN services.
- Enhanced PublicOfferingCard and VpnPlanCard components with updated styles and additional feature highlights for better user engagement.
2026-01-17 18:47:13 +09:00
tema
ab3561ba5c Enhance Support & Contact Page and Navigation
- Updated the Public Contact Page to include a combined FAQ section, improving user assistance and engagement.
- Renamed the Public Support Page to Public Help Page, redirecting to the updated contact page for better user flow.
- Modified SiteFooter and PublicShell components to reflect updated navigation links, enhancing clarity and accessibility.
- Improved styling and layout for better visual consistency across the portal.
2026-01-16 18:52:05 +09:00
tema
933a461372 Refactor TV Services Page for Enhanced User Experience
- Introduced a service selection feature with dynamic pricing and channel listings for various TV services, improving user engagement and clarity.
- Updated the layout and styling for better visual consistency and responsiveness across different screen sizes.
- Enhanced the FAQ section for improved readability and user interaction.
- Removed deprecated components and streamlined the code for better maintainability.
2026-01-16 17:54:55 +09:00
tema
d4b34faeb4 Enhance Portal Metadata and CSP Configuration
- Updated metadata for various pages in the portal, improving SEO and user engagement with more descriptive titles and keywords.
- Added structured data for organization in the layout component to enhance search visibility.
- Configured Content Security Policy (CSP) to allow frame sources from Google, improving security and functionality for embedded content.
2026-01-16 17:19:46 +09:00
barsa
f4099ac81f feat(eslint): enforce BFF architecture rules for controllers and aggregators 2026-01-16 17:11:49 +09:00
barsa
975a11474a chore(lint): add BFF architecture enforcement rules
Add ESLint rules to enforce ADR-007 service classification patterns:
- Controllers must import integration facades, not services (warn level)
- Aggregators must be read-only (no mutation methods)

Rules reference docs/decisions/007-service-classification.md and will
help catch architectural violations during code review.

Note: Set to warn for incremental adoption as some existing violations
need to be fixed (billing controller, address controller).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 18:57:00 +09:00
barsa
b885e9c34b docs: add ADR-007 for service classification patterns
Document the architectural decision for classifying BFF services:
- Facades: unified entry points for integration subsystems
- Orchestrators: coordinate workflows across multiple systems
- Aggregators: read-only data composition from multiple sources
- Services: single-responsibility operations

Includes dependency rules, naming conventions, and implementation examples.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 18:53:37 +09:00
barsa
a23a5593f7 refactor(bff): restructure service architecture with clearer naming conventions
- Rename integration orchestrators to facades:
  - WhmcsConnectionOrchestratorService → WhmcsConnectionFacade
  - FreebitOperationsService → FreebitFacade
  - SalesforceService → SalesforceFacade

- Rename module orchestrator:
  - SimOrchestratorService → SimOrchestrator

- Rename aggregators for clarity:
  - MeStatusService → MeStatusAggregator
  - UserProfileService → UserProfileAggregator

- Move integration facades to dedicated facades/ folders:
  - whmcs/facades/whmcs.facade.ts
  - salesforce/facades/salesforce.facade.ts
  - freebit/facades/freebit.facade.ts

This establishes clearer architectural boundaries between:
- Facades: unified entry points for integration subsystems
- Orchestrators: coordinate workflows across multiple services
- Aggregators: read-only data composition from multiple sources

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 18:50:52 +09:00
barsa
18360416a3 feat(workflow): introduce Workflow Module and Case Manager for internal case handling
- Added WorkflowModule to manage internal workflow operations.
- Implemented WorkflowCaseManager for creating various types of internal cases (e.g., order placements, cancellations, ID verifications).
- Integrated WorkflowCaseManager into existing services for handling internet and SIM cancellations, eligibility checks, and ID verification submissions.
- Enhanced error handling and logging for case creation processes.
- Introduced CacheCoordinatorService for coordinating multiple cache invalidation operations with error aggregation.
- Updated relevant modules to include WorkflowModule and refactored services to utilize the new WorkflowCaseManager.
- Improved UI components in the eligibility check process for better user experience.
2026-01-15 18:15:51 +09:00
barsa
1294375205 feat: implement InlineGetStartedSection for email-first registration flow on service pages 2026-01-15 17:33:23 +09:00
barsa
7bcd7fa10d refactor: remove unused DTOs and guards from auth and billing controllers 2026-01-15 16:41:58 +09:00
barsa
26502b4356 feat: add architecture decision records for key design choices 2026-01-15 16:31:48 +09:00
barsa
37ef51cc82 chore: update repository structure documentation for clarity and organization 2026-01-15 16:31:15 +09:00
barsa
aa77f23d85 Refactor conditional rendering and improve code readability across multiple components
- Updated conditional rendering syntax in CheckoutStatusBanners, IdentityVerificationSection, and other components for consistency.
- Removed unused quick eligibility and maybe later API functions from get-started API.
- Enhanced error handling messages in various subscription views.
- Updated documentation to reflect changes in eligibility check flow.
- Cleaned up unused fields in Salesforce mapping and raw types.
2026-01-15 16:11:11 +09:00
barsa
a01361bb89 Enhance JapanAddressForm with 2026-01-15 14:38:25 +09:00