Skip to content

Repository files navigation

Toolora

Simple all-in-one online tools built with Next.js.

Toolora lets anyone:

  • Download publicly accessible media from supported platforms
  • Shorten long URLs
  • Convert PDF pages to JPG/PNG images

No accounts. No dashboard.

Requirements

  • Node.js 20+
  • npm
  • yt-dlp — bundled via youtube-dl-exec (or install system-wide)
  • FFmpeg — bundled via ffmpeg-static (or set FFMPEG_PATH / install system-wide)

Installation

# On Windows, if youtube-dl-exec complains about Python:
#   set YOUTUBE_DL_SKIP_PYTHON_CHECK=1
npm install
cp .env.example .env.local

Development

npm run dev

Open http://localhost:3000.

Testing

npm run typecheck
npm run lint
npm run test
npm run build

# Live downloader test against a public URL
npm run test:downloader -- "https://www.youtube.com/watch?v=jNQXAC9IVRw"

Environment

See .env.example.

Variable Default Purpose
NEXT_PUBLIC_SITE_URL http://localhost:3000 Base URL for short links
MAX_IMAGE_SIZE_MB 20 Max image upload size
MAX_PDF_SIZE_MB 50 Max PDF upload size
MAX_PDF_PAGES 30 Max pages per conversion
MAX_AUDIO_SIZE_MB 100 Max audio upload size
MAX_VIDEO_SIZE_MB 500 Max video upload size
MAX_DOWNLOAD_SIZE_MB 500 Max downloader output file size
RATE_LIMIT_WINDOW_MS 60000 Rate-limit window
RATE_LIMIT_MAX 20 Max requests per window
FFMPEG_PATH (auto) Optional FFmpeg binary override
TEMP_DIR OS temp Optional temp directory

Tools & routes

Tool UI API
Media Downloader /downloader POST /api/downloader, POST /api/downloader/download
URL Shortener /shortener POST /api/shorten, redirect GET /go/[id]
PDF → Images /pdf-to-image POST /api/pdf-to-image

Downloader requirements

Local development

Works out of the box after npm install:

  • youtube-dl-exec provides yt-dlp
  • ffmpeg-static provides FFmpeg for merges / MP3

VPS / Docker / dedicated worker

Recommended for production media processing:

  1. Keep the Next.js UI
  2. Run API + yt-dlp + FFmpeg on a persistent Node host
  3. Or point the DownloaderProvider to an external worker

Vercel / serverless

  • Frontend + shortener + lightweight APIs: OK
  • Long video downloads / FFmpeg merges: not ideal on serverless timeouts
  • Swap YtDlpProvider for an external processing service without changing the UI

Supported platforms (public content only)

YouTube (watch / youtu.be / Shorts), TikTok, Instagram, Facebook, X/Twitter, Reddit, Pinterest.

Private, DRM-protected, paywalled, or login-gated content is rejected.

Architecture notes

Media Downloader

DownloaderProvider interface → YtDlpProvider implementation.

  • URL normalization + redirect resolution
  • Dynamic format discovery (no hardcoded qualities)
  • FFmpeg merge when video/audio streams are separate
  • Retries for transient network/extractor failures
  • Temp files cleaned in finally

URL Shortener

Persists to data/short-links.json (survives restarts).

For multi-instance production, replace src/lib/shortener/store.ts with Postgres/Supabase/Redis.

PDF conversion

Validates magic bytes, renders with pdfjs-dist + @napi-rs/canvas, encodes with sharp, returns ZIP via jszip.

Google Search Console

Follow these steps to submit and monitor Toolora in Google Search Console:

  1. Open Google Search Console: Go to search.google.com/search-console.
  2. Add Property: Select URL prefix and enter your production URL (e.g. https://toolora.com).
  3. Verify Ownership:
    • Copy the verification code from the <meta name="google-site-verification" content="..." /> HTML tag option.
    • Set the NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION environment variable in your .env.local / production environment:
      NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION=your_code_here
    • Deploy your site and click Verify in Google Search Console.
  4. Open Sitemaps: In the left sidebar, click Sitemaps.
  5. Submit Sitemap: Enter sitemap.xml and click Submit.
  6. URL Inspection: Use the URL Inspection tool to inspect your main pages (/, /downloader, /tools/pdf-to-word, etc.) and click Request Indexing.
  7. Monitor Performance: Regularly check Search Console for:
    • Queries, impressions, clicks, CTR, and average position
    • Indexing status and coverage errors
    • Core Web Vitals and mobile usability metrics

Note: Google Search Console is a monitoring and diagnostic tool. Indexing decisions are made autonomously by Google's crawler.

Production

npm run build
npm run start

License

Private / all rights reserved unless otherwise specified.

About

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages