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.
┌─────────────────────────────────────────────────────────────┐
│ ⚡ 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 │
└─────────────────────────────────────────────────────────────┘
Rendering mermaid diagram...
- 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
- 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_atauto-updated on every browser launch- Filter by team or platform
- 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
- 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
Log everything your accounts do manually or via automation:
| Type | What it tracks |
|---|---|
comment | What you commented, on which post/URL |
friend_request | Who you added and their URL |
like | Target post liked |
share | Content shared |
follow | Account followed |
message | DM content + recipient |
custom | Anything else |
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
- 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)
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
-- 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
);
| Requirement | Install |
|---|---|
| Rust (stable) | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh |
| Node.js 18+ | https://nodejs.org |
| pnpm | npm i -g pnpm |
| Tauri CLI v2 | cargo install tauri-cli --version "^2" |
| GoLogin Desktop | https://gologin.com/download |
macOS extra:
xcode-select --installLinux extra:sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev
pnpm install
pnpm tauri dev
The Vite dev server starts on localhost:5173, Tauri wraps it in a native window with full Rust access.
pnpm tauri build
Output installers:
- macOS →
src-tauri/target/release/bundle/dmg/MMO.dmg - Windows →
src-tauri/target/release/bundle/msi/MMO.msi - Linux →
src-tauri/target/release/bundle/deb/mmo.deb
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)
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
| What | Where |
|---|---|
| SQLite database | ~/.config/mmo/mmo.db (macOS/Linux) |
| SQLite database | %APPDATA%\mmo\mmo.db (Windows) |
| GoLogin API token | Stored in SQLite settings table — never logged |
| Network calls | Only to api.gologin.com and localhost:36912 |
| Telemetry | None. Zero. Zip. |
All your account data, posts, activities and metrics stay 100% local.
| Layer | Technology |
|---|---|
| Desktop shell | Tauri v2 (Rust) |
| UI framework | React 18 + TypeScript |
| Build tool | Vite 5 |
| Styling | Pure CSS custom properties (dark theme) |
| Charts | Recharts |
| SQLite | rusqlite (bundled — no system SQLite needed) |
| HTTP client | reqwest |
| Async runtime | Tokio |
| IDs | uuid v4 |
| Browser automation | GoLogin SDK + CDP via GoLogin Desktop |