From ff870c9f4faf457a084a1efe2d3d616eb5bf1a73 Mon Sep 17 00:00:00 2001 From: tema Date: Tue, 20 Jan 2026 17:19:00 +0900 Subject: [PATCH] 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. --- .../src/app/(public)/(site)/about/page.tsx | 14 +- .../src/app/(public)/(site)/contact/page.tsx | 16 +- .../(site)/services/business/page.tsx | 60 +- .../(site)/services/internet/page.tsx | 18 +- .../services/onsite/OnsiteSupportContent.tsx | 29 +- .../(public)/(site)/services/onsite/page.tsx | 19 +- .../src/app/(public)/(site)/services/page.tsx | 25 +- .../app/(public)/(site)/services/sim/page.tsx | 18 +- .../(public)/(site)/services/tv/layout.tsx | 24 - .../app/(public)/(site)/services/tv/page.tsx | 727 ------------------ .../app/(public)/(site)/services/vpn/page.tsx | 15 +- .../templates/PublicShell/PublicShell.tsx | 18 +- .../landing-page/views/PublicLandingView.tsx | 143 ++-- .../features/marketing/views/AboutUsView.tsx | 39 +- .../components/common/ServicesGrid.tsx | 42 +- .../components/sim/SimPlansContent.tsx | 44 +- .../services/views/PublicInternetPlans.tsx | 496 +++++++++++- .../services/views/PublicVpnPlans.tsx | 40 +- .../support/views/PublicContactView.tsx | 5 +- .../support/views/PublicSupportView.tsx | 5 +- 20 files changed, 763 insertions(+), 1034 deletions(-) delete mode 100644 apps/portal/src/app/(public)/(site)/services/tv/layout.tsx delete mode 100644 apps/portal/src/app/(public)/(site)/services/tv/page.tsx diff --git a/apps/portal/src/app/(public)/(site)/about/page.tsx b/apps/portal/src/app/(public)/(site)/about/page.tsx index 81ec50cb..03f2132b 100644 --- a/apps/portal/src/app/(public)/(site)/about/page.tsx +++ b/apps/portal/src/app/(public)/(site)/about/page.tsx @@ -8,19 +8,19 @@ import type { Metadata } from "next"; import { AboutUsView } from "@/features/marketing/views/AboutUsView"; export const metadata: Metadata = { - title: "About Us - Assist Solutions Corp. | Company Profile", + title: "About Us - 20+ Years Serving Expats in Japan | Assist Solutions", description: - "Learn about Assist Solutions Corp., established in 2002. A registered telecom carrier (A-19-9538) providing IT services to Japan's international community with bilingual support.", + "Since 2002, Assist Solutions has been the trusted IT partner for expats and international businesses in Japan. Bilingual support, no Japanese required.", keywords: [ - "Assist Solutions", - "IT company Tokyo", + "Assist Solutions expats", + "IT company foreigners Japan", + "English IT support Tokyo", "expat services Japan", - "telecom carrier Japan", ], openGraph: { - title: "About Assist Solutions Corp.", + title: "About Assist Solutions - IT for Expats Since 2002", description: - "Established in 2002, serving Japan's international community with reliable IT solutions and English support.", + "20+ years serving Japan's international community. Internet, mobile, VPN, and tech support with full English support.", type: "website", }, }; diff --git a/apps/portal/src/app/(public)/(site)/contact/page.tsx b/apps/portal/src/app/(public)/(site)/contact/page.tsx index 64e4c02a..05dd850e 100644 --- a/apps/portal/src/app/(public)/(site)/contact/page.tsx +++ b/apps/portal/src/app/(public)/(site)/contact/page.tsx @@ -8,20 +8,20 @@ import type { Metadata } from "next"; import { PublicContactView } from "@/features/support/views/PublicContactView"; export const metadata: Metadata = { - title: "Support & Contact - Assist Solutions | Get Help", + title: "Contact Us - English Support for Expats | Assist Solutions", description: - "Get support from Assist Solutions. FAQ, live chat, phone support (0120-660-470), and contact form. English and Japanese support available for internet, mobile, and IT services.", + "Need help? Our English-speaking team is here for you. Call 0120-660-470 (toll-free in Japan), chat, or email. No Japanese required.", keywords: [ + "English support Japan", + "IT help expats Tokyo", "contact Assist Solutions", - "IT support Tokyo", - "customer service Japan", - "English support", - "FAQ", + "bilingual support Japan", + "English customer service", ], openGraph: { - title: "Support & Contact - Assist Solutions", + title: "Contact Us - English Support | Assist Solutions", description: - "Get help with your internet, mobile, or IT services. Bilingual support available. Toll-free: 0120-660-470", + "Questions about internet, mobile, or IT services? Our English-speaking team is ready to help. Toll-free: 0120-660-470", type: "website", }, }; diff --git a/apps/portal/src/app/(public)/(site)/services/business/page.tsx b/apps/portal/src/app/(public)/(site)/services/business/page.tsx index 8eba8484..6180276e 100644 --- a/apps/portal/src/app/(public)/(site)/services/business/page.tsx +++ b/apps/portal/src/app/(public)/(site)/services/business/page.tsx @@ -3,20 +3,20 @@ import { Button } from "@/components/atoms"; import { Server, Monitor, Wrench, Globe } from "lucide-react"; export const metadata: Metadata = { - title: "Business Solutions - Enterprise IT Services | Assist Solutions", + title: "IT Solutions for International Businesses in Japan | Assist Solutions", description: - "Comprehensive business IT solutions: Dedicated Internet Access with SLA, office LAN setup, data center services at Equinix Tokyo, and ongoing tech support.", + "Enterprise IT for foreign companies in Japan. Dedicated internet, office networks, data center hosting, all with bilingual support. We understand international business needs.", keywords: [ - "business internet Japan", - "dedicated internet access", - "office LAN setup Tokyo", - "data center Japan", - "enterprise IT Tokyo", + "IT for foreign companies Japan", + "international business IT Tokyo", + "bilingual IT support Japan", + "office network setup foreigners", + "enterprise IT English support", ], openGraph: { - title: "Business Solutions - Assist Solutions", + title: "Business IT for International Companies - Assist Solutions", description: - "Enterprise-grade IT services with dedicated bandwidth, data center hosting, and bilingual support.", + "Enterprise IT with bilingual support. Dedicated internet, office networks, and data center services for foreign companies in Japan.", type: "website", }, }; @@ -27,11 +27,11 @@ export default function BusinessSolutionsPage() { {/* Header */}

- Business Solutions + IT for International Businesses

- We provide comprehensive business solutions including DIA (Dedicated Internet Access) with - SLA and bandwidth guarantees to ensure your business stays connected. + Running an international company in Japan? We provide enterprise IT with bilingual + support, so your team can focus on business, not navigating Japanese tech providers.

@@ -43,10 +43,9 @@ export default function BusinessSolutionsPage() {

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. + Setting up a new office or upgrading your network? We handle everything in English. from + planning to installation. Cable runs, switches, routers, and firewalls configured by + bilingual technicians who understand international business needs.

@@ -57,10 +56,9 @@ export default function BusinessSolutionsPage() {

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. + IT issues don't wait, and neither do we. Our English-speaking technicians provide + fast onsite and remote support for your business. Network problems, hardware issues, + software setup. We keep your operations running smoothly.

@@ -73,10 +71,9 @@ export default function BusinessSolutionsPage() { 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. + Need guaranteed bandwidth for your business? Our Dedicated Internet Access provides + enterprise-grade connectivity with SLA guarantees. Perfect for companies requiring + reliable, high-capacity connections with English contracts and support.

@@ -87,10 +84,9 @@ export default function BusinessSolutionsPage() {

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. + Host your infrastructure in world-class Tokyo data centers (Equinix, GDC Gotenyama). We + provide colocation and managed services with English support, making it easy for + international companies to establish reliable IT infrastructure in Japan.

@@ -98,13 +94,15 @@ export default function BusinessSolutionsPage() { {/* CTA */}

- Interested in our Business Solutions? + Let's Talk About Your IT Needs

- Contact us today to discuss your requirements and how we can help your business grow. + Running an international business in Japan comes with unique challenges. We've been + helping foreign companies navigate Japanese IT for over 20 years. Let's discuss how + we can support your operations.

diff --git a/apps/portal/src/app/(public)/(site)/services/internet/page.tsx b/apps/portal/src/app/(public)/(site)/services/internet/page.tsx index 8255bcbd..75f274bc 100644 --- a/apps/portal/src/app/(public)/(site)/services/internet/page.tsx +++ b/apps/portal/src/app/(public)/(site)/services/internet/page.tsx @@ -9,20 +9,20 @@ import { PublicInternetPlansView } from "@/features/services/views/PublicInterne import { RedirectAuthenticatedToAccountServices } from "@/features/services/components/common/RedirectAuthenticatedToAccountServices"; export const metadata: Metadata = { - title: "Internet Plans - Fiber Optic Internet in Japan | Assist Solutions", + title: "Internet for Expats in Japan - Fiber Optic with English Support | Assist Solutions", description: - "Get reliable NTT fiber optic internet up to 10Gbps with English support. IPv6/IPoE connections, no long-term contracts, monthly billing. Serving expats in Tokyo.", + "High-speed NTT fiber internet with full English support. No Japanese required for signup. We handle the paperwork, you enjoy fast internet. Serving expats since 2002.", keywords: [ - "fiber internet Japan", - "NTT fiber optic", - "internet for expats", - "10Gbps internet Tokyo", - "IPv6 Japan", + "internet for expats Japan", + "English internet service Tokyo", + "NTT fiber foreigners", + "10Gbps internet expats", + "no Japanese internet signup", ], openGraph: { - title: "Internet Plans - Assist Solutions", + title: "Internet for Expats - Assist Solutions", description: - "High-speed NTT fiber optic internet with English support. Up to 10Gbps, no long-term contracts.", + "High-speed fiber internet with English support. No Japanese required. We handle everything.", type: "website", }, }; diff --git a/apps/portal/src/app/(public)/(site)/services/onsite/OnsiteSupportContent.tsx b/apps/portal/src/app/(public)/(site)/services/onsite/OnsiteSupportContent.tsx index 8baa6c64..920c6951 100644 --- a/apps/portal/src/app/(public)/(site)/services/onsite/OnsiteSupportContent.tsx +++ b/apps/portal/src/app/(public)/(site)/services/onsite/OnsiteSupportContent.tsx @@ -10,26 +10,27 @@ export function OnsiteSupportContent() { {/* Header */}

- Onsite Support + Tech Help in English, At Your Door

- We dispatch our skillful in-house tech staff to your residence or office for your needs. + Need help with your router, computer, or home network? Our English-speaking technicians + come to your home or office to solve tech problems, explained in a language you + understand.

{/* Main Services */}
-

Need Our Technical Support?

+

We Come to You

- 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. + Living in Japan without strong Japanese skills can make tech problems frustrating. + That's where we come in. Our English-speaking technicians visit your home or office + to help with setup, troubleshooting, and configuration.

- 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). + For quick fixes, we also offer remote support. We connect to your device securely over + the internet to diagnose and resolve issues without a home visit.

diff --git a/apps/portal/src/app/(public)/(site)/services/onsite/page.tsx b/apps/portal/src/app/(public)/(site)/services/onsite/page.tsx index be495036..b3395cce 100644 --- a/apps/portal/src/app/(public)/(site)/services/onsite/page.tsx +++ b/apps/portal/src/app/(public)/(site)/services/onsite/page.tsx @@ -2,19 +2,20 @@ import type { Metadata } from "next"; import { OnsiteSupportContent } from "./OnsiteSupportContent"; export const metadata: Metadata = { - title: "Onsite Support - Tech Support in Tokyo | Assist Solutions", + title: "English Tech Support at Home - Tokyo & Surrounding Areas | Assist Solutions", description: - "Professional onsite and remote tech support in Tokyo, Saitama, and Kanagawa. Wi-Fi setup, network troubleshooting, computer repair. English-speaking technicians.", + "Tech help in English at your door. Wi-Fi, computers, networks. Our bilingual technicians solve problems and explain things clearly. Tokyo, Saitama, Kanagawa.", keywords: [ - "tech support Tokyo", - "IT support expats", - "computer repair Japan", - "Wi-Fi setup Tokyo", - "English IT support", + "English tech support Tokyo", + "IT support expats Japan", + "bilingual computer help", + "home network setup foreigners", + "English speaking IT Japan", ], openGraph: { - title: "Onsite Tech Support - Assist Solutions", - description: "English-speaking technicians for home and office IT support in Tokyo area.", + title: "English Tech Support at Home - Assist Solutions", + description: + "Bilingual technicians for home and office IT support. We explain things in English.", type: "website", }, }; diff --git a/apps/portal/src/app/(public)/(site)/services/page.tsx b/apps/portal/src/app/(public)/(site)/services/page.tsx index 3009101f..75a25c80 100644 --- a/apps/portal/src/app/(public)/(site)/services/page.tsx +++ b/apps/portal/src/app/(public)/(site)/services/page.tsx @@ -2,19 +2,20 @@ import type { Metadata } from "next"; import { ServicesGrid } from "@/features/services/components/common/ServicesGrid"; export const metadata: Metadata = { - title: "Services - Internet, Mobile, VPN & IT Support | Assist Solutions", + title: "Services for Expats in Japan - Internet, Mobile, VPN & IT Support | Assist Solutions", description: - "Explore our comprehensive IT services: fiber optic internet up to 10Gbps, mobile SIM cards, VPN access, TV services, and professional onsite support in Tokyo.", + "IT services designed for foreigners in Japan. Fiber internet, SIM cards, VPN access, and tech support, all with full English support. No Japanese required.", keywords: [ - "internet service Japan", - "SIM card Tokyo", - "VPN service", - "IT support expats", - "fiber internet", + "internet service Japan expats", + "SIM card foreigners Tokyo", + "VPN service Japan", + "IT support expats Japan", + "English internet service Japan", ], openGraph: { - title: "Our Services - Assist Solutions", - description: "Internet, mobile, VPN, TV and tech support services for expats in Japan.", + title: "Services for Expats - Assist Solutions", + description: + "Internet, mobile, VPN and tech support services with full English support for expats in Japan.", type: "website", }, }; @@ -29,11 +30,11 @@ export default function ServicesPage({ basePath = "/services" }: ServicesPagePro {/* Header */}

- Our Services + Services for Expats in Japan

- From high-speed internet to onsite support, we provide comprehensive solutions for your - home and business. + Tired of navigating Japanese-only websites and contracts? We provide internet, mobile, and + IT services with full English support. No Japanese required.

diff --git a/apps/portal/src/app/(public)/(site)/services/sim/page.tsx b/apps/portal/src/app/(public)/(site)/services/sim/page.tsx index 726e2806..f23caa04 100644 --- a/apps/portal/src/app/(public)/(site)/services/sim/page.tsx +++ b/apps/portal/src/app/(public)/(site)/services/sim/page.tsx @@ -9,20 +9,20 @@ import { PublicSimPlansView } from "@/features/services/views/PublicSimPlans"; import { RedirectAuthenticatedToAccountServices } from "@/features/services/components/common/RedirectAuthenticatedToAccountServices"; export const metadata: Metadata = { - title: "SIM Card Plans - Mobile Service in Japan | Assist Solutions", + title: "SIM Cards for Foreigners in Japan - No Hanko Required | Assist Solutions", description: - "Get affordable SIM cards using NTT Docomo's network. Voice + Data and Data-only plans, eSIM available. First month free, no credit check for foreigners.", + "SIM cards for expats on Japan's best network. Foreign credit cards accepted, no hanko needed, English support. First month free. Get connected in days, not weeks.", keywords: [ - "SIM card Japan", - "mobile service expats", - "Docomo MVNO", - "eSIM Japan", - "prepaid SIM Tokyo", + "SIM card foreigners Japan", + "mobile service expats Tokyo", + "no hanko SIM Japan", + "foreign credit card SIM", + "English SIM service Japan", ], openGraph: { - title: "Mobile SIM Card Plans - Assist Solutions", + title: "SIM Cards for Foreigners - Assist Solutions", description: - "Affordable mobile plans on Docomo's network with English support. SIM and eSIM available.", + "Mobile plans for expats. Foreign credit cards accepted, no hanko. English support included.", type: "website", }, }; diff --git a/apps/portal/src/app/(public)/(site)/services/tv/layout.tsx b/apps/portal/src/app/(public)/(site)/services/tv/layout.tsx deleted file mode 100644 index ce3326b9..00000000 --- a/apps/portal/src/app/(public)/(site)/services/tv/layout.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import type { Metadata } from "next"; - -export const metadata: Metadata = { - title: "TV Services - Satellite & Cable TV in Japan | Assist Solutions", - description: - "Access premium TV services including Sky PerfecTV, iTSCOM, and J:COM. We arrange your TV service at no extra fee. English support available.", - keywords: [ - "cable TV Japan", - "satellite TV Tokyo", - "Sky PerfecTV", - "JCOM English", - "TV service expats", - ], - openGraph: { - title: "TV Services - Assist Solutions", - description: - "Premium cable and satellite TV options in Japan. Free consultation and arrangement service.", - type: "website", - }, -}; - -export default function TVServicesLayout({ children }: { children: React.ReactNode }) { - return children; -} diff --git a/apps/portal/src/app/(public)/(site)/services/tv/page.tsx b/apps/portal/src/app/(public)/(site)/services/tv/page.tsx deleted file mode 100644 index 51915c89..00000000 --- a/apps/portal/src/app/(public)/(site)/services/tv/page.tsx +++ /dev/null @@ -1,727 +0,0 @@ -"use client"; - -import { useState } from "react"; -import { Button } from "@/components/atoms"; -import { - Tv, - Film, - Music, - Trophy, - Newspaper, - Sparkles, - MoreHorizontal, - GraduationCap, - Globe, - ChevronDown, - Check, - Satellite, - Cable, - Zap, -} from "lucide-react"; -import { cn } from "@/shared/utils"; - -// TV Service Data -const tvServices = [ - { - id: "sky-hikari", - name: "Sky PerfecTV Premium Hikari", - shortName: "Sky Hikari", - type: "Optical Fiber", - icon: , - fees: [ - { type: "Apartment", initial: "Free", monthly: "4,567" }, - { type: "Home", initial: "14,630", monthly: "5,392" }, - ], - note: "Home initial: 6,680 JPY if simultaneous installation", - channels: { - Movie: [ - "The Cinema HD", - "Movie Plus HD", - "Channel NECO HD", - "Japanese Movie HD", - "Fox Movie Premium HD", - "Cinefil Wowow HD", - "NTV G HD", - "EX Sports", - "Dance Channel", - ], - Sports: [ - "Golf Network HD", - "GAORA HD", - "J Sports 1 HD", - "J Sports 2 HD", - "J Sports 3 HD", - "Sky A Sports HD", - ], - Music: [ - "Music Japan TV HD", - "MTV HD", - "Music ON! TV HD", - "Space Shower TV HD", - "Space Shower TV Plus HD", - "Kayou Pops HD", - "Music Air HD", - "Music Graffiti TV", - ], - Kids: [ - "Cartoon Network HD", - "Disney Channel HD", - "Disney XD HD", - "Kids Station HD", - "Animax HD", - "Lala HD", - "Asia Dramatic TV HD", - "KBS World HD", - ], - "Foreign Drama": [ - "Super Drama TV HD", - "AXN Mystery HD", - "AXN HD", - "FOX HD", - "FOX CLASSICS HD", - ], - Documentary: [ - "History Channel HD", - "National Geographic HD", - "Discovery HD", - "Nat Geo Wild HD", - "Animal Planet HD", - ], - "News & Business": [ - "TBS News Bird HD", - "Nikkei CNBC HD", - "BBC World News HD", - "CNNj HD", - "NTV News 24", - "SORA Weather Channel", - "E-tenki.net", - "Entametele HD", - "Nittele Plus HD", - ], - Entertainment: [ - "Fox Sports HD", - "FujiTV One HD", - "FujiTV Two HD", - "TBS Channel 1 HD", - "TBS Channel 2 HD", - "TV Asahi Channel 1 HD", - "TV Asahi Channel 2 HD", - ], - Others: [ - "Mondo TV HD", - "Family Theater HD", - "Home Drama HD", - "Samurai Drama HD", - "TABI Channel HD", - "Tsuri Vision HD", - "Igo/Shogi Channel HD", - ], - }, - }, - { - id: "sky-premium", - name: "Sky PerfecTV Premium", - shortName: "Sky Premium", - type: "Satellite", - icon: , - fees: [{ type: "Standard", initial: "Free", monthly: "4,514" }], - channels: { - Movie: [ - "Imagica BS HD", - "The Cinema HD", - "Movie Plus HD", - "Channel NECO HD", - "Japanese Movie HD", - "Fox Movie Premium HD", - "Cinefil Wowow HD", - ], - Sports: ["J Sports 3 HD", "Sky A Sports HD", "NTV G HD", "EX Sports", "Dance Channel"], - Music: [ - "Music Japan TV HD", - "MTV HD", - "Music ON! TV HD", - "Space Shower TV HD", - "Space Shower TV Plus HD", - "Kayou Pops HD", - "Music Air HD", - "Music Graffiti TV", - ], - Kids: [ - "Cartoon Network HD", - "Disney Channel HD", - "Disney XD HD", - "Kids Station HD", - "Animax HD", - "Disney Junior", - "Asia Dramatic TV HD", - "KBS World HD", - ], - "Foreign Drama": [ - "Super Drama TV HD", - "AXN Mystery HD", - "AXN HD", - "FOX HD", - "FOX CLASSICS HD", - "Lala HD", - ], - Documentary: [ - "History Channel HD", - "National Geographic HD", - "Discovery HD", - "Nat Geo Wild HD", - "Animal Planet HD", - ], - "News & Business": [ - "TBS News Bird HD", - "Nikkei CNBC HD", - "BBC World News HD", - "CNNj HD", - "NTV News 24", - "CCTV Daifu", - "SORA Weather Channel", - "Entametele HD", - "NTV Plus HD", - "Channel Ginga", - ], - Entertainment: [ - "Fox Sports HD", - "FujiTV One HD", - "FujiTV Two HD", - "TBS Channel 1 HD", - "TBS Channel 2 HD", - "TV Asahi Channel 1 HD", - "TV Asahi Channel 2 HD", - "Yose Channel", - ], - Others: [ - "IGO & Shogi", - "Mondo 21 HD", - "Family Theater HD", - "Home Drama HD", - "Samurai Drama HD", - "TABI Channel HD", - "Railyway Channel HD", - ], - }, - }, - { - id: "sky-basic", - name: "Sky PerfecTV", - shortName: "Sky Basic", - type: "Satellite", - icon: , - fees: [ - { type: "Apartment", initial: "Free", monthly: "4,389" }, - { type: "Home", initial: "11,330", monthly: "5,214" }, - ], - note: "Home initial: 6,680 JPY if simultaneous installation", - channels: { - Movie: [ - "Movie Plus HD", - "Japanese Movie HD (BS)", - "The Cinema", - "Channel NECO", - "Cinefil Wowow HD", - ], - Sports: ["Nittele G HD", "Sky A Sports HD", "GAORA Sports HD", "Fox Sports HD"], - Music: [ - "MTV HD", - "Music ON! TV HD", - "Space Shower TV", - "Music Air", - "Space Shower TV Plus", - "Kayo Pops", - ], - Kids: [ - "Kids Station HD", - "BS Animax HD (BS)", - "Disney (BS)", - "Cartoon Network", - "Disney Junior", - ], - "Foreign Drama": ["Lala HD", "Super Drama TV HD", "AXN", "AXN Mystery", "FOX"], - Documentary: ["History Channel", "National Geographic", "Discovery", "Animal Planet"], - "News & Business": [ - "TBS News Bird", - "BBC World News", - "CNNj", - "NTV News 24", - "TBS Channel 1 HD", - "TBS Channel 2", - "NTV Plus", - "Channel Ginga", - ], - Entertainment: [ - "Fuji TV One HD", - "Fuji TV Two HD", - "TV Asahi Channel 1 HD", - "TV Asahi Channel 2 HD", - "Igo/Shogi Channel", - "Mondo TV HD", - ], - Others: [ - "Tsuri Vision HD (BS)", - "Family Gekijo HD", - "Samurai Drama HD", - "Home Drama Channel", - ], - }, - }, - { - id: "itscom", - name: "iTSCOM", - shortName: "iTSCOM", - type: "Cable TV", - icon: , - fees: [{ type: "Big Package", initial: "11,000", monthly: "5,280" }], - channels: { - Movie: ["Movie Plus HD", "Japanese Movie HD", "Channel NECO HD", "FOX Movie Premium HD"], - Sports: [ - "Golf Network HD", - "Nittele G HD", - "Sky A Sports HD", - "GAORA HD", - "J Sports 1 HD", - "J Sports 2 HD", - "J Sports 3 HD", - ], - Music: ["MTV HD", "Music ON! TV HD", "Space Shower TV", "Music Air"], - Kids: [ - "Animax HD", - "Kids Station HD", - "Disney XD", - "Cartoon Network", - "Baby TV", - "Disney Junior", - ], - "Foreign Drama": [ - "AXN HD", - "FOX HD", - "Asia Dramatic TV HD", - "Super Drama TV HD", - "AXN Mystery HD", - "Family Theater HD", - ], - Documentary: [ - "Discovery HD", - "National Geographic", - "Animal Planet HD", - "History Channel HD", - ], - "News & Business": [ - "BBC World News HD", - "CNNj HD", - "Nikkei CNBC HD", - "TBS News Bird HD", - "TV Asahi Channel 2", - "NTV News 24", - "NHK World Japan", - "Disney Channel HD", - ], - Entertainment: [ - "LaLa TV HD", - "Channel Ginga HD", - "Dlife HD", - "FOX Sports HD", - "TBS Channel 1 HD", - "TBS Channel 2", - "NTV Plus", - ], - Others: [ - "Japanet Channel DX HD", - "Jewelly Gem Shopping HD", - "Samurai Drama HD", - "TABI Channel", - "QVC", - "Shop Channel", - "Igo/Shogi Channel", - ], - }, - }, - { - id: "jcom", - name: "J:COM", - shortName: "J:COM", - type: "Cable TV", - icon: , - fees: [{ type: "Standard Package", initial: "9,900", monthly: "6,074" }], - channels: { - Movie: [ - "Movie Plus HD", - "The Cinema HD", - "Channel NECO HD", - "Japanese Movie HD", - "Fox Movies", - "Cinefil Wowow HD", - "Fox Sports & Entertainment", - ], - Sports: [ - "J Sports 1 HD", - "J Sports 2 HD", - "J Sports 3 HD", - "Sky A Sports HD", - "Golf Network HD", - "GAORA HD", - ], - Music: ["MTV HD", "Music ON! TV HD", "Space Shower TV", "Kayou Pops"], - Kids: [ - "Animax HD", - "Kids Station HD", - "Cartoon Network HD", - "Disney Channel HD", - "Disney XD HD", - "Disney Junior HD", - "AXN Mystery HD", - ], - "Foreign Drama": [ - "Super Drama TV HD", - "FOX HD", - "FOX Classics HD", - "AXN HD", - "Lala HD", - "KBS World HD", - ], - Documentary: [ - "History Channel HD", - "National Geographic HD", - "Discovery Channel HD", - "Animal Planet HD", - ], - "News & Business": [ - "TBS News Bird HD", - "Nikkei CNBC HD", - "TV Asahi Channel 2 HD", - "CNNj", - "NTV News 24", - "NHK World Japan", - "KBS World", - "NTV Plus", - "Act On TV", - ], - Entertainment: [ - "FujiTV One HD", - "FujiTV Two HD", - "TBS Channel 1 HD", - "TBS Channel 2 HD", - "Channel Ginga HD", - "TV Asahi Channel 1", - "Housou University TV", - ], - Others: [ - "Family Theater HD", - "Samurai Drama HD", - "Home Drama Channel HD", - "Mondo TV HD", - "Tsuri Vision HD", - "Igo/Shogi Channel", - ], - }, - }, -]; - -const categoryIcons: Record = { - Movie: , - Music: , - Sports: , - "News & Business": , - Entertainment: , - Kids: , - "Foreign Drama": , - Documentary: , - Others: , -}; - -export default function TVServicesPage() { - const [selectedService, setSelectedService] = useState(tvServices[0].id); - const [expandedCategories, setExpandedCategories] = useState([]); - - const activeService = tvServices.find(s => s.id === selectedService)!; - - const toggleCategory = (category: string) => { - setExpandedCategories(prev => - prev.includes(category) ? prev.filter(c => c !== category) : [...prev, category] - ); - }; - - const expandAll = () => { - setExpandedCategories(Object.keys(activeService.channels)); - }; - - const collapseAll = () => { - setExpandedCategories([]); - }; - - return ( -
- {/* Header */} -
-

- TV Services -

-

- Satellite TV, Cable TV and Optical Fiber TV options. We arrange your service at no extra - fee. -

-
- - {/* Service Selector Cards */} -
-

- Select a Service -

-
- {tvServices.map(service => { - const isSelected = selectedService === service.id; - const lowestMonthly = Math.min( - ...service.fees.map(f => parseInt(f.monthly.replace(",", ""))) - ); - return ( - - ); - })} -
-
- - {/* Selected Service Details */} -
- {/* Service Header */} -
-
-
- -
-
-

{activeService.name}

-

{activeService.type} Service

-
-
-
- -
- {/* Pricing Table */} -
-

- Pricing -

-
- - - - - - - - - - {activeService.fees.map((fee, i) => ( - - - - - - ))} - -
- Plan - - Initial Cost - - Monthly -
{fee.type} - {fee.initial === "Free" ? ( - Free - ) : ( - `¥${fee.initial}` - )} - ¥{fee.monthly}/mo
-
- {activeService.note && ( -

* {activeService.note}

- )} -

* Prices include 10% tax

-
- - {/* Channel List */} -
-
-

- Channel Lineup ({Object.values(activeService.channels).flat().length} channels) -

-
- - | - -
-
- -
- {Object.entries(activeService.channels).map(([category, channels]) => { - const isExpanded = expandedCategories.includes(category); - return ( -
- - {isExpanded && ( -
-
    - {channels.map(channel => ( -
  • - - {channel} -
  • - ))} -
-
- )} -
- ); - })} -
-
-
-
- - {/* Info Banner */} -
-
-
- -
-
-

Not sure which service is available?

-

- Most buildings in Japan have pre-assigned TV service providers. Contact us for a free - consultation to find out which services you can apply for. -

-
- -
-
- - {/* FAQ Section */} -
-

- Frequently Asked Questions -

-
- - -
-
- - {/* CTA */} -
-

- Find the best TV service for you -

-

Free consultation and arrangement service

- -
-
- ); -} - -/** - * FAQ Item component with expand/collapse functionality - */ -function FaqItem({ question, answer }: { question: string; answer: string }) { - const [isOpen, setIsOpen] = useState(false); - - return ( -
- - {isOpen && ( -
{answer}
- )} -
- ); -} diff --git a/apps/portal/src/app/(public)/(site)/services/vpn/page.tsx b/apps/portal/src/app/(public)/(site)/services/vpn/page.tsx index 282f80df..cea0703d 100644 --- a/apps/portal/src/app/(public)/(site)/services/vpn/page.tsx +++ b/apps/portal/src/app/(public)/(site)/services/vpn/page.tsx @@ -9,14 +9,19 @@ import { PublicVpnPlansView } from "@/features/services/views/PublicVpnPlans"; import { RedirectAuthenticatedToAccountServices } from "@/features/services/components/common/RedirectAuthenticatedToAccountServices"; export const metadata: Metadata = { - title: "VPN Service - Secure VPN Access from Japan | Assist Solutions", + title: "VPN for Expats - Stream US/UK Content in Japan | Assist Solutions", description: - "Reliable VPN service with servers in San Francisco and London. Static routing from Tokyo, optional VPN Wi-Fi router rental. Perfect for streaming and privacy.", - keywords: ["VPN Japan", "VPN service Tokyo", "streaming VPN", "secure internet Japan"], + "Watch your favorite shows from home while living in Japan. Pre-configured VPN router, just plug in and stream. US and UK servers available.", + keywords: [ + "VPN expats Japan", + "stream US content Japan", + "Netflix VPN Tokyo", + "UK streaming Japan", + ], openGraph: { - title: "VPN Service - Assist Solutions", + title: "VPN for Expats in Japan - Assist Solutions", description: - "Secure VPN access from Tokyo with servers in US and UK. Static routing and router rental available.", + "Stream your favorite content from home. Pre-configured router, just plug in. US and UK servers.", type: "website", }, }; diff --git a/apps/portal/src/components/templates/PublicShell/PublicShell.tsx b/apps/portal/src/components/templates/PublicShell/PublicShell.tsx index 81b8fb1d..35bb8ab8 100644 --- a/apps/portal/src/components/templates/PublicShell/PublicShell.tsx +++ b/apps/portal/src/components/templates/PublicShell/PublicShell.tsx @@ -12,16 +12,7 @@ import Link from "next/link"; import { Logo } from "@/components/atoms/logo"; import { SiteFooter } from "@/components/organisms/SiteFooter"; import { useAuthStore } from "@/features/auth/stores/auth.store"; -import { - Wifi, - Smartphone, - Building2, - Lock, - Tv, - Wrench, - ChevronDown, - ArrowRight, -} from "lucide-react"; +import { Wifi, Smartphone, Building2, Lock, Wrench, ChevronDown, ArrowRight } from "lucide-react"; export interface PublicShellProps { children: ReactNode; @@ -118,13 +109,6 @@ export function PublicShell({ children }: PublicShellProps) { icon: , color: "bg-amber-50 text-amber-600", }, - { - href: "/services/tv", - label: "TV Services", - desc: "Satellite & Cable TV", - icon: , - color: "bg-rose-50 text-rose-600", - }, { href: "/services/onsite", label: "Onsite Support", diff --git a/apps/portal/src/features/landing-page/views/PublicLandingView.tsx b/apps/portal/src/features/landing-page/views/PublicLandingView.tsx index f8d0f4b9..b7ce6b68 100644 --- a/apps/portal/src/features/landing-page/views/PublicLandingView.tsx +++ b/apps/portal/src/features/landing-page/views/PublicLandingView.tsx @@ -11,15 +11,15 @@ import { BadgeCheck, Wrench, Building2, - Tv, MapPin, Mail, MessageSquare, PhoneCall, Train, - Globe, Server, Shield, + Code, + Settings, } from "lucide-react"; type ServiceCategory = "personal" | "business"; @@ -42,7 +42,6 @@ const personalServices: ServiceItem[] = [ href: "/services/sim", }, { title: "VPN Service", icon: , href: "/services/vpn" }, - { title: "TV Services", icon: , href: "/services/tv" }, { title: "Onsite Support", icon: , @@ -72,8 +71,13 @@ const businessServices: ServiceItem[] = [ href: "/services/business", }, { - title: "Website Construction & Maintenance", - icon: , + title: "Website Construction", + icon: , + href: "/services/business", + }, + { + title: "Website Maintenance", + icon: , href: "/services/business", }, ]; @@ -96,41 +100,35 @@ export function PublicLandingView() { { title: "Internet Plans", description: - "Utilizing NTT's optical fiber network, we deliver one of the most reliable Internet connections in Japan.", + "High-speed NTT fiber with English installation support. No Japanese paperwork, we handle everything for you.", icon: , href: "/services/internet", }, { title: "Phone Plans", description: - "Using NTT DOCOMO's vast mobile network, we deliver one of the most cost-friendly SIM card services in Japan.", + "SIM cards on Japan's best network. Foreign credit cards accepted, no hanko required. Get connected in days.", icon: , href: "/services/sim", }, { title: "Business Solutions", description: - "Dedicated Internet Access, office network setup, data center services, and ongoing tech support.", + "Enterprise IT for international companies. Dedicated internet, office networks, and bilingual tech support.", icon: , href: "/services/business", }, { title: "VPN", description: - "Choose any of our VPN server locations that connect directly from Tokyo with static routing.", + "Stream your favorite shows from home. Pre-configured router, just plug in and watch US/UK content.", icon: , href: "/services/vpn", }, - { - title: "TV Services", - description: "A variety of options for customers such as Satellite TV and Optical Fiber TV.", - icon: , - href: "/services/tv", - }, { title: "Onsite Support", description: - "Professional technical support at your residence or office for setup, configuration, and troubleshooting.", + "English-speaking technicians at your home or office. Router setup, network issues, and device help.", icon: , href: "/services/onsite", }, @@ -196,11 +194,17 @@ export function PublicLandingView() { title: "Acronis Quick Assist", href: "https://www.acronis.com/en/products/cloud/quick-assist/download/", image: "/assets/images/arconis.png", + description: + "Secure remote desktop tool for quick troubleshooting. Our technicians can view your screen and resolve issues in real-time.", + useCase: "Best for: General tech support & diagnostics", }, { title: "TeamViewer QS", href: "https://get.teamviewer.com/tokyo", image: "/assets/images/teamviewer.png", + description: + "Industry-standard remote access software. Allows our team to securely connect to your device for hands-on assistance.", + useCase: "Best for: Complex configurations & file transfers", }, ]; @@ -261,12 +265,12 @@ export function PublicLandingView() {

- One Stop Solution + A One Stop Solution for Your IT Needs

- Serving Japan's international community with reliable, English-supported - internet, mobile, and VPN solutions and many more. + No Japanese required. Get reliable internet, mobile, and VPN services with full + English support. Serving expats and international businesses for over 20 years.

{/* Services Grid - Fixed height for consistent sizing */} -
+
{(activeCategory === "personal" ? personalServices : businessServices).map( service => ( -
- {service.icon} +
+
svg]:h-10 [&>svg]:w-10" + : "[&>svg]:h-7 [&>svg]:w-7" + } + > + {service.icon} +
- + {service.title} @@ -351,17 +373,21 @@ export function PublicLandingView() {
-

+

Built on Trust and Excellence +

+

+ For over two decades, we've been helping foreigners, expats, and international + businesses in Japan navigate the tech landscape with confidence.

-

- For over two decades, we've been helping expats & businesses navigate complex - technological challenges with confidence. -

    - {["One Stop Solution", "English Support", "Onsite Support"].map(item => ( + {[ + "Full English support, no Japanese needed", + "Foreign credit cards accepted", + "Bilingual contracts and documentation", + ].map(item => (
  • {item} @@ -433,37 +459,62 @@ export function PublicLandingView() { {/* Support Downloads */} -
    -

    - SUPPORT -

    -
    +
    +
    +

    + Remote Support +

    +

    + Stuck with a tech issue? Our English-speaking technicians can connect to your device + remotely and fix problems in real-time. Download one of these secure tools to get + started. +

    +
    + +
    {supportDownloads.map(item => ( -
    -
    -

    {item.title}

    -
    -
    +
    +
    {item.title}
    +

    {item.title}

    +

    {item.useCase}

    +

    + {item.description} +

    Download
    ))}
    + +
    +

    + After downloading, run the application and share the session ID with our support team. +

    +

    + Contact us at{" "} + + info@asolutions.co.jp + {" "} + or call{" "} + + 0120-660-470 + +

    +
    {/* Contact Section */} diff --git a/apps/portal/src/features/marketing/views/AboutUsView.tsx b/apps/portal/src/features/marketing/views/AboutUsView.tsx index b779ad8a..fd8936ab 100644 --- a/apps/portal/src/features/marketing/views/AboutUsView.tsx +++ b/apps/portal/src/features/marketing/views/AboutUsView.tsx @@ -6,7 +6,6 @@ import { Wifi, Smartphone, Building2, - Tv, Lock, Wrench, Heart, @@ -26,27 +25,27 @@ import { export function AboutUsView() { const values = [ { - text: "Provide the most customer-oriented service in this industry in Japan.", + text: "Make technology accessible for everyone, regardless of language barriers.", icon: , color: "bg-rose-50 text-rose-500 border-rose-100", }, { - text: "Through our service, we save client's time and enrich customers' lives.", + text: "Save our customers time by handling Japanese bureaucracy and paperwork for them.", icon: , color: "bg-amber-50 text-amber-500 border-amber-100", }, { - text: "We always have the latest and most efficient knowledge required for our service.", + text: "Stay current with the latest technology to provide the best solutions for our clients.", icon: , color: "bg-sky-50 text-sky-500 border-sky-100", }, { - text: "Be a responsible participant in Japan's international community.", + text: "Be a bridge between Japan's tech infrastructure and its international community.", icon: , color: "bg-emerald-50 text-emerald-500 border-emerald-100", }, { - text: "Maintain high ethical standards in all business activities.", + text: "Operate with transparency and integrity in all our customer relationships.", icon: , color: "bg-violet-50 text-violet-500 border-violet-100", }, @@ -56,33 +55,29 @@ export function AboutUsView() { { title: "Internet Plans", description: - "Utilizing NTT's optical fiber network, we deliver one of the most reliable Internet connections in Japan.", + "High-speed NTT fiber with English support. We handle the Japanese paperwork so you don't have to.", icon: , }, { title: "Phone Plans", description: - "Using NTT DOCOMO's network, we deliver cost-friendly SIM card services across Japan.", + "SIM cards on Japan's best network. Foreign credit cards accepted, no hanko required.", icon: , }, { title: "Business Solutions", - description: "Dedicated Internet access, office network setup, data center services.", + description: + "Enterprise IT for international companies. Dedicated internet, office networks, and data centers.", icon: , }, { title: "VPN", - description: "Connect directly from Tokyo with static routing across global endpoints.", + description: "Stream your favorite shows from home. Pre-configured router for US/UK content.", icon: , }, - { - title: "TV Services", - description: "Options for Satellite TV and Optical Fiber TV tailored to your needs.", - icon: , - }, { title: "Onsite Support", - description: "Professional setup, configuration, and troubleshooting at your location.", + description: "English-speaking technicians at your door for setup and troubleshooting.", icon: , }, ]; @@ -141,14 +136,14 @@ export function AboutUsView() {

    - 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. + Since 2002, Assist Solutions has been the trusted IT partner for expats and + international businesses in Japan. We understand the unique challenges of living + and working in a country where language barriers can make simple tasks difficult.

    - We are dedicated to providing comfortable support for our customer's diverse - needs in both English and Japanese. Our excellent bi-lingual support, flexible - service, and deep industry knowledge set us apart. + Our bilingual team provides internet, mobile, VPN, and tech support services with + full English support. No Japanese required. We handle everything from contracts to + installation coordination, so you can focus on enjoying life in Japan.

    diff --git a/apps/portal/src/features/services/components/common/ServicesGrid.tsx b/apps/portal/src/features/services/components/common/ServicesGrid.tsx index e55965a3..4a32a0a5 100644 --- a/apps/portal/src/features/services/components/common/ServicesGrid.tsx +++ b/apps/portal/src/features/services/components/common/ServicesGrid.tsx @@ -1,5 +1,5 @@ import Link from "next/link"; -import { Building2, Wrench, Tv, ArrowRight, Wifi, Smartphone, Lock } from "lucide-react"; +import { Building2, Wrench, ArrowRight, Wifi, Smartphone, Lock } from "lucide-react"; interface ServicesGridProps { basePath?: string; @@ -18,8 +18,8 @@ export function ServicesGrid({ basePath = "/services" }: ServicesGridProps) { Internet

    - NTT fiber with speeds up to 10Gbps and professional installation support. Fast and - reliable connectivity. + High-speed NTT fiber up to 10Gbps with English installation support. We handle the + Japanese paperwork so you don't have to.

    View Plans{" "} @@ -38,8 +38,8 @@ export function ServicesGrid({ basePath = "/services" }: ServicesGridProps) { SIM & eSIM

    - Data, voice & SMS on NTT Docomo's nationwide network. Available as physical SIM or - instant eSIM. + Japan's best network coverage. Foreign credit cards accepted, no hanko required. + Physical SIM or instant eSIM available.

    View Plans{" "} @@ -58,8 +58,8 @@ export function ServicesGrid({ basePath = "/services" }: ServicesGridProps) { VPN

    - Access US/UK content with a pre-configured router. Easy plug & play setup for seamless - streaming. + Watch your favorite shows from home. Pre-configured router, just plug in and stream + US/UK content from Japan.

    View Plans{" "} @@ -78,8 +78,8 @@ export function ServicesGrid({ basePath = "/services" }: ServicesGridProps) { Business Solutions

    - Dedicated Internet Access (DIA), Office LAN setup, Data Center services, and - onsite/remote tech support. + Enterprise IT for international companies in Japan. Dedicated internet, office networks, + and bilingual tech support.

    Learn more{" "} @@ -98,28 +98,8 @@ export function ServicesGrid({ basePath = "/services" }: ServicesGridProps) { 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. + English-speaking technicians at your home or office. Network setup, device help, and + troubleshooting, explained in a language you understand.

    Learn more{" "} diff --git a/apps/portal/src/features/services/components/sim/SimPlansContent.tsx b/apps/portal/src/features/services/components/sim/SimPlansContent.tsx index f1c2cc8b..58dc87cb 100644 --- a/apps/portal/src/features/services/components/sim/SimPlansContent.tsx +++ b/apps/portal/src/features/services/components/sim/SimPlansContent.tsx @@ -165,35 +165,35 @@ export function SimPlansContent({ const hasExistingSim = useMemo(() => simPlans.some(p => p.simHasFamilyDiscount), [simPlans]); const simFeatures: HighlightFeature[] = [ + { + icon: , + title: "Foreign Cards Accepted", + description: "Use your overseas credit card. No Japanese bank account needed", + highlight: "Easy payment", + }, { icon: , - title: "NTT Docomo Network", - description: "Best area coverage among the main three carriers in Japan", - highlight: "Nationwide coverage", + title: "Japan's Best Network", + description: "NTT Docomo coverage reaches 99.9% of Japan's population", + highlight: "Nationwide", }, { icon: , title: "First Month Free", - description: "Basic fee waived on signup to get you started risk-free", + description: "Try risk-free. Your first month's basic fee is waived", highlight: "Great value", }, - { - icon: , - title: "Foreign Cards Accepted", - description: "We accept both foreign and Japanese credit cards", - highlight: "No hassle", - }, { icon: , - title: "No Binding Contract", - description: "Minimum 4 months service (1st month free + 3 billing months)", - highlight: "Flexible contract", + title: "Flexible Terms", + description: "No multi-year contracts. Stay as long as you need", + highlight: "No lock-in", }, { icon: , - title: "Number Portability", - description: "Easily switch to us keeping your current Japanese number", - highlight: "Keep your number", + title: "Keep Your Number", + description: "Switching from another carrier? Bring your Japanese number with you", + highlight: "Easy transfer", }, { icon: , @@ -288,11 +288,11 @@ export function SimPlansContent({ Powered by NTT DOCOMO

    - Choose Your SIM Plan + SIM Cards for Foreigners in Japan

    - Get connected with Japan's best network coverage. Choose eSIM for quick digital - delivery or physical SIM shipped to your door. + No hanko, no complicated Japanese forms. Get a SIM card with your foreign credit card and + English support. eSIM for instant delivery or physical SIM shipped to your door.

    @@ -399,6 +399,9 @@ export function SimPlansContent({ )}
    + {/* Device Compatibility Section - below plans */} + + {/* How It Works Section */}
    @@ -614,9 +617,6 @@ export function SimPlansContent({
    - {/* Device Compatibility Section */} - - {/* FAQ Section */}

    diff --git a/apps/portal/src/features/services/views/PublicInternetPlans.tsx b/apps/portal/src/features/services/views/PublicInternetPlans.tsx index a199e3fc..e41d4b26 100644 --- a/apps/portal/src/features/services/views/PublicInternetPlans.tsx +++ b/apps/portal/src/features/services/views/PublicInternetPlans.tsx @@ -11,6 +11,9 @@ import { Wrench, Globe, ChevronDown, + ChevronUp, + Home, + Building, } from "lucide-react"; import { usePublicInternetCatalog } from "@/features/services/hooks"; import type { @@ -204,6 +207,351 @@ function ConsolidatedInternetCard({ ); } +/** + * Offering type configuration for expandable plan cards + */ +interface OfferingTypeConfig { + id: string; + title: string; + badge: string; + badgeColor: string; + description: string; + icon: React.ReactNode; +} + +const offeringTypeConfigs: OfferingTypeConfig[] = [ + { + id: "home10g", + title: "Home 10Gbps", + badge: "10Gbps", + badgeColor: "bg-primary text-white", + description: "Ultra-fast fiber with the highest speeds available in Japan.", + icon: , + }, + { + id: "home1g", + title: "Home 1Gbps", + badge: "1Gbps", + badgeColor: "bg-gray-200 text-gray-700", + description: "High-speed fiber. The most popular choice for home internet.", + icon: , + }, + { + id: "apartment", + title: "Apartment", + badge: "Up to 1Gbps", + badgeColor: "bg-gray-200 text-gray-700", + description: + "For mansions and apartment buildings. Speed depends on your building (up to 1Gbps).", + icon: , + }, +]; + +/** + * Get offering type ID from plan's internetOfferingType field + */ +function getOfferingTypeId(offeringType: string | undefined): string { + if (!offeringType) return "home1g"; + const type = offeringType.toLowerCase(); + if (type.includes("10g") || type.includes("10gbps")) return "home10g"; + if (type.includes("apartment") || type.includes("mansion")) return "apartment"; + if (type.includes("1g") || type.includes("1gbps") || type.includes("home")) return "home1g"; + return "home1g"; +} + +/** + * Plan Card Header - Compact horizontal card for offering type + */ +function PlanCardHeader({ + config, + minPrice, + isExpanded, + onToggle, +}: { + config: OfferingTypeConfig; + minPrice: number; + isExpanded: boolean; + onToggle: () => void; +}) { + return ( +
    + {/* Header - Clickable to expand/collapse */} + +
    + ); +} + +/** + * Expanded Tier Details - Shows tier cards below the header cards + */ +function ExpandedTierDetails({ + config, + tiers, + setupFee, + ctaPath, + ctaLabel, + onCtaClick, +}: { + config: OfferingTypeConfig; + tiers: TierInfo[]; + setupFee: number; + ctaPath: string; + ctaLabel: string; + onCtaClick?: (e: React.MouseEvent) => void; +}) { + return ( +
    + {/* Header */} +
    +
    +
    + {config.icon} +
    +
    +
    +

    {config.title}

    + + {config.badge} + + {config.id === "home10g" && ( + (select areas) + )} +
    +
    +
    +
    + + {/* Tier Cards */} +
    +
    + {tiers.map(tier => ( +
    + {/* Popular Badge for Gold */} + {tier.tier === "Gold" && ( +
    + + + Popular + +
    + )} + + {/* Tier Name */} +

    + {tier.tier} +

    + + {/* Price */} +
    +
    + + ¥{tier.monthlyPrice.toLocaleString()} + + /mo +
    + {tier.pricingNote && ( + + {tier.pricingNote} + + )} +
    + + {/* Description */} +

    {tier.description}

    + + {/* Features */} +
      + {tier.features.map((feature, index) => ( +
    • + + + + {feature} +
    • + ))} +
    +
    + ))} +
    + + {/* Footer with setup fee and CTA */} +
    +

    + + + ¥{setupFee.toLocaleString()} one-time setup + {" "} + (or 12/24-month installment) +

    + {onCtaClick ? ( + + ) : ( + + )} +
    +
    +
    + ); +} + +/** + * Available Plans Section - Horizontal cards for each offering type with expandable details + */ +function AvailablePlansSection({ + plansByOffering, + setupFee, + ctaPath, + ctaLabel, + onCtaClick, +}: { + plansByOffering: Record; + setupFee: number; + ctaPath: string; + ctaLabel: string; + onCtaClick?: (e: React.MouseEvent) => void; +}) { + const [expandedCards, setExpandedCards] = useState>({ + home10g: false, + home1g: false, + apartment: false, + }); + + const toggleCard = (id: string) => { + setExpandedCards(prev => ({ ...prev, [id]: !prev[id] })); + }; + + // Get configs that have data + const availableConfigs = offeringTypeConfigs.filter(config => plansByOffering[config.id]); + + return ( +
    +

    Available Plans

    + + {/* Horizontal card headers */} +
    + {availableConfigs.map(config => { + const offeringData = plansByOffering[config.id]; + if (!offeringData) return null; + + return ( + toggleCard(config.id)} + /> + ); + })} +
    + + {/* Expanded tier details - shown below the horizontal cards */} +
    + {availableConfigs.map(config => { + const offeringData = plansByOffering[config.id]; + if (!offeringData || !expandedCards[config.id]) return null; + + return ( + + ); + })} +
    +
    + ); +} + export interface PublicInternetPlansContentProps { onCtaClick?: (e: React.MouseEvent) => void; ctaPath?: string; @@ -219,8 +567,8 @@ export function PublicInternetPlansContent({ onCtaClick, ctaPath: propCtaPath, ctaLabel = "Check Availability", - heroTitle = "Internet Service Plans", - heroDescription = "NTT Optical Fiber with full English support", + heroTitle = "Internet for Expats in Japan", + heroDescription = "Fast, reliable fiber internet with full English support. No Japanese required", }: PublicInternetPlansContentProps) { const { data: servicesCatalog, error } = usePublicInternetCatalog(); // Simple loading check: show skeleton until we have data or an error @@ -236,35 +584,35 @@ export function PublicInternetPlansContent({ description: "Japan's most reliable network with speeds up to 10Gbps", highlight: "99.9% uptime", }, - { - icon: , - title: "IPv6/IPoE Ready", - description: "Next-gen protocol for congestion-free browsing", - highlight: "No peak-hour slowdowns", - }, { icon: , - title: "Full English Support", - description: "Native English service for setup, billing & technical help", - highlight: "No language barriers", + title: "No Japanese Required", + description: "English contracts, English support, English installation coordination", + highlight: "Fully bilingual", }, { icon: , - title: "One Bill, One Provider", - description: "NTT line + ISP + equipment bundled with simple billing", - highlight: "No hidden fees", + title: "We Handle the Paperwork", + description: "No need to navigate Japanese forms or phone calls", + highlight: "Hassle-free setup", + }, + { + icon: , + title: "IPv6/IPoE Ready", + description: "Next-gen protocol for congestion-free browsing", + highlight: "No slowdowns", }, { icon: , - title: "On-site Support", - description: "Technicians can visit for installation & troubleshooting", - highlight: "Professional setup", + title: "English Onsite Support", + description: "Our technicians speak English and can visit your home", + highlight: "In-person help", }, { icon: , - title: "Flexible Options", - description: "Multiple ISP configs available, IPv4/PPPoE if needed", - highlight: "Customizable", + title: "Flexible Contracts", + description: "Monthly billing, no long-term commitment required", + highlight: "Cancel anytime", }, ]; @@ -321,6 +669,103 @@ export function PublicInternetPlansContent({ }; }, [servicesCatalog]); + // Plans grouped by offering type (Home 10G, Home 1G, Apartment) + const plansByOffering = useMemo(() => { + // Default pricing for each offering type (used when catalog doesn't have specific data) + const defaultOfferingPrices: Record< + string, + { silver: number; gold: number; platinum: number } + > = { + home10g: { silver: 8000, gold: 8500, platinum: 8500 }, + home1g: { silver: 6000, gold: 6500, platinum: 6500 }, + apartment: { silver: 4800, gold: 5300, platinum: 5300 }, + }; + + const tierOrder: Record = { Silver: 0, Gold: 1, Platinum: 2 }; + const offeringData: Record< + string, + { + minPrice: number; + tierData: Record; + } + > = {}; + + // Process catalog plans if available + if (servicesCatalog?.plans) { + for (const plan of servicesCatalog.plans) { + const offeringType = getOfferingTypeId(plan.internetOfferingType); + const tier = plan.internetPlanTier ?? "Silver"; + const price = plan.monthlyPrice ?? 0; + + if (!offeringData[offeringType]) { + offeringData[offeringType] = { minPrice: Infinity, tierData: {} }; + } + + offeringData[offeringType].minPrice = Math.min(offeringData[offeringType].minPrice, price); + + // Keep the price for this tier (use lowest if multiple plans for same tier) + if ( + !offeringData[offeringType].tierData[tier] || + price < offeringData[offeringType].tierData[tier].price + ) { + offeringData[offeringType].tierData[tier] = { price, plan }; + } + } + } + + // Ensure all three offering types exist with default data + for (const config of offeringTypeConfigs) { + if (!offeringData[config.id]) { + const defaults = defaultOfferingPrices[config.id]; + offeringData[config.id] = { + minPrice: defaults.silver, + tierData: { + Silver: { price: defaults.silver }, + Gold: { price: defaults.gold }, + Platinum: { price: defaults.platinum }, + }, + }; + } else { + // Fill in missing tiers with defaults + const defaults = defaultOfferingPrices[config.id]; + if (!offeringData[config.id].tierData.Silver) { + offeringData[config.id].tierData.Silver = { price: defaults.silver }; + } + if (!offeringData[config.id].tierData.Gold) { + offeringData[config.id].tierData.Gold = { price: defaults.gold }; + } + if (!offeringData[config.id].tierData.Platinum) { + offeringData[config.id].tierData.Platinum = { price: defaults.platinum }; + } + // Recalculate min price + const allPrices = Object.values(offeringData[config.id].tierData).map(t => t.price); + offeringData[config.id].minPrice = Math.min(...allPrices); + } + } + + // Convert to the format expected by AvailablePlansSection + const result: Record = {}; + + for (const [offeringType, data] of Object.entries(offeringData)) { + const tiers: TierInfo[] = Object.entries(data.tierData) + .sort(([a], [b]) => (tierOrder[a] ?? 99) - (tierOrder[b] ?? 99)) + .map(([tier, tierInfo]) => ({ + tier: tier as TierInfo["tier"], + monthlyPrice: tierInfo.price, + description: getTierDescription(tier), + features: getTierFeatures(tier), + pricingNote: tier === "Platinum" ? "+ equipment fees" : undefined, + })); + + result[offeringType] = { + minPrice: data.minPrice, + tiers, + }; + } + + return result; + }, [servicesCatalog]); + // Error state if (error) { return ( @@ -366,6 +811,17 @@ export function PublicInternetPlansContent({ ) : null}

    + {/* Available Plans - Expandable cards by offering type */} + {!isLoading && plansByOffering && consolidatedPlanData && ( + + )} + {/* How It Works Section */} diff --git a/apps/portal/src/features/services/views/PublicVpnPlans.tsx b/apps/portal/src/features/services/views/PublicVpnPlans.tsx index a78cb80e..40563565 100644 --- a/apps/portal/src/features/services/views/PublicVpnPlans.tsx +++ b/apps/portal/src/features/services/views/PublicVpnPlans.tsx @@ -61,39 +61,39 @@ export function PublicVpnPlansView() { const vpnFeatures: HighlightFeature[] = [ { icon: , - title: "Pre-configured Router", - description: "Ready to use out of the box — just plug in and connect", + title: "Zero Setup Required", + description: "Router arrives pre-configured. Just plug in and you're connected", highlight: "Plug & play", }, + { + icon: , + title: "Stream from Home", + description: "Watch Netflix, Hulu, BBC iPlayer and more from the US or UK", + highlight: "Your content", + }, { icon: , title: "US & UK Servers", - description: "Access content from San Francisco or London regions", - highlight: "2 locations", - }, - { - icon: , - title: "Streaming Ready", - description: "Works with Apple TV, Roku, Amazon Fire, and more", - highlight: "All devices", + description: "Choose San Francisco for US content or London for UK content", + highlight: "2 regions", }, { icon: , - title: "Separate Network", - description: "VPN runs on dedicated WiFi, keep regular internet normal", - highlight: "No interference", + title: "Dedicated VPN WiFi", + description: "Separate network for VPN. Your regular internet stays fast", + highlight: "No slowdown", }, { icon: , - title: "Router Rental Included", - description: "No equipment purchase — router rental is part of the plan", - highlight: "No hidden costs", + title: "All-Inclusive Rental", + description: "Router rental included in your monthly fee. Nothing extra to buy", + highlight: "Simple pricing", }, { icon: , title: "English Support", - description: "Full English assistance for setup and troubleshooting", - highlight: "Dedicated help", + description: "Questions? Our English-speaking team is here to help", + highlight: "We speak your language", }, ]; @@ -102,8 +102,8 @@ export function PublicVpnPlansView() { {/* Service Highlights */} diff --git a/apps/portal/src/features/support/views/PublicContactView.tsx b/apps/portal/src/features/support/views/PublicContactView.tsx index cafe6da0..6fca97df 100644 --- a/apps/portal/src/features/support/views/PublicContactView.tsx +++ b/apps/portal/src/features/support/views/PublicContactView.tsx @@ -122,10 +122,11 @@ export function PublicContactView() {

- Support & Contact + We Speak Your Language

- Have a question? We're here to help. Reach out through any channel below. + Have a question about our services? Our English-speaking team is here to help. No Japanese + required. Reach out through any channel below.

diff --git a/apps/portal/src/features/support/views/PublicSupportView.tsx b/apps/portal/src/features/support/views/PublicSupportView.tsx index 06342632..44b7a546 100644 --- a/apps/portal/src/features/support/views/PublicSupportView.tsx +++ b/apps/portal/src/features/support/views/PublicSupportView.tsx @@ -37,9 +37,10 @@ export function PublicSupportView() {
-

How can we help?

+

How Can We Help?

- Find answers to common questions or get in touch with our support team. + Questions about our services? Our English-speaking team is ready to assist. Find answers + below or reach out directly.