Examples
Real-world code examples for integrating kollect with your projects.
Quick Examples
Basic Contact Form
<!DOCTYPE html>
<html>
<head>
<title>Contact Us</title>
</head>
<body>
<h1>Contact Us</h1>
<form action="https://kollect.app/f/YOUR_FORM_KEY" method="POST">
<div>
<label for="name">Name:</label>
<input type="text" id="name" name="name" required>
</div>
<div>
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
</div>
<div>
<label for="message">Message:</label>
<textarea id="message" name="message" required></textarea>
</div>
<!-- Honeypot spam protection -->
<input type="text" name="_gotcha" style="display:none">
<button type="submit">Send Message</button>
</form>
</body>
</html>AJAX Submission
<form id="contact-form">
<input type="email" name="email" required>
<textarea name="message" required></textarea>
<button type="submit">Submit</button>
<div id="status"></div>
</form>
<script>
document.getElementById('contact-form').addEventListener('submit', async function(e) {
e.preventDefault();
const status = document.getElementById('status');
status.textContent = 'Sending...';
const formData = new FormData(this);
try {
const response = await fetch('https://kollect.app/f/YOUR_FORM_KEY', {
method: 'POST',
body: formData
});
if (response.ok) {
status.textContent = 'Thank you! Your message has been sent.';
this.reset();
} else {
status.textContent = 'Error! Please try again.';
}
} catch (error) {
status.textContent = 'Error! Please try again.';
}
});
</script>Newsletter Signup
<form action="https://kollect.app/f/YOUR_FORM_KEY" method="POST">
<h2>Subscribe to our newsletter</h2>
<input
type="email"
name="email"
placeholder="Enter your email"
required
>
<input type="hidden" name="_redirect_url" value="https://yoursite.com/thank-you">
<input type="text" name="_gotcha" style="display:none">
<button type="submit">Subscribe</button>
</form>Framework Examples
React
import { useState } from 'react';
export default function ContactForm() {
const [status, setStatus] = useState('');
async function handleSubmit(e) {
e.preventDefault();
setStatus('Sending...');
const formData = new FormData(e.target);
try {
const response = await fetch('https://kollect.app/f/YOUR_FORM_KEY', {
method: 'POST',
body: formData
});
if (response.ok) {
setStatus('Success! Thank you for your message.');
e.target.reset();
} else {
setStatus('Error! Please try again.');
}
} catch (error) {
setStatus('Error! Please try again.');
}
}
return (
<div>
<form onSubmit={handleSubmit}>
<input type="email" name="email" required />
<textarea name="message" required />
<input type="text" name="_gotcha" style={{ display: 'none' }} />
<button type="submit">Submit</button>
</form>
{status && <p>{status}</p>}
</div>
);
}Vue.js
<template>
<div>
<form @submit.prevent="handleSubmit">
<input
v-model="form.email"
type="email"
name="email"
required
>
<textarea
v-model="form.message"
name="message"
required
/>
<input type="text" name="_gotcha" style="display: none">
<button type="submit">Submit</button>
</form>
<p v-if="status">{{ status }}</p>
</div>
</template>
<script>
export default {
data() {
return {
form: {
email: '',
message: ''
},
status: ''
}
},
methods: {
async handleSubmit(e) {
this.status = 'Sending...';
const formData = new FormData(e.target);
try {
const response = await fetch('https://kollect.app/f/YOUR_FORM_KEY', {
method: 'POST',
body: formData
});
if (response.ok) {
this.status = 'Success!';
this.form.email = '';
this.form.message = '';
} else {
this.status = 'Error! Please try again.';
}
} catch (error) {
this.status = 'Error! Please try again.';
}
}
}
}
</script>Svelte
<script>
let status = '';
async function handleSubmit(e) {
status = 'Sending...';
const formData = new FormData(e.target);
try {
const response = await fetch('https://kollect.app/f/YOUR_FORM_KEY', {
method: 'POST',
body: formData
});
if (response.ok) {
status = 'Success!';
e.target.reset();
} else {
status = 'Error!';
}
} catch (error) {
status = 'Error!';
}
}
</script>
<form on:submit|preventDefault={handleSubmit}>
<input type="email" name="email" required />
<textarea name="message" required />
<input type="text" name="_gotcha" style="display: none" />
<button type="submit">Submit</button>
</form>
{#if status}
<p>{status}</p>
{/if}Advanced Examples
Multi-Step Form
<form id="multi-step-form">
<!-- Step 1: Personal Info -->
<div class="step" data-step="1">
<h2>Step 1: Personal Information</h2>
<input type="text" name="name" required>
<input type="email" name="email" required>
<button type="button" onclick="nextStep(2)">Next</button>
</div>
<!-- Step 2: Details -->
<div class="step hidden" data-step="2">
<h2>Step 2: Additional Details</h2>
<input type="text" name="company">
<textarea name="message" required></textarea>
<button type="button" onclick="prevStep(1)">Back</button>
<button type="submit">Submit</button>
</div>
<input type="text" name="_gotcha" style="display:none">
</form>
<script>
function showStep(stepNumber) {
document.querySelectorAll('.step').forEach(step => {
step.classList.toggle('hidden', step.dataset.step != stepNumber);
});
}
function nextStep(stepNumber) {
showStep(stepNumber);
}
function prevStep(stepNumber) {
showStep(stepNumber);
}
document.getElementById('multi-step-form').addEventListener('submit', async function(e) {
e.preventDefault();
const formData = new FormData(this);
const response = await fetch('https://kollect.app/f/YOUR_FORM_KEY', {
method: 'POST',
body: formData
});
if (response.ok) {
alert('Form submitted successfully!');
}
});
</script>
<style>
.hidden { display: none; }
</style>File Upload Form
<form action="https://kollect.app/f/YOUR_FORM_KEY" method="POST" enctype="multipart/form-data">
<div>
<label for="name">Name:</label>
<input type="text" id="name" name="name" required>
</div>
<div>
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
</div>
<div>
<label for="resume">Upload Resume:</label>
<input type="file" id="resume" name="resume" accept=".pdf,.doc,.docx" required>
</div>
<input type="text" name="_gotcha" style="display:none">
<button type="submit">Submit Application</button>
</form>Form with Client-Side Validation
<form id="validated-form">
<div>
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
<span class="error" id="email-error"></span>
</div>
<div>
<label for="phone">Phone:</label>
<input type="tel" id="phone" name="phone" pattern="[0-9]{10}" required>
<span class="error" id="phone-error"></span>
</div>
<div>
<label for="message">Message (min 10 characters):</label>
<textarea id="message" name="message" minlength="10" required></textarea>
<span class="error" id="message-error"></span>
</div>
<button type="submit">Submit</button>
</form>
<script>
const form = document.getElementById('validated-form');
form.addEventListener('submit', async function(e) {
e.preventDefault();
// Clear previous errors
document.querySelectorAll('.error').forEach(el => el.textContent = '');
// Validate
let isValid = true;
const email = document.getElementById('email').value;
if (!email.includes('@')) {
document.getElementById('email-error').textContent = 'Invalid email';
isValid = false;
}
const phone = document.getElementById('phone').value;
if (!/^[0-9]{10}$/.test(phone)) {
document.getElementById('phone-error').textContent = 'Phone must be 10 digits';
isValid = false;
}
const message = document.getElementById('message').value;
if (message.length < 10) {
document.getElementById('message-error').textContent = 'Message too short';
isValid = false;
}
if (!isValid) return;
// Submit
const formData = new FormData(this);
const response = await fetch('https://kollect.app/f/YOUR_FORM_KEY', {
method: 'POST',
body: formData
});
if (response.ok) {
alert('Success!');
this.reset();
}
});
</script>
<style>
.error {
color: red;
font-size: 0.875rem;
}
</style>Conditional Fields
<form id="conditional-form">
<div>
<label>I am a:</label>
<select name="user_type" id="user_type" onchange="toggleFields()">
<option value="">Select...</option>
<option value="individual">Individual</option>
<option value="business">Business</option>
</select>
</div>
<!-- Individual fields -->
<div id="individual-fields" class="hidden">
<input type="text" name="full_name" placeholder="Full Name">
</div>
<!-- Business fields -->
<div id="business-fields" class="hidden">
<input type="text" name="company_name" placeholder="Company Name">
<input type="text" name="tax_id" placeholder="Tax ID">
</div>
<div>
<input type="email" name="email" required>
<textarea name="message" required></textarea>
</div>
<button type="submit">Submit</button>
</form>
<script>
function toggleFields() {
const userType = document.getElementById('user_type').value;
document.getElementById('individual-fields').classList.toggle(
'hidden',
userType !== 'individual'
);
document.getElementById('business-fields').classList.toggle(
'hidden',
userType !== 'business'
);
}
document.getElementById('conditional-form').addEventListener('submit', async function(e) {
e.preventDefault();
const formData = new FormData(this);
await fetch('https://kollect.app/f/YOUR_FORM_KEY', {
method: 'POST',
body: formData
});
alert('Form submitted!');
});
</script>
<style>
.hidden { display: none; }
</style>Platform-Specific Examples
Webflow
<!-- Add to Webflow Custom Code (Page or Site-wide) -->
<script>
document.querySelector('form').addEventListener('submit', async function(e) {
e.preventDefault();
const formData = new FormData(this);
const response = await fetch('https://kollect.app/f/YOUR_FORM_KEY', {
method: 'POST',
body: formData
});
if (response.ok) {
// Show Webflow success state
this.style.display = 'none';
document.querySelector('.w-form-done').style.display = 'block';
} else {
// Show Webflow error state
document.querySelector('.w-form-fail').style.display = 'block';
}
});
</script>WordPress
<?php
// Add to your theme's functions.php or custom plugin
function custom_contact_form() {
?>
<form id="contact-form" method="POST">
<input type="email" name="email" required>
<textarea name="message" required></textarea>
<input type="text" name="_gotcha" style="display:none">
<button type="submit">Submit</button>
<div id="form-status"></div>
</form>
<script>
document.getElementById('contact-form').addEventListener('submit', async function(e) {
e.preventDefault();
const status = document.getElementById('form-status');
status.textContent = 'Sending...';
const formData = new FormData(this);
const response = await fetch('https://kollect.app/f/YOUR_FORM_KEY', {
method: 'POST',
body: formData
});
if (response.ok) {
status.textContent = 'Success!';
this.reset();
} else {
status.textContent = 'Error!';
}
});
</script>
<?php
}
// Use shortcode: [custom_contact_form]
add_shortcode('custom_contact_form', 'custom_contact_form');More Examples
Browse additional examples:
Last updated on