chore: Remove outdated documentation files (analysis and build instructions)
This commit is contained in:
@@ -0,0 +1,426 @@
|
||||
# Analyse et Améliorations - ShaarIt
|
||||
|
||||
## 📋 Résumé de l'Analyse du Projet
|
||||
|
||||
### Architecture Actuelle
|
||||
|
||||
**ShaarIt** est un client Android moderne pour Shaarli développé avec les meilleures pratiques Android :
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "Présentation [Jetpack Compose]"
|
||||
A[FeedScreen] --> B[AddLinkScreen]
|
||||
A --> C[EditLinkScreen]
|
||||
A --> D[TagsScreen]
|
||||
E[LoginScreen] --> A
|
||||
end
|
||||
|
||||
subgraph "Domaine [Clean Architecture]"
|
||||
F[LinkRepository]
|
||||
G[AuthRepository]
|
||||
H[UseCases]
|
||||
end
|
||||
|
||||
subgraph "Data [API + Local]"
|
||||
I[ShaarliApi - Retrofit]
|
||||
J[LinkPagingSource]
|
||||
K[TokenManager - Crypto]
|
||||
end
|
||||
|
||||
A --> F
|
||||
F --> I
|
||||
I --> L[(Shaarli Server)]
|
||||
```
|
||||
|
||||
### Stack Technique
|
||||
| Couche | Technologie |
|
||||
|--------|-------------|
|
||||
| **Langage** | Kotlin 1.9.20 |
|
||||
| **UI** | Jetpack Compose + Material Design 3 |
|
||||
| **Architecture** | Clean Architecture + MVVM |
|
||||
| **DI** | Dagger Hilt 2.48 |
|
||||
| **Réseau** | Retrofit 2.9 + Moshi + OkHttp |
|
||||
| **Pagination** | Paging 3 |
|
||||
| **Stockage** | EncryptedSharedPreferences |
|
||||
| **Async** | Coroutines & Flow |
|
||||
|
||||
### Fonctionnalités Existantes
|
||||
|
||||
1. **Authentification sécurisée** - JWT avec stockage chiffré
|
||||
2. **Gestion des liens** - CRUD complet avec pagination infinie
|
||||
3. **Recherche avancée** - Par termes et filtres multi-tags
|
||||
4. **Intégration système** - Share Intent Android
|
||||
5. **UI premium** - Thème sombre avec glassmorphism
|
||||
6. **Détection de doublons** - Alertes lors de l'ajout
|
||||
7. **Modes d'affichage** - Liste, grille, compact
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Propositions d'Améliorations
|
||||
|
||||
### 1. Gestion des Notes Markdown Natif
|
||||
|
||||
**Problème actuel** : Shaarli supporte les notes markdown mais l'app ne les affiche pas de manière enrichie.
|
||||
|
||||
**Améliorations proposées** :
|
||||
|
||||
| Fonctionnalité | Description | Priorité |
|
||||
|----------------|-------------|----------|
|
||||
| **Éditeur Markdown WYSIWYG** | Éditeur visuel avec preview temps réel | Haute |
|
||||
| **Rendu Markdown enrichi** | Support complet : tableaux, math (KaTeX), diagrammes Mermaid | Haute |
|
||||
| **Mode lecture focus** | Vue distraction-free pour lire les longues notes | Moyenne |
|
||||
| **Export PDF/HTML** | Générer des documents depuis les notes | Moyenne |
|
||||
| **Templates de notes** | Templates pré-définis (meeting, todo, journal) | Basse |
|
||||
|
||||
**Implementation suggérée** :
|
||||
```kotlin
|
||||
// Nouveau composant
|
||||
@Composable
|
||||
fun MarkdownEditor(
|
||||
value: String,
|
||||
onValueChange: (String) -> Unit,
|
||||
mode: EditorMode = EditorMode.SPLIT // EDIT, PREVIEW, SPLIT
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. Système de Collections/Workspaces
|
||||
|
||||
**Concept** : Organiser les liens en collections thématiques au-delà des simples tags.
|
||||
|
||||
**Fonctionnalités** :
|
||||
- **Collections intelligentes** : Requêtes sauvegardées (ex: "tag:work AND tag:urgent")
|
||||
- **Workspaces contextuels** : Séparer vie pro/perso/projets
|
||||
- **Collections partagées** : Synchroniser certaines collections avec d'autres utilisateurs Shaarli
|
||||
- **Collection aléatoire** : "Lire plus tard" avec sélection aléatoire
|
||||
|
||||
**UI proposée** :
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ 📁 Mes Collections │
|
||||
├─────────────────────────────────────┤
|
||||
│ 💼 Work [42 items] ▸ │
|
||||
│ 🏠 Personal [128 items] ▸ │
|
||||
│ 📚 Reading [15 unread] ▸ │
|
||||
│ ⭐ Favorites [23 items] ▸ │
|
||||
│ 🔥 Hot Today [Auto] ▸ │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. Intelligence et Automatisation
|
||||
|
||||
#### 3.1 Extraction Métadonnées Intelligente
|
||||
|
||||
```kotlin
|
||||
// Service d'enrichissement automatique
|
||||
interface LinkEnrichmentService {
|
||||
suspend fun enrich(url: String): EnrichedMetadata
|
||||
}
|
||||
|
||||
data class EnrichedMetadata(
|
||||
val title: String,
|
||||
val description: String,
|
||||
val thumbnailUrl: String?,
|
||||
val siteName: String?,
|
||||
val readingTime: Int?, // minutes estimées
|
||||
val contentType: ContentType, // ARTICLE, VIDEO, PODCAST, PAPER
|
||||
val suggestedTags: List<String>, // ML-based suggestions
|
||||
val summary: String? // Auto-résumé avec AI locale
|
||||
)
|
||||
```
|
||||
|
||||
**Fonctionnalités** :
|
||||
- **Détection automatique** du type de contenu (article, vidéo, papier scientifique)
|
||||
- **Extraction de thumbnail** et preview visuelle
|
||||
- **Suggestion de tags** basée sur le contenu analysé
|
||||
- **Estimation du temps de lecture**
|
||||
- **Résumé automatique** via modèle ML local (Gemini Nano, ML Kit)
|
||||
|
||||
#### 3.2 Rappels et Suivi de Lecture
|
||||
|
||||
| Feature | Description |
|
||||
|---------|-------------|
|
||||
| **Read Later avancé** | Rappels programmables ("Relire dans 3 jours") |
|
||||
| **Suivi de progression** | Marquer comme "en cours de lecture" |
|
||||
| ** streaks de lecture** | Gamification pour lire les liens sauvegardés |
|
||||
| **Archivage automatique** : | Déplacer les vieux liens non lus après X jours |
|
||||
|
||||
---
|
||||
|
||||
### 4. Recherche et Découverte Avancées
|
||||
|
||||
#### 4.1 Moteur de Recherche Full-Text
|
||||
|
||||
**Améliorations** :
|
||||
- **Recherche sémantique** : Trouver des liens par concept, pas juste par mots-clés
|
||||
- **Filtres temporels** : "Cette semaine", "Le mois dernier", "Avant 2023"
|
||||
- **Recherche dans le contenu** : Indexer le contenu des pages web (via service externe ou Poche/Readwise)
|
||||
- **Historique de recherche** : Suggestions basées sur les recherches passées
|
||||
- **Recherches sauvegardées** : Alertes sur nouveaux liens correspondant
|
||||
|
||||
#### 4.2 Visualisations et Analytics
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A[Dashboard Analytics] --> B[Graphique d'activité]
|
||||
A --> C[Tag cloud interactive]
|
||||
A --> D[Tendances temporelles]
|
||||
A --> E[Sources les plus sauvegardées]
|
||||
A --> F[Réseau de connexions entre liens]
|
||||
```
|
||||
|
||||
**Idées de visualisations** :
|
||||
- Timeline visuelle des ajouts
|
||||
- Graph de relations entre tags
|
||||
- Carte des domaines les plus sauvegardés
|
||||
- Statistiques d'utilisation hebdomadaires/mensuelles
|
||||
|
||||
---
|
||||
|
||||
### 5. Synchronisation et Offline-First
|
||||
|
||||
#### 5.1 Architecture Offline
|
||||
|
||||
```
|
||||
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
||||
│ UI Layer │────▶│ Repository │────▶│ Room DB │
|
||||
│ Compose │ │ SyncEngine │ │ Local Cache │
|
||||
└──────────────┘ └──────┬───────┘ └──────────────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────┐
|
||||
│ Shaarli API │
|
||||
│ REST API │
|
||||
└──────────────┘
|
||||
```
|
||||
|
||||
**Fonctionnalités** :
|
||||
- **Cache local Room** : Accès instantané aux liens même hors-ligne
|
||||
- **File d'attente de sync** : Ajouter/modifier hors-ligne, synchroniser automatiquement
|
||||
- **Résolution de conflits** : UI pour gérer les conflits de modification
|
||||
- **Sync sélective** : Choisir quelles collections synchroniser
|
||||
- **Compression des données** : Sync delta pour économiser la bande passante
|
||||
|
||||
#### 5.2 Multi-Instance Support
|
||||
|
||||
| Feature | Description |
|
||||
|---------|-------------|
|
||||
| **Multi-comptes** | Gérer plusieurs instances Shaarli (perso, travail, projet) |
|
||||
| **Switch rapide** | Changer de compte en 1 tap |
|
||||
| **Vue unifiée** | Voir tous les liens de toutes les instances (optionnel) |
|
||||
| **Migration d'instance** | Transférer des liens entre instances |
|
||||
|
||||
---
|
||||
|
||||
### 6. Intégrations et API
|
||||
|
||||
#### 6.1 Services Tierces
|
||||
|
||||
```kotlin
|
||||
interface ThirdPartyIntegration {
|
||||
// Pocket/Instapaper - Import/export
|
||||
// Raindrop.io - Sync bidirectionnel
|
||||
// Notion - Export vers base de données
|
||||
// Obsidian - Export markdown avec liens
|
||||
// Readwise - Envoi vers Reader
|
||||
}
|
||||
```
|
||||
|
||||
**Intégrations souhaitées** :
|
||||
1. **Import/Export** : Pocket, Delicious, Browser bookmarks (HTML)
|
||||
2. **Sync bidirectionnelle** : Raindrop.io, Pinboard
|
||||
3. **Export vers** : Notion, Obsidian, Logseq
|
||||
4. **Services de lecture** : Envoi vers Kindle, Readwise Reader
|
||||
5. **Webhook personnalisés** : Déclencher des actions IFTTT/Zapier
|
||||
|
||||
#### 6.2 Widgets et Shortcuts
|
||||
|
||||
| Type | Fonctionnalité |
|
||||
|------|----------------|
|
||||
| **Home Widget** | Derniers liens ajoutés, quick-add, aléatoire |
|
||||
| **Quick Settings Tile** | Ajouter le presse-papiers en 1 tap |
|
||||
| **App Shortcuts** | "Ajouter lien", "Rechercher", "Aléatoire" |
|
||||
| **Wear OS** | Vue minimaliste, voice input pour ajout rapide |
|
||||
|
||||
---
|
||||
|
||||
### 7. Personnalisation et Accessibilité
|
||||
|
||||
#### 7.1 Thèmes et Apparence
|
||||
|
||||
- **Thèmes dynamiques** : Material You (Monet) sur Android 12+
|
||||
- **Mode OLED pur** : Noir véritable pour économiser batterie
|
||||
- **Taille de texte adaptable** : Accessibilité améliorée
|
||||
- **Police personnalisable** : Serif pour lecture longue, monospace pour code
|
||||
- **Animations réduites** : Mode accessibilité
|
||||
|
||||
#### 7.2 Gestion des Données
|
||||
|
||||
| Feature | Description |
|
||||
|---------|-------------|
|
||||
| **Backup cloud** | Export chiffré vers Google Drive/Dropbox |
|
||||
| **Export JSON/XML** | Sauvegarde complète avec métadonnées |
|
||||
| **Historique des modifications** | Versioning des liens modifiés |
|
||||
| **Corbeille** | Restauration des liens supprimés (30 jours) |
|
||||
|
||||
---
|
||||
|
||||
### 8. Fonctionnalités Avancées de Contenu
|
||||
|
||||
#### 8.1 Support Média Étendu
|
||||
|
||||
```kotlin
|
||||
sealed class LinkContent {
|
||||
data class Article(val url: String, val content: String)
|
||||
data class Video(
|
||||
val platform: VideoPlatform, // YOUTUBE, VIMEO, PEERTUBE
|
||||
val duration: Duration?,
|
||||
val transcriptUrl: String?
|
||||
)
|
||||
data class Podcast(
|
||||
val episodeInfo: EpisodeInfo,
|
||||
val audioUrl: String
|
||||
)
|
||||
data class ScientificPaper(
|
||||
val doi: String?,
|
||||
val authors: List<String>,
|
||||
val abstract: String,
|
||||
val pdfUrl: String?
|
||||
)
|
||||
}
|
||||
```
|
||||
|
||||
**Fonctionnalités** :
|
||||
- **Lecteur intégré vidéo** : Mini-player pour vidéos YouTube
|
||||
- **Extraction PDF** : Viewer intégré pour les PDF sauvegardés
|
||||
- **Podcast player** : Lecture directe avec bookmarks temporels
|
||||
- **Galerie d'images** : Vue grille pour liens image (Pinterest-style)
|
||||
|
||||
#### 8.2 Collaboration et Partage
|
||||
|
||||
| Feature | Description |
|
||||
|---------|-------------|
|
||||
| **Liens publics** | Générer une URL publique pour un lien privé |
|
||||
| **Commentaires** | Annoter les liens avec notes personnelles |
|
||||
| **Partage sécurisé** : | Expiration des liens partagés |
|
||||
| **Collaboration** : | Partager une collection avec édition |
|
||||
|
||||
---
|
||||
|
||||
### 9. Sécurité et Confidentialité
|
||||
|
||||
#### 9.1 Fonctionnalités de Sécurité
|
||||
|
||||
- **Verrouillage biométrique** : FaceID/Fingerprint pour accès
|
||||
- **Mode privé** : Section chiffrée séparée pour liens sensibles
|
||||
- **Session management** : Historique des connexions, révocation à distance
|
||||
- **Audit log** : Historique de toutes les actions
|
||||
|
||||
#### 9.2 Confidentialité
|
||||
|
||||
| Feature | Description |
|
||||
|---------|-------------|
|
||||
| **Anonymisation** | Masquer les métadonnées d'origine |
|
||||
| **Proxy intégré** | Prévisualisation sans révéler l'IP |
|
||||
| **Auto-expiration** | Suppression automatique après durée définie |
|
||||
| **Zero-knowledge** | Chiffrement client-side des descriptions |
|
||||
|
||||
---
|
||||
|
||||
### 10. Roadmap Priorisée
|
||||
|
||||
```mermaid
|
||||
gantt
|
||||
title Roadmap ShaarIt - Améliorations
|
||||
dateFormat YYYY-MM
|
||||
|
||||
section Phase 1 - Fondations
|
||||
Room Database (Offline) :done, p1_1, 2026-02, 4w
|
||||
Markdown Rendering :active, p1_2, 2026-02, 3w
|
||||
Amélioration Recherche :p1_3, 2026-03, 3w
|
||||
|
||||
section Phase 2 - Intelligence
|
||||
Métadonnées Auto-Extract :p2_1, 2026-04, 4w
|
||||
Suggestions Tags ML :p2_2, after p2_1, 3w
|
||||
Collections/Workspaces :p2_3, 2026-05, 4w
|
||||
|
||||
section Phase 3 - Intégrations
|
||||
Widgets & Shortcuts :p3_1, 2026-06, 2w
|
||||
Import/Export Services :p3_2, 2026-06, 4w
|
||||
Multi-Instance Support :p3_3, 2026-07, 3w
|
||||
|
||||
section Phase 4 - Avancé
|
||||
Sync Bidirectionnelle :p4_1, 2026-08, 4w
|
||||
Analytics Dashboard :p4_2, 2026-09, 3w
|
||||
Wear OS App :p4_3, 2026-10, 4w
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 Recommandations Immédiates
|
||||
|
||||
### Top 5 Priorités (Quick Wins)
|
||||
|
||||
1. **Éditeur Markdown Rich** - Impact utilisateur élevé, effort moyen
|
||||
2. **Base de données Room** - Fondation pour offline et performances
|
||||
3. **Widgets Android** - Visibilité app et accessibilité rapide
|
||||
4. **Extraction métadonnées** - Auto-complétion intelligente des liens
|
||||
5. **Mode lecture focus** - Amélioration UX majeure pour les notes
|
||||
|
||||
### Architecture Proposée pour Room
|
||||
|
||||
```kotlin
|
||||
@Entity(tableName = "links")
|
||||
data class CachedLink(
|
||||
@PrimaryKey val id: Int,
|
||||
val url: String,
|
||||
val title: String,
|
||||
val description: String,
|
||||
val tags: List<String>,
|
||||
val isPrivate: Boolean,
|
||||
val createdAt: Long,
|
||||
val updatedAt: Long,
|
||||
val syncStatus: SyncStatus // SYNCED, PENDING_CREATE, PENDING_UPDATE, PENDING_DELETE
|
||||
)
|
||||
|
||||
@Entity(tableName = "link_content")
|
||||
data class LinkContentEntity(
|
||||
@PrimaryKey val linkId: Int,
|
||||
val thumbnailUrl: String?,
|
||||
val readingTime: Int?,
|
||||
val contentType: String,
|
||||
val cachedHtml: String?, // Pour offline reading
|
||||
val extractedText: String? // Pour recherche full-text
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 Synthèse
|
||||
|
||||
### Forces Actuelles
|
||||
- Architecture moderne et maintenable
|
||||
- UI premium avec Material Design 3
|
||||
- Sécurité robuste (chiffrement, JWT)
|
||||
- Intégration système Android native
|
||||
|
||||
### Opportunités d'Amélioration
|
||||
- **Offline-first** : Sync robuste avec gestion de conflits
|
||||
- **Markdown natif** : Exploiter pleinement le support Shaarli
|
||||
- **Intelligence** : ML local pour suggestions et enrichissement
|
||||
- **Écosystème** : Intégrations avec outils de productivité
|
||||
- **Accessibilité** : Widgets, raccourcis, multi-plateformes
|
||||
|
||||
### Impact Utilisateur Attendu
|
||||
Avec ces améliorations, ShaarIt deviendrait :
|
||||
- **Le meilleur client Android** pour Shaarli
|
||||
- **Un outil de productivité complet** (pas juste un bookmark manager)
|
||||
- **Une alternative viable** à Pocket, Raindrop.io, Notion Web Clipper
|
||||
|
||||
---
|
||||
|
||||
*Document créé le 28 janvier 2026*
|
||||
*Analyse basée sur le code source ShaarIt v1.0*
|
||||
Reference in New Issue
Block a user