Home — Marketing Site
Location: syncad/apps/home
Stack: Next.js 15, Tailwind CSS v4
Port: 3000 (dev)
Overview
Public-facing marketing website for SyncAD. Not part of the authenticated application stack — it's a static/ISR (Incremental Static Regeneration) site that communicates product features, pricing, and contact forms.
Pages
Home (/)
- Hero: product tagline, CTA buttons (Request Demo / Login)
- Feature highlights: platform cards with screenshots
- How it works section: 3-step diagram
- Testimonials / case studies
- Footer with links and contact info
About (/about)
- Company background, team, mission
Contact (/contact)
- Contact form: name, email, phone, school name, message
- On submit: stores lead in DB or sends via SES
Pricing (/pricing)
- Tier comparison table (not currently implemented — placeholder)
Login (/login)
- Redirects to school-admin-ui or respective app login
- School selector dropdown for multi-school access
Privacy Policy / Terms (/privacy, /terms)
- Static legal pages
Architecture
// next.config.js
export default {
output: 'standalone',
images: {
domains: ['cdn.syncad.in'],
},
};
// Tailwind v4 — CSS-only configuration
/* app/globals.css */
@import "tailwindcss";
Deployment
Deployed to CloudFront + S3 (Next.js standalone export) or Vercel. GitHub Actions triggers build on push to main.
Key Files
apps/home/src/
├── app/
│ ├── layout.tsx
│ ├── page.tsx # Home
│ ├── about/
│ ├── contact/
│ ├── pricing/
│ └── login/
├── components/
│ └── ui/ # Shared marketing components
└── lib/
└── api.ts # API calls for contact form
Contact Form API
// POST /home/contact (NestJS endpoint)
export async function submitContactForm(data: ContactFormData) {
await sesClient.sendEmail({
Source: 'noreply@syncad.in',
Destination: { ToAddresses: ['sales@metaonus.in'] },
Message: {
Subject: { Data: `New inquiry from ${data.schoolName}` },
Body: {
Text: { Data: `Name: ${data.name}\nEmail: ${data.email}\n\n${data.message}` },
},
},
});
}