Skip to content

Latest commit

 

History

546 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Orbitra v1.5.6 Tracker

🌐 Language: English | Русский

License: MIT PHP Version React Vite SQLite Status

Orbitra is a modern traffic management and conversion tracking system. A simpler and faster alternative to Keitaro Tracker, while keeping full API and feature compatibility.

🆕 What's New in v1.5.6

Namecheap Buy & Park works again — registration contacts and real prices are fixed (PR #10, thanks @lucasvaz013).

Fixed

  • 🏠 Namecheap Buy & Park works again — Address Book contacts with ID 0 (the primary address on many accounts) are no longer dropped, and domains.create receives the full four-role contact set resolved via users.address.getInfo instead of the unsupported *AddressId shortcut that answered "Parameter RegistrantFirstName is Missing"; contact requests go as form POST, keeping the API key out of the URL
  • 💰 Real registration prices — regular domains are quoted a one-year REGISTER rate from users.getPricing (+ ICANN fee) instead of a misleading $0 read off the premium-price field; premium domains keep their own price and fees; the currency shows in the dialog and the confirmation, and a missing quote disables the purchase button with a "price unavailable" notice
  • 🧪 Three new regression suites — pricing (compound TLDs, multi-year rates, malformed quotes), contact resolution and the zero address ID; canned XML only, no purchases

Previous Highlights (v1.5.5)

  • 🤝 Partners block on Feedback & Support — a themed full-width card under the contact grid listing partner services as linked logo tiles: Pay2.House (virtual cards for Facebook, Google and TikTok Ads spend) and GroupBuySEO (group-buy access to Ahrefs, Semrush, ChatGPT Plus and more); extending the list is deliberately cheap — one SVG, one array entry, four locale strings
  • 🌍 All seven locales — the partners copy ships in en / ru / de / uk / es / fr / zh out of the box

Older releases (v1.5.4 and earlier): see the full changelog.

🖥 Live Demo

Try the full panel — no install required:

Shared demo instance — please don't store anything sensitive; data may be reset at any time.

🚀 Quick Install (Ubuntu 22.04+ / Debian 12+)

To install automatically on a clean Linux server, run:

wget -O orbitra-install.sh https://raw.githubusercontent.com/fenjo26/Orbitra.link/main/install.sh && bash orbitra-install.sh

The download is a separate step on purpose: wget -qO- … | bash fails silently when the download fails (a fresh server's DNS is sometimes not ready in its first minute), and bash runs whatever arrived — in the worst case, nothing at all. This way a failed download stops before bash starts, and wget says why.

The installer automatically:

  • Downloads the source code from GitHub
  • Installs Nginx, PHP 8.0+ (FPM), SQLite3 and Node.js 20
  • Builds and deploys the React/Vite frontend
  • Configures a Let's Encrypt SSL certificate for your domain

🖥 System Requirements

Orbitra is deliberately lightweight — it runs on plain PHP + SQLite behind Nginx, with no heavy frameworks and no separate database server (no ClickHouse, Redis or MySQL). Because of that it needs far less RAM than ClickHouse-based trackers and comfortably fits on the smallest VPS plans.

Baseline (mandatory)

  • CPU: 1 vCPU (x86_64)
  • RAM: 1 GB (2 GB recommended)
  • Disk: 20 GB SSD
  • OS: Ubuntu 22.04 through 26.04, or Debian 12 / 13
  • Clean server, no control panel; root/sudo access

Sizing by traffic (guideline)

Clicks per day RAM CPU Disk
up to ~100,000 1–2 GB 1–2 vCPU 20 GB SSD
~100,000 – 500,000 2–4 GB 2 vCPU 40 GB SSD
~500,000 – 1,000,000 4–8 GB 4 vCPU 80 GB SSD

Field-tested: Orbitra runs well on a 2 vCPU / 2 GB RAM / 20 GB SSD VPS (Ubuntu 24.04) for low traffic — a comfortable, inexpensive starting point. The higher rows above are headroom for heavier traffic, not a hard requirement.

Software (installed automatically by install.sh): Nginx, PHP 8.0+ with FPM (php-sqlite3, php-curl, php-mbstring, php-xml, php-zip), SQLite 3, Node.js 20 (build only), Certbot for SSL.

💡 Why lower than Keitaro? Keitaro stores clicks in ClickHouse + Redis + MySQL, so its RAM requirements scale steeply (up to 64 GB for millions of clicks/day). Orbitra keeps everything in a single SQLite file, so RAM is not the bottleneck — disk I/O and SQLite's single-writer model are. SQLite (in WAL mode) handles low-to-mid volume comfortably; for sustained millions of clicks per day with heavy analytics, a columnar-DB tracker like Keitaro is architecturally a better fit.

💡 Note on the 1 GB plan: running the tracker needs very little memory, but the installer builds the frontend on the server with Vite, which is the most memory-hungry step. On a 1 GB box add ~1–2 GB of swap before installing (or build the frontend elsewhere) so the build doesn't run out of memory. Disk usage stays small — it grows mainly with the SQLite click/conversion logs over time.

✨ Key Features

1. Full Keitaro Compatibility

  • Click API with tokens — full compatibility with existing integration scripts
  • Import from Keitaro — migrate campaigns, offers, domains and streams while preserving tokens
  • API compatibility — works with existing postbacks and webhooks

2. Modern Architecture

  • Backend: PHP 8.3+ without heavy frameworks (clean code)
  • Database: SQLite 3 (single file, automatic schema creation)
  • Frontend: React 19 + Vite 7 + Tailwind CSS 4
  • UI/UX: Modern design with multiple built-in themes (Light, Dark, Green, Neon) and a custom palette

3. Campaign Management

  • 6 payout models: CPC, CPuC, CPM, CPA, CPS, RevShare
  • 30+ parameters: keyword, sub_id_1...30, cost, creative_id and more
  • Advanced stream logic: Intercept → Regular → Fallback with weights and positions
  • Advanced filtering: GEO, Device (Desktop / Mobile / Tablet taxonomy shared by the tracker, Click API and reports), OS, Browser, ISP, IP, Language, Referer
  • A/B testing: built-in split-test support with weighted rotation
  • Play/Pause from the panel — one click pauses an internal campaign (a disabled campaign stops serving immediately) or an actual Facebook ad / ad set / campaign right from the table or a report row, via the Meta Marketing API
  • Per-stream "Collect clicks" — fallback and white-page streams can serve their destination without writing a click row, so unwanted traffic stops polluting CR and CPA

4. Integrations

  • S2S Postbacks — Server-to-Server postbacks from affiliate networks
  • Affiliate network templates: platform-level (Everflow, CAKE, HitPath, Affise, TUNE/HasOffers) plus networks Leadbit, M4Leads, Dr.Cash, AdCombo and others
  • Source templates: Facebook, Google, TikTok, Yandex, Taboola, Outbrain, Email and others
  • Click API — tokens for working with integration scripts
  • Facebook cost import — daily ad spend pulled from the Meta Marketing API and attributed to clicks by ad / adset / campaign ID, converted into the tracker's currency (docs)
  • TikTok Ads & Google Ads cost import — the same attributed-spend pipeline for the other major networks
  • External cost API — Dolphin and Fbtool push spend straight into Orbitra through a Keitaro-compatible Admin API route (docs)
  • Facebook Conversions API — conversions sent to Meta server-side, deduplicated against the browser pixel, so the events ad blockers and iOS strip out still reach the optimiser
  • Ads Manager extension — a browser overlay that injects real profit / ROI / CPA pills into Facebook Ads Manager rows, with a per-entity drill-down: daily history, landings and offers breakdown, and Pixel/CAPI delivery accuracy (auto-provisioned read key, no page permissions on other sites)
  • Cloudflare & Namecheap — DNS parking and SSL through the Cloudflare API; buy, park and import domains through Namecheap without leaving the panel
  • Revenue aggregators — Affilka, ReferOn and generic S2S APIs feed real player revenue back into reports
  • Telegram Bot — real-time monitoring and notifications

5. Analytics & Reports

  • Dashboard — aggregated statistics for clicks, conversions and revenue
  • Trends — detailed analytics with charts across 8 metrics
  • Campaign Reports — campaign reports grouped by any parameter, with saveable column templates and a Keitaro-parity column set (visits, LP CTR, leads/sales/rejected/trash, Approve %, EPC/EPV, ROI/ROI(conf), CPV)
  • Cohort analysis — how campaigns launched on different dates hold up over time
  • High-density tables — compact sticky-header tables for Campaigns / Landers / Offers with zebra striping, pagination and a TOTAL row that always stays visible
  • Conversion Log — detailed conversion log with filters
  • Traffic Simulation — click simulation for testing streams

6. Multilingual

  • 7 languages: 🇬🇧 English, 🇷🇺 Russian, 🇺🇦 Ukrainian, 🇪🇸 Spanish, 🇨🇳 Chinese (Simplified), 🇫🇷 French, 🇩🇪 German
  • Full i18n coverage — every UI element is localized, with 100% key parity across all locales
  • Language switching — in profile settings, without a page reload

7. Telegram Bot

  • 10+ commands: /stats, /campaigns, /top, /conversions and others
  • Notifications: instant conversion notifications
  • Daily summary: automatic campaign report
  • Multilingual: the bot speaks all 7 interface languages (EN, RU, UK, ES, ZH, FR, DE) via /lang

8. Domain Management

  • Domain groups — organise parked domains ("FB Nutra", "TikTok Landers", …) with inline group creation from the domain modal
  • Per-domain controls — admin panel access (deny = panel and API answer 404 on that host while tracking keeps working), HTTPS-only redirect, Cloudflare proxy (SSL from the CF edge, Let's Encrypt issuance skipped), crawler indexing
  • Index page routing & Catch 404 — serve a campaign on the domain root or catch unknown paths
  • Registrar / DNS metadata — registrar, DNS provider and manual status (Disabled serves 404 on the whole host)
  • Bulk add with URL cleanup — paste https://track.example.com/ or a comma-separated list; HTTP(S), slashes and spaces are cleaned automatically
  • DNS check — automatic A-record verification with caching
  • Automatic SSL — Let's Encrypt via Certbot with retry backoff and chain-completeness checks; zero-config parking writes the A record when the Cloudflare or Namecheap integration is connected

9. Migration from Keitaro

  • Full data migration: campaigns, offers, domains, streams, affiliate networks, sources, landings
  • Token preservation — Click API tokens are carried over for compatibility
  • In-UI guide — step-by-step instructions for creating a Keitaro backup
  • Preview mode — preview before the real import

10. Anti-Bot Challenge

  • Per-campaign human verification — stop corporate email security crawlers and clickbots from polluting your statistics
  • reCAPTCHA v2 — classic "I'm not a robot" checkbox
  • reCAPTCHA v3 — invisible, score-based with a configurable threshold
  • Custom code — paste any HTML/JS verification widget
  • Clean stats — clicks are logged only after a successful challenge, so bots never appear in reports; challenge state is signed (HMAC-SHA256) and expires in 15 minutes to prevent replay

11. Roles & Security

  • RBAC roles — one-click role templates (Admin / Media Buyer / Video Editor / Developer / Custom) fill the whole per-resource permission matrix
  • Server-side financial masking — users without show_costs / show_revenue / show_payout see money fields nulled across metrics, charts, campaigns and offers, with save-guards so a masked editor load can never wipe stored amounts
  • Personal API keys — per-user keys with read / write scopes for MCP, the Admin API and the Ads Manager extension
  • Bot & cloak protection — datacenter/VPN ASN detection, UA heuristics, bot-ISP blocklists, safe-page serving for suspicious visitors with per-stream control over what lands in the stats

🤖 AI Assistant Integration (MCP)

Since v0.9.5.0 Orbitra ships an MCP server (mcp/) — connect Claude Desktop or any other MCP client and drive the tracker in plain language:

"How did my campaigns do over the last 7 days?" "Create 10 campaigns for offer #4 — one per GEO: US, CA, GB, DE, FR." "Add track.example.com and point its root at campaign 12."

  • 31 tools — reads (metrics, campaigns, conversions, reports) and management (create / bulk-create / edit / delete campaigns, offers, domains, sources, landings)
  • Scoped API keysread (analytics only) and write (management), generated under Users → API keys
  • Safe by design — the key only ever goes to your own tracker address; read keys physically cannot change data

Details: docs/mcp.md and mcp/README.md.

📁 Project Structure

Orbitra/
├── api.php                    # REST API (60+ endpoints)
├── index.php                  # Main tracker (click handling)
├── admin.php                  # Admin panel entry point
├── postback.php               # Postback handler
├── click.php                  # Click API
├── telegram_bot.php           # Telegram bot webhook handler
├── config.php                 # DB configuration and migrations
├── database.sql               # DB schema documentation
├── version.php                # System version
├── router.php                 # PHP built-in server router
├── install.sh                 # Auto-installer
├── *_cron.php                 # Cron jobs (aggregator, backorder, source checks)
├── .htaccess                  # Apache rewrite rules
│
├── core/                      # System modules
│   ├── keitaro_import.php     # Import from Keitaro
│   ├── click_api.php          # Click API implementation
│   ├── backorder.php          # Domain monitoring
│   └── SxGeo.php              # Geo IP database
│
├── frontend/                  # React + Vite frontend
│   ├── src/
│   │   ├── App.jsx           # Main component with routing
│   │   ├── main.jsx          # Entry point
│   │   ├── components/       # 53 React components
│   │   │   ├── CampaignEditor.jsx    # Campaign editor (~130KB)
│   │   │   ├── IntegrationsPage.jsx # Integrations
│   │   │   ├── MigrationsPage.jsx   # Migrations and import
│   │   │   ├── ConversionsLog.jsx   # Conversion log
│   │   │   ├── CampaignReports.jsx  # Campaign reports
│   │   │   └── ...               # Other components
│   │   ├── contexts/
│   │   │   └── LanguageContext.jsx  # i18n context
│   │   └── locales/           # 7 languages, 100% key parity
│   │       ├── en.js          # English
│   │       ├── ru.js          # Russian
│   │       ├── uk.js          # Ukrainian
│   │       ├── es.js          # Spanish
│   │       ├── zh.js          # Chinese
│   │       ├── fr.js          # French
│   │       └── de.js          # German
│   ├── package.json
│   ├── vite.config.js
│   └── index.html
│
├── docs/                      # Documentation
│   ├── index.md              # Documentation overview
│   ├── architecture.md       # Architecture and technologies
│   ├── features.md          # Feature descriptions
│   ├── api.md               # REST API documentation
│   ├── deployment.md        # Deployment instructions
│   └── keitaro-migration.md # Keitaro migration guide
│
├── aggregator_engines/        # Stats aggregation engines
├── cli/                       # CLI utilities
├── landings/                  # Uploaded landings
└── vendor/                    # Composer dependencies

🚀 Quick Start for Developers

Local Development

# Clone the repository
git clone https://github.com/fenjo26/Orbitra.link.git
cd Orbitra

# Install PHP dependencies
composer install --no-dev

# Install frontend dependencies
cd frontend
npm install
npm run dev  # Start the dev server (http://localhost:5173)

Running the Backend

# In the project root
php -S localhost:8080 router.php

Production Frontend Build

cd frontend
npm run build

🔐 First Login and Setup

Orbitra has no default account (admin/admin) — you set the administrator credentials yourself on first run.

The first time you open the admin panel (/admin.php), the system detects that no users exist yet and launches the initial setup wizard. In it you create your own administrator:

  • Username — at least 3 characters
  • Password — at least 6 characters (with confirmation)
  • Timezone and interface language (one of 7 languages)

After the administrator is created the wizard no longer appears, and you log in with the username and password you set.

📚 Documentation

Full documentation is available in the docs/ folder:

  • Overview — documentation navigation
  • Architecture — technology stack and DB structure
  • Features — detailed feature descriptions
  • PWA & Push — PWA landings, web push campaigns, diagnostics
  • Content Gallery — media library and MediaPicker
  • API — REST API documentation
  • Deployment — installation and configuration instructions

🔌 Main API Endpoints

Migration from Keitaro

  • POST ?action=keitaro_import_sql — import a Keitaro dump

Campaigns

  • GET ?action=campaigns — list campaigns
  • GET ?action=get_campaign&id=X — campaign data
  • POST ?action=save_campaign — save a campaign
  • POST ?action=delete_campaign — delete a campaign
  • GET ?action=campaign_report — campaign report

Analytics

  • GET ?action=metrics — aggregated statistics
  • GET ?action=chart — chart data
  • GET ?action=trends — detailed analytics
  • GET ?action=conversions — conversion log

Integrations

  • GET ?action=affiliate_networks — affiliate networks
  • GET ?action=traffic_sources — traffic sources
  • GET ?action=telegram_settings — Telegram bot settings

📖 Full API list: see docs/api.md

🎯 Main Features

CampaignEditor

A full-screen campaign editor with tabs:

  • General: name, alias, domain, source
  • Finance: 6 payout models (CPC, CPuC, CPM, CPA, CPS, RevShare)
  • Parameters: 30+ parameters (sub_id_1...30, keyword, cost and more)
  • Integrations: ready-made scripts for Facebook, Google, TikTok, VK, Yandex
  • S2S Postbacks: configure postbacks from affiliate networks
  • Notes: text notes for the campaign
  • Actions: reports, conversion log, traffic simulation

Telegram Bot

10 monitoring commands:

  • /stats [period] — statistics (today, 1d, 7d, 30d, yesterday)
  • /campaigns — list campaigns with metrics
  • /campaign ID — detailed statistics
  • /top — TOP-5 campaigns by revenue
  • /conversions — last 10 conversions
  • /notify on|off — conversion notifications
  • /daily on|off — daily summary
  • /lang en|ru|uk|es|zh|fr|de — bot language

Traffic Simulation

Testing streams and filters:

  • IP — set the click's IP address
  • User Agent — set the User-Agent
  • Country — choose a country (US, RU, DE, GB, FR and more)
  • Device — desktop, mobile, tablet
  • Language — browser language (en, ru, de, fr, es, pt, zh)

📊 Payout Models

Model Description
CPC Pay per click
CPuC Pay per unique click
CPM Pay per 1000 impressions
CPA Pay per action (lead)
CPS Pay per sale
RevShare Percentage of revenue

🔄 Import from Keitaro

Preparing a Keitaro Dump

On the Keitaro server, run:

# Connect to the Keitaro server
ssh root@YOUR_KEITARO_SERVER_IP

# Create the dump
bash -lc '
source /etc/keitaro/env/inventory.env

# Config for connecting to the DB
cat > /root/keitaro-mariadb.cnf <<EOF
[client]
user=$MARIADB_KEITARO_USER
password=$MARIADB_KEITARO_PASSWORD
host=127.0.0.1
port=3306
protocol=tcp
EOF
chmod 600 /root/keitaro-mariadb.cnf

# Dump the tables
TABLES="keitaro_affiliate_networks keitaro_groups keitaro_offers keitaro_domains keitaro_campaigns keitaro_campaign_postbacks keitaro_landings keitaro_streams keitaro_stream_filters keitaro_stream_offer_associations keitaro_stream_landing_associations keitaro_traffic_sources keitaro_ref_sources"

mysqldump --defaults-extra-file=/root/keitaro-mariadb.cnf \
  --single-transaction --quick --skip-lock-tables \
  "$MARIADB_KEITARO_DATABASE" $TABLES \
  | gzip > /root/keitaro_orbitra_full.sql.gz

ls -lah /root/keitaro_orbitra_full.sql.gz
'

# Download the file
scp root@YOUR_KEITARO_SERVER_IP:/root/keitaro_orbitra_full.sql.gz .

Importing into Orbitra

  1. Open Migrations in the admin menu
  2. Follow the instructions in the "How to create a Keitaro backup" block
  3. Upload the keitaro_orbitra_full.sql.gz file
  4. Choose what to import (campaigns, offers, domains, etc.)
  5. Click "Show preview" to verify
  6. Click "Import Into Orbitra" for the real import

🔐 Google Ads 1-Click OAuth Setup

Orbitra supports seamless 1-Click Google Ads connection (similar to Keitaro tracker UX). To enable this feature, configure the following environment variables on your server:

Server Configuration

Add these environment variables to your server configuration (e.g., in /etc/environment, systemd service file, or .env file):

# Google OAuth2 Client ID (Web application)
ORBITRA_GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com

# Google OAuth2 Client Secret
ORBITRA_GOOGLE_CLIENT_SECRET=your-client-secret-here

# Google Ads API Developer Token
ORBITRA_GOOGLE_DEVELOPER_TOKEN=your-developer-token

How to Obtain Google Ads API Credentials

  1. Create Google Cloud Project:

    • Go to Google Cloud Console
    • Create a new project or select existing one
    • Enable the Google Ads API in the API Library
  2. Create OAuth 2.0 Credentials:

    • Navigate to APIs & Services → Credentials
    • Click Create Credentials → OAuth 2.0 Client ID
    • Application type: Web application
    • Add this redirect URI (replace with your domain):
      https://your-domain.com/api.php?action=google_ads_oauth_callback
      
    • Copy the Client ID and Client Secret
  3. Get Developer Token:

    • Go to Google Ads API Center
    • Apply for or copy your existing Developer Token
    • Paste it into the configuration

User Experience

Once configured, users can:

  1. Click "Sign in with Google" button in Integrations → Google Ads Costs
  2. Select their Google account from the account chooser (all logged-in Gmail profiles appear)
  3. Automatically discover all accessible Google Ads accounts (including MCC hierarchies)
  4. Select which accounts to connect and save

Fallback: Manual Token Connection

If server-level OAuth credentials are not configured, the UI automatically shows the "Direct Token Connection" tab where users can manually enter:

  • Developer Token
  • OAuth2 Client ID
  • OAuth2 Client Secret
  • OAuth2 Refresh Token
  • Customer ID

🎨 Customization

Themes

Orbitra ships with several built-in theme presets — Light, Dark, Green and Neon — plus a fully Custom theme where you set your own color palette (primary, backgrounds, text). Pick a theme in Settings → Branding.

Branding

Configure the logo, colors and name in Settings → Branding.

Interface Language

Switch the language in Profile → Settings. Seven languages are available: English, Russian, Ukrainian, Spanish, Chinese, French and German.

🛠 Technologies

Category Technology
Backend PHP 8.3+
Database SQLite 3
Frontend React 19.2.0
Build Tool Vite 7.3.1
UI Framework Tailwind CSS 4.2.0
Icons Lucide React 0.575.0
HTTP Client Axios 1.13.5
Charts Chart.js 4.5.1
Date Utils date-fns 3.6.0
PHP Deps Composer

📝 What's New

Current release — v1.5.6 (2026-09-10)

Fixed

  • 🏠 Namecheap Buy & Park works again (PR #10, thanks @lucasvaz013) — Address Book contacts with ID 0 (the primary address on many accounts) are no longer dropped, and domains.create now receives the full four-role contact set resolved via users.address.getInfo instead of the unsupported *AddressId shortcut; contact requests go as form POST, keeping the API key out of the URL
  • 💰 Real registration prices — regular domains are quoted a one-year REGISTER rate from users.getPricing (+ ICANN fee) instead of a misleading $0 read off the premium-price field; premium domains keep their own price and fees; the currency shows in the dialog and the confirmation, and a missing quote disables the purchase button with a "price unavailable" notice
  • 🧪 Three new regression suites: pricing, contact resolution, zero address ID

Previous release — v1.5.5 (2026-09-09)

Added

  • 🤝 Partners block on Feedback & Support — a themed card under the contact grid with linked logo tiles: Pay2.House (virtual cards for Facebook / Google / TikTok Ads spend) and GroupBuySEO (group-buy access to Ahrefs, Semrush, ChatGPT Plus) to start with; extending the list is one SVG, one array entry and four locale strings
  • 🌍 Partners copy ships in all seven locales

Previous releases — v1.5.4: 📱 PWA visit funnel (ordered screens: own + install-instructions + push card, per-screen statistics & tracking scripts, funnel-first constructor), 💱 postback payouts converted to the base currency (PR #9); v1.5.3: 🧩 extension overlay counts like the panel, 🧱 one safe-page predicate in core/ReportMetrics.php, 📊 honest safe-page hint + 👁 Visitors in the default preset; v1.5.2: 🎨 boot screen before the bundle parses, 🖥 Terminal & Aurora themes, 🗺 two-column login, 🤖 Telegram bot as a visual menu (pinned keyboard ×7 languages), 📸 Snapchat Ads template, 🖱 non-blocking update check, 📊 Profitability → Margin; v1.5.1: ⏱ time on LP for every visitor (visible seconds + scroll depth into the click, LP bounce/scroll/measured visits metrics, Time on LP (bucket) dimension), 🤖 Telegram polling mode (bare IP / plain HTTP / proxy, real Telegram errors on screen); 🎯 clicks = the offer funnel (pre-bound landing views count as visitors, CPV/EPV ÷ visitors), 📌 pinned identity columns, 🔗 CAPI content_id (PR #8), 🧱 versioned column-width storage; v1.5.0: 📱 PWA landings (store-style constructor, funnel beacons into the click, self-healing push subscription, direct domain→PWA binding), 🔔 Web Push on your own base (self-hosted VAPID keys, subscriber list + CSV, manual & event messages, cron-driven queue with retries and aging), 🖼 Content Gallery + shared MediaPicker (size contracts, cropping), 🔐 four crypto-layer defects in push delivery found by live device diagnostics; 🧩 {subid} on the landing→offer hop, service worker on bound domains, panel session lifetime, "database is locked" as a clean 503, silent save_user demotion; v1.4.1: 🐞 Affiliate Networks crash fix (issue #7), 🌍 System Status localization; v1.4.0: 📊 honest LP-funnel metrics (Real LP clicks / Real offer clicks / Real LP CTR), ⏱ landing→offer timing buckets, 🎚 "After the click" default for new landing streams, 🔐 roles enforced server-side + per-campaign scoping (issue #6); v1.3.11: 🏠 domain-root campaigns in production, 🔑 private postback key on install; v1.3.10: 📱 rotation rows as a placed grid below 640px, 🎨 campaign-name link parity on both surfaces; v1.3.9: 🔒 SSL chain verdicts + certificates-on-save, 🎯 LeadForge honest failures, 🛡️ scan protection, Domains rebuilt; v1.3.8: 🧹 stray ellipsis gone, centred values, checkbox column fixed, lint-zero tracker tables; v1.3.7: 🔀 full column reorder, ✂️ hard cell clipping, 🎯 centred headers.

Full version history: CHANGELOG.md.

🤝 Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a branch for your feature (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

📄 License

This project is licensed under the MIT License — see the LICENSE file for details.

📞 Support


Orbitra — a modern tracker for affiliate marketers and webmasters.

Tags: tracker, affiliate-marketing, keitaro-alternative, php-tracker, react-admin, cpa-network, traffic-management, split-testing, conversion-tracking

About

Orbitra.link — High-performance, self-hosted traffic tracker for media buyers and SEO. Lightweight, secure, and optimized for Linux. Features advanced GEO-targeting, real-time analytics, and a premium UI with customizable themes. Take full control of your data.

Topics

Resources

Stars

22 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages