diff --git a/README.md b/README.md index 5717908..e961c81 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,20 @@ already downloaded. Built for the flight. Tauri 2 · Rust · React · Tailwind CSS 4 · SQLite +Styled to `DESIGN-SYSTEM.md`: slate and sky, a 9–15px type ladder, outline-first +controls, borders for separation and shadows only for elevation, with light and dark +both designed rather than one derived from the other. + ## How it works **Subscriptions come from Google Takeout, not the API.** Export *YouTube subscriptions* from [Takeout](https://takeout.google.com/) and import the `subscriptions.csv` in -Settings. No OAuth, no API key, no Google Cloud project, nothing secret on disk. +Settings — which carries a seven-step walkthrough with the exact URLs. No OAuth, no API +key, no Google Cloud project, nothing secret on disk. + +Importing **replaces** your subscription list: the CSV becomes the whole truth. Channels +no longer in it are removed along with their videos and downloaded files. A confirmation +dialog names exactly what will be deleted before anything happens. **Video metadata comes from YouTube's public Atom feed** — one request per channel to `youtube.com/feeds/videos.xml?channel_id=…`, fetched 8 at a time and merged into a single @@ -38,15 +47,15 @@ streams that must be merged. npm install && npm run tauri dev ``` -Build a real app bundle: +Build and install a real app bundle: ```bash -npm run tauri build +npm run tauri build -- --bundles app && cp -R src-tauri/target/release/bundle/macos/FlightTube.app /Applications/ ``` ## Using it -1. **Settings → Import subscriptions.csv** — point it at your Takeout export. +1. **Settings** — follow the seven-step Takeout guide, then **Import subscriptions.csv**. 2. **Refresh** — pulls the latest videos from every channel. 3. **Download** on any video — progress shows live on the button; click again to cancel. 4. Click a **downloaded** video to play it in the app. Click an undownloaded one to open @@ -54,7 +63,8 @@ npm run tauri build 5. **Offline** — the app detects a lost connection and collapses the feed to your downloads. The connectivity pill also toggles a forced offline mode for testing. -Videos land in `~/Movies/FlightTube` (changeable in Settings). +Videos land in `~/Movies/FlightTube` (changeable in Settings). Appearance follows the +system by default; Settings offers System / Light / Dark. ## Limitations @@ -70,9 +80,10 @@ Videos land in `~/Movies/FlightTube` (changeable in Settings). cd src-tauri && cargo test ``` -37 unit tests cover the three places malformed input actually bites: Takeout CSV parsing, +42 unit tests cover the three places malformed input actually bites: Takeout CSV parsing, Atom feed parsing (against a captured real response), and `yt-dlp` progress-line parsing — -plus the database rule that a refresh must never clobber download state. +plus the database rules that a refresh must never clobber download state and that a +replacing import drops exactly the right channels. Two network-dependent tests are excluded by default: @@ -94,7 +105,9 @@ src-tauri/src/ commands.rs Tauri command surface — delegates only src/ components/ Sidebar, TopBar, VideoRow, DownloadButton, Player, Settings - hooks/ useFeed, useDownloads, useConnectivity + components/ui.tsx the design system's component vocabulary, in one place + components/TakeoutGuide the seven-step export walkthrough + hooks/ useFeed, useDownloads, useConnectivity, useAppearance ``` Design notes and the implementation plan are in `docs/superpowers/`.