Private AlphaJulia is currently in private alpha

Privacy & Security

Your privacy is fundamental to how Julia is built. This page provides a detailed technical overview of how we protect your data, authenticate your identity, and ensure that your information remains private and secure.

Data Protection Layer

Learn about our zero-knowledge architecture that ensures your personal data never reaches AI providers. This is Julia's key privacy differentiator.

Core Privacy Principles

Data Isolation

Every query to our database is scoped to your user ID. It's technically impossible for one user to access another user's data.

Minimal Data Collection

We only store what's necessary to provide the service. No analytics tracking, no behavioral profiling, no data selling.

Secure Authentication

Passwordless authentication using cryptographically secure magic links. No passwords to leak or forget.

Data Deletion

You can delete your data at any time. Account deletion removes all your information from our systems.

Authentication System

Julia uses a passwordless authentication system that's both more secure and more convenient than traditional passwords. Here's how it works:

Magic Link Authentication

When you need to access the web dashboard, Julia generates a secure magic link that allows one-time access without entering a password.

1

Token Generation

A 256-bit cryptographically secure random token is generated using crypto.randomBytes(32). This token has the same entropy as a high-security password.

2

Secure Storage

The token is stored in Redis with a 1-hour expiration. It's mapped to your user ID but cannot be reverse-engineered to reveal your identity.

3

Single Use

Once you click the magic link, the token is immediately deleted. It cannot be reused, even if someone intercepts it after you've used it.

4

JWT Session

After successful authentication, you receive a short-lived JWT access token (15 minutes) and a refresh token stored as an httpOnly cookie (7 days).

Rate Limiting

To prevent abuse, magic link requests are rate-limited:

  • Maximum 10 magic link requests per hour (production)
  • Limits tracked per user ID, not IP address
  • Clear error messages when limits are reached

OAuth & Third-Party Access

When you connect your Google or Microsoft account, Julia uses OAuth 2.0 — the industry-standard protocol for secure authorization. This is the same system used by apps like Slack, Zoom, and Notion.

How OAuth Works

1

You Authorize Access

You're redirected to Google or Microsoft's login page where you authenticate directly with them. Julia never sees your password.

2

Scoped Permissions

You grant specific permissions (calendar read/write, email access). Julia only requests the minimum permissions needed to function.

3

Token Exchange

Google/Microsoft gives Julia an access token (expires in ~1 hour) and a refresh token (used to get new access tokens without re-authorization).

4

Automatic Refresh

When the access token expires, Julia automatically uses the refresh token to get a new one. This happens transparently in the background.

Revoke Access Anytime

You can revoke Julia's access to your Google or Microsoft account at any time:

  • From Julia: Go to Settings → Integrations → Disconnect
  • From Google: Visit myaccount.google.com/permissions
  • From Microsoft: Visit account.microsoft.com/consent

Data Storage & Isolation

Your data is stored in a PostgreSQL database with strict isolation between users. Here's what we store and how we protect it:

What We Store

Data TypePurposeRetention
User ProfileEmail, name, timezone, preferencesUntil account deletion
MessagesConversation history for contextUntil account deletion
Memory ProfileYour preferences and facts (JSON)Until account deletion
Memory EpisodesImportant events and conversationsUntil account deletion
ContactsPeople you interact withUntil account deletion
TasksYour to-do itemsUntil account deletion
OAuth TokensAccess to Google/MicrosoftUntil you disconnect
Audit EventsSecurity and debugging logs90 days

User Isolation

Every database query is scoped to your user ID. This is enforced at the application level through:

  • JWT authentication that includes your user ID in every request
  • TypeORM queries that always include WHERE user_id = :userId
  • Foreign key constraints that cascade delete when a user is removed
  • Database indexes on user_id for performance and enforcement

Communication Security

In Transit

  • • All connections use HTTPS (TLS 1.3)
  • • Secure cookies with httpOnly flag
  • • sameSite=lax to prevent CSRF
  • • CORS configured for specific origins

Messaging Platforms

  • • WhatsApp uses end-to-end encryption
  • • Telegram uses client-server encryption
  • • Webhook signatures verified
  • • Messages processed, not stored long-term

Account Deletion

You have the right to delete your account and all associated data at any time. Here's what happens when you delete your account:

  1. 1
    Immediate: Your account is marked as deleted and you lose access
  2. 2
    30-day grace period: Your data is retained but inaccessible, in case you want to recover your account
  3. 3
    After 30 days: All data is permanently deleted (CASCADE delete on all related tables)
  4. 4
    Channel identities: Anonymized to "Deleted User" rather than deleted, to maintain conversation integrity

What We Don't Do

  • We don't sell your data to third parties
  • We don't use your data to train AI models
  • We don't share your data with advertisers
  • We don't track you across websites
  • We don't store your Google/Microsoft passwords
  • We don't access more data than necessary
  • We don't keep data after you delete your account
Next: How It Works