Skip to content

Commit 81cc6d9

Browse files
committed
feat(ci): Flatpak/RPM en release Linux; docs y extractor simplificados
- workflow: instala rpm/flatpak/flatpak-builder, genera .flatpak bundle y sube .rpm como artifact - README: elimina badge DeepWiki y enlace EN, actualiza limitaciones (vídeos, bulk ops) - package.json: añade campo description - post-extractor: sustituye comentarios PBL extensos por inline breves; usa line.trim() directo
1 parent f86b324 commit 81cc6d9

4 files changed

Lines changed: 157 additions & 359 deletions

File tree

.github/workflows/release.yml

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,10 @@ jobs:
133133
libgtk-3-dev \
134134
libayatana-appindicator3-dev \
135135
librsvg2-dev \
136-
patchelf
136+
patchelf \
137+
rpm \
138+
flatpak \
139+
flatpak-builder
137140
138141
- name: Setup Node.js
139142
uses: actions/setup-node@v4
@@ -177,13 +180,62 @@ jobs:
177180
- name: Build Tauri (Linux)
178181
run: npm run tauri -- build
179182

183+
- name: Construir Flatpak
184+
run: |
185+
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
186+
sudo flatpak install --noninteractive flathub org.gnome.Platform//45 org.gnome.Sdk//45
187+
188+
cat > threadsvault.desktop << 'EOF'
189+
[Desktop Entry]
190+
Name=ThreadsVault
191+
Exec=threadsvault-desktop
192+
Icon=com.threadsvault.desktop
193+
Type=Application
194+
Categories=Network;
195+
EOF
196+
197+
cat > flatpak-manifest.yml << 'EOF'
198+
app-id: com.threadsvault.desktop
199+
runtime: org.gnome.Platform
200+
runtime-version: '45'
201+
sdk: org.gnome.Sdk
202+
command: threadsvault-desktop
203+
finish-args:
204+
- --share=network
205+
- --share=ipc
206+
- --socket=wayland
207+
- --socket=fallback-x11
208+
- --filesystem=home
209+
- --device=dri
210+
modules:
211+
- name: threadsvault
212+
buildsystem: simple
213+
build-commands:
214+
- install -Dm755 threadsvault-desktop /app/bin/threadsvault-desktop
215+
- install -Dm644 128x128.png /app/share/icons/hicolor/128x128/apps/com.threadsvault.desktop.png
216+
- install -Dm644 threadsvault.desktop /app/share/applications/com.threadsvault.desktop.desktop
217+
sources:
218+
- type: file
219+
path: src-tauri/target/release/threadsvault-desktop
220+
- type: file
221+
path: src-tauri/icons/128x128.png
222+
dest-filename: 128x128.png
223+
- type: file
224+
path: threadsvault.desktop
225+
EOF
226+
227+
flatpak-builder --force-clean flatpak-build flatpak-manifest.yml --repo=flatpak-repo
228+
flatpak build-bundle flatpak-repo ThreadsVault.flatpak com.threadsvault.desktop
229+
180230
- name: Subir artifacts (Linux)
181231
uses: actions/upload-artifact@v4
182232
with:
183233
name: linux-binaries
184234
path: |
185235
src-tauri/target/release/bundle/appimage/*.AppImage
186236
src-tauri/target/release/bundle/deb/*.deb
237+
src-tauri/target/release/bundle/rpm/*.rpm
238+
ThreadsVault.flatpak
187239
retention-days: 7
188240
if-no-files-found: error
189241

README.md

Lines changed: 64 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -2,145 +2,123 @@
22

33
<img width="400" height="400" alt="threadsvault-desktop-icon" src="https://github.com/user-attachments/assets/e336810d-5130-4b7a-a275-fac97b15acec" />
44

5-
6-
75
<!-- badges -->
8-
![Platform](https://img.shields.io/badge/plataforma-Windows%20%7C%20Linux-blue)
6+
![Plataforma](https://img.shields.io/badge/plataforma-Windows%20%7C%20Linux-blue)
97
![Cross Platform](https://img.shields.io/badge/Cross--Platform-Desktop%20%7C%20Web-blueviolet)
108
![Tauri](https://img.shields.io/badge/Tauri-v2-orange)
119
![Svelte](https://img.shields.io/badge/Svelte-5-red)
1210
![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript&logoColor=white)
1311
![Tailwind CSS](https://img.shields.io/badge/TailwindCSS-v4-38B2AC?logo=tailwindcss&logoColor=white)
1412
![SQLite](https://img.shields.io/badge/SQLite-Local_DB-003B57?logo=sqlite&logoColor=white)
1513
![IndexedDB](https://img.shields.io/badge/IndexedDB-Dexie-yellow)
16-
![License](https://img.shields.io/badge/licencia-GPL--3.0-green)
14+
![Licencia](https://img.shields.io/badge/licencia-GPL--3.0-green)
1715
![PBL](https://img.shields.io/badge/método-PBL-blueviolet)
1816
[![Claude Code](https://img.shields.io/badge/Assistant-Claude%20Code-D97706)](https://www.anthropic.com/claude-code)
1917
[![Codex](https://img.shields.io/badge/Assistant-Codex-111827)](https://openai.com/)
20-
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/D4vRAM369/ThreadsVault-desktop)
2118

22-
<p align="left">
23-
<a href="./README_spanish-version.md">Leer en español</a>
24-
</p>
19+
> Una bóveda local para tus posts de Threads. Sin nube. Sin rastreo. Sin cuenta necesaria.
2520
26-
> A local vault for your Threads posts. No cloud. No tracking. No account required.
21+
ThreadsVault Desktop es la versión de escritorio de [ThreadsVault para Android](https://github.com/D4vRAM369/ThreadsVault). Su funcionamiento es sencillo: pega la URL de un post de Threads, ésta se extrae, se guarda localmente, y es tuyo. Cierra la app y ábrela en el tiempo que quiera: el texto y las imágenes de tus posts guardados van a seguir ahí (el programa los guarda localmente en segundo plano tras cada guardado).
2722

28-
ThreadsVault Desktop is the desktop version of [ThreadsVault for Android](https://github.com/D4vRAM369/ThreadsVault). Its workflow is simple: paste the URL of a Threads post, it gets extracted, stored locally, and becomes yours. Close the app and open it whenever you want: the text and images of your saved posts will still be there (the program stores everything locally in the background after each save).
29-
30-
You can classify posts into different categories. The app indexes hashtags from publications, and you can also use them in personal notes when saving a post for easier searching inside your small personal vault of threads that you find interesting or relevant — stored locally without relying only on the basic “Saved” feature of Threads 🗄🧵
23+
Puedes clasificar los posts en distintas categorías, el programa indexa los hashtags de las publicaciones y tú puedes usarlos en notas personales al guardar un post, para una mayor facilidad de búsqueda en tu pequeña bóveda personal de hilos que te resulten interesantes o relevantes para guardarlos de forma local, sin depender únicamente del sencillo Guardados de Threads 🗄🧵
3124

3225
---
3326

34-
## Screenshots
27+
## Capturas
3528

3629
<table align="center">
3730
<tr>
3831
<td align="center" width="33%">
3932
<img src="assets/screenshots/vault_empty.png" alt="Bóveda vacía" /><br/>
40-
<b>Empty vault</b><br/>
41-
<sub>Main screen on first launch</sub>
33+
<b>Bóveda vacía</b><br/>
34+
<sub>Pantalla principal al primer arranque</sub>
4235
</td>
4336
<td align="center" width="33%">
4437
<img src="assets/screenshots/settings_categories.png" alt="Categorías" /><br/>
45-
<b>Categories</b><br/>
46-
<sub>Create and organize with color and icon</sub>
38+
<b>Categorías</b><br/>
39+
<sub>Crea y organiza con color e icono</sub>
4740
</td>
4841
<td align="center" width="33%">
4942
<img src="assets/screenshots/settings_privacy.png" alt="Ajustes" /><br/>
50-
<b>Privacy & Settings</b><br/>
51-
<sub>Backup, privacy, keyboard shortcuts</sub>
52-
</td>
53-
</tr>
54-
<tr>
55-
<td align="center" width="33%">
56-
<img src="https://github.com/user-attachments/assets/c1b6d4e5-96eb-4736-8d11-67a78626a307" alt="Bóveda con posts en modo claro" /><br/>
57-
<b>Vault on light mode (included in v2.1)</b><br/>
58-
<sub>Main screen with new light mode</sub>
59-
</td>
60-
<td align="center" width="33%">
61-
<img src="https://github.com/user-attachments/assets/57389305-7c3c-4ad5-b5a5-876a5a8c4c37" alt="Categorías - Modo claro" /><br/>
62-
<b>Categories</b><br/>
63-
<sub>Category view in light mode</sub>
64-
</td>
65-
<td align="center" width="33%">
66-
<img src="https://github.com/user-attachments/assets/8b901aa7-4d31-4687-b3f2-7c525cce76a0" alt="Ajustes" /><br/>
67-
<b>Privacy & Settings</b><br/>
68-
<sub>Backup, privacy, keyboard shortcuts</sub>
43+
<b>Privacidad y ajustes</b><br/>
44+
<sub>Backup, privacidad, atajos de teclado</sub>
6945
</td>
7046
</tr>
7147
</table>
7248

73-
7449
---
7550

76-
## Main Features
51+
## Características principales
7752

78-
- **Save posts by URL** — paste a Threads link and click save. Title, author, text, and images are extracted automatically.
79-
- **Dark / light mode** — toggle between the default dark theme and light mode from any screen. Preference is saved automatically.
80-
- **Local storage** — SQLite on desktop (via Tauri), IndexedDB in the browser. Nothing leaves your device.
81-
- **Categories** — organize posts into custom categories. Uncategorized posts go to a default inbox.
82-
- **Backup & restore** — export your entire vault as JSON and import it whenever you want. When importing, the app shows the progress and confirms how many posts and categories were restored. ThreadsVault backups for Android can be imported here without any problems (Android → Desktop ✅). The reverse direction (Desktop → Android) is not yet supported and will be resolved in a future version.
83-
- **Media caching** — images are cached locally as data URLs so posts survive CDN expiration.
84-
- **Personal notes** — add, edit, or delete notes on any saved post directly from its detail screen.
85-
- **Keyboard shortcuts** — navigate and search without a mouse: `Esc` back, `Ctrl+N` add, `/` or `Ctrl+F` search, `` `` navigate between posts.
86-
- **No telemetry** — no analytics, no crash reports, no external requests beyond post extraction. Everything runs 100% locally (client-side): not even the developer has access to your data.
53+
- **Guardar posts por URL** — pega un enlace de Threads y pulsa guardar. Título, autor, texto e imágenes se extraen automáticamente.
54+
- **Almacenamiento local** — SQLite en escritorio (vía Tauri), IndexedDB en navegador. Nada sale de tu dispositivo.
55+
- **Categorías** — organiza tus posts en categorías personalizadas. Los no categorizados van a una bandeja por defecto.
56+
- **Backup y restauración** — exporta toda tu bóveda como JSON e impórtala cuando quieras. Al importar, la app muestra el progreso y confirma cuántos posts y categorías se restauraron. Los backups de ThreadsVault para Android se pueden importar aquí sin problemas *(Android → Desktop ✅)*. La dirección inversa *(Desktop → Android)* no está soportada aún y se resolverá en una versión futura.
57+
- **Caché de medios** — las imágenes se cachean localmente como data URLs para que los posts sobrevivan la expiración de los enlaces CDN.
58+
- **Notas personales** — añade, edita o elimina notas en cualquier post guardado directamente desde su pantalla de detalle.
59+
- **Atajos de teclado** — navega y busca sin ratón: `Esc` volver, `Ctrl+N` añadir, `/` o `Ctrl+F` buscar, `` `` navegar entre posts.
60+
- **Sin telemetría** — sin analíticas, sin informes de errores, sin peticiones externas más allá de la extracción del post. Todo funciona 100% en local (client-side): ni el desarrollador tiene acceso a tus datos.
8761

8862
---
8963

90-
## Installation
64+
## Instalación
9165

9266
### Windows
9367

94-
Download the `.exe` installer from [Releases](../../releases) and run it.
95-
It installs to `%LocalAppData%\threadsvault-desktop` and creates a shortcut in the Start Menu.
68+
Descarga el instalador `.exe` desde [Releases](../../releases) y ejecútalo.
69+
Se instala en `%LocalAppData%\threadsvault-desktop` y crea un acceso directo en el Menú Inicio.
9670

9771
### Linux
9872

99-
Two options available in [Releases](../../releases):
73+
Dos opciones disponibles en [Releases](../../releases):
10074

101-
| Format | How to use |
75+
| Formato | Cómo usarlo |
10276
|---|---|
10377
| `.AppImage` | `chmod +x ThreadsVault_*.AppImage && ./ThreadsVault_*.AppImage` |
10478
| `.deb` | `sudo dpkg -i threadsvault-desktop_*.deb` |
10579

106-
> *Note: If the AppImage does not launch on Ubuntu 22.04+, run `sudo apt install libfuse2`.*
10780

108-
Flatpak planned for future versions.
81+
> *Nota: Si el AppImage no arranca en Ubuntu 22.04+, ejecuta `sudo apt install libfuse2`.*
82+
83+
84+
Flatpak planificado para futuras versiones.
10985

11086
---
11187

112-
## How It Works
88+
## Cómo funciona
11389

114-
1. Copy the URL of a Threads post (e.g. `https://www.threads.net/@user/post/abc123`)
115-
2. Open the app → click the **+Add** button in the top-right corner.
116-
3. Paste the URL, click **Save**, and optionally add extra notes.
117-
4. The app fetches content in parallel: Jina Reader acts as the primary source (a proxy that renders the page like a real browser), while the HTML from Threads itself serves as a fallback for images and text.
118-
5. The post is stored locally. Done.
90+
1. Copia la URL de un post de Threads (ej. `https://www.threads.net/@usuario/post/abc123`)
91+
2. Abre la app → pulsa el botón **+Añadir** en la esquina superior derecha.
92+
3. Pega la URL y pulsa **Guardar**, y añade notas adicionales de forma opcional.
93+
4. La app usa Jina Reader para extraer el contenido — un servicio que actúa como navegador real para poder leer posts de Threads, ya que el acceso directo devuelve la página vacía.
94+
5. El post se guarda localmente. Listo.
11995

12096
---
12197

122-
## Privacy
98+
## Privacidad
12399

124-
- All data is stored in a local SQLite database (`%AppData%\threadsvault-desktop` on Windows, `~/.local/share/threadsvault-desktop` on Linux)
125-
- External requests are limited to `r.jina.ai` (primary extraction) and `threads.net` (fallback when Jina is unavailable).
126-
- No usage data, no crash reports, no telemetry of any kind.
100+
- Todos los datos se almacenan en una base de datos SQLite local (`%AppData%\threadsvault-desktop` en Windows, `~/.local/share/threadsvault-desktop` en Linux)
101+
- Las únicas peticiones externas van a `r.jina.ai`: al guardar un post explícitamente, y en segundo plano si la app detecta imágenes desactualizadas al cargar
102+
- Sin datos de uso, sin informes de errores, sin telemetría de ningún tipo
127103

128104
---
129105

130-
## Known Limitations
106+
## Limitaciones conocidas
131107

132-
- **Threads only** — specifically designed for Threads posts; other URLs may not extract properly
133-
- **Extraction uses Jina as primary source** — if `r.jina.ai` is rate-limited or unavailable, the extractor falls back to Threads' embedded React state to recover images and text directly from the HTML.
134-
- **macOS not supported** — requires an Apple Developer account ($99/year) for notarization; not planned for v1.x (likely not for 2.x either).
108+
- **Solo Threads** — diseñado específicamente para posts de Threads; otras URLs pueden no extraerse correctamente
109+
- **La extracción depende de Jina** — si `r.jina.ai` está caído o aplica rate-limit, la extracción falla de forma controlada
110+
- **Vídeos de Threads** — los vídeos no se reproducen inline ni se almacenan localmente. Threads protege sus vídeos mediante URLs CDN firmadas y temporales. Si un post contiene vídeo, se guarda el texto, las imágenes y un botón «Ver en Threads» que lo abre directamente en el navegador del sistema.
111+
- **Sin operaciones en bulk** — borrar o recategorizar múltiples posts a la vez: v1.1+
112+
- **macOS no soportado** — requiere cuenta Apple Developer ($99/año) para notarización; no planificado para v1.x (probablemente tampoco para una 2.x).
135113

136114
---
137115

138-
## Build from Source
116+
## Compilar desde el código fuente
139117

140-
**Prerequisites:**
118+
**Requisitos previos:**
141119
- [Node.js](https://nodejs.org/) 20+
142-
- [Rust](https://rustup.rs/) (stable toolchain)
143-
- On Linux: `libwebkit2gtk-4.1-dev`, `libgtk-3-dev`, `librsvg2-dev`, `libayatana-appindicator3-dev`, `patchelf` (`sudo apt install ...`)
120+
- [Rust](https://rustup.rs/) (toolchain stable)
121+
- En Linux: `libwebkit2gtk-4.1-dev`, `libgtk-3-dev`, `librsvg2-dev`, `libayatana-appindicator3-dev`, `patchelf` (`sudo apt install ...`)
144122

145123
```bash
146124
git clone https://github.com/D4vRAM369/threadsvault-desktop
@@ -149,41 +127,41 @@ npm install
149127
npm run tauri build
150128
```
151129

152-
The compiled binary will be located in `src-tauri/target/release/bundle/`.
130+
El binario compilado estará en `src-tauri/target/release/bundle/`.
153131

154-
For development with hot-reload:
132+
Para desarrollo con hot-reload:
155133
```bash
156134
npm run tauri dev
157135
```
158136

159-
Browser-only mode (without Tauri, uses IndexedDB instead of SQLite):
137+
O solo en navegador (sin Tauri, usa IndexedDB en lugar de SQLite):
160138
```bash
161139
npm run dev
162140
```
163141

164142
---
165143

166-
## Tech Stack
144+
## Stack técnico
167145

168-
| Layer | Technology |
146+
| Capa | Tecnología |
169147
|---|---|
170148
| Shell | Tauri v2 |
171149
| Frontend | Svelte 5 (runes) + TypeScript |
172-
| Styling | Tailwind CSS v4 |
173-
| Storage (desktop) | SQLite via `@tauri-apps/plugin-sql` |
174-
| Storage (browser) | Dexie (IndexedDB) |
175-
| Post extraction | Jina Reader (`r.jina.ai`) |
150+
| Estilos | Tailwind CSS v4 |
151+
| Almacenamiento (escritorio) | SQLite vía `@tauri-apps/plugin-sql` |
152+
| Almacenamiento (navegador) | Dexie (IndexedDB) |
153+
| Extracción de posts | Jina Reader (`r.jina.ai`) |
176154

177155
---
178156

179-
## Development Method
157+
## Método de desarrollo
180158

181-
Built using **PBL (Project-Based Learning)**documented with learning artifacts not included in the repository for personal use and theoretical study sessions with the program open.
159+
Construido mediante **PBL (Project-Based Learning)**y documentado con artefactos de aprendizaje no incluidos en el repositorio para uso personal y sesiones de estudio teóricas con el programa abierto.
182160

183-
Developed primarily with assistance from **Claude Code**, and to a lesser extent with **ChatGPT-5.3-Codex**.
161+
Desarrollado principalmente con asistencia de **Claude Code** y en menor medida con **ChatGPT-5.3-Codex**.
184162

185163
---
186164

187-
## License
165+
## Licencia
188166

189-
[GPL-3.0](LICENSE)same as [ThreadsVault for Android](https://github.com/D4vRAM369/ThreadsVault).
167+
[GPL-3.0](LICENSE)igual que[ ThreadsVault para Android](https://github.com/D4vRAM369/ThreadsVault).

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"name": "threadsvault-desktop",
33
"private": true,
44
"version": "2.1.0",
5+
"description": "Bóveda local para posts de Threads. Guarda contenido offline sin nube ni telemetría.",
56
"type": "module",
67
"scripts": {
78
"dev": "vite",

0 commit comments

Comments
 (0)