Production-ready website for Kamson Financial Services. Built with Next.js 14, TypeScript, Tailwind CSS, and Supabase.
| Layer | Technology |
|---|---|
| Framework | Next.js 14 (App Router) |
| Language | TypeScript |
| Styling | Tailwind CSS |
| Database | Supabase (PostgreSQL) |
| Deployment | Vercel |
| Fonts | Playfair Display (headings) + Inter (body) |
# 1. Install dependencies
npm install
# 2. Configure environment
cp .env.example .env.local
# Edit .env.local with your Supabase credentials
# 3. Set up database
# Run supabase/schema.sql in your Supabase SQL editor
# 4. Start development server
npm run dev
All website content lives in one file:
src/content/homepage.ts
Every section — hero headline, trust metrics, transaction amounts, testimonials, contact details — is in this file. Edit it directly. TypeScript will catch any structural errors.
hero.ctas.call.href → real phone numberhero.ctas.whatsapp.href → real WhatsApp numbernav.phoneDisplay + nav.phoneHref → real phonetrustMetrics[2].value → verify actual financing volumefounder.imageSrc → real founder photo at /public/placeholders/founder.jpgbankingPartners.partners[*].logoSrc → real bank logostransactions → verify amounts with Kamsonreviews → replace with actual Google reviewscontact.channels[3].sub → real office addresscontact.channels[3].href → real Google Maps linkseo.schema.telephone → real phonesrc/
├── app/
│ ├── layout.tsx # Root layout + SEO metadata
│ ├── page.tsx # Homepage (composes all 16 sections)
│ ├── globals.css # Design tokens + Tailwind base
│ └── api/
│ ├── contact/ # Lead capture → Supabase
│ └── partner/ # Partner enquiry → Supabase
├── components/
│ ├── layout/
│ │ ├── Navigation.tsx # Sticky nav, mobile hamburger
│ │ ├── MobileActionBar.tsx # Call / WhatsApp / Schedule
│ │ └── WhatsAppButton.tsx # Desktop floating button
│ └── sections/
│ ├── 01-HeroSection.tsx
│ ├── 02-TrustMetrics.tsx
│ ├── 03-ReferralStrip.tsx
│ ├── 04-FounderSection.tsx
│ ├── 05-WhyKamson.tsx
│ ├── 06-SpecializedFinancing.tsx
│ ├── 07-TransactionShowcase.tsx
│ ├── 08-WhoWeWorkWith.tsx
│ ├── 09-BankingPartners.tsx
│ ├── 10-KamsonProcess.tsx
│ ├── 11-Services.tsx
│ ├── 12-TrustedByProfessionals.tsx
│ ├── 13-GoogleReviews.tsx
│ ├── 14-PartnerSection.tsx
│ └── 15-ContactSection.tsx
├── content/
│ └── homepage.ts # ← ALL CONTENT LIVES HERE
├── types/
│ └── content.ts # TypeScript types for all content
└── lib/
├── supabase.ts # Supabase client
└── utils.ts # Utilities (cn, etc.)
supabase/
└── schema.sql # Database schema + RLS policies
.env.exampleWhen you want content editors to update the website without code changes:
supabase/schema.sql already has tables for most contentsupabase.from('trust_metrics').select('*')src/content/homepage.ts with async Supabase queriesrevalidate or ISR to control cache behaviourThe architecture supports adding:
/partner/dashboard with Supabase authColors, fonts, and spacing are defined in tailwind.config.ts.
Key classes:
bg-navy / text-navy → #0D1B3Ebg-gold / text-gold → #B8962Etext-gold-light → #D4AE4Ebg-gold-pale → #F7F0DEbg-cream → #FAF8F3font-serif → Playfair Displayfont-sans → Inter.eyebrow → section label style.section-heading → h2 style.btn-gold / .btn-navy / .btn-wa → CTA buttons.card-surface / .card-dark / .card-white → card variants