A professional web application for collecting Google Ads campaign requirements from clients. Built with Next.js, TypeScript, and Tailwind CSS, featuring Airtable integration and email notifications.
- ✅ Comprehensive Intake Form - Collects all necessary information for Google Ads campaigns
- ✅ Airtable Integration - Automatically saves submissions to your Airtable base
- ✅ Airtable Automations - Configure email notifications and workflows in Airtable
- ✅ AI-Powered Analysis - Generate strategic insights using Airtable AI fields
- ✅ Responsive Design - Works perfectly on desktop, tablet, and mobile
- ✅ Webifyd Branding - Matches your brand guidelines with blue color scheme
- ✅ Form Validation - Ensures required fields are completed
- ✅ Success/Error Handling - Clear user feedback on submission status
- Framework: Next.js 14 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Database: Airtable (with AI capabilities)
- Deployment: Vercel (recommended)
Before you begin, ensure you have:
- Node.js 18+ installed
- An Airtable account with API access
- Airtable Personal Access Token with read/write permissions
-
Install dependencies:
npm install
-
Set up environment variables:
Create a
.env.localfile in the root directory:cp .env.example .env.local
-
Configure your environment variables:
Edit
.env.localwith your actual credentials:# Airtable Configuration AIRTABLE_API_KEY=your_airtable_personal_access_token_here AIRTABLE_BASE_ID=your_base_id_here AIRTABLE_TABLE_NAME=Google_Ads_Intake
Note: Email notifications are handled through Airtable Automations (not in code).
- Go to Airtable
- Create a new base called "Google Ads Intake"
- Create a table with the following fields:
Create these fields in your Airtable table (all as "Single line text" unless specified):
Company Information:
- Company Name
- Contact Person
- Position
- Phone
- Website
- Office Location
Campaign Details:
- Campaign Goals (Long text)
- Other Goal
- Expected Outcome (Long text)
- Customer Types (Long text)
- Other Customer Type
- Geographic Targeting (Long text)
- Specific Emirates
- International Markets
- Languages (Long text)
- Other Language
Budget & Products:
- Daily Budget
- Other Budget
- Budget Increase
- Core Products (Long text)
- Catalog Link (URL)
- Focus Products (Long text)
Lead & Competition:
- Lead Types (Long text)
- Other Lead Type
- Keywords (Long text)
- Competitors (Long text)
- Competitor Notes (Long text)
USPs & Branding:
- Selected USPs (Long text)
- Other USPs (Long text)
- Brand Materials (Long text)
- Brand Materials Notes (Long text)
Timeline:
- Campaign Duration
- Launch Date (Single line text)
Additional:
- Additional Notes (Long text)
Recommended Additional Fields:
- Created time (Created time) - Auto-tracks submission
- Status (Single select) - Track workflow status
- Campaign Analysis (AI text) - Generate strategic insights
- Go to Airtable Tokens
- Click "Create new token"
- Name it: "Google Ads Intake Form"
- Add scopes:
data.records:readdata.records:write
- Add access to your specific base
- Create token and copy it (starts with
pat...) - Get your Base ID from the URL:
https://airtable.com/appXXXXXXXXXXXXXX/...- The
appXXXXXXXXXXXXXXpart is your Base ID
- The
Email notifications are handled by Airtable Automations:
- In your Airtable base, click "Automations"
- Create new automation:
- Trigger: When record is created
- Action: Send email
- Configure email template with record fields
- Add recipients (your team, client CC)
See AIRTABLE_AI_PROMPT.md for AI-powered campaign analysis setup.
Run the development server:
npm run devOpen http://localhost:3000 in your browser.
npm run build
npm start- Push your code to GitHub
- Import your repository in Vercel
- Add your environment variables in Vercel project settings
- Deploy!
Add all the variables from .env.local in:
Project Settings → Environment Variables
google-ad-intake-form/
├── app/
│ ├── api/
│ │ └── submit/
│ │ └── route.ts # API endpoint for form submission
│ ├── globals.css # Global styles with Tailwind
│ ├── layout.tsx # Root layout
│ └── page.tsx # Home page
├── components/
│ └── IntakeForm.tsx # Main form component
├── public/
│ └── webifyd-logo-tp.png # Webifyd logo
├── reference/
│ ├── Google_Ads_Client_Intake_Form.pdf
│ └── Google_Ads_Intake_Form_Preview.html
├── types/
│ └── form.ts # TypeScript type definitions
├── .env.example # Environment variables template
├── .gitignore
├── claude.md # AI assistant context & documentation
├── FEATURE_IMPROVEMENTS.md # Roadmap of 35+ enhancement ideas
├── AIRTABLE_AI_PROMPT.md # AI prompts for campaign analysis
├── AIRTABLE_SETUP_GUIDE.md # Complete Airtable configuration
├── next.config.js
├── package.json
├── postcss.config.js
├── tailwind.config.ts
└── tsconfig.json
Edit tailwind.config.ts to customize the color scheme:
colors: {
webifyd: {
navy: '#1B2951',
blue: '#2E86C1',
// ... add more colors
},
}Edit components/IntakeForm.tsx and types/form.ts to add or remove fields.
Configure email templates in Airtable Automations using the record fields.
- Fill out the form with test data
- Check your Airtable base for the new record
- Verify all fields are populated correctly
- Test Airtable automations (emails, AI analysis)
Airtable Error:
- Verify your Personal Access Token and Base ID are correct
- Ensure all field names in the code match your Airtable exactly (case-sensitive)
- Check that your API token has read AND write permissions
- See
AIRTABLE_SETUP_GUIDE.mdfor complete field list
Email Not Sending:
- Emails are configured in Airtable Automations, not in code
- Check Airtable automation run history
- Verify email addresses in automation settings
Build Errors:
- Run
npm installto ensure all dependencies are installed - Delete
.nextfolder andnode_modules, then reinstall
For issues or questions:
- Check the Next.js Documentation
- Review Airtable API Documentation
- Contact Webifyd Technologies support
© 2025 Webifyd Technologies. All rights reserved.
Built with ❤️ by Webifyd Technologies Digital Solutions You Can Trust