User Data Recording Procedures
Transparent documentation of how we collect, record, store, and manage user information
1. Contact Information Recording
1.1 Initial Collection Point
Where: Contact forms, support tickets, email inquiries
What We Record:
- Full name, email address, phone number
- Organization name and company role
- Issue description and incident details
- Timestamp of submission (automatic)
- IP address (for security purposes)
1.2 Recording Mechanism
Browser-Side: Form data is validated using client-side JavaScript to ensure data quality before submission.
// Validation procedure (assets/js/main.js)
const validateField = (input) => {
const value = sanitizeInput(input.value);
const isRequired = input.hasAttribute('required');
const errorTarget = input.closest('.field')?.querySelector('[data-error]');
let error = '';
if (isRequired && !value) {
error = 'This field is required.';
} else if (input.type === 'email' && value && !isEmail(value)) {
error = 'Enter a valid email address.';
}
// Additional validation logic...
};
1.3 Data Sanitization
Security Procedure: All user input is sanitized to prevent XSS attacks and SQL injection:
const sanitizeInput = (str) => {
if (!str) return '';
return str
.replace(/[<>]/g, '')
.slice(0, 1000)
.trim();
};
1.4 Server-Side Storage
Recording Location:
- Contact forms → CRM/ticket system (encrypted database)
- Email inquiries → Email server with security headers
- Incident details → Encrypted support knowledge base
Encryption Standard: TLS 1.2+ for data in transit, AES-256 for data at rest
2. Cookie & Preference Recording
2.1 Cookie Consent Tracking
Mechanism: Browser localStorage (not dependent on third-party cookies)
// Cookie consent recording (assets/js/main.js)
const initCookieNotice = () => {
const banner = document.querySelector('[data-cookie-banner]');
const accept = document.querySelector('[data-cookie-accept]');
if (!banner || !accept) return;
const key = 'xo-cookie-consent';
const stored = localStorage.getItem(key);
if (stored === 'accepted') {
banner.hidden = true;
}
accept.addEventListener('click', () => {
banner.hidden = true;
try { localStorage.setItem(key, 'accepted'); } catch (err) { /* ignore */ }
});
};
2.2 First-Party Cookies Used
| Cookie Name | Purpose | Expiration | Required |
|---|---|---|---|
| xo-cookie-consent | Record user consent preference | Persistent (localStorage) | Yes (GDPR compliance) |
| xo-theme-preference | Remember light/dark mode choice | 1 year | No (optional) |
| xo-nav-state | Remember mobile nav open/close state | Session | No (UX enhancement) |
3. Analytics & Usage Recording
3.1 Analytics Provider
Service: Plausible Analytics (privacy-friendly, no tracking cookies)
Data Collected:
- Page views (URI path, no query parameters)
- Referrer source (Google, LinkedIn, direct)
- Device type (desktop, tablet, mobile)
- Browser and OS (anonymized)
- Geographic location (country-level only)
- Session duration
3.2 Recording Mechanism
// Plausible async tracking (loaded in all pages)
<script async src="https://plausible.io/js/pa-l19egDkYdaqOJP_bLhgaL.js"></script>
<script>
window.plausible = window.plausible || function () {
(plausible.q = plausible.q || []).push(arguments);
};
plausible.init();
</script>
3.3 NO Personally Identifiable Information
Plausible does NOT collect:
- IP addresses (hashed, not stored)
- User IDs or account information
- Email addresses
- Cookie IDs or tracking codes
- Query parameters (search terms, utm_source, etc.)
4. Form Submission Recording
4.1 Contact Form Submission
HTML Structure:
<form data-js-contact-form>
<input type="text" name="fullName" required minlength="2">
<input type="email" name="email" required>
<textarea name="message" required minlength="10"></textarea>
<button type="submit">Submit</button>
</form>
4.2 Form Validation & Recording Process
- User Input: Data entered into form fields
- Client-Side Validation: JavaScript validates format, length, and type
- Sanitization: Input sanitized to remove harmful characters
- Error Display: Validation errors shown to user in real-time
- Submission: Form submitted to server endpoint (encrypted HTTPS)
- Server-Side Recording: Data stored in CRM/database with timestamp
- Confirmation: User receives success message and confirmation email
- Retention: Data retained per policy (3 years for contacts)
5. Click & Interaction Tracking
5.1 CTA Button Tracking
// Track CTA button clicks (assets/js/main.js)
document.querySelectorAll('.btn-primary, .btn-secondary').forEach(btn => {
btn.addEventListener('click', () => {
const text = btn.textContent.trim().slice(0, 50);
const section = btn.closest('section')?.querySelector('h1, h2, h3')?.textContent?.slice(0, 50) || 'unknown';
trackEvent('cta_click', {
button_text: text,
section: section,
href: btn.getAttribute('href') || 'no-link'
});
});
});
5.2 External Link Tracking
// Track external link clicks (assets/js/main.js)
document.querySelectorAll('a[href^="http"]').forEach(link => {
link.addEventListener('click', () => {
trackEvent('external_link_click', {
url: link.getAttribute('href'),
text: link.textContent.slice(0, 50)
});
});
});
5.3 Data Retention
Event data is retained for 90 days in Plausible Analytics, then automatically deleted.
6. Social Share Tracking
6.1 Social Share Events
Tracked Actions:
- Tweet share (Twitter/X)
- LinkedIn share
- Facebook share
- Email share
6.2 Recording Mechanism
// Social share button tracking
const initSocialShare = () => {
document.querySelectorAll('[data-social-share] a').forEach(btn => {
btn.addEventListener('click', () => {
trackEvent('social_share', {
platform: btn.getAttribute('data-platform'),
article: document.querySelector('h1')?.textContent?.slice(0, 100) || 'unknown'
});
});
});
};
7. User Rights & Data Access
7.1 Data Subject Rights
Users can exercise their rights by contacting privacy@exchangeguardians.com:
- Access Request: Receive all data recorded about you (30-day response)
- Correction: Request updates to incorrect information
- Deletion: Request erasure of your data (subject to legal retention)
- Portability: Receive data in structured, portable format (CSV/JSON)
- Objection: Opt out of analytics, marketing, or other processing
8. Data Breach Notification
8.1 Incident Response Procedure
- Detection: Security monitoring identifies potential breach
- Investigation: Determine scope, affected data, and root cause
- Notification (≤72 hours): EU DPA and affected users notified per GDPR Article 33
- Disclosure: Full transparency provided about what happened and remediation
- Remediation: Implement fixes and prevent recurrence
- Documentation: Record incident and lessons learned
9. Third-Party Data Sharing
9.1 When We Share Data
Service Providers (DPA-protected):
- Cloud hosting: AWS/Azure (encrypted, segregated)
- Email: SendGrid (transactional only)
- Analytics: Plausible (aggregated, non-PII)
- Chat: Intercom (if enabled, optional)
9.2 Prohibition on Selling Data
We DO NOT:
- Sell user data to marketers or brokers
- Share data without explicit user consent
- Use data for purposes not disclosed in privacy policy
- Combine personal data from multiple sources without consent
10. Audit & Compliance Verification
10.1 Regular Audits
- Quarterly: Review data collection mechanisms and retention
- Semi-Annual: Penetration testing and security assessment
- Annual: Full GDPR compliance audit and DPA review
10.2 Compliance Verification
Standards Met:
- ✓ GDPR 2016/679 (EU data protection)
- ✓ CCPA/CPRA (California privacy)
- ✓ ePrivacy Directive 2002/58/EC (Cookies)
- ✓ Data Protection Act 2018 (UK)
- ✓ Web Accessibility Guidelines (WCAG 2.1 AA)
11. Contact for Data Privacy Questions
If you have questions about how we record and manage your data:
- Email: privacy@exchangeguardians.com
- Data Protection Officer (EU): dpo@exchangeguardians.com
- Response Time: Within 30 days per GDPR
Version: 1.0 | Effective: January 11, 2026
This document provides transparent procedures for how ExchangeGuardians records user information. All procedures comply with applicable data protection laws and privacy regulations.