From 48eb8c87251d869142d181f675cf42102ae00bf6 Mon Sep 17 00:00:00 2001 From: barsa Date: Wed, 4 Mar 2026 18:57:30 +0900 Subject: [PATCH] style: enhance layout and design of service components - Updated ServicesPage layout by removing unnecessary padding for a cleaner appearance. - Added a "Contact" link to the PublicShell navigation for improved accessibility. - Refined AboutUsView by restructuring service and value data for better clarity and organization. - Improved styling consistency across various service components, including ServiceCTA, ServiceFAQ, and ServiceHighlights, by adjusting spacing and typography. - Enhanced InternetOfferingCard and PublicOfferingCard with updated tier styles and visual hierarchy for better user experience. --- .../src/app/(public)/(site)/services/page.tsx | 2 +- .../templates/PublicShell/PublicShell.tsx | 13 + .../features/marketing/views/AboutUsView.tsx | 653 +++++++++--------- .../services/components/base/HowItWorks.tsx | 40 +- .../services/components/base/ServiceCTA.tsx | 33 +- .../services/components/base/ServiceFAQ.tsx | 41 +- .../components/base/ServiceHighlights.tsx | 62 +- .../services/components/base/ServicesHero.tsx | 12 +- .../common/ServicesOverviewContent.tsx | 349 +++++----- .../internet/InternetOfferingCard.tsx | 218 +++--- .../internet/PublicOfferingCard.tsx | 229 +++--- .../components/sim/SimHowItWorksSection.tsx | 118 +--- .../components/sim/SimPlansContent.tsx | 468 +++++++------ .../services/components/vpn/VpnPlanCard.tsx | 101 ++- .../components/vpn/VpnPlansContent.tsx | 96 ++- .../support/views/PublicSupportView.tsx | 32 +- 16 files changed, 1197 insertions(+), 1270 deletions(-) diff --git a/apps/portal/src/app/(public)/(site)/services/page.tsx b/apps/portal/src/app/(public)/(site)/services/page.tsx index 31c2a801..d0a29015 100644 --- a/apps/portal/src/app/(public)/(site)/services/page.tsx +++ b/apps/portal/src/app/(public)/(site)/services/page.tsx @@ -22,7 +22,7 @@ export const metadata: Metadata = { export default function ServicesPage() { return ( -
+
); diff --git a/apps/portal/src/components/templates/PublicShell/PublicShell.tsx b/apps/portal/src/components/templates/PublicShell/PublicShell.tsx index 5538f3ce..e6f10b04 100644 --- a/apps/portal/src/components/templates/PublicShell/PublicShell.tsx +++ b/apps/portal/src/components/templates/PublicShell/PublicShell.tsx @@ -261,6 +261,12 @@ export function PublicShell({ children }: PublicShellProps) { > Support + + Contact + {/* Spacer for mobile only - takes center column when nav is hidden */} @@ -396,6 +402,13 @@ export function PublicShell({ children }: PublicShellProps) { > Support + + Contact +
diff --git a/apps/portal/src/features/marketing/views/AboutUsView.tsx b/apps/portal/src/features/marketing/views/AboutUsView.tsx index 53b57181..aff40126 100644 --- a/apps/portal/src/features/marketing/views/AboutUsView.tsx +++ b/apps/portal/src/features/marketing/views/AboutUsView.tsx @@ -1,7 +1,5 @@ -"use client"; - import Image from "next/image"; -import { useCallback, useEffect, useRef, useState } from "react"; +import type { LucideIcon } from "lucide-react"; import { Wifi, Smartphone, @@ -13,349 +11,342 @@ import { Lightbulb, Globe, Shield, - Quote, + MapPin, + Phone, + Users, + Calendar, + Banknote, + BriefcaseBusiness, } from "lucide-react"; -/** - * AboutUsView - Corporate profile and company information - * - * Displays company background, corporate data, business activities, - * and mission statement for Assist Solutions. - */ -export function AboutUsView() { - const values = [ - { - text: "Make technology accessible for everyone, regardless of language barriers.", - icon: , - color: "bg-rose-50 text-rose-500 border-rose-100", - }, - { - 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: "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 bridge between Japan's tech infrastructure and its international community.", - icon: , - color: "bg-emerald-50 text-emerald-500 border-emerald-100", - }, - { - text: "Operate with transparency and integrity in all our customer relationships.", - icon: , - color: "bg-violet-50 text-violet-500 border-violet-100", - }, - ]; +/* ─── Data ─── */ - const services = [ - { - title: "Internet Plans", - description: - "High-speed NTT fiber with English support. We handle the Japanese paperwork so you don't have to.", - icon: , - }, - { - title: "Phone Plans", - description: - "SIM cards on Japan's best network. Foreign credit cards accepted, no hanko required.", - icon: , - }, - { - title: "Business Solutions", - description: - "Enterprise IT for international companies. Dedicated internet, office networks, and data centers.", - icon: , - }, - { - title: "VPN", - description: "Stream your favorite shows from home. Pre-configured router for US/UK content.", - icon: , - }, - { - title: "Onsite Support", - description: "English-speaking technicians at your door for setup and troubleshooting.", - icon: , - }, - ]; +const services: { title: string; description: string; icon: LucideIcon }[] = [ + { + title: "Internet Plans", + description: + "High-speed NTT fiber with English support. We handle the Japanese paperwork so you don't have to.", + icon: Wifi, + }, + { + title: "Phone Plans", + description: + "SIM cards on Japan's best network. Foreign credit cards accepted, no hanko required.", + icon: Smartphone, + }, + { + title: "Business Solutions", + description: + "Enterprise IT for international companies. Dedicated internet, office networks, and data centers.", + icon: Building2, + }, + { + title: "VPN", + description: "Stream your favorite shows from home. Pre-configured router for US/UK content.", + icon: Lock, + }, + { + title: "Onsite Support", + description: "English-speaking technicians at your door for setup and troubleshooting.", + icon: Wrench, + }, +]; - const carouselRef = useRef(null); - const [scrollAmount, setScrollAmount] = useState(0); +const values: { + title: string; + text: string; + icon: LucideIcon; + accent: string; +}[] = [ + { + title: "Accessibility", + text: "Make technology accessible for everyone, regardless of language barriers.", + icon: Heart, + accent: "text-rose-500 bg-rose-500/10", + }, + { + title: "Time-Saving", + text: "Save our customers time by handling Japanese bureaucracy and paperwork for them.", + icon: Clock3, + accent: "text-amber-500 bg-amber-500/10", + }, + { + title: "Innovation", + text: "Stay current with the latest technology to provide the best solutions for our clients.", + icon: Lightbulb, + accent: "text-sky-500 bg-sky-500/10", + }, + { + title: "Connection", + text: "Be a bridge between Japan's tech infrastructure and its international community.", + icon: Globe, + accent: "text-emerald-500 bg-emerald-500/10", + }, + { + title: "Integrity", + text: "Operate with transparency and integrity in all our customer relationships.", + icon: Shield, + accent: "text-violet-500 bg-violet-500/10", + }, +]; - const computeScrollAmount = useCallback(() => { - const container = carouselRef.current; - if (!container) return; - const card = container.querySelector("[data-business-card]"); - if (!card) return; - const gap = - Number.parseFloat(getComputedStyle(container).columnGap || "0") || - Number.parseFloat(getComputedStyle(container).gap || "0") || - 24; - setScrollAmount(card.clientWidth + gap); - }, []); +const corporateDetails: { label: string; value: string; icon: LucideIcon }[] = [ + { + label: "Representative Director", + value: "Daisuke Nagakawa", + icon: Users, + }, + { + label: "Employees", + value: "21 Staff Members (as of March 31st, 2025)", + icon: BriefcaseBusiness, + }, + { label: "Established", value: "March 8, 2002", icon: Calendar }, + { label: "Paid in Capital", value: "40,000,000 JPY", icon: Banknote }, +]; - const scrollServices = useCallback( - (direction: 1 | -1) => { - const container = carouselRef.current; - if (!container) return; - const amount = scrollAmount || container.clientWidth; - container.scrollBy({ left: direction * amount, behavior: "smooth" }); - }, - [scrollAmount] - ); +const businessHours = [ + { team: "Customer Support Team", hours: "Mon \u2013 Fri 9:30AM \u2013 6:00PM" }, + { team: "In-office Tech Support Team", hours: "Mon \u2013 Fri 9:30AM \u2013 6:00PM" }, + { team: "Onsite Tech Support Team", hours: "Mon \u2013 Sat 10:00AM \u2013 9:00PM" }, +]; - useEffect(() => { - computeScrollAmount(); - window.addEventListener("resize", computeScrollAmount); - return () => window.removeEventListener("resize", computeScrollAmount); - }, [computeScrollAmount]); +/* ─── Full-width section wrapper ─── */ +const SECTION_BASE = "relative left-1/2 right-1/2 w-screen -translate-x-1/2"; + +const HERO_GLOW_STYLE = { + background: "radial-gradient(circle, oklch(0.7 0.12 234.4 / 0.35), transparent 70%)", +} as const; + +/* ─── Section components ─── */ + +function HeroSection() { return ( -
- {/* Hero with geometric pattern */} -
- {/* Dot grid pattern */} -
- {/* Subtle gradient overlay for depth */} -
-
-
-
-

- About Us -

-
-

- 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. -

-

- 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. -

-
-
-
- Assist Solutions team in Tokyo -
-
-
- {/* Gradient fade to Business Solutions section */} -
-
- - {/* Business Solutions Carousel */} -
- {/* Gradient fade to next section */} -
-
-
-

Business

-
-
-
- {services.map((service, idx) => ( -
-
{service.icon}
-

{service.title}

-

- {service.description} -

-
- ))} -
-
- - -
-
-
-
- - {/* Our Values Section */} -
- {/* Gradient fade to next section */} -
- -
-
-

Our Values

-

- These principles guide how we serve customers, support our community, and advance our - craft every day. -

-
- - {/* Values Grid - 3 on top, 2 centered on bottom */} -
- {/* Top row - 3 cards */} -
- {values.slice(0, 3).map((value, index) => ( -
- {/* Icon */} -
- {value.icon} -
- {/* Quote mark decoration */} - - {/* Text */} -

{value.text}

-
- ))} -
- - {/* Bottom row - 2 cards centered */} -
- {values.slice(3).map((value, index) => ( -
- {/* Icon */} -
- {value.icon} -
- {/* Quote mark decoration */} - - {/* Text */} -

{value.text}

-
- ))} -
-
-
-
- - {/* Corporate Data Section */} -
-
- {/* Row 1: headings same level */} -
-

Corporate Data

-
-

Address

-

- 3F Azabu Maruka Bldg., 3-8-2 Higashi Azabu, -
- Minato-ku, Tokyo 106-0044 -
- Tel: 03-3560-1006 Fax: 03-3560-1007 +

+
+
+
+
+ + Since 2002 + +

+ Your Trusted IT Partner in Japan +

+
+

+ Assist Solutions has been the go-to IT partner for expats and international + businesses in Japan for over two decades. We understand the unique challenges of + living and working where language barriers can make simple tasks difficult. +

+

+ Our bilingual team provides internet, mobile, VPN, and tech support with full + English service. No Japanese required — we handle everything from contracts to + installation.

- - {/* Row 2: corporate data list | map (no stretch, no extra space below left column) */} -
-
-
-

- - Representative Director -

-

Daisuke Nagakawa

-
- -
-

- - Employees -

-

- 21 Staff Members (as of March 31st, 2025) -

-
- -
-

- - Established -

-

March 8, 2002

-
- -
-

- - Paid in Capital -

-

40,000,000 JPY

-
- -
-

- - 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

-
-
-
- -
-