Files
device-management/resources/js/pages/welcome.tsx
T
Wian Drs 60946ddf37
tests / ci (push) Has been cancelled
update lisensi prosess
2026-08-25 13:43:55 +07:00

265 lines
12 KiB
TypeScript

import { Head, Link, usePage } from '@inertiajs/react';
import { BookOpen, Cloud, Network, Server, ShieldCheck } from 'lucide-react';
import PublicThemeToggle from '@/components/public-theme-toggle';
import { dashboard, login } from '@/routes';
export default function Welcome() {
const { auth } = usePage().props;
const features = [
{
icon: Network,
title: 'Centralized NDM',
text: 'Kelola akun dan perangkat jaringan multi-vendor dari satu tempat.',
},
{
icon: ShieldCheck,
title: 'Tenant Isolation',
text: 'Data, role, credential, dan operasi setiap ISP dipisahkan di backend.',
},
{
icon: Cloud,
title: 'Managed Cloud',
text: 'Gunakan layanan terpusat RADIQ NDM tanpa mengelola server aplikasi.',
},
{
icon: Server,
title: 'Self Hosted',
text: 'Instal di server sendiri dengan lisensi yang tetap dikelola control plane RADIQ.',
},
];
return (
<>
<Head title="Network Device Management" />
<main className="min-h-screen bg-background text-foreground transition-colors">
<div className="mx-auto flex min-h-screen max-w-6xl flex-col px-6">
<header className="flex items-center justify-between py-6">
<div className="flex items-center gap-3">
<img
src="/images/radiq-ndm-logo.png"
alt="RADIQ NDM"
className="size-14 object-contain"
/>
<div>
<div className="font-semibold tracking-wide">
RADIQ NDM
</div>
<div className="text-xs text-sky-600 dark:text-sky-300">
Network Device Management
</div>
</div>
</div>
<nav className="flex items-center gap-3">
<PublicThemeToggle />
<Link
href="/documentation/deployment"
className="hidden text-sm text-muted-foreground hover:text-foreground sm:inline"
>
Dokumentasi
</Link>
{!auth.user && (
<Link
href="/register"
className="rounded-lg border border-sky-500/40 px-4 py-2.5 text-sm font-semibold text-sky-600 hover:bg-sky-400/10 dark:text-sky-300"
>
Daftar Tenant
</Link>
)}
<Link
href={auth.user ? dashboard() : login()}
className="rounded-lg bg-sky-500 px-5 py-2.5 text-sm font-semibold text-slate-950 hover:bg-sky-400"
>
{auth.user ? 'Dashboard' : 'Login'}
</Link>
</nav>
</header>
<section className="grid flex-1 items-center gap-12 py-16 lg:grid-cols-2">
<div>
<div className="mb-4 inline-flex rounded-full border border-sky-400/30 bg-sky-400/10 px-3 py-1 text-xs font-medium text-sky-300">
Built for ISP & Network Operations
</div>
<h1 className="text-4xl font-bold tracking-tight sm:text-6xl">
Kelola akses perangkat jaringan dengan aman.
</h1>
<p className="mt-6 max-w-xl text-lg leading-8 text-muted-foreground">
Saat karyawan berpindah tugas atau keluar, akun
perangkat dapat dinonaktifkan secara terpusat
tanpa membuka setiap router, OLT, switch, atau
access point satu per satu.
</p>
<div className="mt-8 flex flex-wrap gap-3">
<Link
href="/register"
className="rounded-lg bg-sky-500 px-5 py-3 font-semibold text-slate-950 hover:bg-sky-400"
>
Mulai & Pilih Deployment
</Link>
<Link
href="/documentation/deployment"
className="inline-flex items-center gap-2 rounded-lg border border-border px-5 py-3 font-semibold hover:bg-muted"
>
<BookOpen className="size-4" /> Panduan
Instalasi & Migrasi
</Link>
</div>
</div>
<div className="flex justify-center">
<img
src="/images/radiq-ndm-logo.png"
alt="RADIQ NDM network logo"
className="w-full max-w-lg object-contain drop-shadow-[0_0_40px_rgba(14,165,233,0.25)]"
/>
</div>
</section>
<section className="grid gap-4 pb-16 sm:grid-cols-2 lg:grid-cols-4">
{features.map((feature) => (
<article
key={feature.title}
className="rounded-2xl border border-border bg-card p-5"
>
<feature.icon className="mb-4 size-6 text-sky-400" />
<h2 className="font-semibold">
{feature.title}
</h2>
<p className="mt-2 text-sm leading-6 text-muted-foreground">
{feature.text}
</p>
</article>
))}
</section>
<Pricing />
<Roadmap />
</div>
</main>
</>
);
}
const plans = [
{
name: 'Cloud Free',
price: 'Gratis',
deployment: 'Cloud RADIQ',
devices: '5 perangkat',
users: '2 user aplikasi',
featured: false,
},
{
name: 'Cloud Micro',
price: 'Rp99.000',
deployment: 'Cloud RADIQ',
devices: '25 perangkat',
users: '5 user aplikasi',
featured: false,
},
{
name: 'Cloud ISP',
price: 'Rp249.000',
deployment: 'Cloud RADIQ',
devices: '100 perangkat',
users: '15 user aplikasi',
featured: true,
},
{
name: 'Local Micro',
price: 'Rp69.000',
deployment: 'Self-hosted',
devices: '50 perangkat',
users: '5 user aplikasi',
featured: false,
},
{
name: 'Local ISP',
price: 'Rp149.000',
deployment: 'Self-hosted',
devices: '250 perangkat',
users: '20 user aplikasi',
featured: false,
},
];
function Pricing() {
return (
<section id="harga" className="py-16">
<div className="mx-auto max-w-3xl text-center">
<p className="text-sm font-semibold text-sky-600 dark:text-sky-400">
HARGA EARLY ACCESS
</p>
<h2 className="mt-3 text-3xl font-bold">
Lisensi bulanan yang ramah untuk ISP lokal
</h2>
<p className="mt-3 text-muted-foreground">
Tidak ada kontrak tahunan wajib. User perangkat tidak
dihitung sebagai user aplikasi.
</p>
</div>
<div className="mt-9 grid gap-4 md:grid-cols-2 xl:grid-cols-5">
{plans.map((plan) => (
<article
key={plan.name}
className={`relative rounded-2xl border p-5 ${plan.featured ? 'border-sky-500 bg-sky-500/5 shadow-lg shadow-sky-500/10' : 'border-border bg-card'}`}
>
{plan.featured && (
<span className="absolute -top-3 left-4 rounded-full bg-sky-500 px-3 py-1 text-xs font-semibold text-slate-950">
Paling sesuai ISP
</span>
)}
<p className="text-sm font-semibold text-sky-600 dark:text-sky-400">
{plan.deployment}
</p>
<h3 className="mt-2 text-xl font-bold">{plan.name}</h3>
<p className="mt-4 text-2xl font-bold">
{plan.price}
{plan.price !== 'Gratis' && (
<span className="text-sm font-normal text-muted-foreground">
/bulan
</span>
)}
</p>
<ul className="mt-5 space-y-2 text-sm text-muted-foreground">
<li>✓ Hingga {plan.devices}</li>
<li>✓ Hingga {plan.users}</li>
<li>✓ Users Perangkat tanpa batas</li>
<li>✓ Update aplikasi</li>
<li>✓ Dukungan dasar</li>
</ul>
<Link
href="/register"
className="mt-6 block rounded-lg bg-sky-500 px-4 py-2.5 text-center text-sm font-semibold text-slate-950 hover:bg-sky-400"
>
Pilih paket
</Link>
</article>
))}
</div>
<p className="mt-5 text-center text-xs leading-5 text-muted-foreground">
Harga belum termasuk PPN, VPS/server tenant, instalasi khusus,
atau migrasi manual. Harga dapat dievaluasi seiring penambahan
fitur dengan pemberitahuan sebelumnya.
</p>
</section>
);
}
function Roadmap() {
return (
<section className="pb-16">
<div className="rounded-2xl border border-border bg-muted/40 p-7">
<p className="text-sm font-semibold text-sky-600 dark:text-sky-400">
ROADMAP · BELUM TERMASUK FITUR AKTIF
</p>
<h2 className="mt-2 text-2xl font-bold">
RADIQ NDM akan tumbuh bersama kebutuhan operator jaringan.
</h2>
<p className="mt-3 max-w-3xl text-sm leading-6 text-muted-foreground">
Harga early-access saat ini mencerminkan aplikasi yang masih
sekitar 30% dari visi produk. Tahap berikutnya direncanakan
mencakup monitoring terpusat, topologi perangkat, dashboard
NOC, alert status perangkat, histori performa, backup
konfigurasi, dan dukungan vendor tambahan.
</p>
</div>
</section>
);
}