Frontend for ippriv.com: privacy-focused IP lookup and geolocation tools built with Astro 5.
- Astro 5: SSG with static output
- React 19 + TypeScript
- Tailwind CSS 4 + shadcn/ui
- Resend: contact form email
- Plausible: privacy-friendly analytics
- Vercel: hosting + serverless functions
/
├── api/
│ └── contact.ts # Vercel serverless function (contact form)
├── public/
├── src/
│ ├── components/ # React + Astro components
│ ├── content/
│ │ └── blog/ # Markdown blog articles
│ ├── layouts/ # Page layouts
│ ├── pages/ # File-based routing
│ ├── styles/ # Global CSS
│ └── utils/ # Helpers
├── astro.config.mjs
├── vercel.json # Security headers + cache rules
└── .env.example
# Install dependencies
npm install
# Copy environment variables
cp .env.example .env
# Fill in RESEND_API_KEY in .env
# Start dev server
npm run dev # http://localhost:4321
# Build for production
npm run build
# Preview production build
npm run preview| Variable | Description | Required |
|---|---|---|
PUBLIC_API_URL |
IPPriv API base URL | Yes |
PUBLIC_SITE_URL |
Public site URL | Yes |
RESEND_API_KEY |
Resend API key for contact form | Yes |
RESEND_API_KEYis server-side only: never prefix withPUBLIC_.
Articles live in src/content/blog/ as Markdown files. Set draft: true in frontmatter to hide an article from production builds.
---
title: 'My Article'
publishedAt: 2026-03-12
draft: true # hidden in production, visible in dev
---Deployed automatically on Vercel from the master branch. Add all environment variables in Vercel → Settings → Environment Variables.
The api/ directory is auto-detected by Vercel as serverless functions.
© 2025 LMF Solutions. All rights reserved.