615 Commits

Author SHA1 Message Date
Temuulen Ankhbayar
d7efede122 refactor: complete shadcn/ui migration and unify raw HTML with component library
Some checks failed
Pull Request Checks / Code Quality & Security (push) Has been cancelled
Security Audit / Security Vulnerability Audit (push) Has been cancelled
Security Audit / Dependency Review (push) Has been cancelled
Security Audit / CodeQL Security Analysis (push) Has been cancelled
Security Audit / Check Outdated Dependencies (push) Has been cancelled
- Migrate all molecule components (DataTable, PaginationBar, FilterDropdown,
  AlertBanner, FormField, SectionCard, SubCard, MetricCard, AnimatedCard,
  OtpInput) to shadcn/ui primitives with legacy backups and comparison stories
- Install 24 shadcn/ui primitives (accordion, alert, badge, button, card,
  checkbox, collapsible, dialog, dropdown-menu, input-otp, input, label,
  pagination, popover, radio-group, select, separator, sheet, skeleton,
  table, tabs, toggle-group, toggle, tooltip) with barrel exports
- Replace 69 raw HTML elements across all features with shadcn components:
  35+ <button> → Button, 5 <select> → Select, 15+ <label> → Label,
  6 <input type=checkbox> → Checkbox, 7 <input type=radio> → RadioGroup
- Add TextRotate animation component and integrate into hero section
  with rotating service names (Internet, Phone Plans, VPN, IT Support, Business)
- Add destructive color token aliases for error state consistency
- Add CLAUDE.md rules for shadcn migration process

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 17:21:36 +09:00
Temuulen Ankhbayar
c8d0dfe230 refactor: migrate atom components to shadcn/ui primitives
Some checks failed
Pull Request Checks / Code Quality & Security (push) Has been cancelled
Security Audit / Security Vulnerability Audit (push) Has been cancelled
Security Audit / Dependency Review (push) Has been cancelled
Security Audit / CodeQL Security Analysis (push) Has been cancelled
Security Audit / Check Outdated Dependencies (push) Has been cancelled
Introduce a dual-layer component architecture:
- `components/ui/` contains raw shadcn/ui primitives (button, badge, input,
  checkbox, label, skeleton, alert, toggle, toggle-group, input-otp)
- `components/atoms/` wraps these primitives with enhanced APIs (loading
  states, semantic variants, polymorphic props) for backward compatibility

Migrated atoms: badge, button, checkbox, input, label, skeleton,
view-toggle, error-message, inline-toast, error-state.

Legacy backups preserved as .legacy.tsx files for reference.
Added barrel export for ui/ and updated components/index.ts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 13:25:18 +09:00
Temuulen Ankhbayar
cd9705d6b6 content: update hero section heading and tagline
Some checks failed
Pull Request Checks / Code Quality & Security (push) Has been cancelled
Security Audit / Security Vulnerability Audit (push) Has been cancelled
Security Audit / Dependency Review (push) Has been cancelled
Security Audit / CodeQL Security Analysis (push) Has been cancelled
Security Audit / Check Outdated Dependencies (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 13:01:41 +09:00
5251f15e56 Revert "test: webhook deploy"
Some checks failed
Pull Request Checks / Code Quality & Security (push) Has been cancelled
Security Audit / Security Vulnerability Audit (push) Has been cancelled
Security Audit / Dependency Review (push) Has been cancelled
Security Audit / CodeQL Security Analysis (push) Has been cancelled
Security Audit / Check Outdated Dependencies (push) Has been cancelled
This reverts commit 005514cc8cbeade026c58351a6b27b3128c0c43e.
2026-03-09 11:35:01 +09:00
005514cc8c test: webhook deploy
Some checks failed
Pull Request Checks / Code Quality & Security (push) Has been cancelled
Security Audit / Security Vulnerability Audit (push) Has been cancelled
Security Audit / Dependency Review (push) Has been cancelled
Security Audit / CodeQL Security Analysis (push) Has been cancelled
Security Audit / Check Outdated Dependencies (push) Has been cancelled
2026-03-09 11:34:00 +09:00
Temuulen Ankhbayar
afc18988cd feat: trigger Freebit APIs on "Processed" status instead of "Approved"
Some checks failed
Pull Request Checks / Code Quality & Security (push) Has been cancelled
Security Audit / Security Vulnerability Audit (push) Has been cancelled
Security Audit / Dependency Review (push) Has been cancelled
Security Audit / CodeQL Security Analysis (push) Has been cancelled
Security Audit / Check Outdated Dependencies (push) Has been cancelled
- CDC subscriber now listens for Status="Processed" to fire SIM APIs
- On API error, order Status reverts to "Approved" for retry
- Provisioning processor validates "Processed" for Physical SIM flow

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 18:19:53 +09:00
Temuulen Ankhbayar
e7d1371c48 fix: resolve all TypeScript errors in story files
Fix type mismatches, array access assertions, renamed conflicting
Error story exports, and corrected mock data to match domain types.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:47:38 +09:00
Temuulen Ankhbayar
57918a6d8c fix: remove storybook route handler that may cause build failures
Storybook static files remain in public/ but are served directly
by the web server rather than through a Next.js route handler.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:36:41 +09:00
Temuulen Ankhbayar
e635771615 chore: trigger redeploy
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:27:56 +09:00
Temuulen Ankhbayar
58a27fd9d3 Revert "revert: remove storybook static build and route handler from production"
This reverts commit 22ed3a409e53979eceea9361b20d87aefe5d497b.
2026-03-07 17:04:51 +09:00
Temuulen Ankhbayar
22ed3a409e revert: remove storybook static build and route handler from production
Storybook is now local-only (port 6006). Static build output
is gitignored to avoid bloating the repo.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 16:46:04 +09:00
Temuulen Ankhbayar
1a6242e642 feat: serve Storybook via Next.js catch-all route handler
Serves static storybook files from public/storybook/ through
a Next.js route at /storybook, avoiding the need for separate
nginx or server configuration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 15:41:32 +09:00
Temuulen Ankhbayar
e704488eb9 chore: add Storybook static build output
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 15:25:18 +09:00
Temuulen Ankhbayar
4c31c448f3 feat: add portal UI components and stories
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 15:25:01 +09:00
Temuulen Ankhbayar
74ee154669 feat: add Storybook configuration and mocks
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 15:22:18 +09:00
Temuulen Ankhbayar
17ec53e08f chore: update config, dependencies, and lint-staged exclusions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 15:22:12 +09:00
Temuulen Ankhbayar
1fa8c6b5ad fix: scope ActivationStep validation to current step only
The "Continue to Add-ons" button was unresponsive when selecting
scheduled activation because validate() ran full-form schema validation
(all steps), silently failing on incomplete fields from other steps.
Now only checks that a date is selected for scheduled activation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 13:24:38 +09:00
Temuulen Ankhbayar
1ef2c5e125 fix: resolve SF field type mismatches, date format conversions, and gender mapping
- MNP_Application__c: change Zod type from z.string() to z.coerce.boolean()
  to match Salesforce Checkbox field type
- Date fields (mnpExpiry, portingDateOfBirth, scheduledAt): convert
  YYYY-MM-DD back to YYYYMMDD when reading from SF for Freebit API
- Gender mapping: handle full SF picklist values (Male/Female/Corporate)
  not just legacy M/F codes, for both Freebit activation and PA05-05
- MNP reservation number: add max(10) per SF Text(10) field limit
- Porting name fields: add max(255) to match SF Text(255) limits

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 11:38:57 +09:00
Temuulen Ankhbayar
9ae3d5e9c7 fix: enforce 32-digit numeric EID validation with inline user feedback
EID input now strips non-numeric characters, shows a digit counter warning
while typing, and enforces exactly 32 digits via Zod schemas across domain,
order configurations, and order selections layers. Also installs missing
input-otp dependency.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 11:38:57 +09:00
barsa
18b4c515a4 feat: enhance Salesforce account handling and OTP components
- Updated SalesforceAccountService to include dynamic portal source field in SOQL query for improved account retrieval.
- Modified VerificationWorkflowService to conditionally parse addresses based on portal source eligibility.
- Refactored OTP components to utilize OtpExpiryDisplay for better user feedback on expiration.
- Cleaned up unused code in LoginOtpStep and OtpStep components for improved clarity and performance.
- Enhanced CompleteAccountStep to remove unnecessary address prefill logic, streamlining the user experience.
2026-03-07 11:37:57 +09:00
barsa
05d3467efc feat: enhance address handling and OTP verification flow
- Introduced parsing logic for Salesforce addresses in VerificationWorkflowService to improve address handling.
- Updated CompleteAccountStep and VerificationStep components to utilize new address structure and improve user experience.
- Enhanced OTP input handling in OtpStep and added expiry timer functionality for better user feedback.
- Refactored PrefilledUserInfo and AddressFields components to accommodate new address data structure.
- Added error handling improvements and ensured consistent state management across verification steps.
2026-03-07 11:12:38 +09:00
Temuulen Ankhbayar
454fb29c85 fix: reset order config state when selecting a new plan and validate MNP phone length
Order wizard was skipping steps (jumping to add-ons) due to stale currentStep
persisting in localStorage from previous orders. Reset store on plan selection
and exclude currentStep from persistence. Also add max(11) validation on MNP
phone number to prevent Salesforce STRING_TOO_LONG errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 11:07:51 +09:00
barsa
1610e436a5 feat: integrate input-otp library and enhance OTP input handling
- Added input-otp library to streamline OTP input functionality.
- Refactored OtpInput component to utilize InputOTP for improved user experience and mobile SMS autofill.
- Enhanced LoginOtpStep and VerificationStep components to handle OTP input errors and clear states effectively.
- Updated global styles to include animations for OTP caret, improving visual feedback during input.
- Made minor adjustments to LoginForm and OtpStep components for better error handling and user interaction.
2026-03-06 18:56:16 +09:00
barsa
7d290c814d feat: enhance authentication and billing components for improved user experience
- Added rate limiting to the AuthController to prevent abuse of authentication endpoints.
- Updated OtpInput component to simplify completion logic for better usability.
- Refactored ForgotPasswordView to improve email confirmation handling and user feedback.
- Enhanced PaymentMethods components with refresh functionality for better payment management.
- Made minor UI adjustments across various components for improved consistency and clarity.
2026-03-06 17:52:57 +09:00
barsa
de5a210e6f refactor: update EmptyState and PublicOfferingCard components for improved UI consistency
- Enhanced the EmptyState component by adjusting button properties to include left icons for better visual alignment.
- Refactored the PublicOfferingCard component to simplify the layout of pricing notes, improving readability and consistency in design.
- Made minor adjustments to spacing and layout properties across both components to enhance overall user experience.
2026-03-06 16:50:40 +09:00
barsa
88ca636b59 feat: enhance animation capabilities and refactor components for improved user experience
- Introduced new motion variants in AnimatedContainer for better animation effects across the portal.
- Updated various components to utilize the new motion variants, ensuring consistent animation behavior.
- Refactored AddressCard, ProgressIndicator, and other components for improved readability and layout.
- Made minor adjustments to conditional rendering in components for better code clarity.
- Enhanced the DashboardView and other views to leverage the new animation features, improving overall user interaction.
2026-03-06 16:26:17 +09:00
barsa
4ee9cb526b feat: implement portaled NotificationBell in AppShell for improved user experience
- Introduced PortaledNotificationBell component to render the NotificationBell in the PageLayout header, ensuring it remains persistent across page navigations.
- Updated AppShell to utilize the new portaled NotificationBell, enhancing the layout and user interaction.
- Adjusted PageLayout to accommodate the new notification rendering logic, improving overall UI consistency.
- Made minor adjustments to various components for better alignment and spacing.
2026-03-06 15:42:25 +09:00
barsa
7502068ea9 refactor: remove unused billing and payment components, enhance animation capabilities
- Deleted loading and page components for invoices and payment methods to streamline the billing section.
- Updated AnimatedContainer, InlineToast, and other components to utilize framer-motion for improved animations.
- Refactored AppShell and Sidebar components to enhance layout and integrate new animation features.
- Adjusted various sections across the portal to ensure consistent animation behavior and visual appeal.
2026-03-06 14:48:34 +09:00
barsa
be3388cf58 refactor: enhance AppShell layout and remove Header component
- Replaced the Header component with a mobile-only hamburger menu in the AppShell for improved navigation on smaller screens.
- Integrated user profile information directly into the Sidebar for better accessibility.
- Removed the Settings link from the navigation to streamline the user experience.
- Updated Sidebar and NotificationBell components to accommodate new user profile display logic.
2026-03-06 14:16:43 +09:00
barsa
b3cb1064d8 chore: update pnpm-lock.yaml and add framer-motion dependency
- Updated lockfileVersion in pnpm-lock.yaml for consistency.
- Added framer-motion dependency to the portal for enhanced animation capabilities.
- Updated image assets and made minor adjustments to global styles for improved UI consistency.
2026-03-06 10:45:51 +09:00
barsa
cab58d1c5b refactor: streamline component layouts and enhance navigation
- Updated the AppShell and Sidebar components for improved layout and spacing.
- Replaced font colors in the Logo component for better visibility.
- Adjusted the PageLayout component to utilize backLink props instead of breadcrumbs for navigation consistency.
- Removed unnecessary description props from multiple PageLayout instances across various views to simplify the codebase.
- Introduced SectionCard component in OrderDetail for better organization of billing information.
- Enhanced utility styles in CSS for improved typography and layout consistency.
2026-03-06 10:45:51 +09:00
barsa
57f2c543d1 style: update typography and layout across components
- Replaced font references in globals.css to use DM Sans and JetBrains Mono for improved typography consistency.
- Adjusted various components to utilize the new font styles, enhancing visual hierarchy and readability.
- Updated layout properties in AppShell and Sidebar for better alignment and spacing.
- Enhanced button styles to include a new subtle variant for improved UI flexibility.
- Refactored SearchFilterBar to support active filter display, improving user interaction experience.
- Made minor adjustments to the DashboardView and landing page components for better visual consistency.
2026-03-06 10:45:51 +09:00
f6329bbe3b Revert "fix: auto-submit OTP code on completion in get-started verification step"
This reverts commit 9754c73b64ef04f732c66bbabb59e1535b568ad5.
2026-03-05 18:34:49 +09:00
4665394bd4 Revert "fix: OTP auto-submit not firing when typing manually"
This reverts commit 6be28b4fb5df366ac5aec89121130f03c8d37401.
2026-03-05 18:34:49 +09:00
6be28b4fb5 fix: OTP auto-submit not firing when typing manually
String.includes("") always returns true in JavaScript, so the condition
`!newValue.includes("")` was always false, preventing onComplete from
ever firing on manual input. Only paste worked because it uses a
separate code path. The length check alone is sufficient since empty
digits produce a shorter joined string.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 18:31:19 +09:00
9754c73b64 fix: auto-submit OTP code on completion in get-started verification step
Add onComplete handler to OtpInput so the verification code auto-submits
when all 6 digits are entered, matching the existing behavior in
LoginOtpStep and OtpStep components.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 18:19:45 +09:00
barsa
35ba8ab26a refactor: optimize billing controller and enhance carousel functionality
- Updated BillingController to use Promise.all for concurrent fetching of payment methods and WHMCS client ID, improving performance.
- Modified package.json in the portal to enable turbopack for faster development builds.
- Removed unused useInvoicesFilter hook from the billing feature, streamlining the codebase.
- Enhanced useCarousel hook to support auto-play functionality and pause on user interaction, improving user experience in the landing page carousel.
2026-03-05 16:46:45 +09:00
barsa
0663d1ce6c refactor: remove subscription invoice handling from BFF and portal
- Deleted subscription invoice-related methods and cache configurations from WhmcsCacheService and WhmcsInvoiceService.
- Updated BillingController to utilize WhmcsPaymentService and WhmcsSsoService directly, removing the BillingOrchestrator.
- Simplified SubscriptionDetail and InvoicesList components by eliminating unnecessary invoice loading logic.
- Adjusted API queries and hooks to streamline invoice data fetching, enhancing performance and maintainability.
2026-03-05 16:42:07 +09:00
barsa
3d9fa2ef0f docs: add invoice optimization implementation plan
9-task plan covering BFF cleanup, portal simplification, and removal
of N+1 subscription invoice scanning.
2026-03-05 16:32:11 +09:00
barsa
4ebfc4c254 docs: add invoice optimization design plan
Remove N+1 subscription invoice scanning, clean up billing service layer,
and simplify InvoicesList component to single-purpose.
2026-03-05 16:27:58 +09:00
barsa
9145b4aaed style: standardize conditional rendering syntax across components
- Updated multiple components to use consistent conditional rendering syntax by adding parentheses around conditions.
- Enhanced readability and maintainability of the code in components such as OtpInput, AddressCard, and others.
- Improved overall code quality and developer experience through uniformity in the codebase.
2026-03-05 15:52:26 +09:00
barsa
0caf536ac2 style: standardize conditional rendering syntax across components
- Updated multiple components to use consistent conditional rendering syntax by adding parentheses around conditions.
- Enhanced readability and maintainability of the code in components such as OtpInput, AppShell, AddressCard, and others.
- Ensured uniformity in the codebase, improving overall code quality and developer experience.
2026-03-05 15:31:47 +09:00
barsa
cde418b81e refactor: enhance infinite carousel functionality and styling
- Improved the useResponsiveCardWidth hook to prevent unnecessary state updates by tracking previous width.
- Introduced a new useCarouselInput hook to handle touch and keyboard navigation, streamlining event management.
- Updated the useInfiniteCarousel hook to utilize a ref for total items, enhancing performance and reliability.
- Enhanced styling for the SimPlansContent component, including improved layout and hover effects for better user experience.
- Added slide transition animations for tab changes in the PublicInternetPlans view, improving visual feedback during interactions.
- Updated internet tier descriptions and features for clarity and consistency across the application.
2026-03-05 11:18:34 +09:00
barsa
7125f79baa refactor: update layout and components for improved consistency and accessibility
- Replaced the "About us.png" image with a new "about-us.png" for better naming consistency.
- Updated various sections across the landing page to use a full-bleed layout for a more modern design.
- Refactored ServiceCard component to conditionally render as a link or div based on the presence of an href prop, enhancing flexibility.
- Introduced a new CollapsibleSection component for better organization of content in service-related sections.
- Enhanced styling and structure in multiple components, including ContactSection, CTABanner, and TrustStrip, to improve visual hierarchy and user experience.
2026-03-05 10:05:30 +09:00
barsa
48eb8c8725 style: enhance layout and design of service components
- Updated ServicesPage layout by removing unnecessary padding for a cleaner appearance.
- Added a "Contact" link to the PublicShell navigation for improved accessibility.
- Refined AboutUsView by restructuring service and value data for better clarity and organization.
- Improved styling consistency across various service components, including ServiceCTA, ServiceFAQ, and ServiceHighlights, by adjusting spacing and typography.
- Enhanced InternetOfferingCard and PublicOfferingCard with updated tier styles and visual hierarchy for better user experience.
2026-03-04 18:57:30 +09:00
barsa
d5294dc580 fix: improve infinite carousel navigation and transition handling
- Updated the track index logic to prevent navigation while at clone positions, ensuring smoother transitions.
- Enhanced the handleTransitionEnd function to only respond to the track's own transform transitions, improving event handling accuracy.
- Adjusted dependencies in useCallback hooks for better performance and reliability.
2026-03-04 18:39:15 +09:00
barsa
a0f97cdec4 style: update background gradients and refactor component references
- Replaced oklch color definitions with color-mix for improved gradient consistency across OnsiteSupportContent, HeroSection, and ServicesOverviewContent components.
- Refactored ref attributes in multiple sections to remove unnecessary type assertions for better type safety.
- Enhanced ServicesCarousel component by introducing a new accent color system for better visual clarity and consistency.
2026-03-04 17:13:07 +09:00
barsa
a1431cec09 refactor: update support service and contact form components
- Changed the subject line in the SupportService to include the contact name for better context.
- Removed the subject field from the ContactForm state and schema, streamlining the form.
- Updated the HeroSection text to better reflect the services offered, enhancing clarity and appeal.
2026-03-04 16:16:14 +09:00
barsa
408f99ae3c fix: make phone numbers clickable tel: links in contact section 2026-03-04 15:21:48 +09:00
barsa
c07915f3b4 style: tighten support page contact section spacing 2026-03-04 15:12:36 +09:00