From d313ba0c2ce6d10c23e3a8d54fd8a9296bc93cd3 Mon Sep 17 00:00:00 2001 From: barsa Date: Wed, 24 Dec 2025 19:03:01 +0900 Subject: [PATCH] Enhance Internet Offering Components and Improve User Guidance - Updated InternetImportantNotes component for better clarity and user understanding. - Simplified InternetOfferingCard layout by removing unused props, enhancing usability. - Improved PlanComparisonGuide with collapsible sections for easier navigation. - Enhanced PublicOfferingCard to support custom call-to-action labels and click handlers. - Updated SimTypeSelector with additional EID information and verification notices for improved user guidance. - Refined PublicInternetPlans and PublicSimPlans views to highlight new services and enhance overall presentation. --- .../src/app/(public)/(site)/about/page.tsx | 11 + .../(site)/services/business/page.tsx | 97 +++ .../services/internet/configure/page.tsx | 17 + .../(site)/services/internet/page.tsx | 17 + .../(public)/(site)/services/onsite/page.tsx | 147 ++++ .../src/app/(public)/(site)/services/page.tsx | 149 ++++ .../(site)/services/sim/configure/page.tsx | 17 + .../app/(public)/(site)/services/sim/page.tsx | 17 + .../app/(public)/(site)/services/tv/page.tsx | 729 ++++++++++++++++++ .../app/(public)/(site)/services/vpn/page.tsx | 17 + .../my-services/[id]/internet/cancel/page.tsx | 5 + .../app/account/my-services/[id]/loading.tsx | 19 + .../src/app/account/my-services/[id]/page.tsx | 5 + .../[id]/sim/call-history/page.tsx | 5 + .../my-services/[id]/sim/cancel/page.tsx | 5 + .../my-services/[id]/sim/change-plan/page.tsx | 5 + .../my-services/[id]/sim/reissue/page.tsx | 5 + .../my-services/[id]/sim/top-up/page.tsx | 5 + .../src/app/account/my-services/loading.tsx | 16 + .../src/app/account/my-services/page.tsx | 5 + .../services/internet/configure/page.tsx | 5 + .../app/account/services/internet/page.tsx | 5 + .../src/app/account/services/layout.tsx | 5 + .../account/services/sim/configure/page.tsx | 5 + .../src/app/account/services/sim/page.tsx | 5 + .../src/app/account/services/vpn/page.tsx | 5 + .../organisms/SiteFooter/SiteFooter.tsx | 124 +++ .../components/organisms/SiteFooter/index.ts | 1 + .../components/templates/PublicShell/index.ts | 2 + ...RedirectAuthenticatedToAccountServices.tsx | 36 + .../catalog/hooks/useServicesBasePath.ts | 17 + .../features/marketing/views/AboutUsView.tsx | 204 +++++ 32 files changed, 1707 insertions(+) create mode 100644 apps/portal/src/app/(public)/(site)/about/page.tsx create mode 100644 apps/portal/src/app/(public)/(site)/services/business/page.tsx create mode 100644 apps/portal/src/app/(public)/(site)/services/internet/configure/page.tsx create mode 100644 apps/portal/src/app/(public)/(site)/services/internet/page.tsx create mode 100644 apps/portal/src/app/(public)/(site)/services/onsite/page.tsx create mode 100644 apps/portal/src/app/(public)/(site)/services/page.tsx create mode 100644 apps/portal/src/app/(public)/(site)/services/sim/configure/page.tsx create mode 100644 apps/portal/src/app/(public)/(site)/services/sim/page.tsx create mode 100644 apps/portal/src/app/(public)/(site)/services/tv/page.tsx create mode 100644 apps/portal/src/app/(public)/(site)/services/vpn/page.tsx create mode 100644 apps/portal/src/app/account/my-services/[id]/internet/cancel/page.tsx create mode 100644 apps/portal/src/app/account/my-services/[id]/loading.tsx create mode 100644 apps/portal/src/app/account/my-services/[id]/page.tsx create mode 100644 apps/portal/src/app/account/my-services/[id]/sim/call-history/page.tsx create mode 100644 apps/portal/src/app/account/my-services/[id]/sim/cancel/page.tsx create mode 100644 apps/portal/src/app/account/my-services/[id]/sim/change-plan/page.tsx create mode 100644 apps/portal/src/app/account/my-services/[id]/sim/reissue/page.tsx create mode 100644 apps/portal/src/app/account/my-services/[id]/sim/top-up/page.tsx create mode 100644 apps/portal/src/app/account/my-services/loading.tsx create mode 100644 apps/portal/src/app/account/my-services/page.tsx create mode 100644 apps/portal/src/app/account/services/internet/configure/page.tsx create mode 100644 apps/portal/src/app/account/services/internet/page.tsx create mode 100644 apps/portal/src/app/account/services/layout.tsx create mode 100644 apps/portal/src/app/account/services/sim/configure/page.tsx create mode 100644 apps/portal/src/app/account/services/sim/page.tsx create mode 100644 apps/portal/src/app/account/services/vpn/page.tsx create mode 100644 apps/portal/src/components/organisms/SiteFooter/SiteFooter.tsx create mode 100644 apps/portal/src/components/organisms/SiteFooter/index.ts create mode 100644 apps/portal/src/components/templates/PublicShell/index.ts create mode 100644 apps/portal/src/features/catalog/components/common/RedirectAuthenticatedToAccountServices.tsx create mode 100644 apps/portal/src/features/catalog/hooks/useServicesBasePath.ts create mode 100644 apps/portal/src/features/marketing/views/AboutUsView.tsx diff --git a/apps/portal/src/app/(public)/(site)/about/page.tsx b/apps/portal/src/app/(public)/(site)/about/page.tsx new file mode 100644 index 00000000..f95bf359 --- /dev/null +++ b/apps/portal/src/app/(public)/(site)/about/page.tsx @@ -0,0 +1,11 @@ +/** + * Public About Page + * + * Corporate profile and company information. + */ + +import { AboutUsView } from "@/features/marketing/views/AboutUsView"; + +export default function AboutPage() { + return ; +} diff --git a/apps/portal/src/app/(public)/(site)/services/business/page.tsx b/apps/portal/src/app/(public)/(site)/services/business/page.tsx new file mode 100644 index 00000000..257b79fc --- /dev/null +++ b/apps/portal/src/app/(public)/(site)/services/business/page.tsx @@ -0,0 +1,97 @@ +import { Button } from "@/components/atoms"; +import { + ServerStackIcon, + ComputerDesktopIcon, + WrenchScrewdriverIcon, + GlobeAltIcon, +} from "@heroicons/react/24/outline"; + +export default function BusinessSolutionsPage() { + return ( +
+ {/* Header */} +
+

+ Business Solutions +

+

+ We provide comprehensive business solutions including DIA (Dedicated Internet Access) with + SLA and bandwidth guarantees to ensure your business stays connected. +

+
+ +
+ {/* Office LAN Setup */} +
+
+ +
+

Office LAN Setup

+

+ Whether you are upgrading your current LAN for greater bandwidth and reliability or + installing a new LAN for a new facility, Assist Solutions will ensure you make informed + decisions. From cable installation and data switches to configuration of routers and + firewalls, we help you determine a cost-effective and reliable way to do this. +

+
+ + {/* Onsite & Remote Tech Support */} +
+
+ +
+

Onsite & Remote Tech Support

+

+ We provide onsite and remote support to make sure your network is up and running as + quickly as possible. Assist Solutions can help with your IT needs so you can grow your + business with ease and stability. From computer networks to phone and printer + installations, our team will complete your project to your highest satisfaction. +

+
+ + {/* Dedicated Internet Access (DIA) */} +
+
+ +
+

+ Dedicated Internet Access (DIA) +

+

+ Dedicated Internet Access is designed for businesses that need greater Internet capacity + and a dedicated connection between their existing Local Area Network (LAN) and the + public Internet. We are able to provide a bandwidth guarantee with a service level + agreement depending on what is most suitable for your business. +

+
+ + {/* Data Center Service */} +
+
+ +
+

Data Center Service

+

+ Our Data Center Service provides high-quality data center facilities in Equinix (Tokyo + Tennozu Isle) and GDC (Gotenyama) and many value-added network services to help + establish stable infrastructure platforms. This improves both reliability and efficiency + in your company. +

+
+
+ + {/* CTA */} +
+

+ Interested in our Business Solutions? +

+

+ Contact us today to discuss your requirements and how we can help your business grow. +

+ +
+
+ ); +} diff --git a/apps/portal/src/app/(public)/(site)/services/internet/configure/page.tsx b/apps/portal/src/app/(public)/(site)/services/internet/configure/page.tsx new file mode 100644 index 00000000..fc4a373f --- /dev/null +++ b/apps/portal/src/app/(public)/(site)/services/internet/configure/page.tsx @@ -0,0 +1,17 @@ +/** + * Public Internet Configure Page + * + * Configure internet plan for unauthenticated users. + */ + +import { PublicInternetConfigureView } from "@/features/catalog/views/PublicInternetConfigure"; +import { RedirectAuthenticatedToAccountServices } from "@/features/catalog/components/common/RedirectAuthenticatedToAccountServices"; + +export default function PublicInternetConfigurePage() { + return ( + <> + + + + ); +} diff --git a/apps/portal/src/app/(public)/(site)/services/internet/page.tsx b/apps/portal/src/app/(public)/(site)/services/internet/page.tsx new file mode 100644 index 00000000..7d414020 --- /dev/null +++ b/apps/portal/src/app/(public)/(site)/services/internet/page.tsx @@ -0,0 +1,17 @@ +/** + * Public Internet Plans Page + * + * Displays internet plans for unauthenticated users. + */ + +import { PublicInternetPlansView } from "@/features/catalog/views/PublicInternetPlans"; +import { RedirectAuthenticatedToAccountServices } from "@/features/catalog/components/common/RedirectAuthenticatedToAccountServices"; + +export default function PublicInternetPlansPage() { + return ( + <> + + + + ); +} diff --git a/apps/portal/src/app/(public)/(site)/services/onsite/page.tsx b/apps/portal/src/app/(public)/(site)/services/onsite/page.tsx new file mode 100644 index 00000000..2aadbed2 --- /dev/null +++ b/apps/portal/src/app/(public)/(site)/services/onsite/page.tsx @@ -0,0 +1,147 @@ +import { Button } from "@/components/atoms"; +import { + UserGroupIcon, + ComputerDesktopIcon, + TvIcon, + ChatBubbleLeftRightIcon, +} from "@heroicons/react/24/outline"; + +export default function OnsiteSupportPage() { + return ( +
+ {/* Header */} +
+

+ Onsite Support +

+

+ We dispatch our skillful in-house tech staff to your residence or office for your needs. +

+
+ + {/* Main Services */} +
+
+

Need Our Technical Support?

+

+ We can provide you with on-site technical support service. If you would like for our + technicians to visit your residence and provide technical assistance, please let us + know. +

+

+ We also provide "Remote Access Services" which allows our technicians to do support via + Remote Access Software over the Internet connection to fix up the issue (depends on what + the issue is). +

+
+ +
+
+
+ +
+
+ + {/* Pricing Cards */} +
+ {/* Onsite Network & Computer Support */} +
+
+ +
+

+ Onsite Network & Computer Support +

+
+
Basic Service Fee
+
15,000 JPY
+
+
+ + {/* Remote Support */} +
+
+ +
+

+ Remote Network & Computer Support +

+
+
Basic Service Fee
+
5,000 JPY
+
+
+ + {/* Onsite TV Support */} +
+
+ +
+

Onsite TV Support Service

+
+
Basic Service Fee
+
15,000 JPY
+
+
+
+ + {/* FAQ Section */} +
+

+ Frequently Asked Questions +

+ +
+
+

+ My home requires multiple Wi-Fi routers. Would you be able to assist with this? +

+

+ Yes, the Assist Solutions technical team is able to visit your residence for device + set up including Wi-Fi routers, printers, Apple TVs etc. Our tech consulting team will + be able to make suggestions based on your residence layout and requirements. Please + contact us for a free consultation. +

+
+ +
+

+ I am already subscribed to a different Internet provider but require more Wi-Fi + coverage. Would I be able to just opt for the Onsite Support service without switching + over my entire home Internet service? +

+

+ Yes, we are able to offer the Onsite Support service as a standalone service. +

+
+ +
+

+ Do you offer this service outside of Tokyo? +

+
+

+ Our In-Home Technical Assistance service can be provided in Tokyo, Saitama and + Kanagawa prefecture. +

+

+ *Please note that this service may not available in some areas within the above + prefectures. For more information, please contact us. +

+
+
+
+
+ + {/* CTA */} +
+

Ready to get started?

+ +
+
+ ); +} diff --git a/apps/portal/src/app/(public)/(site)/services/page.tsx b/apps/portal/src/app/(public)/(site)/services/page.tsx new file mode 100644 index 00000000..04fb7f2c --- /dev/null +++ b/apps/portal/src/app/(public)/(site)/services/page.tsx @@ -0,0 +1,149 @@ +import Link from "next/link"; +import { + BuildingOfficeIcon, + WrenchScrewdriverIcon, + TvIcon, + ArrowRightIcon, + ServerIcon, + DevicePhoneMobileIcon, + ShieldCheckIcon, +} from "@heroicons/react/24/outline"; + +export default function ServicesPage() { + return ( +
+ {/* Header */} +
+

+ Our Services +

+

+ From high-speed internet to onsite support, we provide comprehensive solutions for your + home and business. +

+
+ +
+ {/* Internet */} + +
+
+ +
+

+ Internet +

+

+ NTT fiber with speeds up to 10Gbps and professional installation support. Fast and + reliable connectivity. +

+
+ View Plans{" "} + +
+
+ + + {/* SIM & eSIM */} + +
+
+ +
+

+ SIM & eSIM +

+

+ Data, voice & SMS on NTT Docomo's nationwide network. Available as physical SIM or + instant eSIM. +

+
+ View Plans{" "} + +
+
+ + + {/* VPN */} + +
+
+ +
+

+ VPN +

+

+ Access US/UK content with a pre-configured router. Easy plug & play setup for seamless + streaming. +

+
+ View Plans{" "} + +
+
+ + + {/* Business Solutions */} + +
+
+ +
+

+ Business Solutions +

+

+ Dedicated Internet Access (DIA), Office LAN setup, Data Center services, and + onsite/remote tech support. +

+
+ Learn more{" "} + +
+
+ + + {/* Onsite Support */} + +
+
+ +
+

+ Onsite Support +

+

+ Professional technical support at your residence or office. Network setup, device + configuration, and troubleshooting. +

+
+ Learn more{" "} + +
+
+ + + {/* TV Services */} + +
+
+ +
+

+ TV Services +

+

+ Satellite, Cable, and Optical Fiber TV services. We arrange subscriptions for major + Japanese TV providers. +

+
+ Learn more{" "} + +
+
+ +
+
+ ); +} diff --git a/apps/portal/src/app/(public)/(site)/services/sim/configure/page.tsx b/apps/portal/src/app/(public)/(site)/services/sim/configure/page.tsx new file mode 100644 index 00000000..09bf21fd --- /dev/null +++ b/apps/portal/src/app/(public)/(site)/services/sim/configure/page.tsx @@ -0,0 +1,17 @@ +/** + * Public SIM Configure Page + * + * Configure SIM plan for unauthenticated users. + */ + +import { PublicSimConfigureView } from "@/features/catalog/views/PublicSimConfigure"; +import { RedirectAuthenticatedToAccountServices } from "@/features/catalog/components/common/RedirectAuthenticatedToAccountServices"; + +export default function PublicSimConfigurePage() { + return ( + <> + + + + ); +} diff --git a/apps/portal/src/app/(public)/(site)/services/sim/page.tsx b/apps/portal/src/app/(public)/(site)/services/sim/page.tsx new file mode 100644 index 00000000..99c71361 --- /dev/null +++ b/apps/portal/src/app/(public)/(site)/services/sim/page.tsx @@ -0,0 +1,17 @@ +/** + * Public SIM Plans Page + * + * Displays SIM plans for unauthenticated users. + */ + +import { PublicSimPlansView } from "@/features/catalog/views/PublicSimPlans"; +import { RedirectAuthenticatedToAccountServices } from "@/features/catalog/components/common/RedirectAuthenticatedToAccountServices"; + +export default function PublicSimPlansPage() { + return ( + <> + + + + ); +} diff --git a/apps/portal/src/app/(public)/(site)/services/tv/page.tsx b/apps/portal/src/app/(public)/(site)/services/tv/page.tsx new file mode 100644 index 00000000..ad643621 --- /dev/null +++ b/apps/portal/src/app/(public)/(site)/services/tv/page.tsx @@ -0,0 +1,729 @@ +import { Button } from "@/components/atoms"; +import { + TvIcon, + FilmIcon, + MusicalNoteIcon, + TrophyIcon, + NewspaperIcon, + SparklesIcon, + EllipsisHorizontalCircleIcon, + AcademicCapIcon, + GlobeAsiaAustraliaIcon, +} from "@heroicons/react/24/outline"; + +export default function TVServicesPage() { + return ( +
+ {/* Header */} +
+

+ TV Services +

+

+ Providing a variety of options for our customers such as Satellite TV, Cable TV and + Optical Fiber TV. +

+
+ + {/* Intro */} +
+

Service Lineup

+

+ We are proud to act as agents for Japan's major paid TV service providers, and we will + arrange your services on your behalf (no service fee required for us to arrange your + services). Usually each building has their pre-assigned main TV service providers. To find + out which TV service you can apply for, please feel free to contact us anytime. +

+ +
+ + {/* Services List */} +
+ {/* Sky PerfecTV Premium Hikari */} + + + + + + + + + + + + + + + {/* Sky PerfecTV Premium (Satellite) */} + + + + + + + + + + + + + + + {/* Sky PerfecTV (Satellite) */} + + + + + + + + + + + + + + + {/* iTSCOM (CATV) */} + + + + + + + + + + + + + + + {/* JCOM (CATV) */} + + + + + + + + + + + + + +
+ + {/* FAQ */} +
+

+ Frequently Asked Questions +

+
+
+

+ Is Assist Solutions directly providing the TV service? +

+

+ As partners, we are able to refer you to each cable TV company available at your home. + However, once the service starts, the cable TV service itself will be directly + provided by each cable TV company. +

+
+ +
+

+ Would I be able to choose any cable TV service that Assist Solutions is partnered + with? +

+

+ In Japan, most cable TV companies have predetermined service areas. We will be able to + check which services are available for your home. Please contact us for a free + consultation. +

+
+
+
+ + {/* CTA */} +
+

+ Find the best TV service for you +

+ +
+
+ ); +} + +// Helper Components + +function TVServiceSection({ + title, + fees, + note, + children, +}: { + title: string; + fees: { type: string; initial: string; monthly: string }[]; + note?: string; + children?: React.ReactNode; +}) { + return ( +
+
+
+
+ +
+

{title}

+
+
+ +
+
+

+ Service Fees +

+
+ + + + + + + + + + {fees.map((fee, i) => ( + + + + + + ))} + +
TypeInitial CostMonthly Cost
{fee.type}{fee.initial}{fee.monthly}
+
+ {note &&

{note}

} +
+ + {children} +
+
+ ); +} + +function ChannelPackage({ title, children }: { title: string; children: React.ReactNode }) { + return ( +
+

+ {title} +

+
{children}
+
+ ); +} + +function ChannelCategory({ title, channels }: { title: string; channels: string[] }) { + return ( +
+

+ {title === "Movie" && } + {title === "Music" && } + {title === "Sports" && } + {title === "News & Business" && } + {title === "Entertainment" && } + {title === "Kids" && } + {title === "Foreign Drama" && } + {title === "Documentary" && } + {title === "Others" && } + {title} +

+
    + {channels.map(channel => ( +
  • + {channel} +
  • + ))} +
+
+ ); +} diff --git a/apps/portal/src/app/(public)/(site)/services/vpn/page.tsx b/apps/portal/src/app/(public)/(site)/services/vpn/page.tsx new file mode 100644 index 00000000..7236a8f5 --- /dev/null +++ b/apps/portal/src/app/(public)/(site)/services/vpn/page.tsx @@ -0,0 +1,17 @@ +/** + * Public VPN Plans Page + * + * Displays VPN plans for unauthenticated users. + */ + +import { PublicVpnPlansView } from "@/features/catalog/views/PublicVpnPlans"; +import { RedirectAuthenticatedToAccountServices } from "@/features/catalog/components/common/RedirectAuthenticatedToAccountServices"; + +export default function PublicVpnPlansPage() { + return ( + <> + + + + ); +} diff --git a/apps/portal/src/app/account/my-services/[id]/internet/cancel/page.tsx b/apps/portal/src/app/account/my-services/[id]/internet/cancel/page.tsx new file mode 100644 index 00000000..e1684c84 --- /dev/null +++ b/apps/portal/src/app/account/my-services/[id]/internet/cancel/page.tsx @@ -0,0 +1,5 @@ +import InternetCancelContainer from "@/features/subscriptions/views/InternetCancel"; + +export default function AccountInternetCancelPage() { + return ; +} diff --git a/apps/portal/src/app/account/my-services/[id]/loading.tsx b/apps/portal/src/app/account/my-services/[id]/loading.tsx new file mode 100644 index 00000000..70d2b15f --- /dev/null +++ b/apps/portal/src/app/account/my-services/[id]/loading.tsx @@ -0,0 +1,19 @@ +import { RouteLoading } from "@/components/molecules/RouteLoading"; +import { ServerIcon } from "@heroicons/react/24/outline"; +import { LoadingCard } from "@/components/atoms/loading-skeleton"; + +export default function AccountServiceDetailLoading() { + return ( + } + title="Service" + description="Service details" + mode="content" + > +
+ + +
+
+ ); +} diff --git a/apps/portal/src/app/account/my-services/[id]/page.tsx b/apps/portal/src/app/account/my-services/[id]/page.tsx new file mode 100644 index 00000000..2324febc --- /dev/null +++ b/apps/portal/src/app/account/my-services/[id]/page.tsx @@ -0,0 +1,5 @@ +import SubscriptionDetailContainer from "@/features/subscriptions/views/SubscriptionDetail"; + +export default function AccountServiceDetailPage() { + return ; +} diff --git a/apps/portal/src/app/account/my-services/[id]/sim/call-history/page.tsx b/apps/portal/src/app/account/my-services/[id]/sim/call-history/page.tsx new file mode 100644 index 00000000..16e52603 --- /dev/null +++ b/apps/portal/src/app/account/my-services/[id]/sim/call-history/page.tsx @@ -0,0 +1,5 @@ +import SimCallHistoryContainer from "@/features/subscriptions/views/SimCallHistory"; + +export default function AccountSimCallHistoryPage() { + return ; +} diff --git a/apps/portal/src/app/account/my-services/[id]/sim/cancel/page.tsx b/apps/portal/src/app/account/my-services/[id]/sim/cancel/page.tsx new file mode 100644 index 00000000..f9aaf9a4 --- /dev/null +++ b/apps/portal/src/app/account/my-services/[id]/sim/cancel/page.tsx @@ -0,0 +1,5 @@ +import SimCancelContainer from "@/features/subscriptions/views/SimCancel"; + +export default function AccountSimCancelPage() { + return ; +} diff --git a/apps/portal/src/app/account/my-services/[id]/sim/change-plan/page.tsx b/apps/portal/src/app/account/my-services/[id]/sim/change-plan/page.tsx new file mode 100644 index 00000000..8ff1da30 --- /dev/null +++ b/apps/portal/src/app/account/my-services/[id]/sim/change-plan/page.tsx @@ -0,0 +1,5 @@ +import SimChangePlanContainer from "@/features/subscriptions/views/SimChangePlan"; + +export default function AccountSimChangePlanPage() { + return ; +} diff --git a/apps/portal/src/app/account/my-services/[id]/sim/reissue/page.tsx b/apps/portal/src/app/account/my-services/[id]/sim/reissue/page.tsx new file mode 100644 index 00000000..1936a048 --- /dev/null +++ b/apps/portal/src/app/account/my-services/[id]/sim/reissue/page.tsx @@ -0,0 +1,5 @@ +import SimReissueContainer from "@/features/subscriptions/views/SimReissue"; + +export default function AccountSimReissuePage() { + return ; +} diff --git a/apps/portal/src/app/account/my-services/[id]/sim/top-up/page.tsx b/apps/portal/src/app/account/my-services/[id]/sim/top-up/page.tsx new file mode 100644 index 00000000..89629c2e --- /dev/null +++ b/apps/portal/src/app/account/my-services/[id]/sim/top-up/page.tsx @@ -0,0 +1,5 @@ +import SimTopUpContainer from "@/features/subscriptions/views/SimTopUp"; + +export default function AccountSimTopUpPage() { + return ; +} diff --git a/apps/portal/src/app/account/my-services/loading.tsx b/apps/portal/src/app/account/my-services/loading.tsx new file mode 100644 index 00000000..3db64007 --- /dev/null +++ b/apps/portal/src/app/account/my-services/loading.tsx @@ -0,0 +1,16 @@ +import { RouteLoading } from "@/components/molecules/RouteLoading"; +import { ServerIcon } from "@heroicons/react/24/outline"; +import { LoadingTable } from "@/components/atoms/loading-skeleton"; + +export default function AccountServicesLoading() { + return ( + } + title="Services" + description="View and manage your services" + mode="content" + > + + + ); +} diff --git a/apps/portal/src/app/account/my-services/page.tsx b/apps/portal/src/app/account/my-services/page.tsx new file mode 100644 index 00000000..13e6e5bb --- /dev/null +++ b/apps/portal/src/app/account/my-services/page.tsx @@ -0,0 +1,5 @@ +import SubscriptionsListContainer from "@/features/subscriptions/views/SubscriptionsList"; + +export default function AccountServicesPage() { + return ; +} diff --git a/apps/portal/src/app/account/services/internet/configure/page.tsx b/apps/portal/src/app/account/services/internet/configure/page.tsx new file mode 100644 index 00000000..f4c70ebb --- /dev/null +++ b/apps/portal/src/app/account/services/internet/configure/page.tsx @@ -0,0 +1,5 @@ +import { InternetConfigureContainer } from "@/features/catalog/views/InternetConfigure"; + +export default function AccountInternetConfigurePage() { + return ; +} diff --git a/apps/portal/src/app/account/services/internet/page.tsx b/apps/portal/src/app/account/services/internet/page.tsx new file mode 100644 index 00000000..469f6ade --- /dev/null +++ b/apps/portal/src/app/account/services/internet/page.tsx @@ -0,0 +1,5 @@ +import { InternetPlansContainer } from "@/features/catalog/views/InternetPlans"; + +export default function AccountInternetPlansPage() { + return ; +} diff --git a/apps/portal/src/app/account/services/layout.tsx b/apps/portal/src/app/account/services/layout.tsx new file mode 100644 index 00000000..f0737f4d --- /dev/null +++ b/apps/portal/src/app/account/services/layout.tsx @@ -0,0 +1,5 @@ +import type { ReactNode } from "react"; + +export default function AccountShopLayout({ children }: { children: ReactNode }) { + return <>{children}; +} diff --git a/apps/portal/src/app/account/services/sim/configure/page.tsx b/apps/portal/src/app/account/services/sim/configure/page.tsx new file mode 100644 index 00000000..ab66d78c --- /dev/null +++ b/apps/portal/src/app/account/services/sim/configure/page.tsx @@ -0,0 +1,5 @@ +import { SimConfigureContainer } from "@/features/catalog/views/SimConfigure"; + +export default function AccountSimConfigurePage() { + return ; +} diff --git a/apps/portal/src/app/account/services/sim/page.tsx b/apps/portal/src/app/account/services/sim/page.tsx new file mode 100644 index 00000000..e00978cf --- /dev/null +++ b/apps/portal/src/app/account/services/sim/page.tsx @@ -0,0 +1,5 @@ +import { SimPlansContainer } from "@/features/catalog/views/SimPlans"; + +export default function AccountSimPlansPage() { + return ; +} diff --git a/apps/portal/src/app/account/services/vpn/page.tsx b/apps/portal/src/app/account/services/vpn/page.tsx new file mode 100644 index 00000000..701c37c7 --- /dev/null +++ b/apps/portal/src/app/account/services/vpn/page.tsx @@ -0,0 +1,5 @@ +import { VpnPlansView } from "@/features/catalog/views/VpnPlans"; + +export default function AccountVpnPlansPage() { + return ; +} diff --git a/apps/portal/src/components/organisms/SiteFooter/SiteFooter.tsx b/apps/portal/src/components/organisms/SiteFooter/SiteFooter.tsx new file mode 100644 index 00000000..c5e32cb2 --- /dev/null +++ b/apps/portal/src/components/organisms/SiteFooter/SiteFooter.tsx @@ -0,0 +1,124 @@ +/** + * SiteFooter + * + * Shared footer component for all public-facing pages. + * Contains company info, address, services links, and company links. + */ + +import Link from "next/link"; +import { Logo } from "@/components/atoms/logo"; +import { PhoneIcon, MapPinIcon } from "@heroicons/react/24/outline"; + +export function SiteFooter() { + return ( +
+
+
+ {/* Company Info */} +
+ + + + + Assist Solutions + +

+ Serving Japan's international community with reliable IT solutions since 2002. +

+
+
+ + + 3F Azabu Maruka Bldg., 3-8-2 Higashi Azabu, +
+ Minato-ku, Tokyo 106-0044 +
+
+
+ + + + 0120-660-470 + {" "} + (Toll Free) + +
+
+
+ + {/* Services */} +
+

Services

+
    +
  • + + Internet + +
  • +
  • + + SIM & eSIM + +
  • +
  • + + VPN + +
  • +
+
+ + {/* Company */} +
+

Company

+
    +
  • + + About Us + +
  • +
  • + + Contact + +
  • +
  • + + Support + +
  • +
+
+
+ + {/* Bottom Bar */} +
+
+ © {new Date().getFullYear()} Assist Solutions Corp. All rights reserved. +
+
+ Notified Telecommunication Carrier: A-19-9538 +
+
+
+
+ ); +} diff --git a/apps/portal/src/components/organisms/SiteFooter/index.ts b/apps/portal/src/components/organisms/SiteFooter/index.ts new file mode 100644 index 00000000..a0c8466d --- /dev/null +++ b/apps/portal/src/components/organisms/SiteFooter/index.ts @@ -0,0 +1 @@ +export { SiteFooter } from "./SiteFooter"; diff --git a/apps/portal/src/components/templates/PublicShell/index.ts b/apps/portal/src/components/templates/PublicShell/index.ts new file mode 100644 index 00000000..b54dab1b --- /dev/null +++ b/apps/portal/src/components/templates/PublicShell/index.ts @@ -0,0 +1,2 @@ +export { PublicShell } from "./PublicShell"; +export type { PublicShellProps } from "./PublicShell"; diff --git a/apps/portal/src/features/catalog/components/common/RedirectAuthenticatedToAccountServices.tsx b/apps/portal/src/features/catalog/components/common/RedirectAuthenticatedToAccountServices.tsx new file mode 100644 index 00000000..e8a128e2 --- /dev/null +++ b/apps/portal/src/features/catalog/components/common/RedirectAuthenticatedToAccountServices.tsx @@ -0,0 +1,36 @@ +"use client"; + +import { useEffect } from "react"; +import { usePathname, useRouter, useSearchParams } from "next/navigation"; +import { useAuthStore } from "@/features/auth/services/auth.store"; + +type Props = { + /** + * Absolute target path (no querystring). When omitted, the current pathname is transformed: + * `/services/...` -> `/account/services/...`. + */ + targetPath?: string; +}; + +export function RedirectAuthenticatedToAccountServices({ targetPath }: Props) { + const router = useRouter(); + const pathname = usePathname(); + const searchParams = useSearchParams(); + const isAuthenticated = useAuthStore(state => state.isAuthenticated); + const hasCheckedAuth = useAuthStore(state => state.hasCheckedAuth); + + useEffect(() => { + if (!hasCheckedAuth) return; + if (!isAuthenticated) return; + + // Simple path transformation: /services/* → /account/services/* + const nextPath = + targetPath ?? + (pathname.startsWith("/services") ? `/account${pathname}` : "/account/services"); + + const query = searchParams?.toString() ?? ""; + router.replace(query ? `${nextPath}?${query}` : nextPath); + }, [hasCheckedAuth, isAuthenticated, pathname, router, searchParams, targetPath]); + + return null; +} diff --git a/apps/portal/src/features/catalog/hooks/useServicesBasePath.ts b/apps/portal/src/features/catalog/hooks/useServicesBasePath.ts new file mode 100644 index 00000000..6d6e7f3f --- /dev/null +++ b/apps/portal/src/features/catalog/hooks/useServicesBasePath.ts @@ -0,0 +1,17 @@ +"use client"; + +import { usePathname } from "next/navigation"; + +/** + * Returns the active services base path for the current shell. + * + * - Public services: `/services` + * - Account services (inside AppShell): `/account/services` + */ +export function useServicesBasePath(): "/services" | "/account/services" { + const pathname = usePathname(); + if (pathname.startsWith("/account/services")) { + return "/account/services"; + } + return "/services"; +} diff --git a/apps/portal/src/features/marketing/views/AboutUsView.tsx b/apps/portal/src/features/marketing/views/AboutUsView.tsx new file mode 100644 index 00000000..0d1d13ae --- /dev/null +++ b/apps/portal/src/features/marketing/views/AboutUsView.tsx @@ -0,0 +1,204 @@ +"use client"; + +import { + BuildingOffice2Icon, + UserGroupIcon, + CalendarIcon, + BanknotesIcon, + PhoneIcon, + MapPinIcon, + ClockIcon, + CheckCircleIcon, +} from "@heroicons/react/24/outline"; + +/** + * AboutUsView - Corporate profile and company information + * + * Displays company background, corporate data, business activities, + * and mission statement for Assist Solutions. + */ +export function AboutUsView() { + return ( +
+ {/* Header */} +
+

About Us

+

+ We specialize in serving Japan's international community with the most reliable and + cost-efficient IT solutions available. +

+
+ + {/* Who We Are Section */} +
+
+
+ +
+

Who We Are

+
+
+

+ Assist Solutions Corp. is a privately-owned entrepreneurial IT service company. We + specialize in serving Japan's international community with the most reliable and + cost-efficient IT & TV solutions available. +

+

+ We are dedicated to providing comfortable support for our customer's diverse needs + in both English and Japanese. We believe that our excellent bi-lingual support and + flexible service along with our knowledge and experience in the field are what sets us + apart from the rest of the information technology and broadcasting industry. +

+
+
+ + {/* Corporate Data Section */} +
+
+
+ +
+

Corporate Data

+
+

+ Assist Solutions is a privately-owned entrepreneurial IT supporting company, focused on + the international community in Japan. +

+ +
+ {/* Company Name */} +
+
Name
+
+ Assist Solutions Corp. +
+ (Notified Telecommunication Carrier: A-19-9538) +
+
+ + {/* Address */} +
+
+ + Address +
+
+ 3F Azabu Maruka Bldg., 3-8-2 Higashi Azabu, +
+ Minato-ku, Tokyo 106-0044 +
+
+ + {/* Phone/Fax */} +
+
+ + Tel / Fax +
+
+ Tel: 03-3560-1006 +
+ Fax: 03-3560-1007 +
+
+ + {/* Business Hours */} +
+
+ + Business Hours +
+
+
Mon - Fri 9:30AM - 6:00PM — Customer Support Team
+
Mon - Fri 9:30AM - 6:00PM — In-office Tech Support Team
+
Mon - Sat 10:00AM - 9:00PM — Onsite Tech Support Team
+
+
+ + {/* Representative */} +
+
Representative Director
+
Daisuke Nagakawa
+
+ + {/* Employees */} +
+
Employees
+
+ 21 Staff Members (as of March 31st, 2025) +
+
+ + {/* Established */} +
+
+ + Established +
+
March 8, 2002
+
+ + {/* Capital */} +
+
+ + Paid-in Capital +
+
40,000,000 JPY
+
+
+
+ + {/* Business Activities Section */} +
+

Business Activities

+
+ {[ + "IT Consulting Services", + "TV Consulting Services", + "Internet Connection Service Provision (SonixNet ISP)", + "VPN Connection Service Provision (SonixNet US/UK Remote Access)", + "Agent for Telecommunication Services", + "Agent for Internet Services", + "Agent for TV Services", + "Onsite Support Service for IT", + "Onsite Support Service for TV", + "Server Management Service", + "Network Management Service", + ].map((activity, index) => ( +
+ + {activity} +
+ ))} +
+
+ + {/* Mission Statement Section */} +
+

Mission Statement

+

+ We will achieve business success by pursuing the following: +

+
    + {[ + "Provide the most customer-oriented service in this industry in Japan.", + "Through our service, we save client's time and enrich customers' lives.", + "We always have the latest and most efficient knowledge required for our service.", + "Be a responsible participant in Japan's international community.", + "Maintain high ethical standards in all business activities.", + ].map((mission, index) => ( +
  • + + {index + 1} + + {mission} +
  • + ))} +
+
+
+ ); +} + +export default AboutUsView;