Consent Notice - Standalone
DPDP Act 2023 compliant consent mechanism. Independent from Privacy Policy.
Standalone Consent Notice
Under DPDP Act, this consent notice must be provided independently before requesting consent - separate from the Privacy Policy. It includes itemised data, specific purposes, withdrawal methods, and requires clear affirmative action.
Section 5: Notice RequirementsSection 6: Valid ConsentRule 3: Notice FormatRule 4: Consent Mechanism
Interactive Demo
Try the consent notice for different contexts. Select a context and click "Show Consent Notice".
Purposes for "signup" context:
RequiredAccount Management & Authentication
RequiredService Delivery & Support
RequiredSecurity & Fraud Prevention
RequiredLegal Compliance & Records
OptionalMarketing Communications & Updates
OptionalWebsite Analytics & Performance
✅ DPDP Compliance Features
- Standalone notice - Independent from privacy policy
- Itemised data - Each purpose lists specific data categories
- Specified purposes - Clear purpose for each data type
- Withdrawal methods - Dashboard, email, portal links
- Rights summary - Access, correction, erasure, etc.
- Grievance link - Direct contact to officer
- Clear affirmative action - Explicit checkboxes
- No pre-ticked boxes - Optional purposes unchecked
- Language options - 22 scheduled languages available
- Timestamp tracking - Records when consent given
🎯 Implementation Points
- Sign-up flows: Show before account creation
- Login flows: When consent needs refresh (365 days)
- Feature activation: Before enabling new features
- Cookie banner: On first visit or after expiry
- Profile settings: For managing existing consent
- Data collection: Forms, surveys, uploads
- API integration: Consent logged to Supabase
- Withdrawal tracking: Honors withdrawal immediately
Integration Guide
How to use the consent notice in your application
import { ConsentNotice } from "@/components/consent-notice"
import { useConsent } from "@/hooks/use-consent"
function SignupPage() {
const { isOpen, show, purposes, handleConsent, handleReject } = useConsent({
context: "signup",
onConsentGiven: async (consents) => {
// Save consent and proceed with signup
await createAccount({ consents })
},
autoShow: true // Show immediately
})
return (
<>
<ConsentNotice
open={isOpen}
onOpenChange={show}
context="signup"
purposes={purposes}
onConsent={handleConsent}
onReject={handleReject}
/>
{/* Rest of signup form */}
</>
)
}