A professional, multi-step form application for collecting talent roster applications for Madiro's global digital health engineering and specialist positions. Built with React, TypeScript, Tailwind CSS, and Netlify Forms integration.
This application captures comprehensive professional profiles from digital health professionals interested in joining Madiro's talent roster for humanitarian and NGO projects worldwide. The form includes 8 steps covering 32 data points, from personal information to technical expertise and availability.
β¨ Now with simplified Netlify Forms integration - zero backend setup required!
- 8-Step Multi-Form Process: Personal info, education, NGO experience, professional profile, open source background, availability, contracting, and motivation
- Real-time Validation: Zod-powered validation with helpful error messages
- Auto-save Functionality: Form progress saved to localStorage
- Mobile-Responsive: Optimized for all devices
- Accessibility Compliant: WCAG 2.1 AA standards
- Netlify Forms Integration: Serverless form handling with automatic spam protection
- Newsletter Opt-in: GDPR-compliant consent management
- Professional Design: Madiro-branded UI with smooth animations
- Node.js 18+ and npm
- Netlify account for deployment (free tier included)
- Clone and install dependencies:
git clone <repository-url>
cd rosterform
npm install- Set up environment variables:
cp .env.example .env-
Configure environment (optional):
- Update branding URLs in
.envif needed
- Update branding URLs in
-
Start development server:
npm run devThe application will be available at http://localhost:5173
- Frontend: React 18, TypeScript, Vite
- Styling: Tailwind CSS with custom Madiro theme
- Forms: React Hook Form + Zod validation
- Animations: Framer Motion
- Backend: Netlify Forms (serverless!)
- Storage: Netlify Forms Database
- Deployment: Netlify
- Full Name*
- Email Address*
- Phone/WhatsApp (optional)
- Country of Residence*
- Highest Education Level*
- Field of Study*
- Years of Digital Health Experience*
- Contribution Level/Seniority*
- Organization Types Worked With*
- LMIC/Humanitarian Experience*
- Top 3 Expertise Areas* (max 3)
- Top 3 Professional Roles* (max 3)
- Digital Health Platforms*
- Languages Spoken*
- Professional Certifications (optional)
- Open Source Platform Experience*
- Community Contribution Level*
- Startup Experience*
- Problem-Solving Approach*
- Preferred Hourly Rate*
- Minimum Hourly Rate*
- Weekly Availability*
- Unavailable Periods (optional)
- Remote Work Location*
- Travel Willingness*
- Maximum Assignment Duration*
- Contracting Modality*
- International Contracting Ability*
- Work Restrictions (optional)
- Motivation Statement* (min 50 chars)
- Key Achievements* (min 50 chars)
- Additional Notes (optional)
- Newsletter subscription (optional)
- Data processing consent* (required)
*Required fields
# Optional: Custom branding
VITE_MADIRO_LOGO_URL=https://cdn-ch-prod-bqhwa0ewbpg6eyc2.z01.azurefd.net/prod-img-cache/CDN-ik-images/charityprofile/12/2736/madiro-logo-blue-copy.png
VITE_NEWSLETTER_URL=https://madiro.org/newsletter
# Development settings
NODE_ENV=development// tailwind.config.js
madiro: {
primary: '#1B4B5C', // Deep teal
secondary: '#FF6B35', // Warm coral
accent: '#4ECDC4', // Light teal
// ...
}Update field options in src/utils/formOptions.ts
Modify validation schemas in src/utils/validation.ts
- Connect repository to Netlify
- Set environment variables in Netlify dashboard (optional)
- Deploy
Netlify will automatically:
- Detect and enable Netlify Forms
- Build the application with
npm run build - Deploy to production
# Or deploy from CLI
npm install -g netlify-cli
netlify deploy --prodBuild the application:
npm run buildnpm run dev- Deploy to Netlify (forms only work in production)
- Complete a form submission
- Check Netlify dashboard > Forms for submissions
- Verify data is properly formatted
- Try submitting incomplete forms
- Test field-specific validation rules
- Verify error messages display correctly
src/
βββ components/
β βββ ui/ # Reusable UI components
β βββ steps/ # Form step components
β βββ layout/ # Layout components
β βββ FormWizard.tsx # Main form controller
β βββ ConfirmationPage.tsx
βββ hooks/
β βββ useFormData.ts # Form state management
βββ utils/
β βββ validation.ts # Zod schemas
β βββ formOptions.ts # Field options
β βββ netlifyForms.ts # Form submission utility
βββ types/
β βββ form.ts # TypeScript definitions
βββ styles/
βββ index.css # Global styles
netlify.toml # Netlify configuration
- Data Validation: All inputs validated and sanitized
- GDPR Compliant: Clear consent mechanisms
- Secure Submission: Data encrypted in transit
- Access Control: Admin-only access to collected data
Form not submitting:
- Ensure you're testing on a deployed Netlify site (forms don't work locally)
- Check Netlify dashboard for form detection
- Verify the hidden form in App.tsx has all required fields
- Check browser console for errors
Styling issues:
- Clear browser cache
- Verify Tailwind CSS is building correctly
Validation errors:
- Check Zod schemas match form structure
- Verify required fields are marked correctly
Add ?debug=true to URL to enable console logging.
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
- Follow TypeScript strict mode
- Use Tailwind for all styling
- Validate all form inputs
- Test on multiple devices
- Document any new features
This project is licensed under the MIT License - see the LICENSE file for details.
For questions or issues:
- Check the troubleshooting section
- Review the Airtable setup guide
- Open an issue in the repository
Built for Madiro's mission of improving global health through technology and connecting talented professionals with meaningful humanitarian projects worldwide.