gilles
ec87bc091d
feat(sse): sync temps réel multi-appareils via Server-Sent Events v0.5.8
...
- Broadcaster asyncio.Queue avec keepalive 25s (prévient timeout proxy)
- Endpoint GET /api/events/stream (StreamingResponse text/event-stream)
- Broadcast notes_changed / todos_changed / shopping_changed sur toutes mutations
- Hook useServerEvents: EventSource avec reconnexion automatique (3s)
- Pages Notes, Todos, Shopping abonnées aux événements SSE
- nginx: location SSE dédiée (proxy_buffering off, timeout 24h)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-25 20:12:02 +02:00
gilles
2129da4f55
fix(notes): audio overflow + volume 50%, grille 3col, bouton laptop, sidebar BDD
...
- Audio : minWidth:0 + onLoadedMetadata volume=0.5 (plus de débordement)
- Grille : repeat(3,1fr) sur laptop, 1fr sur mobile (était auto-fill)
- Header laptop : bouton "Nouvelle note" (fa-plus + accent) visible lg:flex
- SideNav : DbStatusBar en bas — LED verte/rouge + taille BDD, polling 30s
- docs/plan.md : Phase 4c documentée
v0.5.7
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-25 16:51:44 +02:00
gilles
dd4ce6f52b
feat(notes): 3 états de tuile + renderer pseudo-markdown
...
Tuile note : semi (défaut, 3 lignes tronquées) / expanded (markdown complet
+ médias) / collapsed (titre + date uniquement). Bouton toggle fa-chevron
en haut à droite qui cycle entre les états.
Renderer pseudo-markdown inline : # ## ###, - * listes, 1. numérotées,
> citations, --- séparateur, **gras** *italique* `code`, ``` blocs.
Méta de tuile : icônes fa-image / fa-microphone / fa-video / fa-location-dot
visibles en état semi et expanded.
v0.5.5
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-25 16:43:44 +02:00
gilles
6c9ebcaab7
feat(notes): support vidéo + transcodage audio AAC universel
...
Audio : ffmpeg transcode toute entrée (webm/ogg/m4a) vers AAC/m4a
au moment de l'upload → lecture Safari iOS garantie.
Vidéo : nouveau save_video(), webm transcodé en H.264/mp4, mp4/quicktime
stocké directement. Lecteur <video> inline dans NoteCard.
Frontend :
- Bouton vidéo (fa-video) dans les actions de chaque note
- Icônes fa-image / fa-microphone / fa-video / fa-location-dot dans la méta
- Filtres rapides : Photo / Audio / Vidéo / GPS (avec icônes fa)
- Boutons actions migrés vers icônes Font Awesome
- client_max_body_size nginx : 15m → 200m pour les vidéos
v0.5.4
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-25 16:31:05 +02:00
gilles
de9a1e3c73
fix(photo): supprimer capture=environment — accès bibliothèque + appareil photo
...
Sans cet attribut, iOS affiche le menu natif (Prendre une photo / Bibliothèque /
Fichiers) et Android propose un sélecteur de source.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-25 15:57:33 +02:00
gilles
9aaa5fb562
fix(audio+gps): lecture audio multi-navigateur + icône GPS dans tuile note
...
Audio :
- MediaRecorder détecte le format supporté : webm (Chrome/Firefox) ou mp4 (Safari/iOS)
- Extension sauvegardée correctement (.webm ou .m4a) selon le navigateur
- Backend : ALLOWED_AUDIO_PREFIXES remplace le set strict, strip des codec suffixes
GPS (note card) :
- Icône fa-location-dot (accent vert) avec tooltip lat/lon remplace l'emoji 📍
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-25 15:55:35 +02:00
gilles
cbb2d81279
feat(nav): bouton action intégré dans la navbar v0.4.8
...
- ActionButtonContext : contexte React permettant aux pages d'injecter
leur bouton action dans la navbar (Shopping=fa-cart-plus, Todos/Notes=+)
- BottomNav : 5e slot dédié avec dock circulaire visuel permanent ;
bouton rendu 10px au-dessus du centre du slot (effet soulevé)
- Layout : ActionButtonProvider + overflow visible sur le conteneur nav
- Pages : useEffect enregistre/vide le bouton action — plus de FAB flottant
sur le contenu, liste entièrement visible
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-25 10:02:03 +02:00
gilles
d6d3acd1fe
ux(fab): repositionner le bouton action sur la nav bar v0.4.7
...
FAB déplacé sur la barre de nav (bottom: 10px) au lieu de flotter
au-dessus de la liste — liste entièrement visible sur Shopping,
Todos et Notes. paddingBottom liste réduit à 64px (hauteur nav seule).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-25 09:51:33 +02:00
gilles
fdeb747f38
feat: Phase 4 — module Notes complet
...
Backend :
- schemas/notes.py : NoteCreate/Update/Response + AttachmentResponse
- api/notes.py : CRUD + FTS français (plainto_tsquery) + filtres rapides
(has_photo/audio/gps/tag/category) + pièces jointes (image/audio)
- main.py : enregistrement /api/notes
Frontend :
- api/notes.ts : fetchNotes/create/update/delete + add/deleteAttachment
- NoteForm.tsx : titre, contenu, catégorie, tags CSV, GPS
- NotesPage.tsx : liste mobile (chronologique) + grille laptop, FAB +,
enregistrement audio inline (MediaRecorder), upload photo, filtres rapides
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-25 06:49:46 +02:00
gilles
2b34abf4b0
fix: nginx proxy /api/ vers backend + routes shopping et notes manquantes
...
- Ajoute location /api/ dans nginx.conf pour proxifier les requêtes API
- Crée ShoppingPage et NotesPage (placeholders phase suivante)
- Enregistre les routes /shopping et /notes dans App.tsx
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-24 14:09:36 +02:00