⚡ MMO — Multi-Account Manager

A native desktop app built with Tauri v2 + Rust + React for managing Facebook, Google & TikTok accounts across teams. Uses GoLogin anti-detect browser profiles to keep each account isolated. Every metric, post, activity and engagement is tracked daily in a local SQLite database — nothing leaves your machine.


Screenshots (UI Overview)

┌─────────────────────────────────────────────────────────────┐
│ ⚡ MMO  │  Dashboard                          Apr 06, 2026  │
│ ─────────┤─────────────────────────────────────────────────  │
│ Overview │  👤 12   ✅ 10   📝 47   ⚡ 138                  │
│  📊 Dashboard   Total  Active  Posts  Activities             │
│  👤 Accounts  ┌──────────────┐ ┌──────────────────────────┐ │
│  🏢 Teams     │  Platform    │ │  Team Performance        │ │
│               │  🟦 FB  ████ │ │  Apt A   · · · 24 posts  │ │
│ GoLogin       │  🔴 GG  ██   │ │  Apt B   · · · 18 posts  │ │
│  🌐 Profiles  │  🖤 TT  ███  │ └──────────────────────────┘ │
│               └──────────────┘                              │
│ Actions       Recent Activity                               │
│  📝 Posts     💬 comment → Nguyen Van A   2m ago            │
│  ⚡ Activities ❤️  like    → Post #4923    5m ago            │
│               👋 friend  → Tran Thi B    12m ago            │
│ Analytics                                                   │
│  📈 Metrics                                                 │
│                                                             │
│ System        ● GoLogin connected                           │
│  ⚙️ Settings                                               │
└─────────────────────────────────────────────────────────────┘

Architecture

Rendering mermaid diagram...

Features

🏢 Teams & Apartments

  • Create unlimited teams (apartments, groups, departments)
  • Assign custom color per team for visual separation
  • All accounts and metrics roll up to their team
  • Delete a team cascades to all its accounts

👤 Accounts

  • Supports Facebook, Google, TikTok
  • Link each account to a GoLogin browser profile
  • Set per-account proxy (HTTP/SOCKS)
  • Status tracking: active · inactive · banned · warming
  • last_active_at auto-updated on every browser launch
  • Filter by team or platform

🌐 GoLogin Profiles

  • Sync all profiles from GoLogin cloud API
  • Launch a profile → GoLogin desktop opens an isolated browser window
  • Returns CDP WebSocket URL for Puppeteer / Playwright automation
  • Stop a running profile
  • Profile cache stored locally in SQLite

📝 Posts

  • Draft, schedule, or publish posts per account
  • Supports multi-line content + media URLs
  • Datetime scheduler with status tracking: draft → scheduled → published → failed
  • Link back to live post URL once published

⚡ Activities

Log everything your accounts do manually or via automation:

TypeWhat it tracks
commentWhat you commented, on which post/URL
friend_requestWho you added and their URL
likeTarget post liked
shareContent shared
followAccount followed
messageDM content + recipient
customAnything else

📈 Metrics (Daily Tracking)

Every metric is stored per account per day (UPSERT — safe to call multiple times):

Engagement received:

  • New posts · Likes · Reacts · Comments · New friends · New followers · Profile views · Reach

Activity done:

  • Comments made · Friend requests sent · Messages sent

Features:

  • 30-day line chart per account (switch metric via dropdown)
  • Today's live stats summary cards
  • Full historical log table with all accounts

📊 Dashboard

  • 8-stat overview grid (total accounts, posts today, activities, friends, followers, comments, likes)
  • Platform breakdown bar with account count + today's posts/likes
  • Team performance leaderboard
  • Live activity feed (last 15 actions, relative timestamps)

Project Structure

mmo/
├── src/                          # React frontend
│   ├── App.tsx                   # Router + token guard
│   ├── main.tsx                  # React entry point
│   ├── index.css                 # Dark theme design system
│   ├── components/
│   │   ├── Sidebar.tsx           # Navigation + GoLogin status indicator
│   │   └── Modal.tsx             # Reusable modal (Esc to close)
│   ├── lib/
│   │   ├── invoke.ts             # All Tauri command bindings + types
│   │   ├── toast.tsx             # Toast notification context
│   │   └── utils.ts             # Platform icons, formatters, helpers
│   └── pages/
│       ├── Dashboard.tsx         # Live stats overview
│       ├── Accounts.tsx          # Account card grid + launch
│       ├── Teams.tsx             # Team CRUD with color picker
│       ├── Profiles.tsx          # GoLogin profile table
│       ├── Posts.tsx             # Post feed + create
│       ├── Activities.tsx        # Activity log + filter pills
│       ├── Metrics.tsx           # Charts + daily recording
│       └── Settings.tsx          # Token setup + test connection
│
├── src-tauri/                    # Rust backend
│   ├── Cargo.toml                # Dependencies
│   ├── tauri.conf.json           # Window config, plugins, bundle
│   └── src/
│       ├── main.rs               # Entry point
│       ├── lib.rs                # App setup, state, command registration
│       ├── db.rs                 # SQLite init + full schema
│       ├── models.rs             # Rust structs (serde + sqlx)
│       ├── gologin.rs            # GoLogin HTTP client
│       └── commands/
│           ├── mod.rs
│           ├── settings.rs       # get/set GoLogin token
│           ├── teams.rs          # CRUD teams
│           ├── accounts.rs       # CRUD accounts
│           ├── profiles.rs       # Sync + launch/stop GL profiles
│           ├── posts.rs          # Create/list/delete posts
│           ├── activities.rs     # Log + list activities
│           └── metrics.rs        # Record daily metrics + dashboard stats
│
├── package.json
├── vite.config.ts
└── tsconfig.json

Database Schema

-- Teams / Apartments CREATE TABLE teams ( id TEXT PRIMARY KEY, name TEXT NOT NULL, description TEXT DEFAULT '', color TEXT DEFAULT '#6366f1', created_at TEXT DEFAULT (datetime('now')) ); -- Social Accounts CREATE TABLE accounts ( id TEXT PRIMARY KEY, team_id TEXT NOT NULL REFERENCES teams(id) ON DELETE CASCADE, platform TEXT NOT NULL, -- 'facebook' | 'google' | 'tiktok' username TEXT NOT NULL, display_name TEXT DEFAULT '', gologin_profile_id TEXT DEFAULT '', proxy TEXT DEFAULT '', status TEXT DEFAULT 'active', -- active|inactive|banned|warming last_active_at TEXT, created_at TEXT DEFAULT (datetime('now')) ); -- GoLogin profile cache (synced from cloud) CREATE TABLE gologin_profiles ( id TEXT PRIMARY KEY, name TEXT NOT NULL, os TEXT DEFAULT 'win', account_id TEXT REFERENCES accounts(id) ON DELETE SET NULL, synced_at TEXT DEFAULT (datetime('now')) ); -- Posts CREATE TABLE posts ( id TEXT PRIMARY KEY, account_id TEXT NOT NULL REFERENCES accounts(id) ON DELETE CASCADE, platform TEXT NOT NULL, content TEXT NOT NULL, media_urls TEXT DEFAULT '[]', -- JSON array status TEXT DEFAULT 'draft', -- draft|scheduled|published|failed scheduled_at TEXT, published_at TEXT, post_url TEXT DEFAULT '', created_at TEXT DEFAULT (datetime('now')) ); -- Activities CREATE TABLE activities ( id TEXT PRIMARY KEY, account_id TEXT NOT NULL REFERENCES accounts(id) ON DELETE CASCADE, type TEXT NOT NULL, -- comment|friend_request|like|share|follow|message|custom target_url TEXT DEFAULT '', target_name TEXT DEFAULT '', content TEXT DEFAULT '', status TEXT DEFAULT 'done', -- done|pending|failed done_at TEXT DEFAULT (datetime('now')) ); -- Daily Metrics (UPSERT safe — accumulates on conflict) CREATE TABLE metrics ( id TEXT PRIMARY KEY, account_id TEXT NOT NULL REFERENCES accounts(id) ON DELETE CASCADE, date TEXT NOT NULL, -- YYYY-MM-DD platform TEXT NOT NULL, new_posts INTEGER DEFAULT 0, new_likes INTEGER DEFAULT 0, new_reacts INTEGER DEFAULT 0, new_comments INTEGER DEFAULT 0, new_friends INTEGER DEFAULT 0, new_followers INTEGER DEFAULT 0, profile_views INTEGER DEFAULT 0, reach INTEGER DEFAULT 0, comments_made INTEGER DEFAULT 0, friend_requests_sent INTEGER DEFAULT 0, messages_sent INTEGER DEFAULT 0, notes TEXT DEFAULT '', UNIQUE(account_id, date) ); -- Settings KV store CREATE TABLE settings ( key TEXT PRIMARY KEY, value TEXT NOT NULL );

Setup & Installation

1. Prerequisites

RequirementInstall
Rust (stable)curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Node.js 18+https://nodejs.org
pnpmnpm i -g pnpm
Tauri CLI v2cargo install tauri-cli --version "^2"
GoLogin Desktophttps://gologin.com/download

macOS extra: xcode-select --install Linux extra: sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev

2. Install dependencies

pnpm install

3. Run in development

pnpm tauri dev

The Vite dev server starts on localhost:5173, Tauri wraps it in a native window with full Rust access.

4. Build for production

pnpm tauri build

Output installers:

  • macOSsrc-tauri/target/release/bundle/dmg/MMO.dmg
  • Windowssrc-tauri/target/release/bundle/msi/MMO.msi
  • Linuxsrc-tauri/target/release/bundle/deb/mmo.deb

GoLogin Quick Start

1. Download & install GoLogin → keep the desktop app open (it runs a local server on port 36912)

2. Get your API token:
   app.gologin.com → Settings → API → Copy token

3. In MMO → Settings → paste token → "Test Connection" → Save

4. In MMO → GL Profiles → "Sync" → your profiles appear

5. In Accounts → create an account → link it to a GL Profile

6. Click "🚀 Launch" → a real isolated Chrome opens for that account
   (CDP WebSocket URL is printed to console for Puppeteer/Playwright automation)

Tauri Command Reference

All frontend ↔ backend calls go through invoke() in src/lib/invoke.ts:

// Settings invoke("set_gologin_token", { token }) invoke("get_gologin_token") // Teams invoke("create_team", { name, description?, color? }) invoke("list_teams") invoke("update_team", { id, name?, description?, color? }) invoke("delete_team", { id }) // Accounts invoke("add_account", { team_id, platform, username, ... }) invoke("list_accounts", { team_id?, platform? }) invoke("get_account", { id }) invoke("update_account", { id, status?, proxy?, notes?, ... }) invoke("delete_account", { id }) // GoLogin Profiles invoke("list_gologin_profiles") // fetches from cloud + caches invoke("sync_profiles") invoke("launch_profile", { profile_id, account_id? }) // returns ws_url invoke("stop_profile", { profile_id }) // Posts invoke("create_post", { account_id, platform, content, media_urls?, scheduled_at? }) invoke("list_posts", { account_id?, platform?, status? }) invoke("delete_post", { id }) // Activities invoke("log_activity", { account_id, activity_type, target_url?, target_name?, content? }) invoke("list_activities", { account_id?, activity_type?, limit? }) // Metrics invoke("record_metric", { account_id, date, platform, new_posts?, new_likes?, ... }) invoke("get_metrics", { account_id?, date_from?, date_to? }) invoke("get_metric_history", { account_id, days? }) // for 30-day chart invoke("get_dashboard_stats") // aggregated today's totals

Data & Privacy

WhatWhere
SQLite database~/.config/mmo/mmo.db (macOS/Linux)
SQLite database%APPDATA%\mmo\mmo.db (Windows)
GoLogin API tokenStored in SQLite settings table — never logged
Network callsOnly to api.gologin.com and localhost:36912
TelemetryNone. Zero. Zip.

All your account data, posts, activities and metrics stay 100% local.


Tech Stack

LayerTechnology
Desktop shellTauri v2 (Rust)
UI frameworkReact 18 + TypeScript
Build toolVite 5
StylingPure CSS custom properties (dark theme)
ChartsRecharts
SQLiterusqlite (bundled — no system SQLite needed)
HTTP clientreqwest
Async runtimeTokio
IDsuuid v4
Browser automationGoLogin SDK + CDP via GoLogin Desktop