Commit Graph
63 Commits
Author SHA1 Message Date
anthonyandClaude Sonnet 5 fd0bc092bd fix: fix o2switch deployment build and yt-dlp Python compatibility
Turbopack requires native SWC bindings unavailable on o2switch's old
glibc, so force webpack for production builds. NODE_ENV=production on
o2switch's shell also caused npm to skip devDependencies needed at
build time (Tailwind, PostCSS), so deploy now installs with
--include=dev.

yt-dlp's standalone PyInstaller binary self-extracts to noexec /tmp
and fails to mmap its bundled shared libs there, and o2switch's system
python3 (3.6) is too old for the plain zipapp. Revert to the zipapp
and invoke it explicitly through a configurable PYTHON_BIN, set to
o2switch's newer Python 3.11 in .env.prod.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 16:13:12 +02:00
anthonyandClaude Sonnet 5 38e52374c9 feat: name downloaded file after the video title and add a back-to-home link
The download endpoint served files under their internal uuid-based
storage name; it now builds the Content-Disposition filename from the
probed video title (persisted on submit) with the original extension,
falling back to the old behavior when no title is available. The
status page also gets an always-visible link back to the homepage.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 15:53:14 +02:00
anthony ecdfc95ff3 feat: add Passenger-compatible server.js startup file for o2switch
Passenger runs a literal JS entry file, not the next start CLI or an
npm script, so a custom server was needed for cPanel's Node.js App
startup file field.
2026-08-11 15:24:30 +02:00
anthony 09600118a5 docs: add implementation plan for 4K quality support 2026-08-11 15:20:25 +02:00
anthony 6603ad556e docs: advertise 4K support in marketing copy across all locales 2026-08-11 15:19:59 +02:00
anthony e23bd6b235 test: cover 4K format selector in buildYtdlpArgs 2026-08-11 15:19:02 +02:00
anthony 0d46a9a099 feat: add 4K and 2K quality tiers 2026-08-11 15:18:35 +02:00
anthony e0ef1dee77 docs: add design spec for 4K quality support 2026-08-11 15:12:51 +02:00
anthony 00068e8ed2 Claude > Add Plugins 2026-08-11 15:08:11 +02:00
anthonyandClaude Sonnet 5 f9f2934154 fix: hide quality selector when format is mp3
Quality/resolution options don't apply to audio-only output.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 15:05:58 +02:00
anthonyandClaude Sonnet 5 1f51ec7a2b docs: refresh CLAUDE.md and README with current project state, drop dead legacy pages
Both docs still described a frontend/-subfolder Vite/react-router-dom
setup that never existed in this repo's history, and were missing the
yt-dlp probe gating, SEO landing pages, sitemap, and 4-locale i18n
shipped in recent commits. Also removes src/app/page.tsx and
src/app/status/[uuid]/page.tsx, superseded by the [locale]-based
routes and unreachable since the next-intl middleware redirects all
non-API traffic into [locale]/...

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 15:02:37 +02:00
anthonyandClaude Sonnet 5 d2e491c762 feat: add npm run deploy script for o2switch deployment
Consolidates the manual deploy steps (env copy, install, prisma
generate/migrate deploy, build, pm2 startOrRestart+save) documented
in the README into a single scripts/deploy.sh run over SSH.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 14:55:05 +02:00
anthonyandClaude Sonnet 5 2b5f68752f feat: supervise worker with pm2 instead of cron PID-check
Passenger only manages the Next.js app process; the worker now gets
the same crash-recovery/auto-restart via pm2, replacing the cron-driven
PID-file restart hack. Updates README deployment steps accordingly.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 14:49:49 +02:00
anthony 65f92abe7b feat: add Linux ffprobe and Windows ffmpeg/ffprobe binaries to bin/
yt-dlp needs ffprobe alongside ffmpeg for postprocessing; only ffmpeg was
bundled for the Linux/o2switch prod deploy. Also add Windows builds so
local dev on Windows has a working ffmpeg/ffprobe pair, and gitignore
.env.prod/.env.local so real deployment credentials never get committed.
2026-08-11 14:39:27 +02:00
anthonyandClaude Sonnet 5 837dc954c2 fix: replace ts-node with tsx for worker scripts
TypeScript 7's CommonJS export no longer populates ts.sys, which
ts-node's config loader depends on, breaking `npm run worker` with
a TypeError. tsx (esbuild-based) doesn't rely on that API and
natively resolves tsconfig.json path aliases, so tsconfig-paths is
also no longer needed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 14:22:46 +02:00
anthonyandClaude Sonnet 5 27ba48d181 feat: gate download options on real-time yt-dlp video analysis
Options (quality, subtitles) are now derived from a yt-dlp -J probe of
the submitted URL instead of a static list, so users can't pick
combinations the source video doesn't actually support. Submission is
blocked until the probe succeeds.

- New /api/probe endpoint + src/lib/ytdlp-probe.ts, with its own rate
  limiter (rate-limit.ts refactored into a createRateLimiter factory).
- New options: subtitle language selection, clip start/end trim, MP3
  audio quality.
- Fixed buildYtdlpArgs: format=mp3 never triggered audio extraction
  (-x/--audio-format), and quality=best never applied --merge-output-format,
  so the chosen container had no real effect.
- Cross-platform yt-dlp invocation: the bundled bin/yt-dlp is a Python
  zipapp relying on a shebang, which Windows' spawn() can't run
  directly. buildYtdlpCommand() runs it through `python` on Windows and
  execs it directly on Linux/o2switch, where the shebang works natively.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 14:13:38 +02:00
anthonyandClaude Sonnet 5 f949566f76 docs: document NEXT_PUBLIC_BASE_URL in .env.example
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 12:05:44 +02:00
anthonyandClaude Sonnet 5 1d27d22581 feat: add sitemap.xml generation and sitemap <link> tag
Add app/sitemap.ts covering the homepage, supported-sites page, and
all 15 per-platform downloader pages across every locale, with
hreflang alternates between locales. Reference it from <head> via
<link rel="sitemap"> in the locale layout.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 12:01:14 +02:00
anthonyandClaude Sonnet 5 fd7515f8c2 feat: make Ombrora logo in header link to homepage
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 11:58:06 +02:00
anthonyandClaude Sonnet 5 f1a2639866 feat: show full supported-platforms block on each downloader page
Replace the plain "looking for another platform?" text link at the
bottom of each per-platform page with the same SupportedPlatformsSection
used on the homepage, giving stronger internal linking between all
platform pages. Drop the now-unused otherPlatforms/browseAll strings.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 11:55:48 +02:00
anthonyandClaude Sonnet 5 948b77cef4 feat: add per-platform SEO landing pages (/youtube-downloader, etc.)
Create a dedicated, dynamically-routed page for each of 15 curated
platforms (YouTube, TikTok, Instagram, Facebook, X, Reddit, Pinterest,
Vimeo, SoundCloud, Twitch, Dailymotion, LinkedIn, Tumblr, VK, Snapchat)
under /[locale]/[slug], with a tailored hero, an example URL matched
to the platform, a unique "about" paragraph, and a mix of
platform-specific and shared FAQ items, all translated across
en/fr/es/it. Unknown slugs 404.

Kept the scope to a curated list rather than all 1380 yt-dlp
extractors to avoid thin/duplicate "doorway page" content that search
engines penalize.

The homepage's platform badges and the "+1000 sites" links now point
to these pages, extracted the FAQ accordion markup into a shared
FaqAccordion component reused by both the homepage FAQ and the new
platform pages.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 11:53:36 +02:00
anthonyandClaude Sonnet 5 bd863056a3 feat: add supported sites page, remove yt-dlp mentions from public copy
yt-dlp is an internal implementation detail and should not be exposed
on the public site. Replace direct mentions in the platforms and FAQ
sections with a link to a new /supported-sites page listing every
extractor from yt-dlp's supported-sites doc (searchable, grouped
alphabetically), translated across en/fr/es/it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 11:36:29 +02:00
anthonyandClaude Sonnet 5 c8e991a8f7 feat: add how-it-works, supported platforms and FAQ sections to homepage
Enrich the landing page with reassurance/trust content inspired by
competitor downloader sites: a 3-step "how it works" guide, a
supported-platforms grid with a non-affiliation disclaimer, and an
8-question FAQ (with FAQPage JSON-LD) -- all translated across en/fr/es/it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 11:24:00 +02:00
anthony 1963521818 feat: redesign language switcher as dropdown, add cursor pointers
Replace flag-row selector with a dropdown to fix distorted flag icons
and remove the colored ring border. Add cursor-pointer to the language
menu and download submit button.
2026-08-11 10:51:53 +02:00
anthony 74fca57f4c fix: rename middleware.ts to proxy.ts
The middleware file convention is deprecated in this Next.js version in favor of proxy.
2026-08-11 09:38:42 +02:00
anthonyandClaude Sonnet 5 9e2423ed76 fix: remove unused ts-jest dependency causing npm install failure
ts-jest peer-conflicts with typescript@7 and jest already uses @swc/jest as its transform, making ts-jest dead weight.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 09:28:10 +02:00
anthony e39a8c0fc0 feat: add PostHog analytics tracking script
Injects PostHog init script in the locale layout head so it loads on every page.
2026-08-11 09:23:01 +02:00
anthony 2e0548591d docs: add Tailwind and multilanguage global constraints to CLAUDE.md 2026-08-11 09:10:42 +02:00
anthony 95d25a6d8a fix: add missing existsSync to fs mock in processor tests 2026-08-11 09:04:16 +02:00
anthony f6dc3801c6 feat: restyle StatusView and status page with Tailwind 2026-08-11 09:02:32 +02:00
anthony 3f499177b6 feat: add hero section and reassurance grid to home page 2026-08-11 09:01:18 +02:00
anthony f3da96ee15 feat: add ReassuranceSection with 4 benefit cards 2026-08-11 09:01:01 +02:00
anthony 29547d1acd feat: restyle SubmitForm with Tailwind, inline button, and violet glow 2026-08-11 09:00:34 +02:00
anthony efe6515fc9 feat: update locale layout with Inter font, ThemeProvider, SEO metadata, JSON-LD, Header, and footer 2026-08-11 09:00:01 +02:00
anthony 6e7ee816ad feat: add Header component with logo, theme toggle, and language switcher 2026-08-11 08:59:32 +02:00
anthony 10a06495d8 feat: replace emoji flags with SVG flag images in LanguageSwitcher 2026-08-11 08:59:16 +02:00
anthony 3994d32d35 feat: add ThemeToggle component with next-themes 2026-08-11 08:58:58 +02:00
anthony 630f036f14 feat: add local flag SVGs for language switcher 2026-08-11 08:57:12 +02:00
anthony 2c991cbc26 feat: add SEO, reassurance, subheading, and footer translation keys to all 4 locales 2026-08-11 08:50:53 +02:00
anthony 29ae2d3650 feat: install Tailwind CSS v4 with PostCSS 2026-08-11 08:49:43 +02:00
anthonyandClaude Sonnet 4.6 717b251941 docs: add minimalist UI implementation plan
11 tasks covering Tailwind v4 setup, translations, flag SVGs, ThemeToggle,
LanguageSwitcher, Header, layout SEO/JSON-LD, SubmitForm, ReassuranceSection,
home page hero, and StatusView restyle.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-10 16:01:38 +02:00
anthonyandClaude Sonnet 4.6 83a67928da docs: add minimalist UI design spec
Covers Tailwind CSS setup, dark mode via next-themes, flag image language
switcher, SEO metadata + JSON-LD, and full layout for home and status pages.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-10 15:48:33 +02:00
anthony e7af883953 feat: translate SubmitForm and StatusView with next-intl 2026-08-10 15:35:21 +02:00
anthony a89095b5c4 feat: restructure routes under [locale], add LanguageSwitcher 2026-08-10 15:34:34 +02:00
anthony 930b824902 feat: add translation messages for en, fr, es, it 2026-08-10 15:33:17 +02:00
anthony 9ea9f4f5f1 feat: add locale-detection middleware 2026-08-10 15:32:38 +02:00
anthony 0a75aba78b feat: install next-intl and set up i18n routing config 2026-08-10 15:32:11 +02:00
anthony cad0584af3 docs: add i18n implementation plan (next-intl, 6 tasks) 2026-08-10 15:29:26 +02:00
anthony e632608f1c docs: add i18n design spec (next-intl, FR/EN/ES/IT, URL routing) 2026-08-10 15:22:01 +02:00
anthony ee063aa460 Code Review Graph + Docs + Config 2026-08-10 15:15:19 +02:00