506 Commits

Author SHA1 Message Date
Temuulen Ankhbayar
5c67fc34ea fix: resolve Order Activation Flow issues
- Fix SF Order locking by deferring Status change to final step
  - executeSfActivatedUpdate now only sets Activation_Status__c
  - executeSfRegistrationComplete sets Status: Processed atomically with WHMCS info

- Add WHMCS custom fields update step (whmcs_custom_fields)
  - AddOrder API expects field IDs, UpdateClientProduct accepts field names
  - New step updates SIM Number, Serial Number, EID after order acceptance

- Add Opportunity WH_Registeration__c field update
  - Sets productselect={serviceId} for WHMCS linking

- Add SIM Inventory assignment fields
  - Assigned_Account__c, Assigned_Order__c, SIM_Type__c now populated

- Remove PA05-18 Semi-Black SIM registration (only Black SIMs used)
  - Changed to direct PA02-01 call with createType=new

- Fix me-status to check for Status: Processed instead of Activated

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 15:38:59 +09:00
Temuuleenn
df742e50bc fix: resolve BFF TypeScript errors and improve mobile UX
BFF fixes:
- Fix pino-http type import by using Params from nestjs-pino
- Use Prisma-generated AuditAction enum instead of local duplicate
- Add null check for sfAccountId in mapping mapper

Portal mobile UX improvements:
- DataTable: Add responsive card view for mobile with stacked layout
- Header: Increase touch targets to 44px minimum, better spacing
- PageLayout: Optimize padding and make breadcrumbs scrollable
- PublicShell: Add iOS safe area support, slide animation, language
  switcher and sign-in button visible in mobile header

Also removes "Trusted by Leading Companies" section from AboutUsView.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 18:29:55 +09:00
barsa
4c724da7ae feat: implement trusted device functionality for enhanced login experience 2026-02-03 19:21:48 +09:00
barsa
60849b59a8 chore: update dependencies and fix lint errors
- Update pnpm 10.25.0 → 10.28.2
- Update all packages to latest versions (Next.js, React, NestJS, Prisma, etc.)
- Fix 36 nested ternary lint errors (unicorn/no-nested-ternary)
- Add security overrides for lodash and hono transitive deps
- Change pinned versions to use caret (^) for auto-updates
- Update catalog versions (@types/node, typescript, zod)
- Resolve all 12 security vulnerabilities
2026-02-03 18:46:51 +09:00
barsa
70f65cedaa chore: remove IDE artifacts and update gitignore
- Remove .cursor/ folder from tracking (plans, worktrees, rules)
- Remove sim-api-test-log.csv from tracking
- Add .cursor/ and *.csv to gitignore
2026-02-03 18:35:15 +09:00
barsa
b957877c6f chore: ignore all csv files 2026-02-03 18:32:16 +09:00
barsa
7659f0d3ac chore: add test artifact csv to gitignore 2026-02-03 18:30:15 +09:00
barsa
7abd433d95 Refactor conditional rendering and improve code readability across multiple components
- Simplified conditional rendering in OrderSummary, ProductCard, InstallationOptions, InternetOfferingCard, DeviceCompatibility, SimPlansContent, and other components by removing unnecessary parentheses.
- Enhanced clarity in the use of ternary operators for better maintainability.
- Updated documentation to reflect changes in development setup for skipping OTP verification during login.
- Removed outdated orchestrator refactoring plan document.
- Added new environment variable for skipping OTP verification in development.
- Minor adjustments in domain contracts and mappers for consistency in conditional checks.
2026-02-03 18:28:38 +09:00
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