Skip to content

jundy779/FusionTik


⚑ FusionTik

Modern TikTok Downloader β€” Video Β· Photo Mode Β· MP3

Next.js TypeScript Tailwind CSS Supabase Vercel Apache-2.0 License

CI Status Docker Build CodeQL

Live Demo Stars Issues

🌸 Overview

FusionTik adalah web application modern untuk mendownload konten TikTok tanpa watermark. Dibangun dengan Next.js 15 App Router, TypeScript, dan Tailwind CSS β€” FusionTik menawarkan pengalaman download yang cepat, bersih, dan responsif di semua perangkat.

Tidak perlu install aplikasi. Tidak perlu login. Cukup paste link TikTok, klik Download, dan simpan konten ke perangkatmu.

Built on Next.js β€’ Powered by Supabase β€’ Written in TypeScript

πŸ—οΈ Architecture Overview

graph TD
    A["User Browser - Paste TikTok URL"] -->|Submit Form| B["Next.js Frontend - app/page.tsx"]
    B -->|POST /api/tiktok| C["API Route Handler - Validate URL"]
    C -->|Try Provider 1| D["Zell API - apizell.web.id"]
    C -->|Fallback| E["Sanka API - sankavollerei.com"]
    D -->|Success| F["Parse Response - video, audio, images"]
    E -->|Success| F
    D -->|Fail| E
    E -->|All Fail| G["notifyProviderFailure - Alert System"]
    G --> H["Telegram Bot - Instant Alert"]
    G --> I["Email SMTP - Nodemailer"]
    G --> J["Webhook POST - Custom Endpoint"]
    F -->|JSON Response| B
    B -->|Show VideoPreview| K["Download UI - Progress Bar"]
    K -->|downloadWithProgress| L["TikTok CDN - Direct Download"]
    B -->|POST /api/global-stats| M["Global Counter - Increment"]
    M -->|Atomic RPC| N[("Supabase DB - global_stats")]
    M -->|Fallback| O[("JSON File - global-stats.json")]

    style A fill:#e3f2fd,stroke:#2196f3,stroke-width:3px,color:#0d47a1
    style B fill:#e8f5e9,stroke:#4caf50,stroke-width:3px,color:#1b5e20
    style C fill:#fff3e0,stroke:#ff9800,stroke-width:3px,color:#e65100
    style D fill:#f3e5f5,stroke:#9c27b0,stroke-width:3px,color:#4a148c
    style E fill:#e8eaf6,stroke:#3f51b5,stroke-width:3px,color:#1a237e
    style F fill:#e0f2f1,stroke:#00695c,stroke-width:3px,color:#004d40
    style G fill:#fce4ec,stroke:#e91e63,stroke-width:3px,color:#880e4f
    style H fill:#e8f5e9,stroke:#4caf50,stroke-width:2px,color:#1b5e20
    style I fill:#fff3e0,stroke:#ff9800,stroke-width:2px,color:#e65100
    style J fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1
    style K fill:#fff8e1,stroke:#ff8f00,stroke-width:3px,color:#ff6f00
    style L fill:#efebe9,stroke:#795548,stroke-width:3px,color:#3e2723
    style M fill:#f5f5f5,stroke:#616161,stroke-width:2px,color:#424242
    style N fill:#d7ccc8,stroke:#5d4037,stroke-width:2px,color:#3e2723
    style O fill:#d7ccc8,stroke:#5d4037,stroke-width:2px,color:#3e2723
Loading

🧱 Software Architecture

FusionTik menggunakan Layered Architecture dengan pemisahan yang jelas antara Presentation, Application, dan Infrastructure layer.

Layer Overview

graph TB
    subgraph PRESENTATION["Presentation Layer - Client Side"]
        P1["app/page.tsx - Main Page"]
        P2["video-preview.tsx - Download UI"]
        P3["result-card.tsx - History Card"]
        P4["stats-card.tsx - Stats Display"]
        P5["navbar.tsx - Navigation"]
    end

    subgraph STATE["State Management Layer - React Hooks"]
        S1["use-download-history - localStorage"]
        S2["use-download-stats - Personal Stats"]
        S3["use-global-stats - Global Counter"]
    end

    subgraph APPLICATION["Application Layer - Next.js API Routes"]
        A1["POST /api/tiktok - Core Downloader"]
        A2["GET/POST /api/global-stats - Counter API"]
    end

    subgraph INFRASTRUCTURE["Infrastructure Layer"]
        I1["lib/supabase.ts - DB Client"]
        I2["lib/download-utils.ts - Download Engine"]
        I3["lib/utils.ts - Utilities"]
    end

    subgraph EXTERNAL["External Services"]
        E1["Zell API - Provider 1"]
        E2["Sanka API - Provider 2"]
        E3["Supabase DB - PostgreSQL"]
        E4["TikTok CDN - Media Files"]
        E5["Telegram API - Alerts"]
    end

    PRESENTATION --> STATE
    PRESENTATION --> APPLICATION
    APPLICATION --> INFRASTRUCTURE
    INFRASTRUCTURE --> EXTERNAL

    style PRESENTATION fill:#e3f2fd,stroke:#2196f3,stroke-width:2px
    style STATE fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
    style APPLICATION fill:#fff3e0,stroke:#ff9800,stroke-width:2px
    style INFRASTRUCTURE fill:#f3e5f5,stroke:#9c27b0,stroke-width:2px
    style EXTERNAL fill:#efebe9,stroke:#795548,stroke-width:2px
Loading

Component Interaction Diagram

graph LR
    subgraph PAGE["app/page.tsx"]
        FORM["Form Input"]
        RESULT["Result Display"]
        HIST["History Section"]
        STATS["Stats Section"]
    end

    subgraph HOOKS["React Hooks"]
        UDH["useDownloadHistory"]
        UDS["useDownloadStats"]
        UGS["useGlobalStats"]
    end

    subgraph COMPONENTS["Components"]
        VP["VideoPreview"]
        RC["ResultCard"]
        SC["StatsCard"]
    end

    subgraph API["API Routes"]
        TK["POST /api/tiktok"]
        GS["GET/POST /api/global-stats"]
    end

    subgraph LIB["Libraries"]
        DU["download-utils"]
        SB["supabase client"]
    end

    FORM -->|submit| TK
    TK -->|response| RESULT
    RESULT --> VP
    VP --> DU
    HIST --> RC
    STATS --> SC
    PAGE --> UDH
    PAGE --> UDS
    PAGE --> UGS
    UDH -->|localStorage| UDS
    UGS -->|fetch| GS
    GS --> SB
    PAGE -->|increment| GS

    style PAGE fill:#e3f2fd,stroke:#2196f3
    style HOOKS fill:#e8f5e9,stroke:#4caf50
    style COMPONENTS fill:#fff3e0,stroke:#ff9800
    style API fill:#f3e5f5,stroke:#9c27b0
    style LIB fill:#efebe9,stroke:#795548
Loading

Data Flow Diagram

flowchart LR
    subgraph INPUT["Input"]
        URL["TikTok URL"]
    end

    subgraph VALIDATION["Validation"]
        REGEX["Regex Check - tiktok.com"]
    end

    subgraph FETCH["Data Fetching"]
        Z["Zell Provider"]
        S["Sanka Provider"]
        PARSE["Parse and Normalize - title, creator, videos, audio, images"]
    end

    subgraph RESPONSE["Response"]
        VIDEO["Video Response - MP4 + Audio"]
        IMAGE["Image Response - Photos + Audio"]
    end

    subgraph STORAGE["Storage"]
        LS["localStorage - history and stats"]
        DB[("Supabase - global_stats")]
    end

    subgraph DOWNLOAD["Download"]
        BLOB["Blob with Progress Bar"]
        OPEN["window.open fallback"]
    end

    URL --> REGEX
    REGEX -->|valid| Z
    REGEX -->|invalid| ERR["Error 400"]
    Z -->|success| PARSE
    Z -->|fail| S
    S -->|success| PARSE
    S -->|fail| ALERT["Alert System - Telegram/Email"]
    PARSE --> VIDEO
    PARSE --> IMAGE
    VIDEO --> LS
    IMAGE --> LS
    VIDEO --> DB
    IMAGE --> DB
    VIDEO --> BLOB
    IMAGE --> BLOB
    BLOB -->|CORS ok| BLOB
    BLOB -->|CORS fail| OPEN

    style INPUT fill:#e3f2fd,stroke:#2196f3,color:#0d47a1
    style VALIDATION fill:#fff3e0,stroke:#ff9800,color:#e65100
    style FETCH fill:#f3e5f5,stroke:#9c27b0,color:#4a148c
    style RESPONSE fill:#e8f5e9,stroke:#4caf50,color:#1b5e20
    style STORAGE fill:#efebe9,stroke:#795548,color:#3e2723
    style DOWNLOAD fill:#e0f2f1,stroke:#00695c,color:#004d40
Loading

Design Patterns yang Digunakan

Pattern Implementasi File
Provider Pattern Fallback chain Zell β†’ Sanka app/api/tiktok/route.ts
Repository Pattern Supabase ↔ File JSON fallback app/api/global-stats/route.ts
Custom Hook Pattern State management terpisah per concern hooks/
Compound Component VideoPreview + download buttons components/video-preview.tsx
Strategy Pattern Download: Blob progress vs window.open lib/download-utils.ts
Observer Pattern useRef untuk avoid stale closure hooks/use-download-history.ts

✨ Key Features

🎬 Video Tanpa Watermark

Download video TikTok
dalam format MP4
tanpa logo watermark

πŸ–ΌοΈ Photo Mode

Simpan semua gambar
dari TikTok carousel
sekaligus dalam sekali klik

🎡 Audio Extraction

Ekstrak dan download
hanya audio/musik
dalam format MP3

πŸ“Š Download Progress

Progress bar real-time
saat proses download
berlangsung

πŸ• Download History

Riwayat download
tersimpan lokal
di perangkatmu (max 100)

🌍 Global Counter

Counter total download
seluruh pengguna
di seluruh dunia

πŸ”” Error Alerts

Notifikasi otomatis
via Telegram & Email
jika provider API gagal

πŸŒ™ Dark Mode

Tema gelap dan terang
yang bisa disesuaikan
dengan preferensimu

πŸ”’ Privacy First

Tidak ada file tersimpan
di server β€” history
hanya di device kamu

πŸ”„ Message Flow

sequenceDiagram
    participant U as User
    participant FE as Frontend
    participant API as API Server
    participant Z as Zell Provider
    participant S as Sanka Provider
    participant DB as Supabase
    participant TG as Telegram

    U->>FE: Paste TikTok URL
    U->>FE: Click Download
    FE->>API: POST /api/tiktok
    API->>API: Validate URL regex
    API->>Z: GET url=tiktok_url

    alt Zell Success
        Z-->>API: video, music, images
        API-->>FE: type, video, music
    else Zell Failed
        Z-->>API: Error 5xx
        API->>S: GET apikey and url
        alt Sanka Success
            S-->>API: play, music, images
            API-->>FE: type, video, music
        else All Providers Failed
            S-->>API: Error
            API->>TG: Alert notification
            API-->>FE: error message
            FE-->>U: Show error message
        end
    end

    FE->>FE: Show VideoPreview component
    U->>FE: Click UNDUH MP4
    FE->>FE: downloadWithProgress
    FE-->>U: Progress 0 to 100 percent
    FE-->>U: File saved

    FE->>API: POST /api/global-stats
    API->>DB: RPC increment_global_downloads
    DB-->>API: new_total
    API-->>FE: totalDownloads N
    FE-->>U: Update counter display
Loading

πŸ—‚οΈ Project Structure

FusionTik/
β”‚
β”œβ”€β”€ πŸ“ app/                          # Next.js App Router
β”‚   β”œβ”€β”€ πŸ“„ layout.tsx                # Root layout + SEO metadata + PWA
β”‚   β”œβ”€β”€ πŸ“„ page.tsx                  # ⭐ Halaman utama downloader
β”‚   β”œβ”€β”€ πŸ“„ globals.css               # Global styles + custom animations
β”‚   β”œβ”€β”€ πŸ“„ robots.ts                 # SEO robots.txt
β”‚   β”œβ”€β”€ πŸ“„ sitemap.ts                # SEO sitemap.xml
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“ api/
β”‚   β”‚   β”œβ”€β”€ πŸ“ tiktok/
β”‚   β”‚   β”‚   └── πŸ“„ route.ts          # ⭐ Core API: fetch + fallback + alerts
β”‚   β”‚   └── πŸ“ global-stats/
β”‚   β”‚       └── πŸ“„ route.ts          # Global download counter
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“ faq/                      # Halaman FAQ
β”‚   β”œβ”€β”€ πŸ“ feedback/                 # Halaman Feedback
β”‚   β”œβ”€β”€ πŸ“ help-center/              # Halaman Help Center
β”‚   β”œβ”€β”€ πŸ“ privacy/                  # Privacy Policy
β”‚   └── πŸ“ terms/                    # Terms of Service
β”‚
β”œβ”€β”€ πŸ“ components/
β”‚   β”œβ”€β”€ πŸ“„ navbar.tsx                # Navigation bar + dark mode toggle
β”‚   β”œβ”€β”€ πŸ“„ video-preview.tsx         # ⭐ Preview + download buttons
β”‚   β”œβ”€β”€ πŸ“„ result-card.tsx           # History item card
β”‚   β”œβ”€β”€ πŸ“„ result-buttons.tsx        # Download action buttons
β”‚   β”œβ”€β”€ πŸ“„ stats-card.tsx            # Personal statistics card
β”‚   β”œβ”€β”€ πŸ“„ video-preview-modal.tsx   # Modal preview
β”‚   β”œβ”€β”€ πŸ“„ mode-toggle.tsx           # Dark/light mode toggle
β”‚   β”œβ”€β”€ πŸ“„ theme-provider.tsx        # Theme context provider
β”‚   └── πŸ“ ui/                       # shadcn/ui (50+ komponen)
β”‚
β”œβ”€β”€ πŸ“ hooks/
β”‚   β”œβ”€β”€ πŸ“„ use-download-history.ts   # ⭐ History (localStorage, max 100)
β”‚   β”œβ”€β”€ πŸ“„ use-download-stats.ts     # Personal download statistics
β”‚   β”œβ”€β”€ πŸ“„ use-global-stats.ts       # Global counter state
β”‚   └── πŸ“„ use-toast.ts              # Toast notification hook
β”‚
β”œβ”€β”€ πŸ“ lib/
β”‚   β”œβ”€β”€ πŸ“„ download-utils.ts         # ⭐ Download dengan progress tracking
β”‚   β”œβ”€β”€ πŸ“„ supabase.ts               # Supabase client (nullable)
β”‚   └── πŸ“„ utils.ts                  # Tailwind merge utilities
β”‚
β”œβ”€β”€ πŸ“ data/
β”‚   └── πŸ“„ global-stats.json         # Fallback counter (development)
β”‚
β”œβ”€β”€ πŸ“ public/                       # Static assets + PWA manifest
β”œβ”€β”€ πŸ“„ next.config.mjs               # Next.js config + CSP headers
β”œβ”€β”€ πŸ“„ tailwind.config.ts            # Tailwind configuration
β”œβ”€β”€ πŸ“„ tsconfig.json                 # TypeScript configuration
└── πŸ“„ env.example                   # Template environment variables

πŸ› οΈ Tech Stack

Framework

Language

Styling

Database

Layer Teknologi Versi Fungsi
Framework Next.js 15 App Router, SSR, API Routes
Language TypeScript 5 Type safety end-to-end
Styling Tailwind CSS 3 Utility-first CSS
UI Components shadcn/ui latest 50+ komponen siap pakai
Animation Framer Motion latest Animasi halus & interaktif
Database Supabase 2.x Global download counter
Email Nodemailer 6.x Alert notifikasi via SMTP
Deployment Vercel β€” Hosting + Edge Functions

⚑ Quick Start

Prasyarat

  • Node.js 18+
  • npm / pnpm / yarn
  • Akun Supabase (opsional, untuk global stats)

1. Clone & Install

git clone https://github.com/jundy779/FusionTik.git
cd FusionTik
npm install

2. Setup Environment

cp env.example .env.local

Edit .env.local:

# Supabase (untuk global stats β€” opsional)
NEXT_PUBLIC_SUPABASE_URL=https://<your-project-ref>.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=<your-supabase-anon-key>

# Notifikasi error (semua opsional)
TELEGRAM_BOT_TOKEN=
TELEGRAM_CHAT_ID=
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=youremail@gmail.com
SMTP_PASS=your-app-password
ALERT_EMAIL_TO=owner@domain.com

3. Jalankan Development Server

npm run dev

Buka http://localhost:3000 di browser.

4. Build Production

npm run build
npm run start

# Custom port
PORT=8080 npm run start

βš™οΈ Environment Variables

Variable Wajib Deskripsi
NEXT_PUBLIC_SUPABASE_URL ❌ URL project Supabase untuk global stats
NEXT_PUBLIC_SUPABASE_ANON_KEY ❌ Anon key Supabase
ZELL_TIKTOK_API_URL ❌ Override URL provider Zell
SANKA_TIKTOK_API_URL ❌ Override URL provider Sanka
SANKA_TIKTOK_API_KEY ❌ API key untuk provider Sanka
ALERT_WEBHOOK_URL ❌ Webhook URL untuk notifikasi error
TELEGRAM_BOT_TOKEN ❌ Token bot Telegram untuk alert
TELEGRAM_CHAT_ID ❌ Chat ID penerima notifikasi Telegram
SMTP_HOST ❌ SMTP host untuk email alert
SMTP_PORT ❌ SMTP port (587 TLS / 465 SSL)
SMTP_USER ❌ Email pengirim
SMTP_PASS ❌ Password / App Password email
ALERT_EMAIL_TO ❌ Email penerima alert

Catatan: Jika Supabase tidak dikonfigurasi, global stats menggunakan data/global-stats.json sebagai fallback (cocok untuk development).

🌐 Deployment

Deploy ke Vercel (Recommended)

  1. Fork repo ini ke akun GitHub kamu
  2. Buka vercel.com/import dan pilih repo FusionTik
  3. Set environment variables di dashboard Vercel
  4. Klik Deploy β€” Vercel akan build dan host otomatis

Deploy ke VPS / Server Sendiri

git clone https://github.com/jundy779/FusionTik.git
cd FusionTik
npm install
cp env.example .env.local
# Edit .env.local sesuai kebutuhan
npm run build
npm run start

Gunakan PM2 untuk production:

npm install -g pm2
pm2 start "npm run start" --name fusiontik
pm2 save && pm2 startup

Deploy dengan Docker

Pull dan jalankan image dari GitHub Container Registry:

# Pull image terbaru
docker pull ghcr.io/jundy779/fusiontik:latest

# Jalankan container
docker run -d \
  --name fusiontik \
  -p 3000:3000 \
  -e NEXT_PUBLIC_SUPABASE_URL=your_supabase_url \
  -e NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_key \
  -e TELEGRAM_BOT_TOKEN=your_telegram_token \
  -e TELEGRAM_CHAT_ID=your_chat_id \
  ghcr.io/jundy779/fusiontik:latest

Atau build sendiri dari source:

git clone https://github.com/jundy779/FusionTik.git
cd FusionTik
docker build -t fusiontik .
docker run -d --name fusiontik -p 3000:3000 fusiontik

Dengan Docker Compose:

# docker-compose.yml
services:
  fusiontik:
    image: ghcr.io/jundy779/fusiontik:latest
    ports:
      - "3000:3000"
    environment:
      - NEXT_PUBLIC_SUPABASE_URL=${NEXT_PUBLIC_SUPABASE_URL}
      - NEXT_PUBLIC_SUPABASE_ANON_KEY=${NEXT_PUBLIC_SUPABASE_ANON_KEY}
      - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
      - TELEGRAM_CHAT_ID=${TELEGRAM_CHAT_ID}
    restart: unless-stopped
docker compose up -d

πŸ—„οΈ Setup Supabase

Untuk mengaktifkan global download counter yang persisten:

1. Buat Tabel

CREATE TABLE global_stats (
  id BIGINT PRIMARY KEY DEFAULT 1,
  total_downloads BIGINT DEFAULT 0,
  updated_at TIMESTAMPTZ DEFAULT NOW()
);

INSERT INTO global_stats (id, total_downloads) VALUES (1, 0);

2. Buat RPC Function (Atomic Increment)

CREATE OR REPLACE FUNCTION increment_global_downloads()
RETURNS BIGINT LANGUAGE plpgsql AS $$
DECLARE new_total BIGINT;
BEGIN
  UPDATE global_stats
  SET total_downloads = total_downloads + 1, updated_at = NOW()
  WHERE id = 1
  RETURNING total_downloads INTO new_total;
  RETURN new_total;
END;
$$;

3. Row Level Security

ALTER TABLE global_stats ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Allow public read" ON global_stats FOR SELECT USING (true);
CREATE POLICY "Allow public update" ON global_stats FOR UPDATE USING (true);

πŸ”” Sistem Notifikasi Error

Ketika semua provider API gagal, FusionTik otomatis mengirim alert:

flowchart LR
    A["Provider Zell - FAILED"] --> B["Provider Sanka - FAILED"]
    B --> C{"notifyProviderFailure"}
    C --> D["Telegram Bot - Instant Alert"]
    C --> E["Email SMTP - Nodemailer"]
    C --> F["Webhook POST - Custom Endpoint"]
    C --> G["User Error UI - Friendly Message"]

    style A fill:#fce4ec,stroke:#e91e63,color:#880e4f
    style B fill:#fce4ec,stroke:#e91e63,color:#880e4f
    style C fill:#fff3e0,stroke:#ff9800,color:#e65100
    style D fill:#e8f5e9,stroke:#4caf50,color:#1b5e20
    style E fill:#e3f2fd,stroke:#2196f3,color:#0d47a1
    style F fill:#f3e5f5,stroke:#9c27b0,color:#4a148c
    style G fill:#efebe9,stroke:#795548,color:#3e2723
Loading

Contoh pesan Telegram yang dikirim:

⚠️ FusionTik downloader error
URL: https://www.tiktok.com/@user/video/123
Error: Zell API returned 503: Service Unavailable
Time: 2025-01-15T10:30:00.000Z

πŸ“Š Statistik & Analytics

Global Stats

Disimpan di Supabase dengan atomic increment via RPC. Fallback ke file JSON untuk development. Ditampilkan di hero section halaman utama.

Personal Stats (Per User)

Disimpan di localStorage browser:

Metrik Deskripsi
πŸ“₯ Total Downloads Jumlah total konten yang didownload
🎬 Videos Downloaded Jumlah video yang didownload
πŸ–ΌοΈ Images Downloaded Jumlah foto/carousel yang didownload
🎡 Audio Extracted Jumlah audio yang diekstrak
πŸ“… Today Downloads Download hari ini
πŸ“† This Week Download 7 hari terakhir
πŸ—“οΈ This Month Download 30 hari terakhir
πŸ† Most Active Day Hari dengan download terbanyak
πŸ“ˆ Average/Day Rata-rata download per hari

πŸ”’ Keamanan & Privasi

  • βœ… Tidak ada file tersimpan di server β€” semua konten langsung dari CDN TikTok
  • βœ… History hanya di device pengguna β€” tidak ada tracking server-side
  • βœ… CSP Headers β€” Content Security Policy ketat di semua response
  • βœ… Security Headers β€” HSTS, X-Frame-Options, X-Content-Type-Options, dll
  • βœ… XSS Protection β€” Caption TikTok di-escape sebelum render HTML
  • βœ… No Third-party Tracking β€” Tidak ada Google Analytics atau tracker pihak ketiga

πŸ“ Changelog

v2.1.0 β€” Clean Code & Security Update

  • βœ… Refactor: hapus semua any type β†’ proper TypeScript interfaces
  • βœ… Security: XSS fix pada caption rendering (HTML entity escaping)
  • βœ… Fix: atomic Supabase counter increment via RPC
  • βœ… Fix: sequential image download (cegah browser popup blocking)
  • βœ… Improvement: response.ok check pada semua fetch calls
  • βœ… Improvement: history limit 100 item + useRef fix untuk infinite loop
  • βœ… Improvement: konsistensi downloadWithProgress di semua download handler
  • βœ… Security: hapus exposed Supabase key dari env.example

v2.0.0 β€” Multi-Provider & Alerts

  • βœ… Dual provider dengan fallback (Zell β†’ Sanka)
  • βœ… Notifikasi error multi-channel (Webhook + Telegram + Email)
  • βœ… Global download counter dengan Supabase
  • βœ… Download progress tracking dengan ReadableStream
  • βœ… Personal download statistics
  • βœ… Dark/Light mode

🀝 Contributing

Contributions are welcome! πŸ’–

  1. Fork repo ini
  2. Buat branch baru: git checkout -b feature/nama-fitur
  3. Commit perubahan: git commit -m "feat: tambah fitur X"
  4. Push ke branch: git push origin feature/nama-fitur
  5. Buka Pull Request ke branch main

Konvensi Commit:

Prefix Deskripsi
feat: Fitur baru
fix: Bug fix
refactor: Refactoring kode
docs: Update dokumentasi
style: Perubahan styling
chore: Maintenance / dependency update

βš–οΈ Legal & Disclaimer

Warning

Gunakan dengan bijak:

  • Layanan ini untuk penggunaan pribadi saja
  • Hormati hak cipta kreator konten
  • Jangan gunakan konten yang didownload untuk tujuan komersial tanpa izin
  • Ikuti Terms of Service TikTok
  • FusionTik tidak berafiliasi dengan TikTok atau ByteDance Ltd.

πŸ’– Acknowledgements

Core Technologies

Community & Contributors

  • πŸ’š Semua contributors yang membuat ini mungkin
  • 🌍 Komunitas open-source yang luar biasa
  • ⭐ Semua yang sudah memberikan bintang di repo ini

πŸ“Š Repository Activity

Repobeats analytics image

🌟 Star History

Star History Chart

Maintained with ❀️ by FUSIONIFY DIGITAL.ID


Footer

Packages

 
 
 

Contributors

Languages