Home Guide GitHub

Cloud Sync & Accounts

Four ways to sign in, two rails that link together, one unified ID that follows you across devices.

Overview

Welcome modal in CCP offering four login options: Discord, Patreon, Anonymous, and Sign in via Web
The CCP login welcome modal. Four ways in - pick whichever fits.

Cloud sync keeps your conditioning progress backed up and synchronized. CCP supports four login methods across two account rails - pick one, or link multiple together and use any of them interchangeably. The system assigns a single unified ID that spans every method you've linked, and data syncs automatically on login and after sessions.

🔄
Auto Sync

Progress syncs on login and after sessions

💻
Cross-Device

Pick up where you left off on any PC

🪪
One Unified ID

All four login methods can point at the same account

⬆️
Higher Wins Merge

The best value is always kept

The Two Rails

CCP runs two parallel account rails that are designed to link together. You can start on either rail and bridge to the other whenever you want.

🖥️ Rail 1 - Desktop (app-side)

The CCP desktop client and its backend. Three native login methods:

  • Discord OAuth - one-click sign-in via your Discord account
  • Patreon OAuth - one-click sign-in via your Patreon account (also surfaces your tier for premium features)
  • Anonymous (invite code) - display name + password account, gated by an invite code from Discord mods. No email, no OAuth provider.

Backed by the CCP server (Upstash Redis on Vercel).

🌐 Rail 2 - Web (cclabs.app)

The app.cclabs.app companion site, growing into its own webapp:

  • Email magic link - sign in with just an email address, no password
  • Same OAuth providers as Rail 1 (Patreon, Discord) for one-click sign-in
  • Browse your profile, available subjects, subscription, downloads, connections
  • Future home for CCbill payments and a full web-only experience

Backed by Supabase (Postgres + Auth).

How the rails link

The Sign in via Web button in the desktop login modal bridges the rails. It generates a 6-character device code, opens your browser to app.cclabs.app/dashboard/link-device, you sign in (or sign up via email magic link), enter the code, and the desktop client is now paired to your web account.

Sign in via Web flow in the desktop app showing a 6-character device code BBZ-JJM and a 'Waiting for browser confirmation' progress bar
The desktop generates a one-time code and waits for you to confirm it in the browser.
The /dashboard/link-device page on app.cclabs.app prompting for the 6-character device code
On the web side, you type the code into app.cclabs.app/dashboard/link-device after signing in.
🪢 Why two rails?

The website is on its way to becoming a first-class entity. Email-only sign-up (no Patreon, no Discord) lets users start an account without any third-party identity. Once payment processing (CCbill) lands, billing is attached to the web account, and the device link keeps your desktop progression in sync regardless of which rail you bootstrap from.

Four Login Methods

Detail on each of the four methods, with the tradeoffs.

1. Discord OAuth

  • Click Login with Discord in the desktop welcome modal
  • Authorize CCP in your default browser
  • Token stored locally via Windows DPAPI (encrypted on disk)
  • Best for: users who already live in our Discord community

2. Patreon OAuth

  • Click Login with Patreon in the desktop welcome modal
  • Authorize CCP in your default browser
  • Same DPAPI-encrypted token storage
  • Bonus: surfaces your Patreon tier so premium features unlock automatically
  • Best for: Patreon supporters who want zero extra steps

3. Anonymous (invite code)

Create Account dialog in CCP requiring an invite code, password, and password confirmation
Account creation requires an invite code from a Discord mod/admin or CodeBambi directly.
Login dialog in CCP asking for Display Name and Password
Once registered, log in with the display name and password you set.
  • Click Anonymous Login in the welcome modal
  • Don't have an account? Hit Create one, paste in an invite code, set a password, choose a display name - you're in.
  • Invite codes come from Discord mods/admins or CodeBambi directly
  • No email collected, no OAuth provider involved - just a display name + password
  • Best for: users who don't want to expose Patreon or Discord identity

4. Sign in via Web

The sign-in page on app.cclabs.app with Patreon, Discord, and email magic link options
At app.cclabs.app, sign in with the same OAuth providers as the desktop - or skip them entirely with an email magic link.
  • Click Sign in via Web in the desktop welcome modal - CCP shows a 6-char code and opens your browser
  • On the web, sign in (or sign up) at app.cclabs.app using Patreon, Discord, or just an email address
  • Email sign-in is fully password-less: type your email, click the magic link, you're in
  • Type the 6-char device code into app.cclabs.app/dashboard/link-device to pair the desktop client
  • Best for: users who want an account that doesn't depend on Patreon or Discord, or who plan to use future paid features
💡 You can use more than one

All four methods can point at the same account. Sign in once with one method, then "link" the others in your profile to use them interchangeably. The unified ID stays consistent so your progression follows you regardless.

Unified ID (V2 Accounts)

Every account - regardless of which login method bootstrapped it - gets a single unified_id. When you link a second method (e.g. add a Patreon login to an account you started with Discord), both methods resolve to the same unified_id.

Benefits

  • Single identity - one account, four ways in
  • Cross-rail data - desktop progression and web profile point at the same row
  • Unified leaderboard position - one rank, one profile, one you
  • Tier inheritance - if your Discord login is the same identity as your Patreon, you get Patreon perks regardless of which method you signed in with
📝 Pre-v5.5 users

If you were using the app before v5.5, your data was automatically migrated to the unified system on your next login. No action required on your end.

What Syncs

App Info and Data modal showing logged-in account, Cloud Settings Backup, Restore from Cloud, Export My Data
App Info & Data - the hub for cloud backup/restore, data export, and privacy policy.

The following data is kept in sync between your local app and the cloud:

Data Details
Level & XP Total accumulated XP and current level
Achievements All unlocked achievement IDs
Skill Points Server is source of truth
Unlocked Skills Union of local + cloud (never lose skills)
Conditioning Minutes Total time across all sessions
Session Stats Completed, longest, started, abandoned
Flash Stats Total images viewed
Streak Data Current streak, highest streak, last date
Quest Progress Daily/weekly completions, quest XP, streak
Bubble Stats Total popped, bubble count games
Video Stats Minutes watched, attention checks
Display Name Your customizable public name
Privacy Settings DM, online status, profile pic preferences

Cross-Device Sync

Sync triggers automatically on login and after each session ends. A heartbeat is sent every 45 seconds to maintain your online status on the leaderboard.

Merge Strategy: "Higher Wins"

  • Numeric stats (XP, level, minutes, etc.) - the higher value is kept
  • Collections (achievements, skills) - union of both sets, so you never lose unlocks
  • Skill points - server value always takes priority
  • Streak data - higher streak wins, most recent date is used
⚠️ Important

Cloud sync is not real-time during sessions. Your data syncs when you log in and when a session ends. If you switch devices mid-session, finish your current session first.

Offline Mode

Toggle Offline Mode in Settings to disable all cloud communication.

  • When offline: all data stays local, no sync, no downloads, no heartbeat
  • Useful for privacy or limited internet connectivity
  • Re-enabling online mode will trigger a sync on your next login
✈️ Travel Friendly

Offline mode is great for travel or privacy. Your local progress is safe and will merge with the cloud when you go back online.

Privacy

Your display name defaults to your platform username but can be customized at any time. Control what others see via privacy toggles:

Setting Description
Show Online Status Whether you appear "online" on the leaderboard
Share Profile Picture Whether your avatar is visible to others
Allow Discord DM Whether other users can message you

Desktop-rail data is stored on the CCP server (Upstash Redis on Vercel). Web-rail data is stored on Supabase (Postgres + Auth). When the two rails are linked, the unified ID is the join key - both records point at the same identity. Emails on either rail are stored as one-way HMAC-SHA256 hashes; plaintext addresses never touch our databases. See the Privacy Policy for the full breakdown.