Files
property-management-network/app/(marketing)/tenant-portal-info/page.tsx
T
Leon SerfatyandClaude Opus 4.8 857b9a7811 Initial import: property management SaaS + security hardening + admin dashboard
Property Management Network — Next.js 16 (App Router), Better Auth,
Drizzle ORM over PostgreSQL, Stripe, OpenAI, Resend.

Includes:
- Security hardening: access-control/IDOR fixes, TLS-by-default DB layer,
  constant-time cron auth, strict security headers, atomic AI quota gating,
  HTML/email output encoding, demo-backdoor disabled in production.
- Superadmin dashboard at /admin (overview/MRR, server-paginated users with
  ban/impersonate/plan/delete, billing, platform activity + admin audit log,
  AI usage, system health) via the Better Auth admin plugin.
- Seed/migration utility scripts under scripts/.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 20:36:07 -04:00

113 lines
6.5 KiB
TypeScript

import Link from "next/link"
import { Building2, CheckCircle2, Smartphone, Bell, FileText, ArrowRight } from "lucide-react"
export const metadata = {
title: "Tenant Portal — Property Management Network",
description: "Give your tenants a dedicated portal to pay rent, submit maintenance requests, and view lease details.",
}
const FEATURES = [
{ icon: CheckCircle2, color: "text-emerald-400", bg: "bg-emerald-500/10 border-emerald-500/20", title: "Online Rent Payment", desc: "Tenants pay rent securely via Stripe — card or bank transfer. Auto-receipts sent by email." },
{ icon: FileText, color: "text-indigo-400", bg: "bg-indigo-500/10 border-indigo-500/20", title: "Lease Documents", desc: "View and download lease agreements, addendums, and move-in checklists anytime." },
{ icon: Building2, color: "text-violet-400", bg: "bg-violet-500/10 border-violet-500/20", title: "Maintenance Requests", desc: "Submit maintenance issues with photos. Track status from open → in progress → resolved." },
{ icon: Bell, color: "text-amber-400", bg: "bg-amber-500/10 border-amber-500/20", title: "Smart Notifications", desc: "Rent due reminders, request updates, and landlord messages via email or WhatsApp." },
{ icon: Smartphone, color: "text-blue-400", bg: "bg-blue-500/10 border-blue-500/20", title: "Mobile Friendly", desc: "Works perfectly on any device — no app download needed, just a secure link." },
{ icon: FileText, color: "text-rose-400", bg: "bg-rose-500/10 border-rose-500/20", title: "Payment History", desc: "Full history of all payments and receipts. Great for tenant records and disputes." },
]
export default function TenantPortalInfoPage() {
return (
<div className="bg-[#09090b] text-white min-h-screen">
{/* Hero */}
<div className="relative overflow-hidden pt-32 pb-20">
<div className="absolute top-0 left-1/2 -translate-x-1/2 h-[400px] w-[700px] rounded-full bg-indigo-600/15 blur-[100px] -z-10" />
<div className="mx-auto max-w-4xl px-6 text-center">
<div className="inline-flex items-center gap-2 rounded-full border border-indigo-500/30 bg-indigo-500/10 px-4 py-1.5 text-xs font-medium text-indigo-300 mb-6">
<span className="h-1.5 w-1.5 rounded-full bg-indigo-400" />
For Tenants & Landlords
</div>
<h1 className="text-3xl sm:text-4xl lg:text-5xl font-bold leading-tight mb-6">
A dedicated portal<br />
<span className="bg-gradient-to-r from-indigo-400 via-violet-400 to-indigo-400 bg-clip-text text-transparent">
your tenants will actually use
</span>
</h1>
<p className="text-lg text-white/50 max-w-2xl mx-auto leading-relaxed mb-10">
Send tenants a secure link no account required. They can pay rent, submit maintenance requests,
and access their lease documents in seconds.
</p>
<div className="flex flex-wrap gap-3 justify-center">
<Link
href="/signup"
className="flex items-center gap-2 rounded-xl bg-indigo-600 px-6 py-3 text-sm font-semibold text-white hover:bg-indigo-500 transition-all hover:shadow-lg hover:shadow-indigo-500/25"
>
Get started free <ArrowRight className="h-4 w-4" />
</Link>
<Link
href="/login"
className="flex items-center gap-2 rounded-xl border border-white/10 bg-white/[0.04] px-6 py-3 text-sm font-medium text-white/70 hover:text-white hover:bg-white/[0.08] transition-all"
>
Sign in to dashboard
</Link>
</div>
</div>
</div>
{/* Features grid */}
<div className="mx-auto max-w-6xl px-6 pb-24">
<div className="text-center mb-12">
<h2 className="text-2xl font-bold text-white sm:text-3xl">Everything tenants need, nothing they don&apos;t</h2>
<p className="mt-3 text-white/40">Clean, fast, and works on any device.</p>
</div>
<div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
{FEATURES.map((f) => (
<div key={f.title} className={`rounded-2xl border p-6 ${f.bg} transition-all hover:scale-[1.02]`}>
<div className={`flex h-10 w-10 items-center justify-center rounded-xl bg-black/20 mb-4`}>
<f.icon className={`h-5 w-5 ${f.color}`} />
</div>
<h3 className="font-semibold text-white mb-2">{f.title}</h3>
<p className="text-sm text-white/50 leading-relaxed">{f.desc}</p>
</div>
))}
</div>
</div>
{/* How it works */}
<div className="border-t border-white/[0.06] py-24">
<div className="mx-auto max-w-4xl px-6">
<div className="text-center mb-12">
<h2 className="text-2xl font-bold text-white sm:text-3xl">How it works</h2>
</div>
<div className="grid grid-cols-1 sm:grid-cols-3 gap-6">
{[
{ step: "01", title: "Add your tenant", desc: "Enter your tenant's name and email in your Property Management Network dashboard." },
{ step: "02", title: "Send the link", desc: "Property Management Network generates a secure, unique portal link and emails it automatically." },
{ step: "03", title: "Tenant accesses portal", desc: "No sign-up needed. Tenant clicks the link and has instant access to their portal." },
].map((s) => (
<div key={s.step} className="relative">
<div className="text-5xl font-black text-white/[0.04] mb-3">{s.step}</div>
<h3 className="font-semibold text-white mb-2">{s.title}</h3>
<p className="text-sm text-white/50 leading-relaxed">{s.desc}</p>
</div>
))}
</div>
</div>
</div>
{/* CTA */}
<div className="border-t border-white/[0.06] py-20">
<div className="mx-auto max-w-2xl px-6 text-center">
<h2 className="text-2xl font-bold text-white mb-4">Ready to give tenants a better experience?</h2>
<p className="text-white/40 mb-8">Free plan includes up to 2 properties and unlimited tenant portal access.</p>
<Link
href="/signup"
className="inline-flex items-center gap-2 rounded-xl bg-indigo-600 px-8 py-3.5 text-sm font-semibold text-white hover:bg-indigo-500 transition-all hover:shadow-lg hover:shadow-indigo-500/25"
>
Start for free <ArrowRight className="h-4 w-4" />
</Link>
</div>
</div>
</div>
)
}