A modern, production-ready business website for mDeploy offering deployment services for websites, web apps, mobile apps, and desktop applications.
- 🎯 Service Cost Calculator - Interactive calculator with transparent pricing
- 💰 Currency Toggle - Switch between SAR and USD pricing
- 📧 Email Integration - Quote and contact form submissions via Resend
- 🎨 Modern Design - Dark/light mode with professional aesthetic
- 📱 Mobile-First - Fully responsive across all devices
- 🔒 Security - Rate limiting and honeypot spam protection
- ♿ Accessible - WCAG compliant with semantic HTML
- 🚀 SEO Optimized - Metadata, OpenGraph, and structured content
- Framework: Next.js 16 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS v4
- UI Components: shadcn/ui
- Email: Resend
- Validation: Zod
- Analytics: Vercel Analytics
- Website Pages: 250 SAR per page
- Web App Pages: 300 SAR per page
- Mobile Screens: 400 SAR per screen
- Desktop Functions: 180 SAR per function
- Setup & Handling Fee: 200 SAR (fixed, added once per order)
Create a .env.local file in the root directory with the following variables:
# Resend API Key (for email sending)
RESEND_API_KEY=re_your_api_key_here
# Business email (receives quote/contact submissions)
BUSINESS_TO_EMAIL=hello@mdeploy.dev
# From email (sender address for emails)
FROM_EMAIL=no-reply@mdeploy.dev
# USD conversion rate (public, used client-side)
NEXT_PUBLIC_USD_PER_SAR=0.266- Sign up at resend.com
- Go to API Keys section
- Create a new API key
- Add your domain for production use
- Clone or download the project
# If using git
git clone <repository-url>
cd mdeploy- Install dependencies
npm install- Set up environment variables
Create .env.local file with the variables listed above.
- Run development server
npm run devOpen http://localhost:3000 to see the website.
mdeploy/
├── app/
│ ├── api/
│ │ ├── contact/route.ts # Contact form API
│ │ └── quote/route.ts # Quote submission API
│ ├── calculator/page.tsx # Calculator page
│ ├── contact/page.tsx # Contact page
│ ├── privacy/page.tsx # Privacy policy
│ ├── terms/page.tsx # Terms of service
│ ├── page.tsx # Home page
│ ├── layout.tsx # Root layout
│ └── globals.css # Global styles
├── components/
│ ├── ui/ # shadcn UI components
│ ├── header.tsx # Site header/nav
│ ├── footer.tsx # Site footer
│ ├── service-calculator.tsx # Calculator component
│ └── quote-form.tsx # Quote submission form
├── lib/
│ ├── pricing.ts # Pricing logic
│ ├── currency.ts # Currency conversion
│ ├── validations.ts # Zod schemas
│ ├── email-templates.ts # Email HTML templates
│ ├── rate-limit.ts # Rate limiting
│ └── utils.ts # Utilities
└── README.md
- / - Home page with hero, services, calculator preview, process, testimonials, FAQ, CTA
- /calculator - Full calculator with quote submission form
- /contact - Contact form page
- /privacy - Privacy policy
- /terms - Terms of service
- Non-negative integer inputs for each service type
- Real-time price calculation with detailed breakdown
- Currency toggle (SAR ↔ USD)
- Input validation
- Reset functionality
- Quote Requests: Sends detailed breakdown to business and confirmation to user
- Contact Form: Sends message to business with reply-to set to user's email
- Security: Honeypot field and rate limiting (5 requests per minute per IP)
- Validation: Zod schemas ensure data integrity
- Mobile-first approach
- Hamburger menu on mobile
- Touch-friendly targets (min 44px)
- iOS Safari optimizations (disabled auto-zoom)
- Proper viewport configuration
- Push code to GitHub
- Import project in Vercel
- Add environment variables in Vercel dashboard
- Deploy
Make sure to add all required environment variables in your deployment platform:
RESEND_API_KEYBUSINESS_TO_EMAILFROM_EMAILNEXT_PUBLIC_USD_PER_SAR
Edit lib/pricing.ts:
export const PRICING_SAR: PricingConfig = {
websitePagePrice: 250,
webAppPagePrice: 300,
mobileScreenPrice: 400,
desktopFunctionPrice: 180,
setupFee: 200,
}Update the NEXT_PUBLIC_USD_PER_SAR environment variable.
Edit app/globals.css color variables in :root and .dark sections.
For questions or issues, contact: hello@mdeploy.dev
All rights reserved © mDeploy